{"id":13759974,"url":"https://github.com/alula/SpaceCadetPinball","last_synced_at":"2025-05-10T10:31:12.769Z","repository":{"id":45074149,"uuid":"411263684","full_name":"alula/SpaceCadetPinball","owner":"alula","description":"Emscripten port of 3D Pinball for Windows – Space Cadet decompilation","archived":false,"fork":true,"pushed_at":"2024-02-04T10:27:52.000Z","size":15026,"stargazers_count":387,"open_issues_count":6,"forks_count":42,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-07T05:48:02.293Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://alula.github.io/SpaceCadetPinball/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"k4zmu2a/SpaceCadetPinball","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alula.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-28T12:01:35.000Z","updated_at":"2025-05-02T09:40:03.000Z","dependencies_parsed_at":"2023-02-13T00:46:06.761Z","dependency_job_id":null,"html_url":"https://github.com/alula/SpaceCadetPinball","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alula%2FSpaceCadetPinball","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alula%2FSpaceCadetPinball/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alula%2FSpaceCadetPinball/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alula%2FSpaceCadetPinball/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alula","download_url":"https://codeload.github.com/alula/SpaceCadetPinball/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253401076,"owners_count":21902600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T13:01:01.695Z","updated_at":"2025-05-10T10:31:10.609Z","avatar_url":"https://github.com/alula.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# SpaceCadetPinball\n**Summary:** Reverse engineering of `3D Pinball for Windows – Space Cadet`, a game bundled with Windows.\n\n**How to play:** Place compiled executable into a folder containing original game resources (not included).\\\nSupports data files from Windows and Full Tilt versions of the game.\n\n**Known source ports:**\n| Platform | Author | URL |\n| --- | --- | --- |\n| PS Vita | Axiom | \u003chttps://github.com/suicvne/SpaceCadetPinball_Vita\u003e |\n\nPlatforms covered by this project: desktop Windows and Linux.\n\\\n\\\n\\\n\\\n\\\n\\\n**Source:**\n * `pinball.exe` from `Windows XP` (SHA-1 `2A5B525E0F631BB6107639E2A69DF15986FB0D05`) and its public PDB\n * `CADET.EXE` 32bit version from `Full Tilt! Pinball` (SHA-1 `3F7B5699074B83FD713657CD94671F2156DBEDC4`)\n\n**Tools used:** `Ghidra`, `Ida`, `Visual Studio`\n\n**What was done:**\n * All structures were populated, globals and locals named.\n * All subs were decompiled, C pseudo code was converted to compilable C++. Loose (namespace?) subs were assigned to classes.\n\n**Compiling:**\\\nProject uses `C++11` and depends on `SDL2` libs.\\\nOn Windows:\\\nDownload and unpack devel packages for `SDL2` and `SDL2_mixer`.\\\nSet paths to them in CMakeLists.txt, see suggested placement in /Libs.\\\nCompile with Visual Studio; tested with 2019. \n\nOn Linux:\\\nInstall devel packages for `SDL2` and `SDL2_mixer`.\\\nCompile with CMake; tested with GCC 10, Clang 11. \n\n**Plans:**\n * ~~Decompile original game~~\n * ~~Resizable window, scaled graphics~~\n * ~~Loader for high-res sprites from CADET.DAT~~\n * Misc features of Full Tilt: 3 music tracs, multiball, centered textboxes, etc.\n * Cross-platform port\n   * Using SDL2, SDL2_mixer, ImGui\n   * Maybe: Android port\n * Maybe x2: support for other two tables \n   * Table specific BL (control interactions and missions) is hardcoded, othere parts might be also patched\n\n**On 64-bit bug that killed the game:**\\\nI did not find it, decompiled game worked in x64 mode on the first try.\\\nIt was either lost in decompilation or introduced in x64 port/not present in x86 build.\\\nBased on public description of the bug (no ball collision), I guess that the bug was in `TEdgeManager::TestGridBox`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falula%2FSpaceCadetPinball","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falula%2FSpaceCadetPinball","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falula%2FSpaceCadetPinball/lists"}