├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── emu-build-all-linux.yml │ ├── emu-build-all-win.yml │ ├── emu-deps-linux.yml │ ├── emu-deps-win.yml │ ├── emu-pull-request.yml │ ├── migrate_gse-build-linux.yml │ ├── migrate_gse-build-win.yml │ ├── migrate_gse-pull-request.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── CREDITS.md ├── LICENSE ├── README.md ├── build_linux_premake.sh ├── build_win_premake.bat ├── build_win_premake_deps.bat ├── crash_printer ├── crash_printer │ ├── linux.hpp │ └── win.hpp ├── linux.cpp ├── tests │ ├── test_linux_sa_handler.cpp │ ├── test_linux_sa_sigaction.cpp │ └── test_win.cpp └── win.cpp ├── dev.notes ├── README.md ├── how different versions of a steam interface are dipatched.md ├── how to add a branch as a submodule.md ├── interesting things about the new auth ticket.md ├── interfaces.csv └── the implementation of steamgameserverstats.md ├── dll ├── appticket.cpp ├── auth.cpp ├── base.cpp ├── callsystem.cpp ├── client_known_interfaces.cpp ├── dll.cpp ├── dll │ ├── appticket.h │ ├── auth.h │ ├── base.h │ ├── callsystem.h │ ├── client_known_interfaces.h │ ├── common_includes.h │ ├── dll.h │ ├── include.wrap.mbedtls.h │ ├── include.wrap.net.pb.h │ ├── local_storage.h │ ├── network.h │ ├── settings.h │ ├── settings_parser.h │ ├── source_query.h │ ├── steam_HTMLsurface.h │ ├── steam_app_disable_update.h │ ├── steam_app_ids.h │ ├── steam_applist.h │ ├── steam_apps.h │ ├── steam_billing.h │ ├── steam_client.h │ ├── steam_controller.h │ ├── steam_friends.h │ ├── steam_game_coordinator.h │ ├── steam_gamesearch.h │ ├── steam_gameserver.h │ ├── steam_gameserverstats.h │ ├── steam_gamestats.h │ ├── steam_http.h │ ├── steam_inventory.h │ ├── steam_masterserver_updater.h │ ├── steam_matchmaking.h │ ├── steam_matchmaking_servers.h │ ├── steam_music.h │ ├── steam_musicremote.h │ ├── steam_networking.h │ ├── steam_networking_messages.h │ ├── steam_networking_sockets.h │ ├── steam_networking_socketsserialized.h │ ├── steam_networking_utils.h │ ├── steam_parental.h │ ├── steam_parties.h │ ├── steam_remote_storage.h │ ├── steam_remoteplay.h │ ├── steam_screenshots.h │ ├── steam_timeline.h │ ├── steam_tv.h │ ├── steam_ugc.h │ ├── steam_unified_messages.h │ ├── steam_user.h │ ├── steam_user_stats.h │ ├── steam_utils.h │ ├── steam_video.h │ └── ugc_remote_storage_bridge.h ├── flat.cpp ├── local_storage.cpp ├── net.proto ├── network.cpp ├── settings.cpp ├── settings_parser.cpp ├── source_query.cpp ├── steam_HTMLsurface.cpp ├── steam_app_disable_update.cpp ├── steam_app_ids.cpp ├── steam_applist.cpp ├── steam_apps.cpp ├── steam_billing.cpp ├── steam_client.cpp ├── steam_client_interface_getter.cpp ├── steam_controller.cpp ├── steam_friends.cpp ├── steam_game_coordinator.cpp ├── steam_gamesearch.cpp ├── steam_gameserver.cpp ├── steam_gameserverstats.cpp ├── steam_gamestats.cpp ├── steam_http.cpp ├── steam_inventory.cpp ├── steam_masterserver_updater.cpp ├── steam_matchmaking.cpp ├── steam_matchmaking_servers.cpp ├── steam_music.cpp ├── steam_musicremote.cpp ├── steam_networking.cpp ├── steam_networking_messages.cpp ├── steam_networking_sockets.cpp ├── steam_networking_socketsserialized.cpp ├── steam_networking_utils.cpp ├── steam_parental.cpp ├── steam_parties.cpp ├── steam_remote_storage.cpp ├── steam_remoteplay.cpp ├── steam_screenshots.cpp ├── steam_timeline.cpp ├── steam_tv.cpp ├── steam_ugc.cpp ├── steam_unified_messages.cpp ├── steam_user.cpp ├── steam_user_stats.cpp ├── steam_user_stats_achievements.cpp ├── steam_user_stats_leaderboard.cpp ├── steam_user_stats_stats.cpp ├── steam_utils.cpp ├── steam_video.cpp ├── ugc_remote_storage_bridge.cpp └── wrap.cpp ├── game_overlay_renderer_lib ├── game_overlay_renderer_lib.cpp └── game_overlay_renderer_lib.h ├── generate_credits.bat ├── helpers ├── common_helpers.cpp ├── common_helpers │ ├── common_helpers.hpp │ ├── forgettable_memory.hpp │ └── os_detector.h ├── dbg_log.cpp ├── dbg_log │ └── dbg_log.hpp ├── pe_helpers.cpp └── pe_helpers │ └── pe_helpers.hpp ├── libs ├── detours │ ├── SOURCE.txt │ ├── creatwth.cpp │ ├── detours.cpp │ ├── detours.h │ ├── detver.h │ ├── disasm.cpp │ ├── disolarm.cpp │ ├── disolarm64.cpp │ ├── disolia64.cpp │ ├── disolx64.cpp │ ├── disolx86.cpp │ ├── image.cpp │ ├── modules.cpp │ └── uimports.cc ├── fifo_map │ ├── SOURCE.txt │ └── fifo_map.hpp ├── gamepad │ ├── SOURCE.txt │ ├── gamepad.c │ └── gamepad.h ├── imgui │ └── SOURCE.txt ├── json │ ├── SOURCE.txt │ └── json.hpp ├── sha │ ├── sha1.hpp │ └── source.txt ├── simpleini │ ├── ConvertUTF.c │ ├── ConvertUTF.h │ ├── SOURCE.txt │ └── SimpleIni.h ├── stb │ ├── SOURCE.txt │ ├── stb_image.h │ ├── stb_image_resize2.h │ └── stb_image_write.h └── utfcpp │ ├── SOURCE.txt │ ├── utf8.h │ └── utf8 │ ├── checked.h │ ├── core.h │ ├── cpp11.h │ ├── cpp17.h │ ├── cpp20.h │ └── unchecked.h ├── networking_sockets_lib └── steamnetworkingsockets.cpp ├── overlay_experimental ├── fonts │ ├── LICENSE-unifont.txt │ ├── binary_to_compressed_c.cpp.txt │ └── unifont.hpp ├── overlay │ ├── notification.h │ ├── steam_overlay.h │ ├── steam_overlay_stats.h │ └── steam_overlay_translations.h ├── steam_overlay.cpp └── steam_overlay_stats.cpp ├── package_linux.sh ├── package_win.bat ├── package_win_debug.bat ├── package_win_release.bat ├── post_build ├── README.debug.md ├── README.experimental.md ├── README.experimental_linux.md ├── README.experimental_steamclient.md ├── README.generate_interfaces.md ├── README.lobby_connect.md ├── README.release.md ├── steam_settings.EXAMPLE │ ├── account_avatar.EXAMPLE.jpg │ ├── achievements_EXAMPLE.json │ ├── auto_accept_invite.EXAMPLE.txt │ ├── branches.EXAMPLE.json │ ├── configs.app.EXAMPLE.ini │ ├── configs.main.EXAMPLE.ini │ ├── configs.overlay.EXAMPLE.ini │ ├── configs.user.EXAMPLE.ini │ ├── controller.EXAMPLE │ │ ├── InGameControls.txt │ │ ├── MenuControls.txt │ │ └── glyphs │ │ │ ├── button_a.png │ │ │ ├── button_b.png │ │ │ ├── button_x.png │ │ │ ├── button_y.png │ │ │ ├── shoulder_l.png │ │ │ ├── shoulder_r.png │ │ │ ├── stick_dpad_e.png │ │ │ ├── stick_dpad_n.png │ │ │ ├── stick_dpad_s.png │ │ │ ├── stick_dpad_w.png │ │ │ ├── stick_l_click.png │ │ │ ├── stick_l_move.png │ │ │ ├── stick_r_click.png │ │ │ ├── stick_r_move.png │ │ │ ├── trigger_l_click.png │ │ │ ├── trigger_l_pull.png │ │ │ ├── trigger_r_click.png │ │ │ ├── trigger_r_pull.png │ │ │ ├── xbox_button_dpad_e.png │ │ │ ├── xbox_button_dpad_move.png │ │ │ ├── xbox_button_dpad_n.png │ │ │ ├── xbox_button_dpad_s.png │ │ │ ├── xbox_button_dpad_w.png │ │ │ ├── xbox_button_select.png │ │ │ └── xbox_button_start.png │ ├── custom_broadcasts.EXAMPLE.txt │ ├── default_items.EXAMPLE.json │ ├── depots.EXAMPLE.txt │ ├── fonts.EXAMPLE │ │ ├── README.md │ │ ├── Roboto-Medium-LICENSE.txt │ │ └── Roboto-Medium.ttf │ ├── http.EXAMPLE │ │ └── accounts.starbreeze.com │ │ │ └── iam │ │ │ └── oauth │ │ │ └── token │ ├── installed_app_ids.EXAMPLE.txt │ ├── items.EXAMPLE.json │ ├── leaderboards.EXAMPLE.txt │ ├── mod_images.EXAMPLE │ │ └── 12345 │ │ │ ├── README.md │ │ │ └── my_preview_image.jpg │ ├── mods.EXAMPLE.json │ ├── mods.EXAMPLE │ │ └── 12345 │ │ │ ├── Readme.txt │ │ │ ├── mod_file1 │ │ │ ├── mod_file2 │ │ │ └── random_mod_file │ ├── sounds.EXAMPLE │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── overlay_achievement_notification.wav │ │ └── overlay_friend_notification.wav │ ├── stats.EXAMPLE.json │ ├── steam_appid.EXAMPLE.txt │ ├── steam_interfaces.EXAMPLE.txt │ ├── subscribed_groups.EXAMPLE.txt │ ├── subscribed_groups_clans.EXAMPLE.txt │ └── supported_languages.EXAMPLE.txt └── win │ └── ColdClientLoader.EXAMPLE │ ├── README.md │ └── extra_dlls.EXAMPLE │ ├── 1_my_first_dll.dll │ ├── 2_my_second_dll.dll │ ├── dlls_subdir │ └── 3_my_third_dll.dll │ └── load_order.txt ├── premake5-deps.lua ├── premake5.lua ├── resources ├── README.md └── win │ ├── api │ ├── 32 │ │ └── resources.rc │ ├── 64 │ │ └── resources.rc │ └── SOURCE_CONTROL_ID.txt │ ├── client │ ├── 32 │ │ └── resources.rc │ ├── 64 │ │ └── resources.rc │ ├── SOURCE_CONTROL_ID.txt │ └── WEVT_TEMPLATE1_1.bin │ ├── file_dos_stub │ ├── file_dos_stub.cpp │ ├── file_dos_stub_x32.exe │ └── file_dos_stub_x64.exe │ ├── game_overlay_renderer │ ├── 32 │ │ └── resources.rc │ ├── 64 │ │ └── resources.rc │ ├── SOURCE_CONTROL_ID.txt │ └── WEVT_TEMPLATE1_1.bin │ └── launcher │ ├── 32 │ └── resources.rc │ ├── 64 │ └── resources.rc │ └── SOURCE_CONTROL_ID.txt ├── sdk ├── Readme.txt ├── source.txt └── steam │ ├── isteamappdisableupdate.h │ ├── isteamapplist.h │ ├── isteamapps.h │ ├── isteamapps001.h │ ├── isteamapps002.h │ ├── isteamapps003.h │ ├── isteamapps004.h │ ├── isteamapps005.h │ ├── isteamapps006.h │ ├── isteamapps007.h │ ├── isteamappticket.h │ ├── isteambilling.h │ ├── isteamclient.h │ ├── isteamclient006.h │ ├── isteamclient007.h │ ├── isteamclient008.h │ ├── isteamclient009.h │ ├── isteamclient010.h │ ├── isteamclient011.h │ ├── isteamclient012.h │ ├── isteamclient013.h │ ├── isteamclient014.h │ ├── isteamclient015.h │ ├── isteamclient016.h │ ├── isteamclient017.h │ ├── isteamclient018.h │ ├── isteamclient019.h │ ├── isteamclient020.h │ ├── isteamcontroller.h │ ├── isteamcontroller001.h │ ├── isteamcontroller002.h │ ├── isteamcontroller003.h │ ├── isteamcontroller004.h │ ├── isteamcontroller005.h │ ├── isteamcontroller006.h │ ├── isteamcontroller007.h │ ├── isteamdualsense.h │ ├── isteamfriends.h │ ├── isteamfriends001.h │ ├── isteamfriends002.h │ ├── isteamfriends003.h │ ├── isteamfriends004.h │ ├── isteamfriends005.h │ ├── isteamfriends006.h │ ├── isteamfriends007.h │ ├── isteamfriends008.h │ ├── isteamfriends009.h │ ├── isteamfriends010.h │ ├── isteamfriends011.h │ ├── isteamfriends012.h │ ├── isteamfriends013.h │ ├── isteamfriends014.h │ ├── isteamfriends015.h │ ├── isteamfriends016.h │ ├── isteamfriends017.h │ ├── isteamgamecoordinator.h │ ├── isteamgameserver.h │ ├── isteamgameserver002.h │ ├── isteamgameserver003.h │ ├── isteamgameserver004.h │ ├── isteamgameserver005.h │ ├── isteamgameserver008.h │ ├── isteamgameserver009.h │ ├── isteamgameserver010.h │ ├── isteamgameserver011.h │ ├── isteamgameserver012.h │ ├── isteamgameserver013.h │ ├── isteamgameserver014.h │ ├── isteamgameserverstats.h │ ├── isteamgamestats.h │ ├── isteamhtmlsurface.h │ ├── isteamhtmlsurface001.h │ ├── isteamhtmlsurface002.h │ ├── isteamhtmlsurface003.h │ ├── isteamhtmlsurface004.h │ ├── isteamhttp.h │ ├── isteamhttp001.h │ ├── isteamhttp002.h │ ├── isteaminput.h │ ├── isteaminput001.h │ ├── isteaminput002.h │ ├── isteaminput005.h │ ├── isteaminventory.h │ ├── isteaminventory001.h │ ├── isteaminventory002.h │ ├── isteammasterserverupdater.h │ ├── isteammatchmaking.h │ ├── isteammatchmaking001.h │ ├── isteammatchmaking002.h │ ├── isteammatchmaking003.h │ ├── isteammatchmaking004.h │ ├── isteammatchmaking005.h │ ├── isteammatchmaking006.h │ ├── isteammatchmaking007.h │ ├── isteammatchmaking008.h │ ├── isteammusic.h │ ├── isteammusicremote.h │ ├── isteamnetworking.h │ ├── isteamnetworking001.h │ ├── isteamnetworking002.h │ ├── isteamnetworking003.h │ ├── isteamnetworking004.h │ ├── isteamnetworking005.h │ ├── isteamnetworkingmessages.h │ ├── isteamnetworkingsockets.h │ ├── isteamnetworkingsockets001.h │ ├── isteamnetworkingsockets002.h │ ├── isteamnetworkingsockets003.h │ ├── isteamnetworkingsockets004.h │ ├── isteamnetworkingsockets006.h │ ├── isteamnetworkingsockets008.h │ ├── isteamnetworkingsockets009.h │ ├── isteamnetworkingsockets010.h │ ├── isteamnetworkingsockets011.h │ ├── isteamnetworkingsocketsserialized.h │ ├── isteamnetworkingutils.h │ ├── isteamnetworkingutils001.h │ ├── isteamnetworkingutils002.h │ ├── isteamnetworkingutils003.h │ ├── isteamparentalsettings.h │ ├── isteamps3overlayrenderer.h │ ├── isteamremoteplay.h │ ├── isteamremoteplay001.h │ ├── isteamremoteplay002.h │ ├── isteamremotestorage.h │ ├── isteamremotestorage001.h │ ├── isteamremotestorage002.h │ ├── isteamremotestorage003.h │ ├── isteamremotestorage004.h │ ├── isteamremotestorage005.h │ ├── isteamremotestorage006.h │ ├── isteamremotestorage007.h │ ├── isteamremotestorage008.h │ ├── isteamremotestorage009.h │ ├── isteamremotestorage010.h │ ├── isteamremotestorage011.h │ ├── isteamremotestorage012.h │ ├── isteamremotestorage013.h │ ├── isteamremotestorage014.h │ ├── isteamremotestorage015.h │ ├── isteamscreenshots.h │ ├── isteamscreenshots001.h │ ├── isteamscreenshots002.h │ ├── isteamtimeline.h │ ├── isteamtimeline001.h │ ├── isteamtimeline002.h │ ├── isteamtimeline003.h │ ├── isteamtv.h │ ├── isteamugc.h │ ├── isteamugc001.h │ ├── isteamugc002.h │ ├── isteamugc003.h │ ├── isteamugc004.h │ ├── isteamugc005.h │ ├── isteamugc006.h │ ├── isteamugc007.h │ ├── isteamugc008.h │ ├── isteamugc009.h │ ├── isteamugc010.h │ ├── isteamugc011.h │ ├── isteamugc012.h │ ├── isteamugc013.h │ ├── isteamugc014.h │ ├── isteamugc015.h │ ├── isteamugc016.h │ ├── isteamugc017.h │ ├── isteamugc018.h │ ├── isteamugc019.h │ ├── isteamugc020.h │ ├── isteamunifiedmessages.h │ ├── isteamuser.h │ ├── isteamuser004.h │ ├── isteamuser005.h │ ├── isteamuser006.h │ ├── isteamuser007.h │ ├── isteamuser008.h │ ├── isteamuser009.h │ ├── isteamuser010.h │ ├── isteamuser011.h │ ├── isteamuser012.h │ ├── isteamuser013.h │ ├── isteamuser014.h │ ├── isteamuser015.h │ ├── isteamuser016.h │ ├── isteamuser017.h │ ├── isteamuser018.h │ ├── isteamuser019.h │ ├── isteamuser020.h │ ├── isteamuser021.h │ ├── isteamuser022.h │ ├── isteamuserstats.h │ ├── isteamuserstats001.h │ ├── isteamuserstats002.h │ ├── isteamuserstats003.h │ ├── isteamuserstats004.h │ ├── isteamuserstats005.h │ ├── isteamuserstats006.h │ ├── isteamuserstats007.h │ ├── isteamuserstats008.h │ ├── isteamuserstats009.h │ ├── isteamuserstats010.h │ ├── isteamuserstats011.h │ ├── isteamuserstats012.h │ ├── isteamutils.h │ ├── isteamutils001.h │ ├── isteamutils002.h │ ├── isteamutils003.h │ ├── isteamutils004.h │ ├── isteamutils005.h │ ├── isteamutils006.h │ ├── isteamutils007.h │ ├── isteamutils008.h │ ├── isteamutils009.h │ ├── isteamvideo.h │ ├── isteamvideo001.h │ ├── isteamvideo002.h │ ├── matchmakingtypes.h │ ├── steam_api.h │ ├── steam_api_common.h │ ├── steam_api_flat.h │ ├── steam_api_internal.h │ ├── steam_gameserver.h │ ├── steamclientpublic.h │ ├── steamdatagram_ticketgen.h │ ├── steamdatagram_tickets.h │ ├── steamencryptedappticket.h │ ├── steamhttpenums.h │ ├── steamnetworkingfakeip.h │ ├── steamnetworkingsockets.h │ ├── steamnetworkingtypes.h │ ├── steamps3params.h │ ├── steamtypes.h │ └── steamuniverse.h ├── steamclient └── steamclient.cpp ├── tools ├── generate_interfaces │ └── generate_interfaces.cpp ├── lobby_connect │ └── lobby_connect.cpp ├── migrate_gse │ ├── README.md │ ├── main.py │ ├── package_linux.sh │ ├── package_win.bat │ ├── rebuild_linux.sh │ ├── rebuild_win.bat │ ├── recreate_venv_linux.sh │ ├── recreate_venv_win.bat │ └── requirements.txt └── steamclient_loader │ ├── SOURCE.txt │ ├── linux │ ├── README.md │ ├── ldr_appid.EXAMPLE.txt │ ├── ldr_cmdline.EXAMPLE.txt │ ├── ldr_cwd.EXAMPLE.txt │ ├── ldr_exe.EXAMPLE.txt │ ├── ldr_steam_rt.EXAMPLE.txt │ └── steamclient_loader.sh │ └── win │ ├── ColdClientLoader.cpp │ ├── ColdClientLoader.ini │ └── extra_protection │ ├── dllmain.cpp │ ├── extra_protection │ └── stubdrm.hpp │ └── stubdrm.cpp └── z_original_repo_files ├── .gitlab-ci.yml ├── CMakeLists.txt ├── CMakeSettings.json ├── Makefile ├── README.md ├── Readme_debug.txt ├── Readme_experimental.txt ├── Readme_experimental_steamclient.txt ├── Readme_generate_interfaces.txt ├── Readme_lobby_connect.txt ├── Readme_release.txt ├── blog └── 1_year.md ├── build_env_x64.bat ├── build_env_x86.bat ├── build_linux.sh ├── build_set_protobuf_directories.bat ├── build_steamos.sh ├── build_win_debug_experimental.bat ├── build_win_debug_experimental_steamclient.bat ├── build_win_find_interfaces.bat ├── build_win_lobby_connect.bat ├── build_win_release.bat ├── build_win_release_experimental.bat ├── build_win_release_experimental_steamclient.bat ├── dll ├── rtlgenrandom.c └── rtlgenrandom.def ├── generate_build_win_bat.py ├── generate_emu_config_README.txt └── website └── template.html /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | max_line_length = 120 12 | 13 | [*.py] 14 | indent_size = 4 15 | 16 | [*.h] 17 | indent_size = 4 18 | 19 | [*.cpp] 20 | indent_size = 4 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **Emulator version** 14 | 2024_12_13_Exp for example 15 | 16 | **Debug log** 17 | Please upload the debug log somewhere. 18 | 19 | **steam_settings file** 20 | Please upload the steam settings file somewhere. 21 | 22 | **Requirement** 23 | Set x what you completed 24 | - [x] like this 25 | - [ ] I am uploaded debug log. 26 | - [ ] I am uploaded steam_setting file. 27 | - [ ] I am sure the game not using 3rd party server (Photon, Playfab, GC, etc). 28 | - [ ] I am sure can run the game offline. 29 | 30 | 31 | **To Reproduce** 32 | Steps to reproduce the behavior: 33 | 1. Go to '...' 34 | 2. Click on '....' 35 | 3. Scroll down to '....' 36 | 4. See error 37 | 38 | **Expected behavior** 39 | A clear and concise description of what you expected to happen. 40 | 41 | **Screenshots** 42 | If applicable, add screenshots to help explain your problem. 43 | 44 | **Additional context** 45 | Add any other context about the problem here. 46 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Feature] " 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Are you comfortable implementing it yourself?** 20 | A yes or no question, maybe say why you choosen this. 21 | 22 | **Additional context** 23 | Add any other context or screenshots about the feature request here. 24 | -------------------------------------------------------------------------------- /.github/workflows/emu-pull-request.yml: -------------------------------------------------------------------------------- 1 | name: "Emu PR" 2 | 3 | on: 4 | pull_request: 5 | branches: ["dev"] 6 | paths-ignore: 7 | - "**/*.md" 8 | - "dev.notes/**" 9 | - "post_build/**" 10 | - "z_original_repo_files/**" 11 | - "sdk/*.txt" 12 | - "LICENSE" 13 | # tools 14 | - "tools/generate_emu_config/**" 15 | - "tools/migrate_gse/**" 16 | - "tools/steamclient_loader/linux/**" # these are just scripts, not built 17 | 18 | permissions: 19 | contents: "write" 20 | 21 | jobs: 22 | emu-win-all: 23 | name: "win" 24 | if: ${{ !cancelled() }} 25 | uses: "./.github/workflows/emu-build-all-win.yml" 26 | 27 | emu-linux-all: 28 | name: "linux" 29 | if: ${{ !cancelled() }} 30 | uses: "./.github/workflows/emu-build-all-linux.yml" 31 | -------------------------------------------------------------------------------- /.github/workflows/migrate_gse-build-linux.yml: -------------------------------------------------------------------------------- 1 | name: "Build migrate_gse script (Linux)" 2 | 3 | on: 4 | workflow_call: 5 | # needed since it allows this to become a reusable workflow 6 | workflow_dispatch: 7 | # allows manual trigger 8 | 9 | permissions: 10 | contents: "write" 11 | 12 | env: 13 | ARTIFACT_NAME: "migrate_gse-linux-${{ github.sha }}" 14 | SCRIPT_BASE_DIR: "tools/migrate_gse" 15 | PACKAGE_BASE_DIR: "tools/migrate_gse/bin/linux" 16 | 17 | jobs: 18 | build: 19 | runs-on: "ubuntu-22.04" 20 | 21 | steps: 22 | - name: "Checkout branch" 23 | uses: actions/checkout@v4 24 | 25 | # fix folder permissions! not sure why this fails 26 | # nested subdirs "build/linux/release" cause permission problems 27 | - name: "Give all permissions to repo folder" 28 | shell: "bash" 29 | working-directory: "${{ github.workspace }}" 30 | run: sudo chmod -R 777 "${{ github.workspace }}" 31 | 32 | # env 33 | - name: "Install env" 34 | shell: "bash" 35 | working-directory: "${{ env.SCRIPT_BASE_DIR }}" 36 | run: sudo chmod 777 recreate_venv_linux.sh && sudo ./recreate_venv_linux.sh 37 | 38 | # build 39 | - name: "Rebuild" 40 | shell: "bash" 41 | working-directory: "${{ env.SCRIPT_BASE_DIR }}" 42 | run: sudo chmod 777 rebuild_linux.sh && ./rebuild_linux.sh 43 | 44 | # upload artifact 45 | - name: "Upload build package" 46 | uses: actions/upload-artifact@v4 47 | with: 48 | name: "${{ env.ARTIFACT_NAME }}" 49 | path: "${{ env.PACKAGE_BASE_DIR }}/" 50 | if-no-files-found: "error" 51 | compression-level: 9 52 | retention-days: 1 53 | -------------------------------------------------------------------------------- /.github/workflows/migrate_gse-build-win.yml: -------------------------------------------------------------------------------- 1 | name: "Build migrate_gse script (Windows)" 2 | 3 | on: 4 | workflow_call: 5 | # needed since it allows this to become a reusable workflow 6 | workflow_dispatch: 7 | # allows manual trigger 8 | 9 | permissions: 10 | contents: "write" 11 | 12 | env: 13 | ARTIFACT_NAME: "migrate_gse-win-${{ github.sha }}" 14 | SCRIPT_BASE_DIR: "tools/migrate_gse" 15 | PACKAGE_BASE_DIR: "tools/migrate_gse/bin/win" 16 | 17 | THIRD_PARTY_BASE_DIR: "third-party" 18 | 19 | jobs: 20 | build: 21 | runs-on: "windows-2022" 22 | 23 | steps: 24 | - name: "Set up Python 3.12" 25 | uses: actions/setup-python@v5 26 | with: 27 | python-version: "3.12" 28 | 29 | # on Windows Git will auto change line ending to CRLF, not preferable 30 | - name: "Ensure LF line ending" 31 | shell: "cmd" 32 | working-directory: "${{ github.workspace }}" 33 | run: | 34 | git config --local core.autocrlf false 35 | git config --system core.autocrlf false 36 | git config --global core.autocrlf false 37 | 38 | - name: "Checkout branch" 39 | uses: actions/checkout@v4 40 | 41 | # extra helpers/tools, these are not built inside the deps build dir 42 | - name: "Clone third-party deps (build/win)" 43 | uses: actions/checkout@v4 44 | with: 45 | ref: "third-party/build/win" 46 | path: "${{env.THIRD_PARTY_BASE_DIR}}/build/win" 47 | 48 | # env 49 | - name: "Install env" 50 | shell: cmd 51 | working-directory: "${{ env.SCRIPT_BASE_DIR }}" 52 | run: recreate_venv_win.bat 53 | 54 | # build 55 | - name: "Rebuild" 56 | shell: cmd 57 | working-directory: "${{ env.SCRIPT_BASE_DIR }}" 58 | run: rebuild_win.bat 59 | 60 | # upload artifact 61 | - name: "Upload build package" 62 | uses: actions/upload-artifact@v4 63 | with: 64 | name: "${{ env.ARTIFACT_NAME }}" 65 | path: "${{ env.PACKAGE_BASE_DIR }}/" 66 | if-no-files-found: "error" 67 | compression-level: 9 68 | retention-days: 1 69 | -------------------------------------------------------------------------------- /.github/workflows/migrate_gse-pull-request.yml: -------------------------------------------------------------------------------- 1 | name: "Migrate GSE PR" 2 | 3 | on: 4 | pull_request: 5 | branches: ["dev"] 6 | paths: 7 | - "!**/*.md" 8 | - "tools/migrate_gse/**" 9 | 10 | permissions: 11 | contents: "write" 12 | 13 | jobs: 14 | script-win: 15 | name: "Migrate GSE win" 16 | if: ${{ !cancelled() }} 17 | uses: "./.github/workflows/migrate_gse-build-win.yml" 18 | 19 | script-linux: 20 | name: "Migrate GSE linux" 21 | if: ${{ !cancelled() }} 22 | uses: "./.github/workflows/migrate_gse-build-linux.yml" 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE 2 | **/.vs 3 | **/.vscode 4 | 5 | # PYTHON 6 | **/.venv 7 | **/__pycache__ 8 | 9 | # PROTOBUF 10 | /proto_gen 11 | 12 | # SPECIFIC 13 | /build 14 | /third-party 15 | 16 | # TOOLS 17 | 18 | # generate_emu_config 19 | /tools/generate_emu_config/.py*/ 20 | /tools/generate_emu_config/.env*/ 21 | /tools/generate_emu_config/bin 22 | 23 | /tools/generate_emu_config/backup/ 24 | /tools/generate_emu_config/login_temp/ 25 | /tools/generate_emu_config/output/ 26 | /tools/generate_emu_config/**/my_login.txt 27 | /tools/generate_emu_config/top_owners_ids.txt 28 | 29 | # migrate_gse 30 | /tools/migrate_gse/.py*/ 31 | /tools/migrate_gse/.env*/ 32 | /tools/migrate_gse/bin 33 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "third-party/build/win"] 2 | path = third-party/build/win 3 | url = ./ 4 | branch = third-party/build/win 5 | 6 | [submodule "third-party/build/linux"] 7 | path = third-party/build/linux 8 | url = ./ 9 | branch = third-party/build/linux 10 | 11 | [submodule "third-party/common/win"] 12 | path = third-party/common/win 13 | url = ./ 14 | branch = third-party/common/win 15 | 16 | [submodule "third-party/common/linux"] 17 | path = third-party/common/linux 18 | url = ./ 19 | branch = third-party/common/linux 20 | 21 | [submodule "third-party/deps/win"] 22 | path = third-party/deps/win 23 | url = ./ 24 | branch = third-party/deps/win 25 | 26 | [submodule "third-party/deps/linux"] 27 | path = third-party/deps/linux 28 | url = ./ 29 | branch = third-party/deps/linux 30 | 31 | [submodule "third-party/deps/common"] 32 | path = third-party/deps/common 33 | url = ./ 34 | branch = third-party/deps/common 35 | -------------------------------------------------------------------------------- /build_linux_premake.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function help_page () { 4 | echo "./$(basename "$0") [switches]" 5 | echo "switches:" 6 | echo " --deps: rebuild third-party dependencies" 7 | echo " --help: show this page" 8 | } 9 | 10 | # use 70% 11 | build_threads="$(( $(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 0) * 70 / 100 ))" 12 | [[ $build_threads -lt 2 ]] && build_threads=2 13 | 14 | BUILD_DEPS=0 15 | for (( i=1; i<=$#; ++i )); do 16 | arg="${!i}" 17 | if [[ "$arg" = "--deps" ]]; then 18 | BUILD_DEPS=1 19 | elif [[ "$arg" = "--help" ]]; then 20 | help_page 21 | exit 0 22 | else 23 | echo "invalid arg $arg" 1>&2 24 | exit 1 25 | fi 26 | done 27 | 28 | premake_exe=./"third-party/common/linux/premake/premake5" 29 | if [[ ! -f "$premake_exe" ]]; then 30 | echo "preamke wasn't found" 1>&2 31 | exit 1 32 | fi 33 | chmod 777 "$premake_exe" 34 | 35 | # build deps 36 | if [[ $BUILD_DEPS = 1 ]]; then 37 | export CMAKE_GENERATOR="Unix Makefiles" 38 | "$premake_exe" --file="premake5-deps.lua" --all-ext --all-build --64-build --32-build --verbose --clean --j=$build_threads --os=linux gmake2 || { 39 | exit 1; 40 | } 41 | fi 42 | 43 | "$premake_exe" --genproto --os=linux gmake2 || { 44 | exit 1; 45 | } 46 | 47 | pushd ./"build/project/gmake2/linux" 48 | 49 | # you can select individual or all 50 | 51 | echo; echo building debug x64 52 | make -j $build_threads config=debug_x64 || { 53 | exit 1; 54 | } 55 | 56 | echo; echo building debug x32 57 | make -j $build_threads config=debug_x32 || { 58 | exit 1; 59 | } 60 | 61 | echo; echo building release x64 62 | make -j $build_threads config=release_x64 || { 63 | exit 1; 64 | } 65 | 66 | echo; echo building release x32 67 | make -j $build_threads config=release_x32 || { 68 | exit 1; 69 | } 70 | 71 | popd 72 | -------------------------------------------------------------------------------- /build_win_premake_deps.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | call "build_win_premake.bat" --deps 4 | -------------------------------------------------------------------------------- /crash_printer/crash_printer/linux.hpp: -------------------------------------------------------------------------------- 1 | #ifndef _CRASH_PRINTER_LINUX 2 | #define _CRASH_PRINTER_LINUX 3 | 4 | 5 | #include 6 | 7 | namespace crash_printer { 8 | 9 | bool init(const std::string &log_file); 10 | 11 | void deinit(); 12 | 13 | } 14 | 15 | #endif // _CRASH_PRINTER_LINUX 16 | -------------------------------------------------------------------------------- /crash_printer/crash_printer/win.hpp: -------------------------------------------------------------------------------- 1 | #ifndef _CRASH_PRINTER_WIN 2 | #define _CRASH_PRINTER_WIN 3 | 4 | 5 | #include 6 | 7 | namespace crash_printer { 8 | 9 | bool init(const std::string &log_file); 10 | 11 | void deinit(); 12 | 13 | } 14 | 15 | #endif // _CRASH_PRINTER_WIN 16 | -------------------------------------------------------------------------------- /crash_printer/tests/test_linux_sa_handler.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "crash_printer/linux.hpp" 3 | #include "common_helpers/common_helpers.hpp" 4 | 5 | #include 6 | #include 7 | 8 | #include 9 | #include // SIGBUS + SA_SIGINFO ... 10 | #include // strsignal 11 | #include // backtrace + backtrace_symbols 12 | 13 | std::string logs_filepath = "./crash_test/asd.txt"; 14 | 15 | // sa_sigaction handler for illegal instruction (SIGILL) 16 | void exception_handler_SIGILL(int signal) 17 | { 18 | std::ifstream file(std::filesystem::u8path(logs_filepath)); 19 | if (file.is_open()) { 20 | std::string line{}; 21 | std::getline(file, line); 22 | file.close(); 23 | 24 | if (line.size()) { 25 | std::cout << "Success!" << std::endl; 26 | exit(0); 27 | } 28 | } 29 | 30 | std::cerr << "Failed!" << std::endl; 31 | exit(1); 32 | } 33 | 34 | 35 | int main() 36 | { 37 | // simulate the existence of previous handler 38 | struct sigaction sa_SIGSEGV_prev{}; 39 | sa_SIGSEGV_prev.sa_handler = exception_handler_SIGILL; 40 | sa_SIGSEGV_prev.sa_flags = SA_RESETHAND; 41 | sigemptyset(&sa_SIGSEGV_prev.sa_mask); // all signals unblocked 42 | sigaction(SIGSEGV, &sa_SIGSEGV_prev, nullptr); 43 | 44 | if (!common_helpers::remove_file(logs_filepath)) { 45 | std::cerr << "failed to remove log" << std::endl; 46 | return 1; 47 | } 48 | 49 | if (!crash_printer::init(logs_filepath)) { 50 | std::cerr << "failed to init" << std::endl; 51 | return 1; 52 | } 53 | 54 | // simulate a crash 55 | volatile int * volatile ptr = nullptr; 56 | *ptr = 42; 57 | 58 | return 0; 59 | } 60 | -------------------------------------------------------------------------------- /crash_printer/tests/test_linux_sa_sigaction.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "crash_printer/linux.hpp" 3 | #include "common_helpers/common_helpers.hpp" 4 | 5 | #include 6 | #include 7 | 8 | #include 9 | #include // SIGBUS + SA_SIGINFO ... 10 | #include // strsignal 11 | #include // backtrace + backtrace_symbols 12 | 13 | std::string logs_filepath = "./crash_test/asd.txt"; 14 | 15 | // sa_handler handler for illegal instruction (SIGILL) 16 | void exception_handler_SIGILL(int signal, siginfo_t *info, void *context) 17 | { 18 | std::ifstream file(std::filesystem::u8path(logs_filepath)); 19 | if (file.is_open()) { 20 | std::string line{}; 21 | std::getline(file, line); 22 | file.close(); 23 | 24 | if (line.size()) { 25 | std::cout << "Success!" << std::endl; 26 | exit(0); 27 | } 28 | } 29 | 30 | std::cerr << "Failed!" << std::endl; 31 | exit(1); 32 | } 33 | 34 | 35 | int main() 36 | { 37 | // simulate the existence of previous handler 38 | struct sigaction sa_SIGSEGV_prev{}; 39 | sa_SIGSEGV_prev.sa_sigaction = exception_handler_SIGILL; 40 | sa_SIGSEGV_prev.sa_flags = SA_SIGINFO | SA_RESETHAND; 41 | sigemptyset(&sa_SIGSEGV_prev.sa_mask); // all signals unblocked 42 | sigaction(SIGSEGV, &sa_SIGSEGV_prev, nullptr); 43 | 44 | if (!common_helpers::remove_file(logs_filepath)) { 45 | std::cerr << "failed to remove log" << std::endl; 46 | return 1; 47 | } 48 | 49 | if (!crash_printer::init(logs_filepath)) { 50 | std::cerr << "failed to init" << std::endl; 51 | return 1; 52 | } 53 | 54 | // simulate a crash 55 | volatile int * volatile ptr = nullptr; 56 | *ptr = 42; 57 | 58 | return 0; 59 | } 60 | -------------------------------------------------------------------------------- /crash_printer/tests/test_win.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "crash_printer/win.hpp" 3 | #include "common_helpers/common_helpers.hpp" 4 | 5 | #include 6 | #include 7 | 8 | #define WIN32_LEAN_AND_MEAN 9 | #include 10 | 11 | std::string logs_filepath = "./crash_test/zxc.txt"; 12 | 13 | 14 | static LONG WINAPI exception_handler(LPEXCEPTION_POINTERS ex_pointers) 15 | { 16 | std::ifstream file(std::filesystem::u8path(logs_filepath)); 17 | if (file.is_open()) { 18 | std::string line{}; 19 | std::getline(file, line); 20 | file.close(); 21 | 22 | if (line.size()) { 23 | std::cout << "Success!" << std::endl; 24 | exit(0); 25 | } 26 | } 27 | 28 | std::cerr << "Failed!" << std::endl; 29 | exit(1); 30 | } 31 | 32 | int* get_ptr() 33 | { 34 | return nullptr; 35 | } 36 | 37 | int main() 38 | { 39 | // simulate the existence of previous handler 40 | SetUnhandledExceptionFilter(exception_handler); 41 | 42 | if (!common_helpers::remove_file(logs_filepath)) { 43 | std::cerr << "failed to remove log" << std::endl; 44 | return 1; 45 | } 46 | 47 | if (!crash_printer::init(logs_filepath)) { 48 | std::cerr << "failed to init" << std::endl; 49 | return 1; 50 | } 51 | 52 | // simulate a crash 53 | volatile int * volatile ptr = get_ptr(); 54 | *ptr = 42; 55 | 56 | return 0; 57 | } 58 | -------------------------------------------------------------------------------- /dev.notes/README.md: -------------------------------------------------------------------------------- 1 | Explanations for random thoughts and ideas. 2 | -------------------------------------------------------------------------------- /dev.notes/how to add a branch as a submodule.md: -------------------------------------------------------------------------------- 1 | 1. create an orphan branch 2 | ```shell 3 | git checkout --orphan 'third-party/my-branch' 4 | ``` 5 | 2. make sure no files are staged yet 6 | ```shell 7 | git rm -r -f --cached . 8 | ``` 9 | 3. copy some new files (or add ones that already exist) 10 | ```shell 11 | cp ~/myfile.txt ./ 12 | ``` 13 | 4. stage the required files 14 | ```shell 15 | git add myfile.txt 16 | ``` 17 | you can also stage all files in the current directory 18 | ```shell 19 | git add . 20 | ``` 21 | 5. commit the files 22 | ```shell 23 | git commit -m 'my commit msg' 24 | ``` 25 | 6. add the branch as submodule 26 | ```shell 27 | git -c protocol.file.allow=always submodule add -f -b 'third-party/my-branch' file://"$(pwd)" 'my-relative-dir/without/dot/at/beginning' 28 | ``` 29 | git by default disallow local repos, this option `protocol.file.allow=always` forces git to allow it 30 | this will: 31 | - look for a **local** repo in the directory shown by `pwd` (current folder), 32 | notice how we don't simply use `./` because if we did that git will try to use the `origin` of the repo, 33 | and since the origin (github/gitlab/etc...) doesn't have this branch yet it will fail, using the file protocol (`file://absolute_path`) forces git to use the local repo files 34 | you can of course push the branch to origin before doing this step 35 | - look for a branch named `third-party/my-branch` 36 | - create a submodule pointing at this branch inside a new folder `my-relative-dir/without/dot/at/beginning` 37 | notice that the new folder does **not** start with `./` as usual 38 | 7. fix the submodule path 39 | after the last command, the file `.gitmodules` will point at the absolute path of the repo on disk, fix it to be relative 40 | ```shell 41 | git -c protocol.file.allow=always submodule add -f -b 'third-party/my-branch' ./ 'my-relative-dir/without/dot/at/beginning' 42 | ``` 43 | this time git won't try to grab the data from origin, it will just edit `.gitmodules` 44 | 8. new git management objects/files will be staged, you can view them 45 | ```shell 46 | git status 47 | ``` 48 | possible output 49 | ```shell 50 | On branch third-party/my-branch 51 | 52 | Changes to be committed: 53 | (use "git restore --staged ..." to unstage) 54 | modified: .gitmodules 55 | new file: third-party/my-branch 56 | ``` 57 | 9. commit these 2 files 58 | ```shell 59 | git commit -m 'add branch third-party/my-branch as submodule' 60 | ``` 61 | -------------------------------------------------------------------------------- /dll/dll/client_known_interfaces.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLIENT_KNOWN_INTERFACES_H_ 2 | #define _CLIENT_KNOWN_INTERFACES_H_ 3 | 4 | #include 5 | #include 6 | 7 | extern const std::unordered_set client_known_interfaces; 8 | 9 | #endif // _CLIENT_KNOWN_INTERFACES_H_ 10 | -------------------------------------------------------------------------------- /dll/dll/dll.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_DLL_H__ 19 | #define __INCLUDED_DLL_H__ 20 | 21 | #include "steam_client.h" 22 | 23 | #ifdef STEAMCLIENT_DLL 24 | #define STEAMAPI_API static 25 | #define STEAMCLIENT_API S_API_EXPORT 26 | #else 27 | #define STEAMAPI_API S_API_EXPORT 28 | #define STEAMCLIENT_API static 29 | #endif 30 | 31 | Steam_Client *get_steam_client(); 32 | bool steamclient_has_ipv6_functions(); 33 | 34 | HSteamUser flat_hsteamuser(); 35 | HSteamPipe flat_hsteampipe(); 36 | HSteamUser flat_gs_hsteamuser(); 37 | HSteamPipe flat_gs_hsteampipe(); 38 | 39 | 40 | #endif // __INCLUDED_DLL_H__ 41 | -------------------------------------------------------------------------------- /dll/dll/include.wrap.mbedtls.h: -------------------------------------------------------------------------------- 1 | #if defined(__linux__) || defined(linux) || defined(GNUC) || defined(__MINGW32__) || defined(__MINGW64__) 2 | // https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html 3 | // https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wall 4 | #pragma GCC diagnostic push 5 | #pragma GCC diagnostic ignored "-Wall" 6 | 7 | #include "mbedtls/pk.h" 8 | #include "mbedtls/x509.h" 9 | #include "mbedtls/error.h" 10 | #include "mbedtls/sha1.h" 11 | #include "mbedtls/entropy.h" 12 | #include "mbedtls/ctr_drbg.h" 13 | 14 | #pragma GCC diagnostic pop 15 | #else 16 | // https://learn.microsoft.com/en-us/cpp/preprocessor/warning?view=msvc-170#push-and-pop 17 | #pragma warning(push, 0) 18 | 19 | #include "mbedtls/pk.h" 20 | #include "mbedtls/x509.h" 21 | #include "mbedtls/error.h" 22 | #include "mbedtls/sha1.h" 23 | #include "mbedtls/entropy.h" 24 | #include "mbedtls/ctr_drbg.h" 25 | 26 | #pragma warning(pop) 27 | #endif 28 | -------------------------------------------------------------------------------- /dll/dll/include.wrap.net.pb.h: -------------------------------------------------------------------------------- 1 | 2 | #if defined(__linux__) || defined(linux) || defined(GNUC) || defined(__MINGW32__) || defined(__MINGW64__) 3 | // https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html 4 | // https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wall 5 | #pragma GCC diagnostic push 6 | #pragma GCC diagnostic ignored "-Wall" 7 | #include "net.pb.h" 8 | #pragma GCC diagnostic pop 9 | #else 10 | // https://learn.microsoft.com/en-us/cpp/preprocessor/warning?view=msvc-170#push-and-pop 11 | #pragma warning(push, 0) 12 | #include "net.pb.h" 13 | #pragma warning(pop) 14 | #endif 15 | -------------------------------------------------------------------------------- /dll/dll/settings_parser.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef SETTINGS_PARSER_INCLUDE_H 19 | #define SETTINGS_PARSER_INCLUDE_H 20 | 21 | #include "settings.h" 22 | 23 | //returns game appid 24 | uint32 create_localstorage_settings(Settings **settings_client_out, Settings **settings_server_out, Local_Storage **local_storage_out); 25 | void save_global_settings(class Local_Storage *local_storage, const char *name, const char *language); 26 | 27 | bool settings_disable_lan_only(); 28 | 29 | enum class SettingsItf { 30 | CLIENT, 31 | GAMESERVER_STATS, 32 | GAMESERVER, 33 | MATCHMAKING_SERVERS, 34 | MATCHMAKING, 35 | USER, 36 | FRIENDS, 37 | UTILS, 38 | USER_STATS, 39 | APPS, 40 | NETWORKING, 41 | REMOTE_STORAGE, 42 | SCREENSHOTS, 43 | HTTP, 44 | UNIFIED_MESSAGES, 45 | CONTROLLER, 46 | UGC, 47 | APPLIST, 48 | MUSIC, 49 | MUSIC_REMOTE, 50 | HTML_SURFACE, 51 | INVENTORY, 52 | VIDEO, 53 | MASTERSERVER_UPDATER, 54 | }; 55 | 56 | const std::map& settings_old_interfaces(); 57 | 58 | #endif // SETTINGS_PARSER_INCLUDE_H 59 | -------------------------------------------------------------------------------- /dll/dll/source_query.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_SOURCE_QUERY_H__ 19 | #define __INCLUDED_SOURCE_QUERY_H__ 20 | 21 | #include "base.h" 22 | 23 | class Source_Query 24 | { 25 | Source_Query() = delete; 26 | ~Source_Query() = delete; 27 | 28 | public: 29 | static std::vector handle_source_query(const void* buffer, size_t len, Gameserver const& gs); 30 | }; 31 | 32 | #endif // __INCLUDED_SOURCE_QUERY_H__ 33 | -------------------------------------------------------------------------------- /dll/dll/steam_app_disable_update.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_STEAM_APP_DISABLE_UPDATE_H__ 19 | #define __INCLUDED_STEAM_APP_DISABLE_UPDATE_H__ 20 | 21 | #include "base.h" 22 | 23 | class Steam_App_Disable_Update: 24 | public ISteamAppDisableUpdate 25 | { 26 | class Settings *settings{}; 27 | class Networking *network{}; 28 | class SteamCallResults *callback_results{}; 29 | class SteamCallBacks *callbacks{}; 30 | class RunEveryRunCB *run_every_runcb{}; 31 | 32 | static void steam_network_callback(void *object, Common_Message *msg); 33 | static void steam_run_every_runcb(void *object); 34 | 35 | void steam_run_callback(); 36 | void network_callback(Common_Message *msg); 37 | 38 | public: 39 | Steam_App_Disable_Update(class Settings *settings, class Networking *network, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb); 40 | ~Steam_App_Disable_Update(); 41 | 42 | // probably means how many seconds to keep the updates disabled 43 | void SetAppUpdateDisabledSecondsRemaining(int32 nSeconds); 44 | 45 | }; 46 | 47 | #endif // __INCLUDED_STEAM_APP_DISABLE_UPDATE_H__ 48 | -------------------------------------------------------------------------------- /dll/dll/steam_app_ids.h: -------------------------------------------------------------------------------- 1 | #ifndef _STEAM_APP_IDS_H_ 2 | #define _STEAM_APP_IDS_H_ 3 | 4 | #include "common_includes.h" 5 | 6 | extern const std::map steam_preowned_app_ids; 7 | 8 | #endif // _STEAM_APP_IDS_H_ 9 | -------------------------------------------------------------------------------- /dll/dll/steam_applist.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_STEAM_APPLIST_H__ 19 | #define __INCLUDED_STEAM_APPLIST_H__ 20 | 21 | #include "base.h" 22 | 23 | class Steam_Applist : 24 | public ISteamAppList 25 | { 26 | public: 27 | uint32 GetNumInstalledApps(); 28 | uint32 GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ); 29 | 30 | int GetAppName( AppId_t nAppID, STEAM_OUT_STRING() char *pchName, int cchNameMax ); // returns -1 if no name was found 31 | int GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ); // returns -1 if no dir was found 32 | 33 | int GetAppBuildId( AppId_t nAppID ); // return the buildid of this app, may change at any time based on backend updates to the game 34 | }; 35 | 36 | #endif // __INCLUDED_STEAM_APPLIST_H__ 37 | -------------------------------------------------------------------------------- /dll/dll/steam_music.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_STEAM_MUSIC_H__ 19 | #define __INCLUDED_STEAM_MUSIC_H__ 20 | 21 | #include "base.h" 22 | 23 | class Steam_Music : 24 | public ISteamMusic 25 | { 26 | int playing{};; 27 | float volume{};; 28 | void change_playstate(int new_playing); 29 | 30 | class SteamCallBacks *callbacks{}; 31 | 32 | public: 33 | Steam_Music(class SteamCallBacks *callbacks); 34 | 35 | bool BIsEnabled(); 36 | bool BIsPlaying(); 37 | 38 | AudioPlayback_Status GetPlaybackStatus(); 39 | 40 | void Play(); 41 | void Pause(); 42 | void PlayPrevious(); 43 | void PlayNext(); 44 | 45 | // volume is between 0.0 and 1.0 46 | void SetVolume( float flVolume ); 47 | float GetVolume(); 48 | }; 49 | 50 | #endif // __INCLUDED_STEAM_MUSIC_H__ 51 | -------------------------------------------------------------------------------- /dll/dll/steam_parental.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_STEAM_PARENTAL_H__ 19 | #define __INCLUDED_STEAM_PARENTAL_H__ 20 | 21 | #include "base.h" 22 | 23 | class Steam_Parental : 24 | public ISteamParentalSettings 25 | { 26 | public: 27 | bool BIsParentalLockEnabled(); 28 | bool BIsParentalLockLocked(); 29 | 30 | bool BIsAppBlocked( AppId_t nAppID ); 31 | bool BIsAppInBlockList( AppId_t nAppID ); 32 | 33 | bool BIsFeatureBlocked( EParentalFeature eFeature ); 34 | bool BIsFeatureInBlockList( EParentalFeature eFeature ); 35 | }; 36 | 37 | #endif // __INCLUDED_STEAM_PARENTAL_H__ 38 | -------------------------------------------------------------------------------- /dll/dll/steam_tv.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_STEAM_TV_H__ 19 | #define __INCLUDED_STEAM_TV_H__ 20 | 21 | #include "base.h" 22 | 23 | class Steam_TV : 24 | public ISteamTV 25 | { 26 | class Settings *settings{}; 27 | class Networking *network{}; 28 | class SteamCallResults *callback_results{}; 29 | class SteamCallBacks *callbacks{}; 30 | class RunEveryRunCB *run_every_runcb{}; 31 | std::chrono::time_point initialized_time = std::chrono::steady_clock::now(); 32 | FSteamNetworkingSocketsDebugOutput debug_function{}; 33 | 34 | static void steam_callback(void *object, Common_Message *msg); 35 | static void steam_run_every_runcb(void *object); 36 | 37 | public: 38 | Steam_TV(class Settings *settings, class Networking *network, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb); 39 | ~Steam_TV(); 40 | 41 | bool IsBroadcasting(int *pnNumViewers); 42 | 43 | void AddBroadcastGameData(const char * pchKey, const char * pchValue); 44 | 45 | void RemoveBroadcastGameData(const char * pchKey); 46 | 47 | void AddTimelineMarker(const char * pchTemplateName, bool bPersistent, uint8 nColorR, uint8 nColorG, uint8 nColorB); 48 | 49 | void RemoveTimelineMarker(); 50 | 51 | uint32 AddRegion(const char * pchElementName, const char * pchTimelineDataSection, const SteamTVRegion_t * pSteamTVRegion, ESteamTVRegionBehavior eSteamTVRegionBehavior); 52 | 53 | void RemoveRegion(uint32 unRegionHandle); 54 | 55 | void RunCallbacks(); 56 | 57 | void Callback(Common_Message *msg); 58 | 59 | }; 60 | 61 | #endif // __INCLUDED_STEAM_TV_H__ 62 | -------------------------------------------------------------------------------- /dll/dll/steam_video.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_STEAM_VIDEO_H__ 19 | #define __INCLUDED_STEAM_VIDEO_H__ 20 | 21 | #include "base.h" 22 | 23 | class Steam_Video : 24 | public ISteamVideo001, 25 | public ISteamVideo002, 26 | public ISteamVideo 27 | { 28 | public: 29 | 30 | // Get a URL suitable for streaming the given Video app ID's video 31 | void GetVideoURL( AppId_t unVideoAppID ); 32 | 33 | // returns true if user is uploading a live broadcast 34 | bool IsBroadcasting( int *pnNumViewers ); 35 | 36 | // Get the OPF Details for 360 Video Playback 37 | STEAM_CALL_BACK( GetOPFSettingsResult_t ) 38 | void GetOPFSettings( AppId_t unVideoAppID ); 39 | bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ); 40 | }; 41 | 42 | #endif // __INCLUDED_STEAM_VIDEO_H__ 43 | -------------------------------------------------------------------------------- /dll/dll/ugc_remote_storage_bridge.h: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #ifndef __INCLUDED_UGC_REMOTE_STORAGE_BRIDGE_H__ 19 | #define __INCLUDED_UGC_REMOTE_STORAGE_BRIDGE_H__ 20 | 21 | #include "base.h" 22 | 23 | class Ugc_Remote_Storage_Bridge 24 | { 25 | public: 26 | struct QueryInfo { 27 | PublishedFileId_t mod_id{}; // mod id 28 | bool is_primary_file{}; // was this query for the primary mod file or preview file 29 | }; 30 | 31 | private: 32 | class Settings *settings{}; 33 | // key: UGCHandle_t which is the file handle (primary or preview) 34 | // value: the mod id, true if UGCHandle_t of primary file | false if UGCHandle_t of preview file 35 | std::map steam_ugc_queries{}; 36 | std::set subscribed{}; // just to keep the running state of subscription 37 | 38 | public: 39 | Ugc_Remote_Storage_Bridge(class Settings *settings); 40 | ~Ugc_Remote_Storage_Bridge(); 41 | 42 | // called from Steam_UGC::SendQueryUGCRequest() after a successful query 43 | void add_ugc_query_result(UGCHandle_t file_handle, PublishedFileId_t fileid, bool handle_of_primary_file); 44 | bool remove_ugc_query_result(UGCHandle_t file_handle); 45 | std::optional get_ugc_query_result(UGCHandle_t file_handle) const; 46 | 47 | void add_subbed_mod(PublishedFileId_t id); 48 | void remove_subbed_mod(PublishedFileId_t id); 49 | size_t subbed_mods_count() const; 50 | bool has_subbed_mod(PublishedFileId_t id) const; 51 | std::set::iterator subbed_mods_itr_begin() const; 52 | std::set::iterator subbed_mods_itr_end() const; 53 | 54 | }; 55 | 56 | 57 | #endif // __INCLUDED_UGC_REMOTE_STORAGE_BRIDGE_H__ 58 | 59 | -------------------------------------------------------------------------------- /dll/steam_applist.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #include "dll/steam_applist.h" 19 | 20 | uint32 Steam_Applist::GetNumInstalledApps() 21 | { 22 | PRINT_DEBUG_TODO(); 23 | return 0; 24 | } 25 | 26 | uint32 Steam_Applist::GetInstalledApps( AppId_t *pvecAppID, uint32 unMaxAppIDs ) 27 | { 28 | PRINT_DEBUG_TODO(); 29 | return 0; 30 | } 31 | 32 | // returns -1 if no name was found 33 | int Steam_Applist::GetAppName( AppId_t nAppID, STEAM_OUT_STRING() char *pchName, int cchNameMax ) 34 | { 35 | PRINT_DEBUG_TODO(); 36 | return -1; 37 | } 38 | 39 | // returns -1 if no dir was found 40 | int Steam_Applist::GetAppInstallDir( AppId_t nAppID, char *pchDirectory, int cchNameMax ) 41 | { 42 | PRINT_DEBUG_TODO(); 43 | return -1; 44 | } 45 | 46 | // return the buildid of this app, may change at any time based on backend updates to the game 47 | int Steam_Applist::GetAppBuildId( AppId_t nAppID ) 48 | { 49 | PRINT_DEBUG_TODO(); 50 | return 10; 51 | } 52 | -------------------------------------------------------------------------------- /dll/steam_parental.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #include "dll/steam_parental.h" 19 | 20 | bool Steam_Parental::BIsParentalLockEnabled() 21 | { 22 | PRINT_DEBUG_TODO(); 23 | return false; 24 | } 25 | 26 | bool Steam_Parental::BIsParentalLockLocked() 27 | { 28 | PRINT_DEBUG_TODO(); 29 | return false; 30 | } 31 | 32 | 33 | bool Steam_Parental::BIsAppBlocked( AppId_t nAppID ) 34 | { 35 | PRINT_DEBUG_TODO(); 36 | return false; 37 | } 38 | 39 | bool Steam_Parental::BIsAppInBlockList( AppId_t nAppID ) 40 | { 41 | PRINT_DEBUG_TODO(); 42 | return false; 43 | } 44 | 45 | 46 | bool Steam_Parental::BIsFeatureBlocked( EParentalFeature eFeature ) 47 | { 48 | PRINT_DEBUG_TODO(); 49 | return false; 50 | } 51 | 52 | bool Steam_Parental::BIsFeatureInBlockList( EParentalFeature eFeature ) 53 | { 54 | PRINT_DEBUG_TODO(); 55 | return false; 56 | } 57 | -------------------------------------------------------------------------------- /dll/steam_video.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (C) 2019 Mr Goldberg 2 | This file is part of the Goldberg Emulator 3 | 4 | The Goldberg Emulator is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU Lesser General Public 6 | License as published by the Free Software Foundation; either 7 | version 3 of the License, or (at your option) any later version. 8 | 9 | The Goldberg Emulator is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | Lesser General Public License for more details. 13 | 14 | You should have received a copy of the GNU Lesser General Public 15 | License along with the Goldberg Emulator; if not, see 16 | . */ 17 | 18 | #include "dll/steam_video.h" 19 | 20 | // Get a URL suitable for streaming the given Video app ID's video 21 | void Steam_Video::GetVideoURL( AppId_t unVideoAppID ) 22 | { 23 | PRINT_DEBUG_TODO(); 24 | std::lock_guard lock(global_mutex); 25 | } 26 | 27 | 28 | // returns true if user is uploading a live broadcast 29 | bool Steam_Video::IsBroadcasting( int *pnNumViewers ) 30 | { 31 | PRINT_DEBUG_TODO(); 32 | std::lock_guard lock(global_mutex); 33 | return false; 34 | } 35 | 36 | 37 | // Get the OPF Details for 360 Video Playback 38 | STEAM_CALL_BACK( GetOPFSettingsResult_t ) 39 | void Steam_Video::GetOPFSettings( AppId_t unVideoAppID ) 40 | { 41 | PRINT_DEBUG_TODO(); 42 | std::lock_guard lock(global_mutex); 43 | } 44 | 45 | bool Steam_Video::GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) 46 | { 47 | PRINT_DEBUG_TODO(); 48 | std::lock_guard lock(global_mutex); 49 | return false; 50 | } 51 | -------------------------------------------------------------------------------- /dll/ugc_remote_storage_bridge.cpp: -------------------------------------------------------------------------------- 1 | #include "dll/ugc_remote_storage_bridge.h" 2 | 3 | 4 | Ugc_Remote_Storage_Bridge::Ugc_Remote_Storage_Bridge(class Settings *settings) 5 | { 6 | this->settings = settings; 7 | 8 | // subscribe to all mods initially 9 | subscribed = settings->modSet(); 10 | } 11 | 12 | Ugc_Remote_Storage_Bridge::~Ugc_Remote_Storage_Bridge() 13 | { 14 | std::lock_guard lock(global_mutex); 15 | 16 | steam_ugc_queries.clear(); 17 | } 18 | 19 | void Ugc_Remote_Storage_Bridge::add_ugc_query_result(UGCHandle_t file_handle, PublishedFileId_t fileid, bool handle_of_primary_file) 20 | { 21 | std::lock_guard lock(global_mutex); 22 | 23 | steam_ugc_queries[file_handle].mod_id = fileid; 24 | steam_ugc_queries[file_handle].is_primary_file = handle_of_primary_file; 25 | } 26 | 27 | bool Ugc_Remote_Storage_Bridge::remove_ugc_query_result(UGCHandle_t file_handle) 28 | { 29 | std::lock_guard lock(global_mutex); 30 | 31 | return !!steam_ugc_queries.erase(file_handle); 32 | } 33 | 34 | std::optional Ugc_Remote_Storage_Bridge::get_ugc_query_result(UGCHandle_t file_handle) const 35 | { 36 | std::lock_guard lock(global_mutex); 37 | 38 | auto it = steam_ugc_queries.find(file_handle); 39 | if (steam_ugc_queries.end() == it) return std::nullopt; 40 | return it->second; 41 | } 42 | 43 | void Ugc_Remote_Storage_Bridge::add_subbed_mod(PublishedFileId_t id) 44 | { 45 | subscribed.insert(id); 46 | } 47 | 48 | void Ugc_Remote_Storage_Bridge::remove_subbed_mod(PublishedFileId_t id) 49 | { 50 | subscribed.erase(id); 51 | } 52 | 53 | size_t Ugc_Remote_Storage_Bridge::subbed_mods_count() const 54 | { 55 | return subscribed.size(); 56 | } 57 | 58 | bool Ugc_Remote_Storage_Bridge::has_subbed_mod(PublishedFileId_t id) const 59 | { 60 | return !!subscribed.count(id); 61 | } 62 | 63 | std::set::iterator Ugc_Remote_Storage_Bridge::subbed_mods_itr_begin() const 64 | { 65 | return subscribed.begin(); 66 | } 67 | 68 | std::set::iterator Ugc_Remote_Storage_Bridge::subbed_mods_itr_end() const 69 | { 70 | return subscribed.end(); 71 | } 72 | -------------------------------------------------------------------------------- /generate_credits.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal EnableDelayedExpansion 3 | cd /d "%~dp0" 4 | 5 | set "ROOT=%cd%" 6 | set "CREDITS_FILE=%ROOT%\CREDITS.md" 7 | 8 | if exist "%CREDITS_FILE%" ( 9 | del /f /q "%CREDITS_FILE%" 10 | ) 11 | 12 | set "GLOB=third-party libs tools\steamclient_loader sdk" 13 | set "FILTER=SOURCE.txt" 14 | 15 | echo:# Many thanks for these sources>> "%CREDITS_FILE%" 16 | 17 | for %%A in (%GLOB%) do ( 18 | powershell -Command "Get-ChildItem -LiteralPath \"%%~A\" -Filter \"%FILTER%\" -File -Recurse | foreach { $parent = Split-Path -Path $_.FullName -Parent; $relative = (Resolve-Path -Path $parent -Relative).replace(\".\\\",\"\"); $relative_tag = $relative.replace(\"\\\", \"\"); Write-Output \"- ^[$^($relative^)^]^(#$^($relative_tag^)^)\"; }">> "%CREDITS_FILE%" 19 | ) 20 | 21 | echo.>> "%CREDITS_FILE%" 22 | 23 | for %%B in (%GLOB%) do ( 24 | powershell -Command "Get-ChildItem -LiteralPath \"%%~B\" -Filter \"%FILTER%\" -File -Recurse | foreach { $parent = Split-Path -Path $_.FullName -Parent; $relative = (Resolve-Path -Path $parent -Relative).replace(\".\\\",\"\"); Write-Output \"### $^($relative^)\"; Write-Output \"\"; Get-Content -LiteralPath $_.FullName -Raw -Encoding utf8; }">> "%CREDITS_FILE%" 25 | ) 26 | 27 | endlocal 28 | -------------------------------------------------------------------------------- /helpers/common_helpers/forgettable_memory.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | 10 | namespace common_helpers 11 | { 12 | template 13 | class ForgettableMemory { 14 | struct ForgettableBlock { 15 | Ty block; 16 | std::chrono::high_resolution_clock::time_point due_time; 17 | 18 | template 19 | ForgettableBlock(std::chrono::duration duration, Args&&... args) 20 | : due_time(std::chrono::high_resolution_clock::now() + duration), 21 | block( std::forward(args)... ) 22 | { } 23 | }; 24 | 25 | std::recursive_mutex mtx{}; 26 | std::forward_list storage{}; 27 | 28 | 29 | public: 30 | template 31 | Ty& create(std::chrono::duration duration, Args&&... args) { 32 | std::lock_guard lock(mtx); 33 | 34 | auto& new_ele = storage.emplace_front(duration, std::forward(args)...); 35 | return new_ele.block; 36 | } 37 | 38 | bool is_alive(const Ty& block) { 39 | std::lock_guard lock(mtx); 40 | 41 | auto ele_it = std::find_if(storage.begin(), storage.end(), [&block](const ForgettableBlock &item){ 42 | return &item.block == █ 43 | }); 44 | return storage.end() != ele_it; 45 | } 46 | 47 | void destroy(const Ty& block) { 48 | std::lock_guard lock(mtx); 49 | 50 | storage.remove_if([&block](const ForgettableBlock &item){ 51 | return &item.block == █ 52 | }); 53 | } 54 | 55 | void destroy_all() { 56 | std::lock_guard lock(mtx); 57 | 58 | storage.clear(); 59 | } 60 | 61 | void cleanup() { 62 | std::lock_guard lock(mtx); 63 | 64 | const auto now = std::chrono::high_resolution_clock::now(); 65 | storage.remove_if([&now](const ForgettableBlock &item){ 66 | return now > item.due_time; 67 | }); 68 | 69 | } 70 | 71 | }; 72 | } 73 | -------------------------------------------------------------------------------- /helpers/common_helpers/os_detector.h: -------------------------------------------------------------------------------- 1 | #ifndef __INCLUDED_OS_DETECTOR__ 2 | #define __INCLUDED_OS_DETECTOR__ 3 | 4 | 5 | #if defined(WIN64) || defined(_WIN64) || defined(__MINGW64__) 6 | #define __WINDOWS_64__ 7 | #elif defined(WIN32) || defined(_WIN32) || defined(__MINGW32__) 8 | #define __WINDOWS_32__ 9 | #endif 10 | 11 | #if defined(__WINDOWS_32__) || defined(__WINDOWS_64__) 12 | #define __WINDOWS__ 13 | #endif 14 | 15 | #if defined(__linux__) || defined(linux) 16 | #if defined(__x86_64__) 17 | #define __LINUX_64__ 18 | #else 19 | #define __LINUX_32__ 20 | #endif 21 | #endif 22 | 23 | #if defined(__LINUX_32__) || defined(__LINUX_64__) 24 | #define __LINUX__ 25 | #endif 26 | 27 | // https://sourceforge.net/p/predef/wiki/OperatingSystems/ 28 | #if defined(__APPLE__) || defined(macintosh) || defined(Macintosh) || defined(__MACH__) 29 | #define __MACOS__ 30 | #endif 31 | 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /helpers/dbg_log/dbg_log.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class dbg_log 10 | { 11 | private: 12 | std::recursive_mutex f_mtx{}; 13 | std::string filepath{}; 14 | std::FILE *out_file{}; 15 | const std::chrono::high_resolution_clock::time_point start_time = std::chrono::high_resolution_clock::now(); 16 | 17 | void open(); 18 | void write_stamp(); 19 | 20 | public: 21 | dbg_log(std::string_view path); 22 | dbg_log(std::wstring_view path); 23 | ~dbg_log(); 24 | 25 | void write(const std::string &str); 26 | void write(const std::wstring &str); 27 | 28 | void write(const char* fmt, ...); 29 | void write(const wchar_t* fmt, ...); 30 | 31 | void close(); 32 | }; 33 | -------------------------------------------------------------------------------- /helpers/pe_helpers/pe_helpers.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | namespace pe_helpers 12 | { 13 | 14 | typedef struct SectionHeadersResult 15 | { 16 | WORD count; 17 | PIMAGE_SECTION_HEADER ptr; 18 | } SectionHeadersResult_t; 19 | 20 | 21 | PIMAGE_NT_HEADERS get_nt_header(HMODULE hModule); 22 | 23 | PIMAGE_FILE_HEADER get_file_header(HMODULE hModule); 24 | 25 | PIMAGE_OPTIONAL_HEADER get_optional_header(HMODULE hModule); 26 | 27 | uint8_t* search_memory(uint8_t *mem, size_t size, const std::string &search_patt); 28 | 29 | bool replace_memory(uint8_t *mem, size_t size, const std::string &replace_patt, HANDLE hProcess); 30 | 31 | std::string get_err_string(DWORD code); 32 | 33 | bool is_module_64(HMODULE hModule); 34 | 35 | bool is_module_32(HMODULE hModule); 36 | 37 | SectionHeadersResult get_section_headers(HMODULE hModule); 38 | 39 | PIMAGE_SECTION_HEADER get_section_header_with_name(HMODULE hModule, const char* name); 40 | 41 | DWORD loadlib_remote(HANDLE hProcess, const std::string &fullpath, const char** err_reason = nullptr); 42 | 43 | size_t get_pe_size(HMODULE hModule); 44 | 45 | const std::string& get_current_exe_path(); 46 | 47 | const std::string& get_current_exe_name(); 48 | 49 | bool ends_with_i(PUNICODE_STRING target, std::wstring_view query); 50 | 51 | MEMORY_BASIC_INFORMATION get_mem_page_details(const void* mem); 52 | 53 | size_t get_current_exe_mem_size(); 54 | 55 | } 56 | -------------------------------------------------------------------------------- /libs/detours/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/microsoft/Detours 4 | 5 | VERSION: https://github.com/microsoft/Detours/tree/4b8c659f549b0ab21cf649377c7a84eb708f5e68 6 | 7 | #### LICENSE 8 | 9 | Copyright (c) Microsoft Corporation. 10 | 11 | MIT License 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is 18 | furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 | SOFTWARE. 30 | -------------------------------------------------------------------------------- /libs/detours/detver.h: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////////////// 2 | // 3 | // Common version parameters. 4 | // 5 | // Microsoft Research Detours Package, Version 4.0.1 6 | // 7 | // Copyright (c) Microsoft Corporation. All rights reserved. 8 | // 9 | 10 | #define _USING_V110_SDK71_ 1 11 | #include "winver.h" 12 | #if 0 13 | #include 14 | #include 15 | #else 16 | #ifndef DETOURS_STRINGIFY 17 | #define DETOURS_STRINGIFY_(x) #x 18 | #define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x) 19 | #endif 20 | 21 | #define VER_FILEFLAGSMASK 0x3fL 22 | #define VER_FILEFLAGS 0x0L 23 | #define VER_FILEOS 0x00040004L 24 | #define VER_FILETYPE 0x00000002L 25 | #define VER_FILESUBTYPE 0x00000000L 26 | #endif 27 | #define VER_DETOURS_BITS DETOURS_STRINGIFY(DETOURS_BITS) 28 | -------------------------------------------------------------------------------- /libs/detours/disolarm.cpp: -------------------------------------------------------------------------------- 1 | #define DETOURS_ARM_OFFLINE_LIBRARY 2 | #include "disasm.cpp" 3 | -------------------------------------------------------------------------------- /libs/detours/disolarm64.cpp: -------------------------------------------------------------------------------- 1 | #define DETOURS_ARM64_OFFLINE_LIBRARY 2 | #include "disasm.cpp" 3 | -------------------------------------------------------------------------------- /libs/detours/disolia64.cpp: -------------------------------------------------------------------------------- 1 | #define DETOURS_IA64_OFFLINE_LIBRARY 2 | #include "disasm.cpp" 3 | -------------------------------------------------------------------------------- /libs/detours/disolx64.cpp: -------------------------------------------------------------------------------- 1 | #define DETOURS_X64_OFFLINE_LIBRARY 2 | #include "disasm.cpp" 3 | -------------------------------------------------------------------------------- /libs/detours/disolx86.cpp: -------------------------------------------------------------------------------- 1 | #define DETOURS_X86_OFFLINE_LIBRARY 2 | #include "disasm.cpp" 3 | -------------------------------------------------------------------------------- /libs/fifo_map/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/nlohmann/fifo_map 4 | 5 | VERSION: https://github.com/nlohmann/fifo_map/tree/d732aaf9a315415ae8fd7eb11e3a4c1f80e42a48 6 | 7 | #### LICENSE 8 | 9 | MIT License 10 | 11 | Copyright (c) 2015-2017 Niels Lohmann 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is 18 | furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 | SOFTWARE. 30 | -------------------------------------------------------------------------------- /libs/gamepad/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/mtwilliams/libgamepad 4 | 5 | VERSION: ???? 6 | 7 | #### LICENSE 8 | 9 | Copyright (c) 2014 Michael Williams 10 | Copyright (c) 2010-2011 Sean Middleditch 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining a copy 13 | of this software and associated documentation files (the "Software"), to deal 14 | in the Software without restriction, including without limitation the rights 15 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 | copies of the Software, and to permit persons to whom the Software is 17 | furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in 20 | all copies or substantial portions of the Software. 21 | 22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | THE SOFTWARE. 29 | -------------------------------------------------------------------------------- /libs/imgui/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/ocornut/imgui 4 | 5 | VERSION: ???? 6 | 7 | #### LICENSE 8 | 9 | The MIT License (MIT) 10 | 11 | Copyright (c) 2014-2024 Omar Cornut 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is 18 | furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 | SOFTWARE. 30 | -------------------------------------------------------------------------------- /libs/json/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/nlohmann/json 4 | 5 | VERSION: https://github.com/nlohmann/json/releases/tag/v3.11.3 6 | 7 | #### LICENSE 8 | 9 | MIT License 10 | 11 | Copyright (c) 2013-2022 Niels Lohmann 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is 18 | furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 | SOFTWARE. 30 | -------------------------------------------------------------------------------- /libs/sha/source.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | https://github.com/vog/sha1 3 | 4 | VERSION: https://github.com/vog/sha1/tree/3f8a4aa032d144309d00dbfe972906a49b3631b9 5 | 6 | #### LICENSE 7 | PUBLIC DOMAIN 8 | -------------------------------------------------------------------------------- /libs/simpleini/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/brofield/simpleini 4 | 5 | VERSION: https://github.com/brofield/simpleini/releases/tag/v4.22 6 | 7 | #### LICENSE 8 | 9 | The MIT License (MIT) 10 | 11 | Copyright (c) 2006-2022 Brodie Thiesfield 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy of 14 | this software and associated documentation files (the "Software"), to deal in 15 | the Software without restriction, including without limitation the rights to 16 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 17 | the Software, and to permit persons to whom the Software is furnished to do so, 18 | subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 25 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 26 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 27 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 28 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 | -------------------------------------------------------------------------------- /libs/utfcpp/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/nemtrif/utfcpp 4 | 5 | VERSION: https://github.com/nemtrif/utfcpp/releases/tag/v4.0.5 6 | 7 | #### LICENSE 8 | 9 | Boost Software License - Version 1.0 - August 17th, 2003 10 | 11 | Permission is hereby granted, free of charge, to any person or organization 12 | obtaining a copy of the software and accompanying documentation covered by 13 | this license (the "Software") to use, reproduce, display, distribute, 14 | execute, and transmit the Software, and to prepare derivative works of the 15 | Software, and to permit third-parties to whom the Software is furnished to 16 | do so, all subject to the following: 17 | 18 | The copyright notices in the Software and this entire statement, including 19 | the above license grant, this restriction and the following disclaimer, 20 | must be included in all copies of the Software, in whole or in part, and 21 | all derivative works of the Software, unless such copies or derivative 22 | works are solely in the form of machine-executable object code generated by 23 | a source language processor. 24 | 25 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 26 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 27 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 28 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 29 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 30 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 31 | DEALINGS IN THE SOFTWARE. 32 | -------------------------------------------------------------------------------- /libs/utfcpp/utf8.h: -------------------------------------------------------------------------------- 1 | // Copyright 2006 Nemanja Trifunovic 2 | 3 | /* 4 | Permission is hereby granted, free of charge, to any person or organization 5 | obtaining a copy of the software and accompanying documentation covered by 6 | this license (the "Software") to use, reproduce, display, distribute, 7 | execute, and transmit the Software, and to prepare derivative works of the 8 | Software, and to permit third-parties to whom the Software is furnished to 9 | do so, all subject to the following: 10 | 11 | The copyright notices in the Software and this entire statement, including 12 | the above license grant, this restriction and the following disclaimer, 13 | must be included in all copies of the Software, in whole or in part, and 14 | all derivative works of the Software, unless such copies or derivative 15 | works are solely in the form of machine-executable object code generated by 16 | a source language processor. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 21 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 22 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 23 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24 | DEALINGS IN THE SOFTWARE. 25 | */ 26 | 27 | 28 | #ifndef UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 29 | #define UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 30 | 31 | /* 32 | To control the C++ language version used by the library, you can define UTF_CPP_CPLUSPLUS macro 33 | and set it to one of the values used by the __cplusplus predefined macro. 34 | 35 | For instance, 36 | #define UTF_CPP_CPLUSPLUS 199711L 37 | will cause the UTF-8 CPP library to use only types and language features available in the C++ 98 standard. 38 | Some library features will be disabled. 39 | 40 | If you leave UTF_CPP_CPLUSPLUS undefined, it will be internally assigned to __cplusplus. 41 | */ 42 | 43 | #include "utf8/checked.h" 44 | #include "utf8/unchecked.h" 45 | 46 | #endif // header guard 47 | -------------------------------------------------------------------------------- /libs/utfcpp/utf8/cpp11.h: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Nemanja Trifunovic 2 | 3 | /* 4 | Permission is hereby granted, free of charge, to any person or organization 5 | obtaining a copy of the software and accompanying documentation covered by 6 | this license (the "Software") to use, reproduce, display, distribute, 7 | execute, and transmit the Software, and to prepare derivative works of the 8 | Software, and to permit third-parties to whom the Software is furnished to 9 | do so, all subject to the following: 10 | 11 | The copyright notices in the Software and this entire statement, including 12 | the above license grant, this restriction and the following disclaimer, 13 | must be included in all copies of the Software, in whole or in part, and 14 | all derivative works of the Software, unless such copies or derivative 15 | works are solely in the form of machine-executable object code generated by 16 | a source language processor. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 21 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 22 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 23 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24 | DEALINGS IN THE SOFTWARE. 25 | */ 26 | 27 | 28 | #ifndef UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 29 | #define UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 30 | 31 | #include "checked.h" 32 | 33 | namespace utf8 34 | { 35 | inline void append16(utfchar32_t cp, std::u16string& s) 36 | { 37 | append16(cp, std::back_inserter(s)); 38 | } 39 | 40 | inline std::string utf16to8(const std::u16string& s) 41 | { 42 | std::string result; 43 | utf16to8(s.begin(), s.end(), std::back_inserter(result)); 44 | return result; 45 | } 46 | 47 | inline std::u16string utf8to16(const std::string& s) 48 | { 49 | std::u16string result; 50 | utf8to16(s.begin(), s.end(), std::back_inserter(result)); 51 | return result; 52 | } 53 | 54 | inline std::string utf32to8(const std::u32string& s) 55 | { 56 | std::string result; 57 | utf32to8(s.begin(), s.end(), std::back_inserter(result)); 58 | return result; 59 | } 60 | 61 | inline std::u32string utf8to32(const std::string& s) 62 | { 63 | std::u32string result; 64 | utf8to32(s.begin(), s.end(), std::back_inserter(result)); 65 | return result; 66 | } 67 | } // namespace utf8 68 | 69 | #endif // header guard 70 | 71 | -------------------------------------------------------------------------------- /overlay_experimental/overlay/steam_overlay_stats.h: -------------------------------------------------------------------------------- 1 | #ifndef _STEAM_OVERLAY_STATS_H_ 2 | #define _STEAM_OVERLAY_STATS_H_ 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "dll/settings.h" 9 | #include "InGameOverlay/ImGui/imgui.h" 10 | 11 | 12 | class Steam_Overlay_Stats { 13 | private: 14 | class Settings* settings{}; 15 | 16 | unsigned last_frametime_idx{}; 17 | std::chrono::high_resolution_clock::time_point last_frame_timepoint = 18 | std::chrono::high_resolution_clock::now(); 19 | unsigned running_frametime_ms = 0; // used for the ongoing calculation 20 | float active_frametime_ms = 0; // the final calculated frametime after averaging 21 | unsigned active_fps = 0; // the final calculated FPS after averaging 22 | 23 | 24 | std::chrono::high_resolution_clock::time_point initial_time = 25 | std::chrono::high_resolution_clock::now(); 26 | std::chrono::high_resolution_clock::time_point last_playtime = 27 | std::chrono::high_resolution_clock::now(); 28 | unsigned active_playtime_hr = 0; 29 | unsigned active_playtime_min = 0; 30 | unsigned active_playtime_sec = 0; 31 | 32 | void update_frametime(const std::chrono::high_resolution_clock::time_point &now); 33 | void update_playtime(const std::chrono::high_resolution_clock::time_point &now); 34 | 35 | public: 36 | ImFont *font = nullptr; 37 | bool show_fps = false; 38 | bool show_frametime = false; 39 | bool show_playtime = false; 40 | 41 | Steam_Overlay_Stats(class Settings* settings); 42 | 43 | bool show_any_stats() const; 44 | void render_stats(int current_language); 45 | }; 46 | 47 | 48 | #endif // _STEAM_OVERLAY_STATS_H_ 49 | -------------------------------------------------------------------------------- /package_linux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | 4 | build_base_dir="build/linux" 5 | out_dir="build/package/linux" 6 | script_dir=$( cd -- "$( dirname -- "${0}" )" &> /dev/null && pwd ) 7 | 8 | [[ "$1" = '' ]] && { 9 | echo "[X] missing build folder"; 10 | exit 1; 11 | } 12 | 13 | target_src_dir="$script_dir/$build_base_dir/$1" 14 | [[ -d "$target_src_dir" ]] || { 15 | echo "[X] build folder wasn't found"; 16 | exit 1; 17 | } 18 | 19 | # :::::::::::::::::::::::::::::::::::::::::: 20 | echo "// copying readmes + example files" 21 | cp -f -r "post_build/steam_settings.EXAMPLE/" "$target_src_dir/" 22 | cp -f "post_build/README.release.md" "$target_src_dir/" 23 | cp -f "CHANGELOG.md" "$target_src_dir/" 24 | cp -f "CREDITS.md" "$target_src_dir/" 25 | if [[ "$2" = "1" ]]; then 26 | cp -f "post_build/README.debug.md" "$target_src_dir/" 27 | fi 28 | if [[ -d "$target_src_dir/experimental" ]]; then 29 | cp -f "post_build/README.experimental_linux.md" "$target_src_dir/experimental/" 30 | fi 31 | if [[ -d "$target_src_dir/tools" ]]; then 32 | mkdir -p "$target_src_dir/tools/steamclient_loader/" 33 | cp -f -r tools/steamclient_loader/linux/* "$target_src_dir/tools/steamclient_loader/" 34 | fi 35 | if [[ -d "$target_src_dir/tools/generate_interfaces" ]]; then 36 | cp -f "post_build/README.generate_interfaces.md" "$target_src_dir/tools/generate_interfaces/" 37 | fi 38 | if [[ -d "$target_src_dir/tools/lobby_connect" ]]; then 39 | cp -f "post_build/README.lobby_connect.md" "$target_src_dir/tools/lobby_connect/" 40 | fi 41 | # :::::::::::::::::::::::::::::::::::::::::: 42 | 43 | archive_dir="$script_dir/$out_dir/$1" 44 | [[ -d "$archive_dir" ]] && rm -r -f "$archive_dir" 45 | archive_file="$(dirname "$archive_dir")/emu-linux-$(basename "$archive_dir").tar.bz2" 46 | 47 | mkdir -p "$(dirname "$archive_dir")" 48 | tar -C "$(dirname "$target_src_dir")" -c -j -vf "$archive_file" "$(basename "$target_src_dir")" 49 | -------------------------------------------------------------------------------- /package_win_debug.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | call "package_win.bat" vs2022/debug 1 4 | -------------------------------------------------------------------------------- /package_win_release.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | call "package_win.bat" vs2022/release 4 | -------------------------------------------------------------------------------- /post_build/README.debug.md: -------------------------------------------------------------------------------- 1 | ## What is this ? 2 | This is the debug build of the emu, while the game/app is running 3 | the emu will write various events to a log file called `STEAM_LOG.txt`. 4 | 5 | ## Where is this log file ? 6 | Generally it should be beside the .dll/.so iteself, unless the environment variable `GseAppPath` 7 | is defined, in which case this will be the path of this log file 8 | 9 | ## Why ? 10 | This is intended for debugging purposes, use it to check the behavior of the emu while running. 11 | -------------------------------------------------------------------------------- /post_build/README.experimental.md: -------------------------------------------------------------------------------- 1 | ## What is this ? 2 | This build of the emulator: 3 | * Blocks all outgoing connections from the game to non **LAN** IPs 4 | * Lets you use CPY cracks that use the `steam_api` dll to patch the exe in memory when the `SteamAPI_Init()` method is called 5 | * Can load extra dlls in memory via `LoadLibraryW()` 6 | 7 | * Mr.Goldberg's note: 8 | > In this folder is an experimental build of the emulator with code that hooks a few windows socket functions. It should block all connections from the game to non LAN ips. This means the game should work without any problems for LAN play (even with VPN LAN as long as you use standard LAN ips 10.x.x.x, 192.168.x.x, etc...) 9 | 10 | > It likely doesn't work for some games but it should work for most of them. 11 | 12 | > Since this blocks all non LAN connections doing things like hosting a cracked server for people on the internet will not work or connecting to a cracked server that's hosted on an internet ip will not work. 13 | 14 | ## Why ? 15 | Mr.Goldberg's note: 16 | > Lots of games seem to connect to analytics services and other crap. 17 | > Blocking the game from communicating with online ips without affecting the LAN functionality of this emu is a pain if you try to use a firewall. 18 | 19 | ## Which IPs are blocked ? 20 | **All** IPs *except* these ranges: 21 | * 10.0.0.0 - 10.255.255.255 22 | * 127.0.0.0 - 127.255.255.255 23 | * 169.254.0.0 - 169.254.255.255 24 | * 172.16.0.0 - 172.31.255.255 25 | * 192.168.0.0 - 192.168.255.255 26 | * 224.0.0.0 - 255.255.255.255 27 | 28 | ## To disable the LAN only connections feature 29 | Modify your `steam_settings\configs.main.ini` and set `disable_lan_only=1`. 30 | 31 | ## How to use a CPY style crack 32 | 1. Rename `steam_api.dll` crack to `cracksteam_api.dll`, or `steam_api64.dll` to `cracksteam_api64.dll` 33 | 2. Replace the `steamclient(64).dll` crack with the one in this folder. 34 | 3. Then use the emu like you normally would with all the configurations 35 | 36 | ## How to load extra dlls in memory 37 | Put the dll file inside the folder `steam_settings\load_dlls\` and it will be loaded automatically using the `LoadLibraryW()` function 38 | 39 | -------------------------------------------------------------------------------- /post_build/README.experimental_linux.md: -------------------------------------------------------------------------------- 1 | ## What is this ? 2 | This build of the emu has the overlay enabled, it works on very few games 3 | -------------------------------------------------------------------------------- /post_build/README.generate_interfaces.md: -------------------------------------------------------------------------------- 1 | ## What is this ? 2 | This tool will generate the file `steam_interfaces.txt` which is **always** recommended to be created. 3 | 4 | ## How to use it ? 5 | 1. * On Windows 6 | * Drag `steam_api.dll` or `steam_api64.dll` on this exe 7 | * Or run the command line (example): 8 | ```batch 9 | generate_interfaces_file.exe steam_api64.dll 10 | ``` 11 | * On Linux: 12 | * Run the command line (example): 13 | ```bash 14 | chmod 777 generate_interfaces_file_x64 # make sure we can execute the binary 15 | generate_interfaces_file_x64 libsteam_api.so 16 | ``` 17 | 2. Copy the generated `steam_interfaces.txt` file inside the folder `steam_settings` 18 | --- 19 | 20 | In both cases, make sure the .dll/.so is **the original** one 21 | --- 22 | -------------------------------------------------------------------------------- /post_build/README.lobby_connect.md: -------------------------------------------------------------------------------- 1 | ## What is this ? 2 | This tool discovers people playing on the network using this emu and lets you launch your game with parameters that will connect you to their games. 3 | 4 | ## Why ? 5 | Mr.Goldberg's note: 6 | > This is necessary for some games (like stonehearth). It will also let you join games with lobbies that are not public. 7 | 8 | > Steam has something called rich presence (the connect key) that lets games tell your friends what command line parameters to run your game with to join their game. 9 | 10 | > Most steam games also let you join lobbies in game without having started the game by starting the game with the command line `+connect_lobby `. 11 | 12 | ## How to use it ? 13 | Just run this tool and follow the instructions then pick the exe of the game. 14 | Make sure that you have installed the emu on the game first and that it works. 15 | 16 | The executable used to launch the game will be saved/remembered in a `.txt` file for later, remove this `.txt` file if you want to change the exe. 17 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/account_avatar.EXAMPLE.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/account_avatar.EXAMPLE.jpg -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/auto_accept_invite.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 76561197960287930 2 | 76561197960271227 3 | 76561197960276863 4 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/branches.EXAMPLE.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "public", 4 | "description": "", 5 | "protected": false, 6 | "build_id": 14864281, 7 | "time_updated": 1719527543 8 | }, 9 | { 10 | "name": "1.21.3.1", 11 | "description": "", 12 | "protected": true, 13 | "build_id": 611429, 14 | "time_updated": 1719901851 15 | }, 16 | { 17 | "name": "1.39.9.9", 18 | "description": "1.39.9.9", 19 | "protected": false, 20 | "build_id": 13791849, 21 | "time_updated": 1710893615 22 | }, 23 | { 24 | "name": "1.37.7.4", 25 | "description": "", 26 | "protected": false, 27 | "build_id": 0, 28 | "time_updated": 1719901851 29 | }, 30 | { 31 | "name": "csgo_legacy", 32 | "description": "Legacy Version of CS:GO", 33 | "protected": false, 34 | "build_id": 12426195, 35 | "time_updated": 1697161396 36 | } 37 | ] -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/configs.app.EXAMPLE.ini: -------------------------------------------------------------------------------- 1 | # ############################################################################## # 2 | # you do not have to specify everything, pick and choose the options you need only 3 | # ############################################################################## # 4 | 5 | [app::general] 6 | # by default the emu will report a `non-beta` branch when the game calls `Steam_Apps::GetCurrentBetaName()` 7 | # 1=make the game/app think we're playing on a beta branch 8 | # default=0 9 | is_beta_branch=0 10 | # the name of the current branch, this must also exist in branches.json 11 | # otherwise will be ignored by the emu and the default 'public' branch will be used 12 | # default=public 13 | branch_name=public 14 | 15 | [app::dlcs] 16 | # 1=report all DLCs as unlocked 17 | # 0=report only the DLCs mentioned 18 | # some games check for "hidden" DLCs, hence this should be set to 1 in that case 19 | # but other games detect emus by querying for a fake/bad DLC, hence this should be set to 0 in that case 20 | # default=1 21 | unlock_all=0 22 | # format: ID=name 23 | 1234=DLCNAME 24 | 56789=This is another example DLC name 25 | 26 | [app::paths] 27 | # some rare games might need to be provided one or more paths to appids 28 | # for example the path to where a DLC is installed 29 | # this sets the paths returned by the Steam_Apps::GetAppInstallDir function 30 | 556760=../DLCRoot0 31 | 1234=./folder_where_steam_api_is 32 | 3456=../folder_one_level_above_where_steam_api_is 33 | 5678=../../folder_two_levels_above_where_steam_api_is 34 | # however some other games might expect this function to return empty paths to properly load DLCs 35 | # you can deliberately set the path to be empty to specify this behavior like lines below 36 | 1337= 37 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/configs.user.EXAMPLE.ini: -------------------------------------------------------------------------------- 1 | # ############################################################################## # 2 | # you do not have to specify everything, pick and choose the options you need only 3 | # ############################################################################## # 4 | 5 | [user::general] 6 | # user account name 7 | # default=gse orca 8 | account_name=gse orca 9 | # your account ID in Steam64 format 10 | # if the specified ID is invalid, the emu will ignore it and generate a proper one 11 | # default=randomly generated by the emu only once and saved in the global settings 12 | account_steamid=76561197960287930 13 | # the language reported to the app/game 14 | # this must exist in 'supported_languages.txt', otherwise it will be ignored by the emu 15 | # look for the column 'API language code' here: https://partner.steamgames.com/doc/store/localization/languages 16 | # default=english 17 | language=english 18 | # report a country IP if the game queries it 19 | # ISO 3166-1-alpha-2 format, use this link to get the 'Alpha-2' country code: https://www.iban.com/country-codes 20 | # default=US 21 | ip_country=US 22 | 23 | [user::saves] 24 | # when this is set, it will force the emu to use the specified location instead of the default global location 25 | # path could be absolute, or relative to the location of the .dll/.so 26 | # leading and trailing whitespaces are trimmed 27 | # when this option is used, the global settings folder is completely ignored, allowing a full portable behavior 28 | # default= 29 | local_save_path=./path/relative/to/dll 30 | # name of the base folder used to store save data, leading and trailing whitespaces are trimmed 31 | # only useful if 'local_save_path' isn't used 32 | # default=GSE Saves 33 | saves_folder_name=GSE Saves 34 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/InGameControls.txt: -------------------------------------------------------------------------------- 1 | Move=LJOY=joystick_move 2 | Camera=RJOY=joystick_move 3 | Dash=RTRIGGER=trigger 4 | LockOn=LTRIGGER=trigger 5 | pause_menu=START 6 | LightAttack=X 7 | HeavyAttack=Y 8 | Jump=A 9 | check=B 10 | ActivateSkillAndMagic=RBUMPER 11 | IdeaRelease=LBUMPER 12 | AllMap=BACK 13 | ResetCamera=RSTICK 14 | ChangeCharacterUp=DUP 15 | ChangeCharacterDown=DDOWN 16 | ChangeCharacterRight=DRIGHT 17 | ChangeCharacterLeft=DLEFT 18 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/MenuControls.txt: -------------------------------------------------------------------------------- 1 | MenuDash=RTRIGGER=trigger 2 | MenuLockOn=LTRIGGER=trigger 3 | MenuUp=DUP,DLJOYUP 4 | MenuDown=DDOWN,DLJOYDOWN 5 | MenuRight=DRIGHT,DLJOYRIGHT 6 | MenuLeft=DLEFT,DLJOYLEFT 7 | SELECT=A 8 | Cancel=B 9 | MenuX=X 10 | MenuY=Y 11 | MenuRTrigger=RBUMPER 12 | MenuLTrigger=LBUMPER 13 | Sort=BACK 14 | PauseMenu=START 15 | ScrollUp=DRJOYUP 16 | ScrollDown=DRJOYDOWN 17 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_a.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_b.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_x.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/button_y.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/shoulder_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/shoulder_l.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/shoulder_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/shoulder_r.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_e.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_n.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_s.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_dpad_w.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_l_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_l_click.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_l_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_l_move.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_r_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_r_click.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_r_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/stick_r_move.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_l_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_l_click.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_l_pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_l_pull.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_r_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_r_click.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_r_pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/trigger_r_pull.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_e.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_move.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_n.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_s.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_dpad_w.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_select.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/controller.EXAMPLE/glyphs/xbox_button_start.png -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/custom_broadcasts.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 192.168.3.255 2 | 127.8.9.10 3 | 192.168.66.99 4 | 192.168.7.99 5 | removethis.test.domain.com 6 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/default_items.EXAMPLE.json: -------------------------------------------------------------------------------- 1 | { 2 | "2001": 1, 3 | "2002": 1 4 | } -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/depots.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 228986 2 | 228990 3 | 814381 4 | 814382 5 | 814383 6 | 1039230 7 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/fonts.EXAMPLE/README.md: -------------------------------------------------------------------------------- 1 | Place your overlay fonts here, then modify `overlay_appearance` and point at the desired one. -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/fonts.EXAMPLE/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/fonts.EXAMPLE/Roboto-Medium.ttf -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/http.EXAMPLE/accounts.starbreeze.com/iam/oauth/token: -------------------------------------------------------------------------------- 1 | {"access_token":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","bans":null,"display_name":"","expires_in":3600,"is_comply":true,"jflgs":0,"namespace":"PD2","namespace_roles":null,"permissions":[],"platform_id":"","platform_user_id":"","roles":null,"scope":"account commerce social publishing analytics","token_type":"Bearer","user_id":"","xuid":""} -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/installed_app_ids.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 1. Rename this to: installed_app_ids.txt 2 | 2. Add all apps IDs (each on a separate line) that should be reported as installed, they could be NOT owned, that is allowed 3 | 3. Or, remove the file installed_app_ids.txt if it exists to: 4 | * Allow app ID 0, this seems to be a special denotation to "non-steam apps" 5 | * Allow app ID of the current game (you must create the file steam_appid.txt) 6 | * Allow anything else 7 | 8 | In all cases app ID 4294967295 is disallowed 9 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/leaderboards.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | LEADERBOARD1=0=0 2 | LEADERBOARDX=1=1 3 | LEADERBOARDTEST=0=0 4 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mod_images.EXAMPLE/12345/README.md: -------------------------------------------------------------------------------- 1 | Put here the file whose name is specified by the JSON key `preview_filename` inside `mods.json` -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mod_images.EXAMPLE/12345/my_preview_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/mod_images.EXAMPLE/12345/my_preview_image.jpg -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mods.EXAMPLE.json: -------------------------------------------------------------------------------- 1 | { 2 | "9422": { 3 | "title": "Some Workshop Item", 4 | "description": "This is the prefered way of specifying mod details, primary file must exist in steam_settings/mods/9422 (along with any other mod files), and preview file must exist in steam_settings/mod_images/9422", 5 | "primary_filename": "metadata.json", 6 | "preview_filename": "thumbnail.png" 7 | }, 8 | 9 | "111111111": { 10 | "title": "Example Workshop Item", 11 | "description": "Example Workshop Item with all Details", 12 | "steam_id_owner": 11111111111111111, 13 | "time_created": 1554997000, 14 | "time_updated": 1554997000, 15 | "time_added": 1554997000, 16 | "tags": "Maps,exampleTag,exampleTag2", 17 | "primary_filename": "test.sav", 18 | "primary_filesize": 1000000, 19 | "preview_filename": "test.png", 20 | "preview_filesize": 1000000, 21 | "total_files_sizes": 9977664411, 22 | "min_game_branch": "1.4.2", 23 | "max_game_branch": "1.5.0", 24 | "workshop_item_url": "https://steamcommunity.com/sharedfiles/filedetails/?id=111111111", 25 | "upvotes": 10, 26 | "downvotes": 1, 27 | "num_children": 0, 28 | "path": "C:\\games\\my_game\\steam_settings\\mods_data\\mod_111111111_data_folder", 29 | "preview_url": "file:///C:/games/my_game/steam_settings/mod_images/my_preview.jpg", 30 | "score": 0.7 31 | }, 32 | 33 | "222222222": { 34 | "title": "Example Workshop Item", 35 | "description": "Example Workshop Item with some Details", 36 | "preview_url": "https://commons.wikimedia.org/wiki/File:Tree_in_Mississippi.jpg", 37 | "score": 1.0 38 | }, 39 | 40 | "333333333": { 41 | "title": "Example Workshop Item" 42 | }, 43 | 44 | "444444444": { 45 | "title": "Example Workshop Item", 46 | "description": "Example Workshop Item" 47 | }, 48 | 49 | "555555555": { 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/Readme.txt: -------------------------------------------------------------------------------- 1 | This is an example mod. Delete this 12345 mod folder and put real mods in the mods directory. -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/mod_file1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/mod_file1 -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/mod_file2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/mod_file2 -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/random_mod_file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/mods.EXAMPLE/12345/random_mod_file -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/sounds.EXAMPLE/LICENSE.md: -------------------------------------------------------------------------------- 1 | Both files `overlay_achievement_notification.wav` and `overlay_friend_notification.wav` are called `"A Tone"` 2 | * Source: https://soundbible.com/1815-A-Tone.html 3 | * License: Public Domain 4 | https://creativecommons.org/public-domain/ 5 | https://wiki.creativecommons.org/wiki/public_domain -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/sounds.EXAMPLE/README.md: -------------------------------------------------------------------------------- 1 | **This is currently available for Windows only** 2 | 3 | Place your overlay audio files here. 4 | * `overlay_achievement_notification.wav`: will be played when an achievement is unlocked 5 | * `overlay_friend_notification.wav`: will be played when a friend sends an invitation -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/sounds.EXAMPLE/overlay_achievement_notification.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/sounds.EXAMPLE/overlay_achievement_notification.wav -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/sounds.EXAMPLE/overlay_friend_notification.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/steam_settings.EXAMPLE/sounds.EXAMPLE/overlay_friend_notification.wav -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/stats.EXAMPLE.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "default": "0", 4 | "global": "0", 5 | "name": "lifetime_experience", 6 | "type": "int" 7 | }, 8 | { 9 | "default": "0", 10 | "global": "0", 11 | "name": "experience", 12 | "type": "int" 13 | }, 14 | { 15 | "default": "3.5", 16 | "global": "0", 17 | "name": "stat_example_name1", 18 | "type": "float" 19 | }, 20 | { 21 | "default": "1337", 22 | "global": "250000", 23 | "name": "stat_example_name2", 24 | "type": "int" 25 | }, 26 | { 27 | "default": "5", 28 | "global": "5", 29 | "name": "stat_example_name3", 30 | "type": "int" 31 | }, 32 | { 33 | "default": "0", 34 | "global": "0", 35 | "name": "stat_example_name4", 36 | "type": "float" 37 | }, 38 | { 39 | "default": "0", 40 | "global": "0", 41 | "name": "stat_example_name5", 42 | "type": "avgrate" 43 | } 44 | ] 45 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/steam_appid.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 1337 -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/steam_interfaces.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | SteamClient015 2 | SteamGameServer012 3 | SteamGameServerStats001 4 | SteamUser017 5 | SteamFriends014 6 | SteamUtils007 7 | SteamMatchMaking009 8 | SteamMatchMakingServers002 9 | STEAMUSERSTATS_INTERFACE_VERSION011 10 | STEAMAPPS_INTERFACE_VERSION006 11 | SteamNetworking005 12 | STEAMREMOTESTORAGE_INTERFACE_VERSION012 13 | STEAMSCREENSHOTS_INTERFACE_VERSION002 14 | STEAMHTTP_INTERFACE_VERSION002 15 | STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 16 | STEAMCONTROLLER_INTERFACE_VERSION 17 | STEAMUGC_INTERFACE_VERSION002 18 | STEAMAPPLIST_INTERFACE_VERSION001 19 | STEAMMUSIC_INTERFACE_VERSION001 20 | STEAMMUSICREMOTE_INTERFACE_VERSION001 21 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/subscribed_groups.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 103582791433980119 2 | 103582791438562929 3 | 103582791441335905 4 | 103582791460014708 5 | -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/subscribed_groups_clans.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 000000000000000000 Group Name Clan Tag -------------------------------------------------------------------------------- /post_build/steam_settings.EXAMPLE/supported_languages.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | english 2 | german 3 | french 4 | spanish 5 | schinese 6 | russian 7 | japanese 8 | latam 9 | -------------------------------------------------------------------------------- /post_build/win/ColdClientLoader.EXAMPLE/README.md: -------------------------------------------------------------------------------- 1 | Don't forget to modify the file `ColdClientLoader.ini` to point at the folder `extra_dlls`. 2 | `load_order.txt` will force the order in which the dlls are injected into the app 3 | -------------------------------------------------------------------------------- /post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/1_my_first_dll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/1_my_first_dll.dll -------------------------------------------------------------------------------- /post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/2_my_second_dll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/2_my_second_dll.dll -------------------------------------------------------------------------------- /post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/dlls_subdir/3_my_third_dll.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/dlls_subdir/3_my_third_dll.dll -------------------------------------------------------------------------------- /post_build/win/ColdClientLoader.EXAMPLE/extra_dlls.EXAMPLE/load_order.txt: -------------------------------------------------------------------------------- 1 | dlls_subdir\3_my_third_dll.dll 2 | 2_my_second_dll.dll 3 | 4 | -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | This directory contains additional resources used during build. 2 | 3 | * The folder [win](./win/) contains the resources added to the .dll/.exe binaries, 4 | these include version info and an immitation of any extra resources found in the original .dll/.exe. 5 | 6 | These resources are built using Microsoft's resourec compiler `rc.exe` during the build process, 7 | and the output files are stored in `build\tmp\win\rsrc` as `*.res`. 8 | 9 | These resources are later passed to the compiler `cl.exe` as any normal `.cpp` or `.c` file: 10 | ```bash 11 | cl.exe myfile.cpp myres.res -o myout.exe 12 | ``` 13 | * [api](./win/api/): contains an immitation of the resources found in `steam_api(64).dll` 14 | * [client](./win/client/): contains an immitation of the resources found in `steamclient(64).dll` 15 | * [launcher](./win/launcher/): contains an immitation of the resources found in `steam.exe` 16 | * [game_overlay_renderer](./win/game_overlay_renderer/): contains an immitation of the resources found in `GameOverlayRenderer(64).dll` 17 | * [file_dos_stub](./win/file_dos_stub/): contains an immitation of how the DOS stub is manipulated after build 18 | 19 | -------------------------------------------------------------------------------- /resources/win/api/64/resources.rc: -------------------------------------------------------------------------------- 1 | // ===================================================================================== 0 2 | LANGUAGE 0, 0 // language = Neutral, sublanguage = Neutral 3 | 4 | SOURCE_CONTROL_ID SCID "../SOURCE_CONTROL_ID.txt" 5 | 6 | 1 VERSIONINFO 7 | FILEVERSION 8,33,9,23 8 | PRODUCTVERSION 1,0,0,1 9 | FILEFLAGSMASK 0x17 10 | FILEFLAGS 0x0 11 | FILEOS 0x00000004L // VOS__WINDOWS32 12 | FILETYPE 0x2L // VFT_DLL 13 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 14 | { 15 | BLOCK "StringFileInfo" 16 | { 17 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 18 | { 19 | VALUE "LegalCopyright", "Copyright (C) 2007" 20 | VALUE "InternalName", "GSE Client API (win64)" 21 | VALUE "FileVersion", "08.33.09.23" 22 | VALUE "CompanyName", "GSE" 23 | VALUE "ProductVersion", "01.00.00.01" 24 | VALUE "FileDescription", "GSE Client API" 25 | VALUE "Source Control ID", "8330923" 26 | VALUE "OriginalFilename", "steam_api.dll" 27 | VALUE "ProductName", "GSE Client API" 28 | } 29 | } 30 | 31 | BLOCK "VarFileInfo" 32 | { 33 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 34 | } 35 | } 36 | 37 | 38 | 39 | // ===================================================================================== 1033 40 | LANGUAGE 0x09, 0x01 // language = English, sublanguage = US 41 | 42 | 1 VERSIONINFO 43 | FILEVERSION 1,0,0,1 44 | PRODUCTVERSION 1,0,0,1 45 | FILEFLAGSMASK 0x17 46 | FILEFLAGS 0x0 47 | FILEOS 0x00000004L // VOS__WINDOWS32 48 | FILETYPE 0x2L // VFT_DLL 49 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 50 | { 51 | BLOCK "StringFileInfo" 52 | { 53 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 54 | { 55 | VALUE "CompanyName", "GSE" 56 | VALUE "FileDescription", "GSE Client API" 57 | VALUE "FileVersion", "1, 0, 0, 1" 58 | VALUE "InternalName", "GSE Client API" 59 | VALUE "LegalCopyright", "Copyright (C) 2007" 60 | VALUE "OriginalFilename", "steam_api.dll" 61 | VALUE "ProductName", "GSE Client API" 62 | VALUE "ProductVersion", "1, 0, 0, 1" 63 | } 64 | } 65 | 66 | BLOCK "VarFileInfo" 67 | { 68 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /resources/win/api/SOURCE_CONTROL_ID.txt: -------------------------------------------------------------------------------- 1 | 8330923 -------------------------------------------------------------------------------- /resources/win/client/32/resources.rc: -------------------------------------------------------------------------------- 1 | // ===================================================================================== 0 2 | LANGUAGE 0, 0 3 | 4 | SOURCE_CONTROL_ID SCID "../SOURCE_CONTROL_ID.txt" 5 | 6 | 1 VERSIONINFO 7 | FILEVERSION 8,56,38,63 8 | PRODUCTVERSION 3,0,0,1 9 | FILEFLAGSMASK 0x17 10 | FILEFLAGS 0x0 11 | FILEOS 0x00000004L // VOS__WINDOWS32 12 | FILETYPE 0x2L // VFT_DLL 13 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 14 | { 15 | BLOCK "StringFileInfo" 16 | { 17 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 18 | { 19 | VALUE "LegalCopyright", "Copyright (C) 2005 GSE" 20 | VALUE "InternalName", "Steamclient.dll (win32)" 21 | VALUE "FileVersion", "08.56.38.63" 22 | VALUE "CompanyName", "GSE" 23 | VALUE "ProductVersion", "03.00.00.01" 24 | VALUE "FileDescription", "Steamclient.dll" 25 | VALUE "Source Control ID", "8563863" 26 | VALUE "OriginalFilename", "Steamclient.dll" 27 | VALUE "ProductName", "GSE" 28 | } 29 | } 30 | 31 | BLOCK "VarFileInfo" 32 | { 33 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 34 | } 35 | } 36 | 37 | 38 | 39 | // ===================================================================================== 1033 40 | LANGUAGE 0x09, 0x01 41 | 42 | 1 VERSIONINFO 43 | FILEVERSION 3,0,0,1 44 | PRODUCTVERSION 3,0,0,1 45 | FILEFLAGSMASK 0x17 46 | FILEFLAGS 0x0 47 | FILEOS 0x00000004L // VOS__WINDOWS32 48 | FILETYPE 0x2L // VFT_DLL 49 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 50 | { 51 | BLOCK "StringFileInfo" 52 | { 53 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 54 | { 55 | VALUE "CompanyName", "GSE" 56 | VALUE "FileDescription", "Steamclient.dll" 57 | VALUE "FileVersion", "3, 0, 0, 1" 58 | VALUE "InternalName", "Steamclient.dll" 59 | VALUE "LegalCopyright", "Copyright (C) 2005 GSE" 60 | VALUE "OriginalFilename", "Steamclient.dll" 61 | VALUE "ProductName", "GSE" 62 | VALUE "ProductVersion", "3, 0, 0, 1" 63 | } 64 | } 65 | 66 | BLOCK "VarFileInfo" 67 | { 68 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 69 | } 70 | } 71 | 72 | 73 | 74 | // ===================================================================================== 4147 75 | LANGUAGE 0x33, 0x04 76 | 77 | 1 WEVT_TEMPLATE "../WEVT_TEMPLATE1_1.bin" 78 | -------------------------------------------------------------------------------- /resources/win/client/SOURCE_CONTROL_ID.txt: -------------------------------------------------------------------------------- 1 | 8563863 -------------------------------------------------------------------------------- /resources/win/file_dos_stub/file_dos_stub_x32.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/resources/win/file_dos_stub/file_dos_stub_x32.exe -------------------------------------------------------------------------------- /resources/win/file_dos_stub/file_dos_stub_x64.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/resources/win/file_dos_stub/file_dos_stub_x64.exe -------------------------------------------------------------------------------- /resources/win/game_overlay_renderer/SOURCE_CONTROL_ID.txt: -------------------------------------------------------------------------------- 1 | 8748095 -------------------------------------------------------------------------------- /resources/win/launcher/32/resources.rc: -------------------------------------------------------------------------------- 1 | // ===================================================================================== 0 2 | LANGUAGE 0, 0 // language = Neutral, sublanguage = Neutral 3 | 4 | SOURCE_CONTROL_ID SCID "../SOURCE_CONTROL_ID.txt" 5 | 6 | 1 VERSIONINFO 7 | FILEVERSION 8,56,38,63 8 | PRODUCTVERSION 1,0,0,2 9 | FILEFLAGSMASK 0x17 10 | FILEFLAGS 0x0 11 | FILEOS 0x00000004L // VOS__WINDOWS32 12 | FILETYPE 0x00000001L // VFT_APP 13 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 14 | { 15 | BLOCK "StringFileInfo" 16 | { 17 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 18 | { 19 | VALUE "LegalCopyright", "Copyright (C) 2021 GSE" 20 | VALUE "InternalName", "GSE (win32)" 21 | VALUE "FileVersion", "08.56.38.63" 22 | VALUE "CompanyName", "GSE" 23 | VALUE "ProductVersion", "01.00.00.02" 24 | VALUE "FileDescription", "GSE" 25 | VALUE "Source Control ID", "8563863" 26 | VALUE "OriginalFilename", "steam.exe" 27 | VALUE "ProductName", "GSE" 28 | } 29 | } 30 | 31 | BLOCK "VarFileInfo" 32 | { 33 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 34 | } 35 | } 36 | 37 | 38 | 39 | // ===================================================================================== 1033 40 | LANGUAGE 0x09, 0x01 // language = English, sublanguage = US 41 | 42 | 1 VERSIONINFO 43 | FILEVERSION 1,0,0,2 44 | PRODUCTVERSION 1,0,0,2 45 | FILEFLAGSMASK 0x17 46 | FILEFLAGS 0x0 47 | FILEOS 0x00000004L // VOS__WINDOWS32 48 | FILETYPE 0x00000001L // VFT_APP 49 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 50 | { 51 | BLOCK "StringFileInfo" 52 | { 53 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 54 | { 55 | VALUE "CompanyName", "GSE" 56 | VALUE "FileDescription", "GSE" 57 | VALUE "FileVersion", "1, 0, 0, 2" 58 | VALUE "InternalName", "GSE" 59 | VALUE "LegalCopyright", "Copyright (C) 2021 GSE" 60 | VALUE "OriginalFilename", "steam.exe" 61 | VALUE "ProductName", "GSE" 62 | VALUE "ProductVersion", "1, 0, 0, 2" 63 | } 64 | } 65 | 66 | BLOCK "VarFileInfo" 67 | { 68 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /resources/win/launcher/64/resources.rc: -------------------------------------------------------------------------------- 1 | // ===================================================================================== 0 2 | LANGUAGE 0, 0 // language = Neutral, sublanguage = Neutral 3 | 4 | SOURCE_CONTROL_ID SCID "../SOURCE_CONTROL_ID.txt" 5 | 6 | 1 VERSIONINFO 7 | FILEVERSION 8,56,38,63 8 | PRODUCTVERSION 1,0,0,2 9 | FILEFLAGSMASK 0x17 10 | FILEFLAGS 0x0 11 | FILEOS 0x00000004L // VOS__WINDOWS32 12 | FILETYPE 0x00000001L // VFT_APP 13 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 14 | { 15 | BLOCK "StringFileInfo" 16 | { 17 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 18 | { 19 | VALUE "LegalCopyright", "Copyright (C) 2021 GSE" 20 | VALUE "InternalName", "GSE (win64)" 21 | VALUE "FileVersion", "08.56.38.63" 22 | VALUE "CompanyName", "GSE" 23 | VALUE "ProductVersion", "01.00.00.02" 24 | VALUE "FileDescription", "GSE" 25 | VALUE "Source Control ID", "8563863" 26 | VALUE "OriginalFilename", "steam.exe" 27 | VALUE "ProductName", "GSE" 28 | } 29 | } 30 | 31 | BLOCK "VarFileInfo" 32 | { 33 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 34 | } 35 | } 36 | 37 | 38 | 39 | // ===================================================================================== 1033 40 | LANGUAGE 0x09, 0x01 // language = English, sublanguage = US 41 | 42 | 1 VERSIONINFO 43 | FILEVERSION 1,0,0,2 44 | PRODUCTVERSION 1,0,0,2 45 | FILEFLAGSMASK 0x17 46 | FILEFLAGS 0x0 47 | FILEOS 0x00000004L // VOS__WINDOWS32 48 | FILETYPE 0x00000001L // VFT_APP 49 | FILESUBTYPE 0x0L // VFT2_UNKNOWN 50 | { 51 | BLOCK "StringFileInfo" 52 | { 53 | BLOCK "040904b0" // language code = U.S. English, character-set identifier = Unicode 54 | { 55 | VALUE "CompanyName", "GSE" 56 | VALUE "FileDescription", "GSE" 57 | VALUE "FileVersion", "1, 0, 0, 2" 58 | VALUE "InternalName", "GSE" 59 | VALUE "LegalCopyright", "Copyright (C) 2021 GSE" 60 | VALUE "OriginalFilename", "steam.exe" 61 | VALUE "ProductName", "GSE" 62 | VALUE "ProductVersion", "1, 0, 0, 2" 63 | } 64 | } 65 | 66 | BLOCK "VarFileInfo" 67 | { 68 | VALUE "Translation", 0x0409, 0x04B0 // English language (0x409) in the Windows ANSI codepage (1252) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /resources/win/launcher/SOURCE_CONTROL_ID.txt: -------------------------------------------------------------------------------- 1 | 8563863 -------------------------------------------------------------------------------- /sdk/source.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://partner.steamgames.com/doc/sdk 4 | -------------------------------------------------------------------------------- /sdk/steam/isteamappdisableupdate.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMAPPDISABLEUPDATE_H 3 | #define ISTEAMAPPDISABLEUPDATE_H 4 | 5 | // this interface is not found in public SDK archives, it is based on reversing the returned vftable from steamclient64.dll 6 | // requested by appid 730 7 | 8 | class ISteamAppDisableUpdate 9 | { 10 | public: 11 | 12 | // probably means how many seconds to keep the updates disabled 13 | virtual void SetAppUpdateDisabledSecondsRemaining(int32 nSeconds) = 0; 14 | 15 | }; 16 | 17 | #define STEAMAPPDISABLEUPDATE_INTERFACE_VERSION "SteamAppDisableUpdate001" 18 | 19 | #endif // ISTEAMAPPDISABLEUPDATE_H 20 | -------------------------------------------------------------------------------- /sdk/steam/isteamapps001.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMAPPS001_H 3 | #define ISTEAMAPPS001_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamApps001 9 | { 10 | public: 11 | // returns 0 if the key does not exist 12 | // this may be true on first call, since the app data may not be cached locally yet 13 | // If you expect it to exists wait for the AppDataChanged_t after the first failure and ask again 14 | virtual int GetAppData( AppId_t nAppID, const char *pchKey, char *pchValue, int cchValueMax ) = 0; 15 | }; 16 | 17 | //----------------------------------------------------------------------------- 18 | // Purpose: called when new information about an app has arrived 19 | //----------------------------------------------------------------------------- 20 | struct AppDataChanged_t 21 | { 22 | enum { k_iCallback = k_iSteamAppsCallbacks + 1 }; 23 | uint32 m_nAppID; // appid that changed 24 | bool m_bBySteamUI; // change came from SteamUI 25 | bool m_bCDDBUpdate; // the cddb entry for this app changed 26 | }; 27 | 28 | #endif //ISTEAMAPPS001_H 29 | -------------------------------------------------------------------------------- /sdk/steam/isteamapps002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMAPPS002_H 3 | #define ISTEAMAPPS002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamApps002 9 | { 10 | public: 11 | virtual bool BIsSubscribed() = 0; 12 | virtual bool BIsLowViolence() = 0; 13 | virtual bool BIsCybercafe() = 0; 14 | virtual bool BIsVACBanned() = 0; 15 | virtual const char *GetCurrentGameLanguage() = 0; 16 | virtual const char *GetAvailableGameLanguages() = 0; 17 | 18 | // only use this member if you need to check ownership of another game related to yours, a demo for example 19 | virtual bool BIsSubscribedApp( AppId_t appID ) = 0; 20 | }; 21 | 22 | #endif //ISTEAMAPPS002_H 23 | -------------------------------------------------------------------------------- /sdk/steam/isteamapps003.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMAPPS003_H 3 | #define ISTEAMAPPS003_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamApps003 9 | { 10 | public: 11 | virtual bool BIsSubscribed() = 0; 12 | virtual bool BIsLowViolence() = 0; 13 | virtual bool BIsCybercafe() = 0; 14 | virtual bool BIsVACBanned() = 0; 15 | virtual const char *GetCurrentGameLanguage() = 0; 16 | virtual const char *GetAvailableGameLanguages() = 0; 17 | 18 | // only use this member if you need to check ownership of another game related to yours, a demo for example 19 | virtual bool BIsSubscribedApp( AppId_t appID ) = 0; 20 | 21 | // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed 22 | virtual bool BIsDlcInstalled( AppId_t appID ) = 0; 23 | }; 24 | 25 | #endif //ISTEAMAPPS003_H 26 | -------------------------------------------------------------------------------- /sdk/steam/isteamapps004.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMAPPS004_H 3 | #define ISTEAMAPPS004_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamApps004 9 | { 10 | public: 11 | virtual bool BIsSubscribed() = 0; 12 | virtual bool BIsLowViolence() = 0; 13 | virtual bool BIsCybercafe() = 0; 14 | virtual bool BIsVACBanned() = 0; 15 | virtual const char *GetCurrentGameLanguage() = 0; 16 | virtual const char *GetAvailableGameLanguages() = 0; 17 | 18 | // only use this member if you need to check ownership of another game related to yours, a demo for example 19 | virtual bool BIsSubscribedApp( AppId_t appID ) = 0; 20 | 21 | // Takes AppID of DLC and checks if the user owns the DLC & if the DLC is installed 22 | virtual bool BIsDlcInstalled( AppId_t appID ) = 0; 23 | 24 | // returns the Unix time of the purchase of the app 25 | virtual uint32 GetEarliestPurchaseUnixTime( AppId_t nAppID ) = 0; 26 | 27 | // Checks if the user is subscribed to the current app through a free weekend 28 | // This function will return false for users who have a retail or other type of license 29 | // Before using, please ask your Valve technical contact how to package and secure your free weekened 30 | virtual bool BIsSubscribedFromFreeWeekend() = 0; 31 | 32 | // Returns the number of DLC pieces for the running app 33 | virtual int GetDLCCount() = 0; 34 | 35 | // Returns metadata for DLC by index, of range [0, GetDLCCount()] 36 | virtual bool BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailable, char *pchName, int cchNameBufferSize ) = 0; 37 | 38 | // Install/Uninstall control for optional DLC 39 | virtual void InstallDLC( AppId_t nAppID ) = 0; 40 | virtual void UninstallDLC( AppId_t nAppID ) = 0; 41 | 42 | #ifdef _PS3 43 | // Result returned in a RegisterActivationCodeResponse_t callresult 44 | virtual SteamAPICall_t RegisterActivationCode( const char *pchActivationCode ) = 0; 45 | #endif 46 | }; 47 | 48 | #endif //ISTEAMAPPS004_H 49 | -------------------------------------------------------------------------------- /sdk/steam/isteamappticket.h: -------------------------------------------------------------------------------- 1 | //====== Copyright 1996-2008, Valve Corporation, All rights reserved. ======= 2 | // 3 | // Purpose: a private, but well versioned, interface to get at critical bits 4 | // of a steam3 appticket - consumed by the simple drm wrapper to let it 5 | // ask about ownership with greater confidence. 6 | // 7 | //============================================================================= 8 | 9 | #ifndef ISTEAMAPPTICKET_H 10 | #define ISTEAMAPPTICKET_H 11 | #pragma once 12 | 13 | //----------------------------------------------------------------------------- 14 | // Purpose: hand out a reasonable "future proof" view of an app ownership ticket 15 | // the raw (signed) buffer, and indices into that buffer where the appid and 16 | // steamid are located. the sizes of the appid and steamid are implicit in 17 | // (each version of) the interface - currently uin32 appid and uint64 steamid 18 | //----------------------------------------------------------------------------- 19 | class ISteamAppTicket 20 | { 21 | public: 22 | virtual uint32 GetAppOwnershipTicketData( uint32 nAppID, void *pvBuffer, uint32 cbBufferLength, uint32 *piAppId, uint32 *piSteamId, uint32 *piSignature, uint32 *pcbSignature ) = 0; 23 | }; 24 | 25 | #define STEAMAPPTICKET_INTERFACE_VERSION "STEAMAPPTICKET_INTERFACE_VERSION001" 26 | 27 | 28 | #endif // ISTEAMAPPTICKET_H 29 | -------------------------------------------------------------------------------- /sdk/steam/isteambilling.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMBILLING_H 3 | #define ISTEAMBILLING_H 4 | 5 | // this interface is not found in public SDK archives, it is based on reversing the returned vftable from steamclient64.dll 6 | 7 | class ISteamBilling 8 | { 9 | public: 10 | virtual bool _unknown_fn_1( ) = 0; 11 | virtual bool _unknown_fn_2( ) = 0; 12 | virtual bool _unknown_fn_3( ) = 0; 13 | virtual bool _unknown_fn_4( ) = 0; 14 | virtual bool _unknown_fn_5( ) = 0; 15 | virtual bool _unknown_fn_6( ) = 0; 16 | virtual bool _unknown_fn_7( ) = 0; 17 | virtual bool _unknown_fn_8( ) = 0; 18 | virtual bool _unknown_fn_9( ) = 0; 19 | virtual bool _unknown_fn_10( ) = 0; 20 | virtual bool _unknown_fn_11( ) = 0; 21 | virtual bool _unknown_fn_12( ) = 0; 22 | virtual bool _unknown_fn_13( ) = 0; 23 | virtual bool _unknown_fn_14( ) = 0; 24 | virtual bool _unknown_fn_15( ) = 0; 25 | virtual bool _unknown_fn_16( ) = 0; 26 | virtual bool _unknown_fn_17( ) = 0; 27 | virtual bool _unknown_fn_18( ) = 0; 28 | virtual bool _unknown_fn_19( ) = 0; 29 | 30 | virtual int _unknown_fn_20( ) = 0; 31 | virtual int _unknown_fn_21( ) = 0; 32 | virtual int _unknown_fn_22( ) = 0; 33 | virtual int _unknown_fn_23( ) = 0; 34 | virtual int _unknown_fn_24( ) = 0; 35 | virtual int _unknown_fn_25( ) = 0; 36 | virtual int _unknown_fn_26( ) = 0; 37 | 38 | virtual const char* _unknown_fn_27( ) = 0; // returns null string (str address is inside .rdata so it can't change at runtime) 39 | 40 | virtual int _unknown_fn_28( ) = 0; 41 | 42 | virtual int _unknown_fn_29( ) = 0; // mov eax, 2 43 | 44 | virtual int _unknown_fn_30( ) = 0; 45 | virtual int _unknown_fn_31( ) = 0; 46 | virtual int _unknown_fn_32( ) = 0; 47 | virtual int _unknown_fn_33( ) = 0; 48 | virtual int _unknown_fn_34( ) = 0; 49 | virtual int _unknown_fn_35( ) = 0; 50 | virtual int _unknown_fn_36( ) = 0; 51 | virtual int _unknown_fn_37( ) = 0; 52 | 53 | virtual const char* _unknown_fn_38( ) = 0; // returns null string (str address is inside .rdata so it can't change at runtime) 54 | 55 | virtual int _unknown_fn_39( ) = 0; 56 | virtual int _unknown_fn_40( ) = 0; 57 | 58 | virtual bool _unknown_fn_41( ) = 0; 59 | virtual bool _unknown_fn_42( ) = 0; 60 | virtual bool _unknown_fn_43( ) = 0; 61 | }; 62 | 63 | #define STEAMBILLING_INTERFACE_VERSION "SteamBilling002" 64 | 65 | #endif // ISTEAMBILLING_H 66 | -------------------------------------------------------------------------------- /sdk/steam/isteamcontroller001.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMCONTROLLER001_H 3 | #define ISTEAMCONTROLLER001_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | struct SteamControllerState001_t 9 | { 10 | // If packet num matches that on your prior call, then the controller state hasn't been changed since 11 | // your last call and there is no need to process it 12 | uint32 unPacketNum; 13 | 14 | // bit flags for each of the buttons 15 | uint64 ulButtons; 16 | 17 | // Left pad coordinates 18 | short sLeftPadX; 19 | short sLeftPadY; 20 | 21 | // Right pad coordinates 22 | short sRightPadX; 23 | short sRightPadY; 24 | 25 | }; 26 | 27 | 28 | class ISteamController001 29 | { 30 | public: 31 | 32 | // 33 | // Native controller support API 34 | // 35 | 36 | // Must call init and shutdown when starting/ending use of the interface 37 | virtual bool Init( const char *pchAbsolutePathToControllerConfigVDF ) = 0; 38 | virtual bool Shutdown() = 0; 39 | 40 | // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you, 41 | // normally never need to call directly. 42 | virtual void RunFrame() = 0; 43 | 44 | // Get the state of the specified controller, returns false if that controller is not connected 45 | virtual bool GetControllerState( uint32 unControllerIndex, SteamControllerState001_t *pState ) = 0; 46 | 47 | // Trigger a haptic pulse on the controller 48 | virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0; 49 | 50 | // Set the override mode which is used to choose to use different base/legacy bindings from your config file 51 | virtual void SetOverrideMode( const char *pchMode ) = 0; 52 | }; 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /sdk/steam/isteamcontroller002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMCONTROLLER002_H 3 | #define ISTEAMCONTROLLER002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamController002 9 | { 10 | public: 11 | 12 | // 13 | // Native controller support API 14 | // 15 | 16 | // Must call init and shutdown when starting/ending use of the interface 17 | virtual bool Init() = 0; 18 | virtual bool Shutdown() = 0; 19 | 20 | // Pump callback/callresult events, SteamAPI_RunCallbacks will do this for you, 21 | // normally never need to call directly. 22 | virtual void RunFrame() = 0; 23 | 24 | virtual int GetConnectedControllers( uint64 * ) = 0; 25 | 26 | // Trigger a haptic pulse on the controller 27 | virtual void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0; 28 | 29 | virtual unknown_ret ActivateMode( uint64, int32 ) = 0; 30 | virtual int32 GetJoystickForHandle( uint64 ) = 0; 31 | virtual uint64 GetHandleForJoystick( int32 ) = 0; 32 | virtual unknown_ret GetModeAnalogOutputData( uint64, int32 ) = 0; 33 | 34 | }; 35 | 36 | #endif //ISTEAMCONTROLLER002_H 37 | -------------------------------------------------------------------------------- /sdk/steam/isteamgameserver002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMGAMESERVER002_H 3 | #define ISTEAMGAMESERVER002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | // this interface version is not found in public SDK archives, it is based on proton src: https://github.com/ValveSoftware/Proton/tree/proton_9.0/lsteamclient 9 | 10 | class ISteamGameServer002 11 | { 12 | public: 13 | virtual void LogOn() = 0; 14 | virtual void LogOff() = 0; 15 | virtual bool BLoggedOn() = 0; 16 | virtual void GSSetSpawnCount( uint32 ucSpawn ) = 0; 17 | virtual bool GSGetSteam2GetEncryptionKeyToSendToNewClient( void *pvEncryptionKey, uint32 *pcbEncryptionKey, uint32 cbMaxEncryptionKey ) = 0; 18 | virtual bool GSSendSteam2UserConnect( uint32 unUserID, const void *pvRawKey, uint32 unKeyLen, uint32 unIPPublic, uint16 usPort, const void *pvCookie, uint32 cubCookie ) = 0; 19 | virtual bool GSSendSteam3UserConnect( CSteamID steamID, uint32 unIPPublic, const void *pvCookie, uint32 cubCookie ) = 0; 20 | virtual bool GSRemoveUserConnect( uint32 unUserID ) = 0; 21 | virtual bool GSSendUserDisconnect( CSteamID steamID, uint32 unUserID ) = 0; 22 | virtual bool GSSendUserStatusResponse( CSteamID steamID, int nSecondsConnected, int nSecondsSinceLast ) = 0; 23 | virtual bool Obsolete_GSSetStatus( int32 nAppIdServed, uint32 unServerFlags, int cPlayers, int cPlayersMax, int cBotPlayers, int unGamePort, const char *pchServerName, const char *pchGameDir, const char *pchMapName, const char *pchVersion ) = 0; 24 | virtual bool GSUpdateStatus( int cPlayers, int cPlayersMax, int cBotPlayers, const char *pchServerName, const char *pchMapName ) = 0; 25 | virtual bool BSecure() = 0; 26 | virtual CSteamID GetSteamID() = 0; 27 | virtual bool GSSetServerType( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint32 unGamePort, const char *pchGameDir, const char *pchVersion ) = 0; 28 | virtual bool GSSetServerType2( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0; 29 | virtual bool GSUpdateStatus2( int cPlayers, int cPlayersMax, int cBotPlayers, const char *pchServerName, const char *pSpectatorServerName, const char *pchMapName ) = 0; 30 | virtual bool GSCreateUnauthenticatedUser( CSteamID *pSteamID ) = 0; 31 | virtual bool GSSetUserData( CSteamID steamID, const char *pPlayerName, uint32 nFrags ) = 0; 32 | virtual void GSUpdateSpectatorPort( uint16 unSpectatorPort ) = 0; 33 | virtual void GSSetGameType( const char *pchType ) = 0; 34 | }; 35 | 36 | #endif // ISTEAMGAMESERVER002_H 37 | -------------------------------------------------------------------------------- /sdk/steam/isteamgameserver003.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMGAMESERVER003_H 3 | #define ISTEAMGAMESERVER003_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | // this interface version is not found in public SDK archives, it is based on proton src: https://github.com/ValveSoftware/Proton/tree/proton_9.0/lsteamclient 9 | 10 | class ISteamGameServer003 11 | { 12 | public: 13 | // connection functions 14 | virtual void LogOn() = 0; 15 | virtual void LogOff() = 0; 16 | 17 | // status functions 18 | virtual bool BLoggedOn() = 0; 19 | virtual bool BSecure() = 0; 20 | virtual CSteamID GetSteamID() = 0; 21 | 22 | virtual bool GSGetSteam2GetEncryptionKeyToSendToNewClient( void *pvEncryptionKey, uint32 *pcbEncryptionKey, uint32 cbMaxEncryptionKey ) = 0; 23 | virtual bool GSSendUserConnect( uint32 unUserID, uint32 unIPPublic, uint16 usPort, const void *pvCookie, uint32 cubCookie ) = 0; 24 | virtual bool GSRemoveUserConnect( uint32 unUserID ) = 0; 25 | virtual bool GSSendUserDisconnect( CSteamID steamID, uint32 unUserID ) = 0; 26 | virtual void GSSetSpawnCount( uint32 ucSpawn ) = 0; 27 | virtual bool GSSetServerType( int32 nGameAppId, uint32 unServerFlags, uint32 unGameIP, uint16 unGamePort, uint16 unSpectatorPort, uint16 usQueryPort, const char *pchGameDir, const char *pchVersion, bool bLANMode ) = 0; 28 | virtual bool GSUpdateStatus( int cPlayers, int cPlayersMax, int cBotPlayers, const char *pchServerName, const char *pSpectatorServerName, const char *pchMapName ) = 0; 29 | virtual bool GSCreateUnauthenticatedUser( CSteamID *pSteamID ) = 0; 30 | virtual bool GSSetUserData( CSteamID steamID, const char *pPlayerName, uint32 nFrags ) = 0; 31 | virtual void GSUpdateSpectatorPort( uint16 unSpectatorPort ) = 0; 32 | virtual void GSSetGameType( const char *pchType ) = 0; 33 | virtual bool GSGetUserAchievementStatus( CSteamID steamID, const char *pchAchievementName ) = 0; 34 | }; 35 | 36 | #endif // ISTEAMGAMESERVER003_H 37 | -------------------------------------------------------------------------------- /sdk/steam/isteammusic.h: -------------------------------------------------------------------------------- 1 | //============ Copyright (c) Valve Corporation, All rights reserved. ============ 2 | 3 | #ifndef ISTEAMMUSIC_H 4 | #define ISTEAMMUSIC_H 5 | #ifdef STEAM_WIN32 6 | #pragma once 7 | #endif 8 | 9 | #include "steam_api_common.h" 10 | 11 | //----------------------------------------------------------------------------- 12 | // Purpose: 13 | //----------------------------------------------------------------------------- 14 | enum AudioPlayback_Status 15 | { 16 | AudioPlayback_Undefined = 0, 17 | AudioPlayback_Playing = 1, 18 | AudioPlayback_Paused = 2, 19 | AudioPlayback_Idle = 3 20 | }; 21 | 22 | 23 | //----------------------------------------------------------------------------- 24 | // Purpose: Functions to control music playback in the steam client 25 | //----------------------------------------------------------------------------- 26 | class ISteamMusic 27 | { 28 | public: 29 | virtual bool BIsEnabled() = 0; 30 | virtual bool BIsPlaying() = 0; 31 | 32 | virtual AudioPlayback_Status GetPlaybackStatus() = 0; 33 | 34 | virtual void Play() = 0; 35 | virtual void Pause() = 0; 36 | virtual void PlayPrevious() = 0; 37 | virtual void PlayNext() = 0; 38 | 39 | // volume is between 0.0 and 1.0 40 | virtual void SetVolume( float flVolume ) = 0; 41 | virtual float GetVolume() = 0; 42 | 43 | }; 44 | 45 | #define STEAMMUSIC_INTERFACE_VERSION "STEAMMUSIC_INTERFACE_VERSION001" 46 | 47 | #ifndef STEAM_API_EXPORTS 48 | // Global interface accessor 49 | inline ISteamMusic *SteamMusic(); 50 | STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamMusic *, SteamMusic, STEAMMUSIC_INTERFACE_VERSION ); 51 | #endif 52 | 53 | // callbacks 54 | #if defined( VALVE_CALLBACK_PACK_SMALL ) 55 | #pragma pack( push, 4 ) 56 | #elif defined( VALVE_CALLBACK_PACK_LARGE ) 57 | #pragma pack( push, 8 ) 58 | #else 59 | #error steam_api_common.h should define VALVE_CALLBACK_PACK_xxx 60 | #endif 61 | 62 | 63 | STEAM_CALLBACK_BEGIN( PlaybackStatusHasChanged_t, k_iSteamMusicCallbacks + 1 ) 64 | STEAM_CALLBACK_END(0) 65 | 66 | STEAM_CALLBACK_BEGIN( VolumeHasChanged_t, k_iSteamMusicCallbacks + 2 ) 67 | STEAM_CALLBACK_MEMBER( 0, float, m_flNewVolume ) 68 | STEAM_CALLBACK_END(1) 69 | 70 | #pragma pack( pop ) 71 | 72 | 73 | #endif // #define ISTEAMMUSIC_H 74 | -------------------------------------------------------------------------------- /sdk/steam/isteamparentalsettings.h: -------------------------------------------------------------------------------- 1 | //====== Copyright � 2013-, Valve Corporation, All rights reserved. ======= 2 | // 3 | // Purpose: Interface to Steam parental settings (Family View) 4 | // 5 | //============================================================================= 6 | 7 | #ifndef ISTEAMPARENTALSETTINGS_H 8 | #define ISTEAMPARENTALSETTINGS_H 9 | #ifdef STEAM_WIN32 10 | #pragma once 11 | #endif 12 | 13 | #include "steam_api_common.h" 14 | 15 | // Feature types for parental settings 16 | enum EParentalFeature 17 | { 18 | k_EFeatureInvalid = 0, 19 | k_EFeatureStore = 1, 20 | k_EFeatureCommunity = 2, 21 | k_EFeatureProfile = 3, 22 | k_EFeatureFriends = 4, 23 | k_EFeatureNews = 5, 24 | k_EFeatureTrading = 6, 25 | k_EFeatureSettings = 7, 26 | k_EFeatureConsole = 8, 27 | k_EFeatureBrowser = 9, 28 | k_EFeatureParentalSetup = 10, 29 | k_EFeatureLibrary = 11, 30 | k_EFeatureTest = 12, 31 | k_EFeatureSiteLicense = 13, 32 | k_EFeatureKioskMode_Deprecated = 14, 33 | k_EFeatureBlockAlways = 15, 34 | k_EFeatureMax 35 | }; 36 | 37 | class ISteamParentalSettings 38 | { 39 | public: 40 | virtual bool BIsParentalLockEnabled() = 0; 41 | virtual bool BIsParentalLockLocked() = 0; 42 | 43 | virtual bool BIsAppBlocked( AppId_t nAppID ) = 0; 44 | virtual bool BIsAppInBlockList( AppId_t nAppID ) = 0; 45 | 46 | virtual bool BIsFeatureBlocked( EParentalFeature eFeature ) = 0; 47 | virtual bool BIsFeatureInBlockList( EParentalFeature eFeature ) = 0; 48 | }; 49 | 50 | #define STEAMPARENTALSETTINGS_INTERFACE_VERSION "STEAMPARENTALSETTINGS_INTERFACE_VERSION001" 51 | 52 | #ifndef STEAM_API_EXPORTS 53 | // Global interface accessor 54 | inline ISteamParentalSettings *SteamParentalSettings(); 55 | STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamParentalSettings *, SteamParentalSettings, STEAMPARENTALSETTINGS_INTERFACE_VERSION ); 56 | #endif 57 | 58 | //----------------------------------------------------------------------------- 59 | // Purpose: Callback for querying UGC 60 | //----------------------------------------------------------------------------- 61 | struct SteamParentalSettingsChanged_t 62 | { 63 | enum { k_iCallback = k_ISteamParentalSettingsCallbacks + 1 }; 64 | }; 65 | 66 | 67 | #endif // ISTEAMPARENTALSETTINGS_H 68 | -------------------------------------------------------------------------------- /sdk/steam/isteamremoteplay001.h: -------------------------------------------------------------------------------- 1 | //============ Copyright (c) Valve Corporation, All rights reserved. ============ 2 | 3 | #ifndef ISTEAMREMOTEPLAY001_H 4 | #define ISTEAMREMOTEPLAY001_H 5 | #ifdef STEAM_WIN32 6 | #pragma once 7 | #endif 8 | 9 | class ISteamRemotePlay001 10 | { 11 | public: 12 | // Get the number of currently connected Steam Remote Play sessions 13 | virtual uint32 GetSessionCount() = 0; 14 | 15 | // Get the currently connected Steam Remote Play session ID at the specified index. Returns zero if index is out of bounds. 16 | virtual RemotePlaySessionID_t GetSessionID( int iSessionIndex ) = 0; 17 | 18 | // Get the SteamID of the connected user 19 | virtual CSteamID GetSessionSteamID( RemotePlaySessionID_t unSessionID ) = 0; 20 | 21 | // Get the name of the session client device 22 | // This returns NULL if the sessionID is not valid 23 | virtual const char *GetSessionClientName( RemotePlaySessionID_t unSessionID ) = 0; 24 | 25 | // Get the form factor of the session client device 26 | virtual ESteamDeviceFormFactor GetSessionClientFormFactor( RemotePlaySessionID_t unSessionID ) = 0; 27 | 28 | // Get the resolution, in pixels, of the session client device 29 | // This is set to 0x0 if the resolution is not available 30 | virtual bool BGetSessionClientResolution( RemotePlaySessionID_t unSessionID, int *pnResolutionX, int *pnResolutionY ) = 0; 31 | 32 | // Invite a friend to Remote Play Together, or create a guest invite if steamIDFriend is empty 33 | // This returns false if the invite can't be sent 34 | virtual bool BSendRemotePlayTogetherInvite( CSteamID steamIDFriend ) = 0; 35 | }; 36 | 37 | #endif // #define ISTEAMREMOTEPLAY001_H 38 | -------------------------------------------------------------------------------- /sdk/steam/isteamremoteplay002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMREMOTEPLAY002_H 3 | #define ISTEAMREMOTEPLAY002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | //----------------------------------------------------------------------------- 9 | // Purpose: Functions to provide information about Steam Remote Play sessions 10 | //----------------------------------------------------------------------------- 11 | class ISteamRemotePlay002 12 | { 13 | public: 14 | // Get the number of currently connected Steam Remote Play sessions 15 | virtual uint32 GetSessionCount() = 0; 16 | 17 | // Get the currently connected Steam Remote Play session ID at the specified index. Returns zero if index is out of bounds. 18 | virtual RemotePlaySessionID_t GetSessionID( int iSessionIndex ) = 0; 19 | 20 | // Get the SteamID of the connected user 21 | virtual CSteamID GetSessionSteamID( RemotePlaySessionID_t unSessionID ) = 0; 22 | 23 | // Get the name of the session client device 24 | // This returns NULL if the sessionID is not valid 25 | virtual const char *GetSessionClientName( RemotePlaySessionID_t unSessionID ) = 0; 26 | 27 | // Get the form factor of the session client device 28 | virtual ESteamDeviceFormFactor GetSessionClientFormFactor( RemotePlaySessionID_t unSessionID ) = 0; 29 | 30 | // Get the resolution, in pixels, of the session client device 31 | // This is set to 0x0 if the resolution is not available 32 | virtual bool BGetSessionClientResolution( RemotePlaySessionID_t unSessionID, int *pnResolutionX, int *pnResolutionY ) = 0; 33 | 34 | // Start Remote Play Together and optionally show the UI in the overlay 35 | // This returns false if Remote Play Together can't be started or your game is not configured for Remote Play Together 36 | virtual bool BStartRemotePlayTogether( bool bShowOverlay = true ) = 0; 37 | 38 | // Invite a friend to Remote Play Together, or create a guest invite if steamIDFriend is empty 39 | // This will automatically start Remote Play Together if it hasn't already been started 40 | // This returns false if the invite can't be sent or your game is not configured for Remote Play Together 41 | virtual bool BSendRemotePlayTogetherInvite( CSteamID steamIDFriend ) = 0; 42 | }; 43 | 44 | #endif // #define ISTEAMREMOTEPLAY002_H 45 | -------------------------------------------------------------------------------- /sdk/steam/isteamremotestorage001.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMREMOTESTORAGE001_H 3 | #define ISTEAMREMOTESTORAGE001_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamRemoteStorage001 9 | { 10 | public: 11 | // NOTE 12 | // 13 | // Filenames are case-insensitive, and will be converted to lowercase automatically. 14 | // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then 15 | // iterate the files, the filename returned will be "foo.bar". 16 | // 17 | 18 | // file operations 19 | virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0; 20 | virtual int32 GetFileSize( const char *pchFile ) = 0; 21 | virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0; 22 | virtual bool FileExists( const char *pchFile ) = 0; 23 | virtual bool FileDelete( const char *pchFile ) = 0; 24 | 25 | // iteration 26 | virtual int32 GetFileCount() = 0; 27 | virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0; 28 | 29 | // quota management 30 | virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0; 31 | }; 32 | 33 | #endif // ISTEAMREMOTESTORAGE001_H 34 | -------------------------------------------------------------------------------- /sdk/steam/isteamremotestorage002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMREMOTESTORAGE002_H 3 | #define ISTEAMREMOTESTORAGE002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | 9 | //----------------------------------------------------------------------------- 10 | // Purpose: Functions for accessing, reading and writing files stored remotely 11 | // and cached locally 12 | //----------------------------------------------------------------------------- 13 | class ISteamRemoteStorage002 14 | { 15 | public: 16 | // NOTE 17 | // 18 | // Filenames are case-insensitive, and will be converted to lowercase automatically. 19 | // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then 20 | // iterate the files, the filename returned will be "foo.bar". 21 | // 22 | 23 | // file operations 24 | virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0; 25 | virtual int32 GetFileSize( const char *pchFile ) = 0; 26 | virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0; 27 | virtual bool FileExists( const char *pchFile ) = 0; 28 | 29 | // iteration 30 | virtual int32 GetFileCount() = 0; 31 | virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0; 32 | 33 | // quota management 34 | virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0; 35 | }; 36 | 37 | #endif // ISTEAMREMOTESTORAGE_H 38 | -------------------------------------------------------------------------------- /sdk/steam/isteamremotestorage003.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ifndef ISTEAMREMOTESTORAGE003_H 4 | #define ISTEAMREMOTESTORAGE003_H 5 | #ifdef STEAM_WIN32 6 | #pragma once 7 | #endif 8 | 9 | 10 | //----------------------------------------------------------------------------- 11 | // Purpose: Functions for accessing, reading and writing files stored remotely 12 | // and cached locally 13 | //----------------------------------------------------------------------------- 14 | class ISteamRemoteStorage003 15 | { 16 | public: 17 | // NOTE 18 | // 19 | // Filenames are case-insensitive, and will be converted to lowercase automatically. 20 | // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then 21 | // iterate the files, the filename returned will be "foo.bar". 22 | // 23 | 24 | // file operations 25 | virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0; 26 | virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0; 27 | virtual bool FileForget( const char *pchFile ) = 0; 28 | virtual bool FileDelete( const char *pchFile ) = 0; 29 | virtual SteamAPICall_t FileShare( const char *pchFile ) = 0; 30 | 31 | // file information 32 | virtual bool FileExists( const char *pchFile ) = 0; 33 | virtual bool FilePersisted( const char *pchFile ) = 0; 34 | virtual int32 GetFileSize( const char *pchFile ) = 0; 35 | virtual int64 GetFileTimestamp( const char *pchFile ) = 0; 36 | 37 | // iteration 38 | virtual int32 GetFileCount() = 0; 39 | virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0; 40 | 41 | // configuration management 42 | virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0; 43 | virtual bool IsCloudEnabledForAccount() = 0; 44 | virtual bool IsCloudEnabledForApp() = 0; 45 | virtual void SetCloudEnabledForApp( bool bEnabled ) = 0; 46 | 47 | // user generated content 48 | virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0; 49 | virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0; 50 | virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0; 51 | 52 | // user generated content iteration 53 | virtual int32 GetCachedUGCCount() = 0; 54 | virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0; 55 | }; 56 | 57 | #endif // ISTEAMREMOTESTORAGE003_H 58 | -------------------------------------------------------------------------------- /sdk/steam/isteamremotestorage004.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMREMOTESTORAGE004_H 3 | #define ISTEAMREMOTESTORAGE004_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | //----------------------------------------------------------------------------- 9 | // Purpose: Functions for accessing, reading and writing files stored remotely 10 | // and cached locally 11 | //----------------------------------------------------------------------------- 12 | class ISteamRemoteStorage004 13 | { 14 | public: 15 | // NOTE 16 | // 17 | // Filenames are case-insensitive, and will be converted to lowercase automatically. 18 | // So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then 19 | // iterate the files, the filename returned will be "foo.bar". 20 | // 21 | 22 | // file operations 23 | virtual bool FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0; 24 | virtual int32 FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0; 25 | virtual bool FileForget( const char *pchFile ) = 0; 26 | virtual bool FileDelete( const char *pchFile ) = 0; 27 | virtual SteamAPICall_t FileShare( const char *pchFile ) = 0; 28 | virtual bool SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0; 29 | 30 | // file information 31 | virtual bool FileExists( const char *pchFile ) = 0; 32 | virtual bool FilePersisted( const char *pchFile ) = 0; 33 | virtual int32 GetFileSize( const char *pchFile ) = 0; 34 | virtual int64 GetFileTimestamp( const char *pchFile ) = 0; 35 | virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0; 36 | 37 | // iteration 38 | virtual int32 GetFileCount() = 0; 39 | virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0; 40 | 41 | // configuration management 42 | virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0; 43 | virtual bool IsCloudEnabledForAccount() = 0; 44 | virtual bool IsCloudEnabledForApp() = 0; 45 | virtual void SetCloudEnabledForApp( bool bEnabled ) = 0; 46 | 47 | // user generated content 48 | virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent ) = 0; 49 | virtual bool GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0; 50 | virtual int32 UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead ) = 0; 51 | 52 | // user generated content iteration 53 | virtual int32 GetCachedUGCCount() = 0; 54 | virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0; 55 | }; 56 | 57 | #endif // ISTEAMREMOTESTORAGE004_H 58 | -------------------------------------------------------------------------------- /sdk/steam/isteamscreenshots001.h: -------------------------------------------------------------------------------- 1 | //====== Copyright © 1996-2008, Valve Corporation, All rights reserved. ======= 2 | // 3 | // Purpose: public interface to user remote file storage in Steam 4 | // 5 | //============================================================================= 6 | 7 | #ifndef ISTEAMSCREENSHOTS001_H 8 | #define ISTEAMSCREENSHOTS001_H 9 | #ifdef STEAM_WIN32 10 | #pragma once 11 | #endif 12 | 13 | //----------------------------------------------------------------------------- 14 | // Purpose: Functions for adding screenshots to the user's screenshot library 15 | //----------------------------------------------------------------------------- 16 | class ISteamScreenshots001 17 | { 18 | public: 19 | // Writes a screenshot to the user's screenshot library given the raw image data, which must be in RGB format. 20 | // The return value is a handle that is valid for the duration of the game process and can be used to apply tags. 21 | virtual ScreenshotHandle WriteScreenshot( void *pubRGB, uint32 cubRGB, int nWidth, int nHeight ) = 0; 22 | 23 | // Adds a screenshot to the user's screenshot library from disk. If a thumbnail is provided, it must be 200 pixels wide and the same aspect ratio 24 | // as the screenshot, otherwise a thumbnail will be generated if the user uploads the screenshot. The screenshots must be in either JPEG or TGA format. 25 | // The return value is a handle that is valid for the duration of the game process and can be used to apply tags. 26 | virtual ScreenshotHandle AddScreenshotToLibrary( const char *pchJpegOrTGAFilename, const char *pchJpegOrTGAThumbFilename, int nWidth, int nHeight ) = 0; 27 | 28 | // Causes the Steam overlay to take a screenshot. If screenshots are being hooked by the game then a ScreenshotRequested_t callback is sent back to the game instead. 29 | virtual void TriggerScreenshot() = 0; 30 | 31 | // Toggles whether the overlay handles screenshots when the user presses the screenshot hotkey, or the game handles them. If the game is hooking screenshots, 32 | // then the ScreenshotRequested_t callback will be sent if the user presses the hotkey, and the game is expected to call WriteScreenshot or AddScreenshotToLibrary 33 | // in response. 34 | virtual void HookScreenshots( bool bHook ) = 0; 35 | 36 | // Sets metadata about a screenshot's location (for example, the name of the map) 37 | virtual bool SetLocation( ScreenshotHandle hScreenshot, const char *pchLocation ) = 0; 38 | 39 | // Tags a user as being visible in the screenshot 40 | virtual bool TagUser( ScreenshotHandle hScreenshot, CSteamID steamID ) = 0; 41 | }; 42 | #endif // ISTEAMSCREENSHOTS001_H -------------------------------------------------------------------------------- /sdk/steam/isteamtv.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMTV_H 3 | #define ISTEAMTV_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | #include "steam_api_common.h" 9 | #include "steamhttpenums.h" 10 | 11 | struct SteamTVRegion_t { 12 | 13 | }; 14 | 15 | enum ESteamTVRegionBehavior 16 | { 17 | 18 | }; 19 | 20 | class ISteamTV 21 | { 22 | public: 23 | virtual bool IsBroadcasting(int *pnNumViewers) = 0; 24 | virtual void AddBroadcastGameData(const char * pchKey, const char * pchValue) = 0; 25 | virtual void RemoveBroadcastGameData(const char * pchKey) = 0; 26 | virtual void AddTimelineMarker(const char * pchTemplateName, bool bPersistent, uint8 nColorR, uint8 nColorG, uint8 nColorB) = 0; 27 | virtual void RemoveTimelineMarker() = 0; 28 | virtual uint32 AddRegion(const char * pchElementName, const char * pchTimelineDataSection, const SteamTVRegion_t * pSteamTVRegion, ESteamTVRegionBehavior eSteamTVRegionBehavior) = 0; 29 | virtual void RemoveRegion(uint32 unRegionHandle) = 0; 30 | }; 31 | 32 | #define STEAMTV_INTERFACE_VERSION "STEAMTV_INTERFACE_V001" 33 | 34 | #endif // ISTEAMTV_H -------------------------------------------------------------------------------- /sdk/steam/isteamugc001.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUGC001_H 3 | #define ISTEAMUGC001_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamUGC001 9 | { 10 | public: 11 | 12 | virtual UGCQueryHandle_t CreateQueryUserUGCRequest( AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0; 13 | 14 | virtual UGCQueryHandle_t CreateQueryAllUGCRequest( EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ) = 0; 15 | 16 | virtual SteamAPICall_t SendQueryUGCRequest( UGCQueryHandle_t handle ) = 0; 17 | 18 | virtual bool GetQueryUGCResult_old( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0; 19 | 20 | // Release the request to free up memory, after retrieving results 21 | virtual bool ReleaseQueryUGCRequest( UGCQueryHandle_t handle ) = 0; 22 | 23 | virtual bool AddRequiredTag( UGCQueryHandle_t handle, const char *pTagName ) = 0; 24 | virtual bool AddExcludedTag( UGCQueryHandle_t handle, const char *pTagName ) = 0; 25 | virtual bool SetReturnLongDescription( UGCQueryHandle_t handle, bool bReturnLongDescription ) = 0; 26 | virtual bool SetReturnTotalOnly( UGCQueryHandle_t handle, bool bReturnTotalOnly ) = 0; 27 | 28 | virtual bool SetCloudFileNameFilter( UGCQueryHandle_t handle, const char *pMatchCloudFileName ) = 0; 29 | 30 | virtual bool SetMatchAnyTag( UGCQueryHandle_t handle, bool bMatchAnyTag ) = 0; 31 | virtual bool SetSearchText( UGCQueryHandle_t handle, const char *pSearchText ) = 0; 32 | virtual bool SetRankedByTrendDays( UGCQueryHandle_t handle, uint32 unDays ) = 0; 33 | 34 | virtual SteamAPICall_t RequestUGCDetails( PublishedFileId_t nPublishedFileID ) = 0; 35 | }; 36 | 37 | #endif // ISTEAMUGC001_H 38 | -------------------------------------------------------------------------------- /sdk/steam/isteamuser004.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUSER004_H 3 | #define ISTEAMUSER004_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | enum EConfigSubTree { 9 | EConfigSubTree_stub 10 | }; 11 | 12 | enum ELogonState { 13 | ELogonState_stub 14 | }; 15 | 16 | class ISteamUser004 17 | { 18 | public: 19 | virtual HSteamUser GetHSteamUser() = 0; 20 | virtual void LogOn( CSteamID steamID ) = 0; 21 | virtual void LogOff() = 0; 22 | virtual bool BLoggedOn() = 0; 23 | virtual ELogonState GetLogonState() = 0; 24 | virtual bool BConnected() = 0; 25 | virtual CSteamID GetSteamID() = 0; 26 | virtual bool IsVACBanned( int nGameID ) = 0; 27 | virtual bool RequireShowVACBannedMessage( int nGameID ) = 0; 28 | virtual void AcknowledgeVACBanning( int nGameID ) = 0; 29 | 30 | // These are dead. 31 | virtual int NClientGameIDAdd( int nGameID ) = 0; 32 | virtual void RemoveClientGame( int nClientGameID ) = 0; 33 | virtual void SetClientGameServer( int nClientGameID, uint32 unIPServer, uint16 usPortServer ) = 0; 34 | 35 | virtual void SetSteam2Ticket( uint8 *pubTicket, int cubTicket ) = 0; 36 | virtual void AddServerNetAddress( uint32 unIP, uint16 unPort ) = 0; 37 | virtual bool SetEmail( const char *pchEmail ) = 0; 38 | 39 | // logon cookie - this is obsolete and never used 40 | virtual int GetSteamGameConnectToken( void *pBlob, int cbMaxBlob ) = 0; 41 | virtual bool SetRegistryString( EConfigSubTree eRegistrySubTree, const char *pchKey, const char *pchValue ) = 0; 42 | virtual bool GetRegistryString( EConfigSubTree eRegistrySubTree, const char *pchKey, char *pchValue, int cbValue ) = 0; 43 | virtual bool SetRegistryInt( EConfigSubTree eRegistrySubTree, const char *pchKey, int iValue ) = 0; 44 | virtual bool GetRegistryInt( EConfigSubTree eRegistrySubTree, const char *pchKey, int *piValue ) = 0; 45 | virtual int InitiateGameConnection( void *pBlob, int cbMaxBlob, CSteamID steamID, int nGameAppID, uint32 unIPServer, uint16 usPortServer, bool bSecure ) = 0; 46 | virtual void TerminateGameConnection( uint32 unIPServer, uint16 usPortServer ) = 0; 47 | virtual void SetSelfAsPrimaryChatDestination() = 0; 48 | virtual bool IsPrimaryChatDestination() = 0; 49 | virtual void RequestLegacyCDKey( uint32 iAppID ) = 0; 50 | }; 51 | 52 | 53 | #endif // ISTEAMUSER004_H 54 | -------------------------------------------------------------------------------- /sdk/steam/isteamuserstats001.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUSERSTATS001_H 3 | #define ISTEAMUSERSTATS001_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamUserStats001 9 | { 10 | public: 11 | virtual uint32 GetNumStats( CGameID nGameID ) = 0; 12 | virtual const char *GetStatName( CGameID nGameID, uint32 iStat ) = 0; 13 | virtual ESteamUserStatType GetStatType( CGameID nGameID, const char *pchName ) = 0; 14 | virtual uint32 GetNumAchievements( CGameID nGameID ) = 0; 15 | virtual const char *GetAchievementName( CGameID nGameID, uint32 iAchievement ) = 0; 16 | virtual uint32 GetNumGroupAchievements( CGameID nGameID ) = 0; 17 | virtual const char *GetGroupAchievementName( CGameID nGameID, uint32 iAchievement ) = 0; 18 | virtual bool RequestCurrentStats( CGameID nGameID ) = 0; 19 | virtual bool GetStat( CGameID nGameID, const char *pchName, int32 *pData ) = 0; 20 | virtual bool GetStat( CGameID nGameID, const char *pchName, float *pData ) = 0; 21 | virtual bool SetStat( CGameID nGameID, const char *pchName, int32 nData ) = 0; 22 | virtual bool SetStat( CGameID nGameID, const char *pchName, float fData ) = 0; 23 | virtual bool UpdateAvgRateStat( CGameID nGameID, const char *pchName, float flCountThisSession, double dSessionLength ) = 0; 24 | virtual bool GetAchievement( CGameID nGameID, const char *pchName, bool *pbAchieved ) = 0; 25 | virtual bool GetGroupAchievement( CGameID nGameID, const char *pchName, bool *pbAchieved ) = 0; 26 | virtual bool SetAchievement( CGameID nGameID, const char *pchName ) = 0; 27 | virtual bool SetGroupAchievement( CGameID nGameID, const char *pchName ) = 0; 28 | virtual bool StoreStats( CGameID nGameID ) = 0; 29 | virtual bool ClearAchievement( CGameID nGameID, const char *pchName ) = 0; 30 | virtual bool ClearGroupAchievement( CGameID nGameID, const char *pchName ) = 0; 31 | virtual int GetAchievementIcon( CGameID nGameID, const char *pchName ) = 0; 32 | virtual const char *GetAchievementDisplayAttribute( CGameID nGameID, const char *pchName, const char *pchKey ) = 0; 33 | }; 34 | 35 | #endif // ISTEAMUSERSTATS001_H 36 | -------------------------------------------------------------------------------- /sdk/steam/isteamuserstats002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUSERSTATS002_H 3 | #define ISTEAMUSERSTATS002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamUserStats002 9 | { 10 | public: 11 | virtual uint32 GetNumStats( CGameID nGameID ) = 0; 12 | virtual const char *GetStatName( CGameID nGameID, uint32 iStat ) = 0; 13 | virtual ESteamUserStatType GetStatType( CGameID nGameID, const char *pchName ) = 0; 14 | virtual uint32 GetNumAchievements( CGameID nGameID ) = 0; 15 | virtual const char *GetAchievementName( CGameID nGameID, uint32 iAchievement ) = 0; 16 | virtual bool RequestCurrentStats( CGameID nGameID ) = 0; 17 | virtual bool GetStat( CGameID nGameID, const char *pchName, int32 *pData ) = 0; 18 | virtual bool GetStat( CGameID nGameID, const char *pchName, float *pData ) = 0; 19 | virtual bool SetStat( CGameID nGameID, const char *pchName, int32 nData ) = 0; 20 | virtual bool SetStat( CGameID nGameID, const char *pchName, float fData ) = 0; 21 | virtual bool UpdateAvgRateStat( CGameID nGameID, const char *pchName, float flCountThisSession, double dSessionLength ) = 0; 22 | virtual bool GetAchievement( CGameID nGameID, const char *pchName, bool *pbAchieved ) = 0; 23 | virtual bool SetAchievement( CGameID nGameID, const char *pchName ) = 0; 24 | virtual bool ClearAchievement( CGameID nGameID, const char *pchName ) = 0; 25 | virtual bool StoreStats( CGameID nGameID ) = 0; 26 | virtual int GetAchievementIcon( CGameID nGameID, const char *pchName ) = 0; 27 | virtual const char *GetAchievementDisplayAttribute( CGameID nGameID, const char *pchName, const char *pchKey ) = 0; 28 | virtual bool IndicateAchievementProgress( CGameID nGameID, const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0; 29 | }; 30 | 31 | #endif // ISTEAMUSER_H 32 | -------------------------------------------------------------------------------- /sdk/steam/isteamuserstats003.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUSERSTATS003_H 3 | #define ISTEAMUSERSTATS003_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | 9 | class ISteamUserStats003 10 | { 11 | public: 12 | 13 | // Ask the server to send down this user's data and achievements for nGameID 14 | virtual bool RequestCurrentStats( ) = 0; 15 | 16 | // Data accessors 17 | virtual bool GetStat( const char *pchName, int32 *pData ) = 0; 18 | virtual bool GetStat( const char *pchName, float *pData ) = 0; 19 | 20 | // Set / update data 21 | virtual bool SetStat( const char *pchName, int32 nData ) = 0; 22 | virtual bool SetStat( const char *pchName, float fData ) = 0; 23 | virtual bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) = 0; 24 | 25 | // Achievement flag accessors 26 | virtual bool GetAchievement( const char *pchName, bool *pbAchieved ) = 0; 27 | virtual bool SetAchievement( const char *pchName ) = 0; 28 | virtual bool ClearAchievement( const char *pchName ) = 0; 29 | 30 | // Store the current data on the server, will get a callback when set 31 | // And one callback for every new achievement 32 | virtual bool StoreStats( ) = 0; 33 | 34 | // Achievement / GroupAchievement metadata 35 | 36 | // Gets the icon of the achievement, which is a handle to be used in IClientUtils::GetImageRGBA(), or 0 if none set 37 | virtual int GetAchievementIcon( const char *pchName ) = 0; 38 | // Get general attributes (display name / text, etc) for an Achievement 39 | virtual const char *GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) = 0; 40 | 41 | // Achievement progress - triggers an AchievementProgress callback, that is all. 42 | // Calling this w/ N out of N progress will NOT set the achievement, the game must still do that. 43 | virtual bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) = 0; 44 | }; 45 | 46 | #endif // ISTEAMUSERSTATS003_H 47 | -------------------------------------------------------------------------------- /sdk/steam/isteamutils001.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUTILS001_H 3 | #define ISTEAMUTILS001_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamUtils001 9 | { 10 | public: 11 | // return the number of seconds since the user 12 | virtual uint32 GetSecondsSinceAppActive() = 0; 13 | virtual uint32 GetSecondsSinceComputerActive() = 0; 14 | 15 | // the universe this client is connecting to 16 | virtual EUniverse GetConnectedUniverse() = 0; 17 | 18 | // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time) 19 | virtual uint32 GetServerRealTime() = 0; 20 | 21 | // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database) 22 | // e.g "US" or "UK". 23 | virtual const char *GetIPCountry() = 0; 24 | 25 | // returns true if the image exists, and valid sizes were filled out 26 | virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0; 27 | 28 | // returns true if the image exists, and the buffer was successfully filled out 29 | // results are returned in RGBA format 30 | // the destination buffer size should be 4 * height * width * sizeof(char) 31 | virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0; 32 | }; 33 | 34 | #endif // ISTEAMUTILS001_H 35 | -------------------------------------------------------------------------------- /sdk/steam/isteamutils002.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef ISTEAMUTILS002_H 3 | #define ISTEAMUTILS002_H 4 | #ifdef STEAM_WIN32 5 | #pragma once 6 | #endif 7 | 8 | class ISteamUtils002 9 | { 10 | public: 11 | // return the number of seconds since the user 12 | virtual uint32 GetSecondsSinceAppActive() = 0; 13 | virtual uint32 GetSecondsSinceComputerActive() = 0; 14 | 15 | // the universe this client is connecting to 16 | virtual EUniverse GetConnectedUniverse() = 0; 17 | 18 | // Steam server time - in PST, number of seconds since January 1, 1970 (i.e unix time) 19 | virtual uint32 GetServerRealTime() = 0; 20 | 21 | // returns the 2 digit ISO 3166-1-alpha-2 format country code this client is running in (as looked up via an IP-to-location database) 22 | // e.g "US" or "UK". 23 | virtual const char *GetIPCountry() = 0; 24 | 25 | // returns true if the image exists, and valid sizes were filled out 26 | virtual bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) = 0; 27 | 28 | // returns true if the image exists, and the buffer was successfully filled out 29 | // results are returned in RGBA format 30 | // the destination buffer size should be 4 * height * width * sizeof(char) 31 | virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0; 32 | 33 | // returns the IP of the reporting server for valve - currently only used in Source engine games 34 | virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0; 35 | 36 | // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power 37 | virtual uint8 GetCurrentBatteryPower() = 0; 38 | 39 | // returns the appID of the current process 40 | virtual uint32 GetAppID() = 0; 41 | 42 | // Sets the position where the overlay instance for the currently calling game should show notifications. 43 | // This position is per-game and if this function is called from outside of a game context it will do nothing. 44 | virtual void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) = 0; 45 | 46 | // API asynchronous call results 47 | // can be used directly, but more commonly used via the callback dispatch API (see steam_api.h) 48 | virtual bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) = 0; 49 | virtual ESteamAPICallFailure GetAPICallFailureReason( SteamAPICall_t hSteamAPICall ) = 0; 50 | virtual bool GetAPICallResult( SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, bool *pbFailed ) = 0; 51 | }; 52 | 53 | #endif // ISTEAMUTILS002_H 54 | -------------------------------------------------------------------------------- /sdk/steam/isteamvideo.h: -------------------------------------------------------------------------------- 1 | //====== Copyright © 1996-2014 Valve Corporation, All rights reserved. ======= 2 | // 3 | // Purpose: interface to Steam Video 4 | // 5 | //============================================================================= 6 | 7 | #ifndef ISTEAMVIDEO_H 8 | #define ISTEAMVIDEO_H 9 | #ifdef STEAM_WIN32 10 | #pragma once 11 | #endif 12 | 13 | #include "steam_api_common.h" 14 | 15 | // callbacks 16 | #if defined( VALVE_CALLBACK_PACK_SMALL ) 17 | #pragma pack( push, 4 ) 18 | #elif defined( VALVE_CALLBACK_PACK_LARGE ) 19 | #pragma pack( push, 8 ) 20 | #else 21 | #error steam_api_common.h should define VALVE_CALLBACK_PACK_xxx 22 | #endif 23 | 24 | //----------------------------------------------------------------------------- 25 | // Purpose: Steam Video API 26 | //----------------------------------------------------------------------------- 27 | class ISteamVideo 28 | { 29 | public: 30 | 31 | // Get a URL suitable for streaming the given Video app ID's video 32 | virtual void GetVideoURL( AppId_t unVideoAppID ) = 0; 33 | 34 | // returns true if user is uploading a live broadcast 35 | virtual bool IsBroadcasting( int *pnNumViewers ) = 0; 36 | 37 | // Get the OPF Details for 360 Video Playback 38 | STEAM_CALL_BACK( GetOPFSettingsResult_t ) 39 | virtual void GetOPFSettings( AppId_t unVideoAppID ) = 0; 40 | virtual bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) = 0; 41 | }; 42 | 43 | #define STEAMVIDEO_INTERFACE_VERSION "STEAMVIDEO_INTERFACE_V007" 44 | 45 | #ifndef STEAM_API_EXPORTS 46 | // Global interface accessor 47 | inline ISteamVideo *SteamVideo(); 48 | STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamVideo *, SteamVideo, STEAMVIDEO_INTERFACE_VERSION ); 49 | #endif 50 | 51 | STEAM_CALLBACK_BEGIN( BroadcastUploadStart_t, k_iSteamVideoCallbacks + 4 ) 52 | STEAM_CALLBACK_MEMBER( 0, bool, m_bIsRTMP ) 53 | STEAM_CALLBACK_END( 1 ) 54 | 55 | STEAM_CALLBACK_BEGIN( BroadcastUploadStop_t, k_iClientVideoCallbacks + 5 ) 56 | STEAM_CALLBACK_MEMBER( 0, EBroadcastUploadResult, m_eResult ) 57 | STEAM_CALLBACK_END(1) 58 | 59 | STEAM_CALLBACK_BEGIN( GetVideoURLResult_t, k_iSteamVideoCallbacks + 11 ) 60 | STEAM_CALLBACK_MEMBER( 0, EResult, m_eResult ) 61 | STEAM_CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID ) 62 | STEAM_CALLBACK_MEMBER( 2, char, m_rgchURL[256] ) 63 | STEAM_CALLBACK_END(3) 64 | 65 | 66 | STEAM_CALLBACK_BEGIN( GetOPFSettingsResult_t, k_iSteamVideoCallbacks + 24 ) 67 | STEAM_CALLBACK_MEMBER( 0, EResult, m_eResult ) 68 | STEAM_CALLBACK_MEMBER( 1, AppId_t, m_unVideoAppID ) 69 | STEAM_CALLBACK_END(2) 70 | 71 | 72 | #pragma pack( pop ) 73 | 74 | 75 | #endif // ISTEAMVIDEO_H 76 | -------------------------------------------------------------------------------- /sdk/steam/isteamvideo001.h: -------------------------------------------------------------------------------- 1 | #ifndef ISTEAMVIDEO001_H 2 | #define ISTEAMVIDEO001_H 3 | #ifdef STEAM_WIN32 4 | #pragma once 5 | #endif 6 | 7 | class ISteamVideo001 8 | { 9 | public: 10 | 11 | // Get a URL suitable for streaming the given Video app ID's video 12 | virtual void GetVideoURL( AppId_t unVideoAppID ) = 0; 13 | 14 | // returns true if user is uploading a live broadcast 15 | virtual bool IsBroadcasting( int *pnNumViewers ) = 0; 16 | }; 17 | 18 | #endif // ISTEAMVIDEO001_H -------------------------------------------------------------------------------- /sdk/steam/isteamvideo002.h: -------------------------------------------------------------------------------- 1 | #ifndef ISTEAMVIDEO002_H 2 | #define ISTEAMVIDEO002_H 3 | #ifdef STEAM_WIN32 4 | #pragma once 5 | #endif 6 | 7 | class ISteamVideo002 8 | { 9 | public: 10 | // Get a URL suitable for streaming the given Video app ID's video 11 | virtual void GetVideoURL( AppId_t unVideoAppID ) = 0; 12 | 13 | // returns true if user is uploading a live broadcast 14 | virtual bool IsBroadcasting( int *pnNumViewers ) = 0; 15 | 16 | // Get the OPF Details for 360 Video Playback 17 | STEAM_CALL_BACK( GetOPFSettingsResult_t ) 18 | virtual void GetOPFSettings( AppId_t unVideoAppID ) = 0; 19 | virtual bool GetOPFStringForApp( AppId_t unVideoAppID, char *pchBuffer, int32 *pnBufferSize ) = 0; 20 | }; 21 | 22 | #endif // ISTEAMVIDEO002_H -------------------------------------------------------------------------------- /sdk/steam/steamencryptedappticket.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/sdk/steam/steamencryptedappticket.h -------------------------------------------------------------------------------- /sdk/steam/steamuniverse.h: -------------------------------------------------------------------------------- 1 | //========= Copyright � 1996-2008, Valve LLC, All rights reserved. ============ 2 | // 3 | // Purpose: 4 | // 5 | //============================================================================= 6 | 7 | #ifndef STEAMUNIVERSE_H 8 | #define STEAMUNIVERSE_H 9 | #ifdef STEAM_WIN32 10 | #pragma once 11 | #endif 12 | 13 | 14 | // Steam universes. Each universe is a self-contained Steam instance. 15 | enum EUniverse 16 | { 17 | k_EUniverseInvalid = 0, 18 | k_EUniversePublic = 1, 19 | k_EUniverseBeta = 2, 20 | k_EUniverseInternal = 3, 21 | k_EUniverseDev = 4, 22 | // k_EUniverseRC = 5, // no such universe anymore 23 | k_EUniverseMax 24 | }; 25 | 26 | 27 | #endif // STEAMUNIVERSE_H 28 | -------------------------------------------------------------------------------- /steamclient/steamclient.cpp: -------------------------------------------------------------------------------- 1 | #define WIN32_LEAN_AND_MEAN 2 | 3 | // #include "dll.h" 4 | #include "Windows.h" 5 | 6 | #ifdef _WIN64 7 | #define DLL_NAME "steam_api64.dll" 8 | #else 9 | #define DLL_NAME "steam_api.dll" 10 | #endif 11 | 12 | extern "C" __declspec(dllexport) void *CreateInterface(const char *pName, int *pReturnCode) 13 | { 14 | // PRINT_DEBUG("%s", pName); 15 | 16 | HMODULE steam_api = LoadLibraryA(DLL_NAME); 17 | 18 | void *(__stdcall * create_interface)(const char *) = reinterpret_cast(GetProcAddress(steam_api, "SteamInternal_CreateInterface")); 19 | 20 | return create_interface(pName); 21 | } 22 | -------------------------------------------------------------------------------- /tools/migrate_gse/package_linux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | 4 | if [ "$(id -u)" -ne 0 ]; then 5 | echo "Please run as root" >&2 6 | exit 1 7 | fi 8 | 9 | build_dir="bin/linux" 10 | out_dir="bin/package/linux" 11 | script_dir=$( cd -- "$( dirname -- "${0}" )" &> /dev/null && pwd ) 12 | 13 | [[ -d "$script_dir/$build_dir" ]] || { 14 | echo "[X] build folder wasn't found" >&2 15 | exit 1 16 | } 17 | 18 | apt update || exit 1 19 | apt install tar -y || exit 1 20 | 21 | mkdir -p "$script_dir/$out_dir" 22 | 23 | archive_file="$script_dir/$out_dir/migrate_gse-linux.tar.bz2" 24 | [[ -f "$archive_file" ]] && rm -f "$archive_file" 25 | 26 | pushd "$script_dir/$build_dir" 27 | tar -c -j -vf "$archive_file" $(ls -d */) 28 | popd 29 | -------------------------------------------------------------------------------- /tools/migrate_gse/package_win.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal EnableDelayedExpansion 3 | cd /d "%~dp0" 4 | 5 | set /a "MAX_THREADS=2" 6 | if defined NUMBER_OF_PROCESSORS ( 7 | :: use 70% 8 | set /a "MAX_THREADS=%NUMBER_OF_PROCESSORS% * 70 / 100" 9 | if %MAX_THREADS% lss 1 ( 10 | set /a "MAX_THREADS=1" 11 | ) 12 | ) 13 | 14 | set "ROOT=%cd%" 15 | set "BUILD_DIR=%ROOT%\bin\win" 16 | set "OUT_DIR=%ROOT%\bin\package\win" 17 | 18 | set /a "PKG_EXE_MEM_PERCENT=90" 19 | set /a "PKG_EXE_DICT_SIZE_MB=384" 20 | set "PKG_EXE=..\..\third-party\deps\win\7za\7za.exe" 21 | if not exist "%PKG_EXE%" ( 22 | 1>&2 echo:packager wasn't found 23 | goto :end_script_with_err 24 | ) 25 | 26 | if not exist "%BUILD_DIR%" ( 27 | 1>&2 echo:build folder wasn't found 28 | goto :end_script_with_err 29 | ) 30 | 31 | if not exist "%OUT_DIR%" ( 32 | mkdir "%OUT_DIR%" 33 | ) 34 | 35 | set "ACHIVE_FILE=%OUT_DIR%\migrate_gse-win.7z" 36 | if exist "%ACHIVE_FILE%" ( 37 | del /f /q "%ACHIVE_FILE%" 38 | ) 39 | 40 | call "%PKG_EXE%" a "%ACHIVE_FILE%" "%BUILD_DIR%\*" -t7z -slp -ssw -mx -myx -mmemuse=p%PKG_EXE_MEM_PERCENT% -ms=on -mqs=off -mf=on -mhc+ -mhe- -m0=LZMA2:d=%PKG_EXE_DICT_SIZE_MB%m -mmt=%MAX_THREADS% -mmtf+ -mtm- -mtc- -mta- -mtr+ || ( 41 | goto :end_script_with_err 42 | ) 43 | 44 | goto :end_script 45 | 46 | :end_script 47 | endlocal 48 | exit /b 0 49 | 50 | :end_script_with_err 51 | endlocal 52 | exit /b 1 53 | -------------------------------------------------------------------------------- /tools/migrate_gse/rebuild_linux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | 4 | venv=".env-linux" 5 | out_dir="bin/linux" 6 | build_temp_dir="bin/tmp/linux" 7 | 8 | [[ -d "$out_dir" ]] && rm -r -f "$out_dir" 9 | mkdir -p "$out_dir" 10 | 11 | [[ -d "$build_temp_dir" ]] && rm -r -f "$build_temp_dir" 12 | 13 | rm -f *.spec 14 | 15 | chmod 777 "./$venv/bin/activate" 16 | source "./$venv/bin/activate" 17 | 18 | echo building migrate_gse... 19 | pyinstaller "main.py" --distpath "$out_dir" -y --clean --onedir --name "migrate_gse" --noupx --console -i "NONE" --workpath "$build_temp_dir" --specpath "$build_temp_dir" || exit 1 20 | 21 | cp -f "README.md" "$out_dir/migrate_gse" 22 | 23 | echo; 24 | echo ============= 25 | echo Built inside: "$out_dir/" 26 | 27 | [[ -d "$build_temp_dir" ]] && rm -r -f "$build_temp_dir" 28 | 29 | deactivate 30 | -------------------------------------------------------------------------------- /tools/migrate_gse/rebuild_win.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal EnableDelayedExpansion 3 | cd /d "%~dp0" 4 | 5 | set "ROOT=%cd%" 6 | set "VENV=%ROOT%\.env-win" 7 | set "OUT_DIR=%ROOT%\bin\win" 8 | set "BUILD_TEMP_DIR=%ROOT%\bin\tmp\win" 9 | 10 | set /a "LAST_ERR_CODE=0" 11 | 12 | set "SIGNER_TOOL=..\..\third-party\build\win\cert\sign_helper.bat" 13 | if not exist "%SIGNER_TOOL%" ( 14 | 1>&2 echo:signing tool wasn't found 15 | set /a "LAST_ERR_CODE=1" 16 | goto :end_script 17 | ) 18 | 19 | if exist "%OUT_DIR%" ( 20 | rmdir /s /q "%OUT_DIR%" 21 | ) 22 | mkdir "%OUT_DIR%" 23 | 24 | if exist "%BUILD_TEMP_DIR%" ( 25 | rmdir /s /q "%BUILD_TEMP_DIR%" 26 | ) 27 | 28 | call "%VENV%\Scripts\activate.bat" 29 | 30 | echo:building migrate_gse... 31 | pyinstaller "main.py" --distpath "%OUT_DIR%" -y --clean --onedir --name "migrate_gse" --noupx --console -i "NONE" --workpath "%BUILD_TEMP_DIR%" --specpath "%BUILD_TEMP_DIR%" || ( 32 | set /a "LAST_ERR_CODE=1" 33 | goto :end_script 34 | ) 35 | call "%SIGNER_TOOL%" "%OUT_DIR%\migrate_gse\migrate_gse.exe" 36 | 37 | copy /y "README.md" "%out_dir%\migrate_gse\" 38 | 39 | echo: 40 | echo:============= 41 | echo:Built inside: "%OUT_DIR%\" 42 | 43 | goto :end_script 44 | 45 | :end_script 46 | if exist "%BUILD_TEMP_DIR%" ( 47 | rmdir /s /q "%BUILD_TEMP_DIR%" 48 | ) 49 | 50 | endlocal 51 | exit /b %LAST_ERR_CODE% 52 | -------------------------------------------------------------------------------- /tools/migrate_gse/recreate_venv_linux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | 4 | if [ "$(id -u)" -ne 0 ]; then 5 | echo "Please run as root" >&2 6 | exit 1 7 | fi 8 | 9 | python_package="python3.12" 10 | venv=".env-linux" 11 | reqs_file="requirements.txt" 12 | script_dir=$( cd -- "$( dirname -- "${0}" )" &> /dev/null && pwd ) 13 | 14 | apt update -y || exit 1 15 | apt install software-properties-common -y 16 | add-apt-repository ppa:deadsnakes/ppa -y 17 | apt update -y || exit 1 18 | apt install "$python_package" -y || exit 1 19 | apt install "$python_package-dev" -y || exit 1 20 | apt install "$python_package-venv" -y || exit 1 21 | apt install python3-dev -y || exit 1 22 | 23 | [[ -d "$script_dir/$venv" ]] && rm -r -f "$script_dir/$venv" 24 | 25 | $python_package -m venv "$script_dir/$venv" || exit 1 26 | sleep 1 27 | 28 | chmod 777 "$script_dir/$venv/bin/activate" 29 | source "$script_dir/$venv/bin/activate" 30 | 31 | pip install -r "$script_dir/$reqs_file" 32 | exit_code=$? 33 | 34 | deactivate 35 | exit $exit_code 36 | -------------------------------------------------------------------------------- /tools/migrate_gse/recreate_venv_win.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | 4 | set "ROOT=%cd%" 5 | set "VENV=%ROOT%\.env-win" 6 | set "REQS_FILE=%ROOT%\requirements.txt" 7 | 8 | set /a "LAST_ERR_CODE=0" 9 | 10 | if exist "%VENV%" ( 11 | rmdir /s /q "%VENV%" 12 | ) 13 | 14 | python -m venv "%VENV%" || ( 15 | set /a "LAST_ERR_CODE=1" 16 | goto :end_script 17 | ) 18 | 19 | timeout /t 1 /nobreak 20 | 21 | call "%VENV%\Scripts\activate.bat" 22 | pip install -r "%REQS_FILE%" 23 | set /a "LAST_ERR_CODE=%ERRORLEVEL%" 24 | call "%VENV%\Scripts\deactivate.bat" 25 | 26 | goto :end_script 27 | 28 | :end_script 29 | exit /b %LAST_ERR_CODE% 30 | -------------------------------------------------------------------------------- /tools/migrate_gse/requirements.txt: -------------------------------------------------------------------------------- 1 | pyinstaller 2 | -------------------------------------------------------------------------------- /tools/steamclient_loader/SOURCE.txt: -------------------------------------------------------------------------------- 1 | #### INFO 2 | 3 | https://github.com/Rat431/ColdAPI_Steam 4 | 5 | Original version of ColdClientLoader by Rat431. 6 | -------------------------------------------------------------------------------- /tools/steamclient_loader/linux/README.md: -------------------------------------------------------------------------------- 1 | >## How to use it: 2 | Copy both files 3 | - `steamclient.so` 4 | - `steamclient64.so` 5 | 6 | beside the script and specify the requird input, either from commdnline or via the configuration files: `ldr_*.txt` 7 | 8 | It is recommended to create a separate setup for each game via the config files 9 | to avoid specifying the commandline each time. 10 | 11 | Command line arguments will override the values in the configuration files, 12 | with an exception for the arguments passed to the executable, both specified 13 | in the cofiguration file and via command line will be passed to the executable. 14 | 15 | --- 16 | 17 | >## Command line arguments: 18 | * `-exe`: path to the executable 19 | * `-appid`: numeric app ID 20 | * `-cwd`: *`(optional)`* working directory to switch to when running the executable 21 | * `-rt`: *`(optional)`* path to Steam runtime script 22 | - ex1: `~/.steam/debian-installation/ubuntu12_64/steam-runtime-heavy.sh` 23 | - ex2: `~/.steam/debian-installation/ubuntu12_64/steam-runtime-heavy/run.sh` 24 | - ex3: `~/.steam/debian-installation/ubuntu12_32/steam-runtime/run.sh` 25 | - ex4: `~/.steam/steam_runtime/run.sh` 26 | * `--`: *`(optional)`* everything after these 2 dashes will be passed directly to the executable" 27 | 28 | **Note** that any unknown args will be passed to the executable 29 | 30 | ### Examples: 31 | * `./steamclient_loader.sh -exe ~/games/mygame/executable -appid 480` 32 | * `./steamclient_loader.sh -exe ~/games/mygame/executable -appid 480 -- -opengl` 33 | * `./steamclient_loader.sh -exe ~/games/mygame/executable -appid 480 -cwd ~/games/mygame/subdir` 34 | * `./steamclient_loader.sh -exe ~/games/mygame/executable -appid 480 -rt ~/.steam/debian-installation/ubuntu12_64/steam-runtime-heavy/run.sh` 35 | 36 | --- 37 | 38 | >## Configuraion files: 39 | Additionally, you can set these values in the equivalent configuration files, 40 | everything on a single line for each file, except `ldr_cmd.txt`: 41 | * `ldr_exe.txt`: specify the executable path in this file 42 | * `ldr_appid.txt`: specify the app ID in this file 43 | * `ldr_cwd.txt`: *`(optional)`* specify the working directory of the executable path in this file 44 | * `ldr_steam_rt.txt`: *`(optional)`* specify the path of the Steam runtime script in this file 45 | * `ldr_cmd.txt`: *`(optional)`* specify aditional arguments that will be passed to the executable in this file, 46 | this file has the exception that the arguments must be specified on separate lines 47 | 48 | -------------------------------------------------------------------------------- /tools/steamclient_loader/linux/ldr_appid.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | 480 -------------------------------------------------------------------------------- /tools/steamclient_loader/linux/ldr_cmdline.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | -steam 2 | -game 3 | -vulkan 4 | -------------------------------------------------------------------------------- /tools/steamclient_loader/linux/ldr_cwd.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | ~/games/my_game/ -------------------------------------------------------------------------------- /tools/steamclient_loader/linux/ldr_exe.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | ~/games/my_game/my_game_executable -------------------------------------------------------------------------------- /tools/steamclient_loader/linux/ldr_steam_rt.EXAMPLE.txt: -------------------------------------------------------------------------------- 1 | ~/.steam/debian-installation/ubuntu12_64/steam-runtime-heavy.sh -------------------------------------------------------------------------------- /tools/steamclient_loader/win/ColdClientLoader.ini: -------------------------------------------------------------------------------- 1 | # modified version of ColdClientLoader originally by Rat431 2 | [SteamClient] 3 | # path to game exe, absolute or relative to the loader 4 | Exe=game.exe 5 | # empty means the folder of the exe 6 | ExeRunDir= 7 | # any additional args to pass, ex: -dx11, also any args passed to the loader will be passed to the app 8 | ExeCommandLine= 9 | # IMPORTANT, unless [Persistence] Mode=2 10 | AppId= 11 | 12 | # path to the steamclient dlls, both must be set, 13 | # absolute paths or relative to the loader 14 | SteamClientDll=steamclient.dll 15 | SteamClient64Dll=steamclient64.dll 16 | 17 | [Injection] 18 | # force inject steamclient dll instead of waiting for the app to load it 19 | ForceInjectSteamClient=0 20 | 21 | # force inject GameOverlayRenderer dll instead of waiting for the app to load it 22 | ForceInjectGameOverlayRenderer=0 23 | 24 | # path to a folder containing some dlls to inject into the app upon start, absolute path or relative to this loader 25 | # this folder will be traversed recursively 26 | # additionally, inside this folder you can create a file called `load_order.txt` and 27 | # specify line by line the order of the dlls that have to be injected 28 | # each line should be the relative path of the target dll, relative to the injection folder 29 | # If this file is created then the loader will only inject the .dll files mentioned inside it 30 | # example: 31 | #DllsToInjectFolder=extra_dlls 32 | DllsToInjectFolder= 33 | 34 | # don't display an error message when a dll injection fails 35 | IgnoreInjectionError=1 36 | # don't display an error message if the architecture of the loader is different from the app 37 | # this will result in a silent failure if a dll injection didn't succeed 38 | # both the loader and the app must have the same arch for the injection to work 39 | IgnoreLoaderArchDifference=0 40 | 41 | [Persistence] 42 | # 0 = turned off 43 | # 1 = loader will spawn the exe and keep hanging in the background until you press "OK" 44 | # 2 = loader will NOT spawn exe, it will just setup the required environemnt and keep hanging in the background 45 | # you have to run the Exe manually, and finally press "OK" when you've finished playing 46 | # you have to rename the loader to "steam.exe" 47 | # it is advised to run the loader as admin in this mode 48 | Mode=0 49 | 50 | [Debug] 51 | # don't call `ResumeThread()` on the main thread after spawning the .exe 52 | ResumeByDebugger=0 53 | -------------------------------------------------------------------------------- /tools/steamclient_loader/win/extra_protection/extra_protection/stubdrm.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace stubdrm 4 | { 5 | bool patch(); 6 | bool restore(); 7 | 8 | void set_cleanup_cb(void (*fn)()); 9 | } 10 | -------------------------------------------------------------------------------- /z_original_repo_files/Makefile: -------------------------------------------------------------------------------- 1 | .DEFAULT_GOAL := all 2 | 3 | CXX=clang++ 4 | CXX_FLAGS += -fPIC -std=c++14 5 | LD_FLAGS += -shared -lprotobuf-lite -ldl -Wl,--no-undefined 6 | LIBRARY_NAME=libsteam_api.so 7 | RM = rm -f 8 | 9 | PROTOS := $(wildcard dll/*.proto) 10 | PROTO_CC := $(PROTOS:.proto=.pb.cc) 11 | PROTO_OBJ := $(PROTOS:.proto=.pb.o) 12 | PROTO_HEADERS := $(PROTOS:.proto=.pb.h) 13 | HEADERS := $(wildcard dll/*.h) $(PROTO_HEADERS) 14 | SRC_NOPROTO := $(wildcard dll/*.cpp) 15 | SRC := $(SRC_NOPROTO) $(PROTO_CC) 16 | OBJ_NOPROTO := $(SRC_NOPROTO:.cpp=.o) 17 | OBJ := $(OBJ_NOPROTO) $(PROTO_OBJ) 18 | 19 | $(PROTO_CC) : $(PROTOS) 20 | $(PROTO_HEADERS) : $(PROTO_CC) 21 | $(OBJ_NOPROTO) : $(PROTO_CC) $(PROTO_HEADERS) 22 | $(OBJ) : $(HEADERS) 23 | 24 | release: CXX_FLAGS += -DNDEBUG -DEMU_RELEASE_BUILD -Ofast 25 | release: LD_FLAGS += -lpthread 26 | release32: CXX_FLAGS += -m32 27 | release32: LD_FLAGS += -m32 28 | debug: CXX_FLAGS += -g3 -fsanitize=address 29 | debug: LD_FLAGS += -lasan 30 | release: library 31 | release32: release 32 | debug: library 33 | all: release 34 | 35 | library: $(LIBRARY_NAME) 36 | 37 | $(PROTO_CC) : 38 | protoc -I./dll/ --cpp_out=./dll/ ./dll/*.proto 39 | 40 | $(PROTO_OBJ) : %.o : %.cc 41 | $(CXX) $(CXX_FLAGS) -c -o $@ $< 42 | 43 | $(OBJ_NOPROTO) : %.o : %.cpp 44 | $(CXX) $(CXX_FLAGS) -c -o $@ $< 45 | 46 | $(LIBRARY_NAME): $(OBJ) 47 | $(CXX) $(CXX_FLAGS) -o $@ $^ $(LD_FLAGS) 48 | 49 | clean: 50 | $(RM) $(OBJ) $(LIBRARY_NAME) $(PROTO_CC) $(PROTOS:.proto=.pb.h) 51 | -------------------------------------------------------------------------------- /z_original_repo_files/Readme_debug.txt: -------------------------------------------------------------------------------- 1 | This is the debug experimental build. Note that it creates a huge STEAM_LOG.txt file where the game runs and will probably make the game lag so only use this to debug issues. 2 | -------------------------------------------------------------------------------- /z_original_repo_files/Readme_experimental.txt: -------------------------------------------------------------------------------- 1 | This is a build of my emulator that blocks all outgoing connections from the game to non LAN ips and lets you use CPY cracks that use the 2 | steam_api dll to patch the exe in memory when the SteamAPI_Init() method is called. 3 | 4 | To use a CPY style crack just rename the steam_api(64).dll crack to cracksteam_api.dll or cracksteam_api64.dll depending on the original name and replace the steamclient(64) dll with the one from this folder. 5 | Then use my emu like you normally would. (Don't forget to put a steam_appid.txt) (If the original steam_api dll is old you must also put a steam_interfaces.txt) 6 | 7 | 8 | For the LAN only connections feature: 9 | If for some reason you want to disable this feature create a file named: disable_lan_only.txt beside the steam_api dll or inside the steam_settings folder beside the steam api dll. 10 | 11 | I noticed a lot of games seem to connect to analytics services and other crap that I hate. 12 | 13 | Blocking the game from communicating with online ips without affecting the LAN functionality of my emu is a pain if you try to use a firewall so I made this special build. 14 | 15 | In this folder is an experimental build of my emulator with code that hooks a few windows socket functions. It should block all connections from the game to non LAN ips. This means the game should work without any problems for LAN play (even with VPN LAN as long as you use standard LAN ips (10.x.x.x, 192.168.x.x, etc...) 16 | 17 | It likely doesn't work for some games but it should work for most of them. 18 | 19 | Since this blocks all non LAN connections doing things like hosting a cracked server for people on the internet will not work or connecting to a cracked server that's hosted on an internet ip will not work. 20 | 21 | I will likely add this as a config option to the normal build in the future but I want to know if there are any problems first. 22 | 23 | Let me know if there are any issues. 24 | 25 | All ips except these ranges are blocked: 26 | 10.0.0.0 - 10.255.255.255 27 | 127.0.0.0 - 127.255.255.255 28 | 169.254.0.0 - 169.254.255.255 29 | 172.16.0.0 - 172.31.255.255 30 | 192.168.0.0 - 192.168.255.255 31 | 224.0.0.0 - 255.255.255.255 32 | 33 | 34 | Support for loading any dlls: 35 | Any files put in the steam_settings\load_dlls\ folder will be loaded automatically using the LoadLibraryA function. 36 | -------------------------------------------------------------------------------- /z_original_repo_files/Readme_experimental_steamclient.txt: -------------------------------------------------------------------------------- 1 | This is a build of the experimental version of my emu in steamclient mode with an included loader. See both the regular and experimental readmes for how to configure it. 2 | Note that all emu config files should be put beside the steamclient dll. You do not need to put a steam_interfaces.txt file for the steamclient version of the emu. 3 | 4 | To use the loader, put both steamclient dlls and the loader in a folder and edit the config file. Make sure you put the right appid in the ini file. 5 | -------------------------------------------------------------------------------- /z_original_repo_files/Readme_generate_interfaces.txt: -------------------------------------------------------------------------------- 1 | Just drag your steam_api.dll or steam_api64.dll on the exe file and it will generate a steam_interfaces.txt file. 2 | 3 | If it doesn't work, copy the steam_api dll beside the exe and then drag it on it or open up a command prompt and do: generate_interfaces_file.exe steam_api.dll 4 | -------------------------------------------------------------------------------- /z_original_repo_files/Readme_lobby_connect.txt: -------------------------------------------------------------------------------- 1 | This is a small tool that discovers people playing on the network using my emu and lets you launch your game with parameters that will connect you to their games. 2 | 3 | This is necessary for some games (like stonehearth). It will also let you join games with lobbies that are not public. 4 | 5 | Steam has something called rich presence (the connect key) that lets games tell your friends what command line parameters to run your game with to join their game. 6 | Most steam games also let you join lobbies in game without having started the game by starting the game with +connect_lobby . 7 | 8 | Just run this tool and follow the instructions then pick the exe of the game. Make sure that you have installed my emu on the game first and that it works or it won't work. 9 | 10 | -------------------------------------------------------------------------------- /z_original_repo_files/build_env_x64.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | rem Put in the base path in which Visual Studio is installed, default would be C:\Program Files (x86) 4 | 5 | set VS_Base_Path=C:\Program Files (x86) 6 | 7 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" goto vs2019 8 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" goto vs2017 9 | if exist "%VS_Base_Path%\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat" goto vs14 10 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat" goto vs2019_bt 11 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" goto vs2017_bt 12 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" goto vs2022 13 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" goto vs2022_bt 14 | if exist ".\sdk_standalone\set_vars64.bat" goto gitlabci 15 | 16 | :vs2022 17 | call "%VS_Base_Path%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" 18 | goto batend 19 | 20 | :vs2019 21 | call "%VS_Base_Path%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" 22 | goto batend 23 | 24 | :vs2017 25 | call "%VS_Base_Path%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" 26 | goto batend 27 | 28 | :vs14 29 | call "%VS_Base_Path%\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat" 30 | goto batend 31 | 32 | :vs2022_bt 33 | call "%VS_Base_Path%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" 34 | goto batend 35 | 36 | :vs2019_bt 37 | call "%VS_Base_Path%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat" 38 | goto batend 39 | 40 | :vs2017_bt 41 | call "%VS_Base_Path%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" 42 | goto batend 43 | 44 | :gitlabci 45 | call ".\sdk_standalone\set_vars64.bat" 46 | goto batend 47 | :batend 48 | -------------------------------------------------------------------------------- /z_original_repo_files/build_env_x86.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | rem Put in the base path in which Visual Studio is installed, default would be C:\Program Files (x86) 4 | 5 | set VS_Base_Path=C:\Program Files (x86) 6 | 7 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" goto vs2019 8 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" goto vs2017 9 | if exist "%VS_Base_Path%\Microsoft Visual Studio 14.0\VC\bin\amd64_x86\vcvarsamd64_x86.bat" goto vs14 10 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars32.bat" goto vs2019_bt 11 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat" goto vs2017_bt 12 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat" goto vs2022 13 | if exist "%VS_Base_Path%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars32.bat" goto vs2022_bt 14 | if exist ".\sdk_standalone\set_vars32.bat" goto gitlabci 15 | 16 | :vs2022 17 | call "%VS_Base_Path%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat" 18 | goto batend 19 | 20 | :vs2019 21 | call "%VS_Base_Path%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" 22 | goto batend 23 | 24 | :vs2017 25 | call "%VS_Base_Path%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" 26 | goto batend 27 | 28 | :vs14 29 | call "%VS_Base_Path%\Microsoft Visual Studio 14.0\VC\bin\amd64_x86\vcvarsamd64_x86.bat" 30 | goto batend 31 | 32 | :vs2022_bt 33 | call "%VS_Base_Path%\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars32.bat" 34 | goto batend 35 | 36 | :vs2019_bt 37 | call "%VS_Base_Path%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars32.bat" 38 | goto batend 39 | 40 | :vs2017_bt 41 | call "%VS_Base_Path%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat" 42 | goto batend 43 | 44 | 45 | :gitlabci 46 | call ".\sdk_standalone\set_vars32.bat" 47 | goto batend 48 | :batend 49 | -------------------------------------------------------------------------------- /z_original_repo_files/build_linux.sh: -------------------------------------------------------------------------------- 1 | protoc -I./dll/ --cpp_out=./dll/ ./dll/*.proto 2 | clang++ -shared -fPIC -o libsteam_api.so dll/*.cpp dll/*.cc -g3 -Wno-return-type -fsanitize=address -lasan -lprotobuf-lite -std=c++14 && echo built 3 | -------------------------------------------------------------------------------- /z_original_repo_files/build_set_protobuf_directories.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | SET PROTOBUF_X86_DIRECTORY=..\vcpkg\installed\x86-windows-static 4 | SET PROTOBUF_X64_DIRECTORY=..\vcpkg\installed\x64-windows-static 5 | 6 | rem location of protoc in protobuf directories: 7 | SET PROTOC_X86_EXE=%PROTOBUF_X86_DIRECTORY%\tools\protobuf\protoc.exe 8 | SET PROTOC_X64_EXE=%PROTOBUF_X64_DIRECTORY%\tools\protobuf\protoc.exe 9 | 10 | if exist "%PROTOBUF_X86_DIRECTORY%\lib\libprotobuf-lite.lib" ( 11 | SET PROTOBUF_X86_LIBRARY=%PROTOBUF_X86_DIRECTORY%\lib\libprotobuf-lite.lib 12 | ) else ( 13 | SET PROTOBUF_X86_LIBRARY=%PROTOBUF_X86_DIRECTORY%\lib\libprotobuf.lib 14 | ) 15 | 16 | if exist "%PROTOBUF_X64_DIRECTORY%\lib\libprotobuf-lite.lib" ( 17 | SET PROTOBUF_X64_LIBRARY=%PROTOBUF_X64_DIRECTORY%\lib\libprotobuf-lite.lib 18 | ) else ( 19 | SET PROTOBUF_X64_LIBRARY=%PROTOBUF_X64_DIRECTORY%\lib\libprotobuf.lib 20 | ) 21 | -------------------------------------------------------------------------------- /z_original_repo_files/build_steamos.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | rm -rf linux 3 | mkdir -p linux/x86 4 | mkdir -p linux/x86_64 5 | mkdir -p linux/lobby_connect 6 | mkdir -p linux/tools 7 | cp scripts/find_interfaces.sh linux/tools/ 8 | cp scripts/steamclient_loader.sh linux/tools/ 9 | ../protobuf/prefix_x86/bin/protoc -I./dll/ --cpp_out=./dll/ ./dll/*.proto 10 | g++ -m32 -shared -fPIC -fvisibility=hidden -Wl,--exclude-libs,ALL -DGNUC -DEMU_RELEASE_BUILD -DNDEBUG -DCONTROLLER_SUPPORT -s -o linux/x86/libsteam_api.so dll/*.cpp dll/*.cc controller/*.c -Wno-return-type -I../protobuf/prefix_x86/include/ -L../protobuf/prefix_x86/lib/ -lprotobuf-lite -lpthread -ldl -std=c++14 && echo built32 11 | g++ -m32 -fvisibility=hidden -Wl,--exclude-libs,ALL -DGNUC -DEMU_RELEASE_BUILD -DNDEBUG -DNO_DISK_WRITES -DLOBBY_CONNECT -s -o linux/lobby_connect/lobby_connect_x86 lobby_connect.cpp dll/*.cpp dll/*.cc -Wno-return-type -I../protobuf/prefix_x86/include/ -L../protobuf/prefix_x86/lib/ -lprotobuf-lite -lpthread -ldl -std=c++14 && echo built_lobby_connect32 12 | g++ -m32 -shared -fPIC -fvisibility=hidden -Wl,--exclude-libs,ALL -DGNUC -DEMU_RELEASE_BUILD -DSTEAMCLIENT_DLL -DNDEBUG -DCONTROLLER_SUPPORT -s -o linux/x86/steamclient.so dll/*.cpp dll/*.cc controller/*.c -Wno-return-type -I../protobuf/prefix_x86/include/ -L../protobuf/prefix_x86/lib/ -lprotobuf-lite -lpthread -ldl -std=c++14 && echo built32_steamclient 13 | ../protobuf/prefix/bin/protoc -I./dll/ --cpp_out=./dll/ ./dll/*.proto 14 | g++ -shared -fPIC -fvisibility=hidden -Wl,--exclude-libs,ALL -DGNUC -DEMU_RELEASE_BUILD -DNDEBUG -DCONTROLLER_SUPPORT -s -o linux/x86_64/libsteam_api.so dll/*.cpp dll/*.cc controller/*.c -Wno-return-type -I../protobuf/prefix/include/ -L../protobuf/prefix/lib/ -lprotobuf-lite -lpthread -ldl -std=c++14 && echo built64 15 | g++ -fvisibility=hidden -Wl,--exclude-libs,ALL -DGNUC -DEMU_RELEASE_BUILD -DNDEBUG -DNO_DISK_WRITES -DLOBBY_CONNECT -s -o linux/lobby_connect/lobby_connect_x64 lobby_connect.cpp dll/*.cpp dll/*.cc -Wno-return-type -I../protobuf/prefix/include/ -L../protobuf/prefix/lib/ -lprotobuf-lite -lpthread -ldl -std=c++14 && echo built_lobby_connect64 16 | g++ -shared -fPIC -fvisibility=hidden -Wl,--exclude-libs,ALL -DGNUC -DEMU_RELEASE_BUILD -DSTEAMCLIENT_DLL -DNDEBUG -DCONTROLLER_SUPPORT -s -o linux/x86_64/steamclient.so dll/*.cpp dll/*.cc controller/*.c -Wno-return-type -I../protobuf/prefix/include/ -L../protobuf/prefix/lib/ -lprotobuf-lite -lpthread -ldl -std=c++14 && echo built64_steamclient 17 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_debug_experimental.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | call build_set_protobuf_directories.bat 4 | "%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 5 | call build_env_x86.bat 6 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 7 | cl /Z7 /LD /IImGui /I%PROTOBUF_X86_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD /DCONTROLLER_SUPPORT /DEMU_OVERLAY /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X86_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /link /OUT:steam_api.dll 8 | cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient.dll 9 | 10 | "%PROTOC_X64_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 11 | call build_env_x64.bat 12 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 13 | cl /Z7 /LD /IImGui /I%PROTOBUF_X64_DIRECTORY%\include\ /DEMU_EXPERIMENTAL_BUILD /DCONTROLLER_SUPPORT /DEMU_OVERLAY /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X64_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /link /OUT:steam_api64.dll 14 | cl /LD steamclient.cpp /EHsc /MP12 /link /OUT:steamclient64.dll 15 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_debug_experimental_steamclient.bat: -------------------------------------------------------------------------------- 1 | cd /d "%~dp0" 2 | call build_set_protobuf_directories.bat 3 | "%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 4 | call build_env_x86.bat 5 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 6 | cl /LD /IImGui /I%PROTOBUF_X86_DIRECTORY%\include\ /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DEMU_EXPERIMENTAL_BUILD /DEMU_OVERLAY /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X86_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /link /OUT:steamclient.dll 7 | call build_env_x64.bat 8 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 9 | cl /LD /IImGui /I%PROTOBUF_X64_DIRECTORY%\include\ /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DEMU_EXPERIMENTAL_BUILD /DEMU_OVERLAY /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X64_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /link /OUT:steamclient64.dll 10 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_find_interfaces.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | mkdir release\tools 4 | del /Q release\tools\* 5 | call build_env_x86.bat 6 | cl generate_interfaces_file.cpp /EHsc /MP12 /Ox /link /debug:none /OUT:release\tools\generate_interfaces_file.exe 7 | del /Q /S release\tools\*.lib 8 | del /Q /S release\tools\*.exp 9 | copy Readme_generate_interfaces.txt release\tools\Readme_generate_interfaces.txt 10 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_lobby_connect.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | mkdir release\lobby_connect 4 | del /Q release\lobby_connect\* 5 | call build_set_protobuf_directories.bat 6 | "%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 7 | call build_env_x86.bat 8 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 9 | cl /DNO_DISK_WRITES /DLOBBY_CONNECT /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ lobby_connect.cpp dll/*.cpp dll/*.cc "%PROTOBUF_X86_LIBRARY%" Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Comdlg32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\lobby_connect\lobby_connect.exe 10 | del /Q /S release\lobby_connect\*.lib 11 | del /Q /S release\lobby_connect\*.exp 12 | copy Readme_lobby_connect.txt release\lobby_connect\Readme.txt 13 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_release.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | del /Q /S release\* 4 | rmdir /S /Q release\experimental 5 | rmdir /S /Q release\experimental_steamclient 6 | rmdir /S /Q release\lobby_connect 7 | rmdir /S /Q release 8 | mkdir release 9 | call build_set_protobuf_directories.bat 10 | "%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 11 | call build_env_x86.bat 12 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 13 | cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc "%PROTOBUF_X86_LIBRARY%" Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api.dll 14 | 15 | "%PROTOC_X64_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 16 | call build_env_x64.bat 17 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 18 | cl /LD /DEMU_RELEASE_BUILD /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ dll/*.cpp dll/*.cc "%PROTOBUF_X64_LIBRARY%" Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\steam_api64.dll 19 | copy Readme_release.txt release\Readme.txt 20 | xcopy /s files_example\* release\ 21 | call build_win_release_experimental.bat 22 | call build_win_release_experimental_steamclient.bat 23 | call build_win_lobby_connect.bat 24 | call build_win_find_interfaces.bat 25 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_release_experimental.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | mkdir release\experimental 4 | del /Q release\experimental\* 5 | call build_set_protobuf_directories.bat 6 | "%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 7 | call build_env_x86.bat 8 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 9 | cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DCONTROLLER_SUPPORT /DEMU_OVERLAY /DNDEBUG /IImGui /I%PROTOBUF_X86_DIRECTORY%\include\ /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X86_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api.dll 10 | cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP4 /Ox /link /OUT:release\experimental\steamclient.dll 11 | 12 | "%PROTOC_X64_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 13 | call build_env_x64.bat 14 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 15 | cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DCONTROLLER_SUPPORT /DEMU_OVERLAY /DNDEBUG /IImGui /I%PROTOBUF_X64_DIRECTORY%\include\ /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X64_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental\steam_api64.dll 16 | cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DNDEBUG steamclient.cpp /EHsc /MP4 /Ox /link /OUT:release\experimental\steamclient64.dll 17 | copy Readme_experimental.txt release\experimental\Readme.txt 18 | -------------------------------------------------------------------------------- /z_original_repo_files/build_win_release_experimental_steamclient.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd /d "%~dp0" 3 | mkdir release\experimental_steamclient 4 | del /Q release\experimental_steamclient\* 5 | call build_set_protobuf_directories.bat 6 | "%PROTOC_X86_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 7 | call build_env_x86.bat 8 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 9 | cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DEMU_OVERLAY /IImGui /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X86_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient.dll 10 | "%PROTOC_X64_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto 11 | cl steamclient_loader/*.cpp advapi32.lib user32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient_loader.exe 12 | copy steamclient_loader\ColdClientLoader.ini release\experimental_steamclient\ 13 | call build_env_x64.bat 14 | cl dll/rtlgenrandom.c dll/rtlgenrandom.def 15 | cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DEMU_OVERLAY /IImGui /DNDEBUG /I%PROTOBUF_X64_DIRECTORY%\include\ /Ioverlay_experimental dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/backends/imgui_impl_dx*.cpp ImGui/backends/imgui_impl_win32.cpp ImGui/backends/imgui_impl_vulkan.cpp ImGui/backends/imgui_impl_opengl3.cpp ImGui/backends/imgui_win_shader_blobs.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp overlay_experimental/System/*.cpp "%PROTOBUF_X64_LIBRARY%" opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient64.dll 16 | copy Readme_experimental_steamclient.txt release\experimental_steamclient\Readme.txt 17 | -------------------------------------------------------------------------------- /z_original_repo_files/dll/rtlgenrandom.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/z_original_repo_files/dll/rtlgenrandom.c -------------------------------------------------------------------------------- /z_original_repo_files/dll/rtlgenrandom.def: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Detanup01/gbe_fork/a7ec4847ab37ecb322a05b325e1cb46d3f7aae69/z_original_repo_files/dll/rtlgenrandom.def -------------------------------------------------------------------------------- /z_original_repo_files/generate_emu_config_README.txt: -------------------------------------------------------------------------------- 1 | Install python then run this in a terminal/powershell to install the dependencies: pip install -U steam[client] 2 | 3 | This script depends on python files that are in subfolders so make sure to download the whole folder not just the script. 4 | 5 | Using the script: python generate_emu_config.py appid 6 | 7 | You can also pass multiple appids to generate multiple configs: python generate_emu_config.py appid appid appid 8 | 9 | The appid is the number in the steam url. 10 | 11 | The email code should only be asked the first time and the sentry will be saved to the login_temp folder. 12 | 13 | This script will not save your username/password anywhere. If you don't want to always type it you must 14 | open up the script in a text editor and change: 15 | 16 | USERNAME = "" 17 | PASSWORD = "" 18 | 19 | To: 20 | 21 | USERNAME = "your_username" 22 | PASSWORD = "your_password" 23 | 24 | -------------------------------------------------------------------------------- /z_original_repo_files/website/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Goldberg Emulator

4 |
Steam emulator for GNU/Linux and Windows that emulates steam online features. Lets you play games that use the steam multiplayer apis on a LAN without steam or an internet connection.
5 | 6 |

Downloads

7 | 8 |
If the latest git build doesn't work you can try one of the old Releases
9 |
10 |
These Download links have both the Linux and Windows builds in the same package. The Linux builds are built on Steam OS so they should work wherever Steam Linux games work. The latest build is built by the Gitlab CI every time a new commit is pushed to the repo. Right now this is commit: X_LATEST_BUILD_COMMIT_HASH_X
11 | 12 |

Source Code

13 | 14 | 15 |

Help

16 | 17 |
There's also a Readme in the zip that you download. Most issues can be easily resolved by reading it (The first few lines are the most important).
18 | 19 |

Chatroom

20 | 21 | 22 |

Other Links

23 | 24 | 25 | 26 | --------------------------------------------------------------------------------