2021-10-17 06:49:17 +02:00
<!-- markdownlint - disable - file MD033 -->
2021-01-29 17:34:45 +01:00
# SpaceCadetPinball
2021-10-17 06:49:17 +02:00
## Summary
2021-12-24 07:09:40 +01:00
Reverse engineering of `3D Pinball for Windows - Space Cadet` , a game bundled with Windows.
2021-10-17 06:49:17 +02:00
## How to play
Place compiled executable into a folder containing original game resources (not included).\
2021-02-20 13:58:16 +01:00
Supports data files from Windows and Full Tilt versions of the game.
2021-09-23 11:16:58 +02:00
2021-10-17 06:49:17 +02:00
## Known source ports
2021-10-22 11:34:25 +02:00
| Platform | Author | URL |
| ------------------ | --------------- | ---------------------------------------------------------------------------------------------------------- |
| PS Vita | Axiom | < https: / / github . com / suicvne / SpaceCadetPinball_Vita > |
| Emscripten | alula | < https: / / github . com / alula / SpaceCadetPinball > < br > Play online: < https: / / alula . github . io / SpaceCadetPinball > |
| Nintendo Switch | averne | < https: / / github . com / averne / SpaceCadetPinball-NX > |
| webOS TV | mariotaku | < https: / / github . com / webosbrew / SpaceCadetPinball > |
| Android (WIP) | Iscle | https://github.com/Iscle/SpaceCadetPinball |
2021-10-28 06:53:57 +02:00
| Nintendo Wii | MaikelChan | https://github.com/MaikelChan/SpaceCadetPinball |
| Nintendo 3DS | MaikelChan | https://github.com/MaikelChan/SpaceCadetPinball/tree/3ds |
2021-10-22 11:34:25 +02:00
| Nintendo Wii U | IntriguingTiles | https://github.com/IntriguingTiles/SpaceCadetPinball-WiiU |
2022-01-26 06:15:41 +01:00
| MorphOS | BeWorld | https://www.morphos-storage.net/?id=1688897 |
2022-03-31 11:44:03 +02:00
| AmigaOS 4 | rjd324 | http://aminet.net/package/game/actio/spacecadetpinball-aos4 |
2022-07-06 08:47:47 +02:00
| Android (WIP) | fexed | https://github.com/fexed/Pinball-on-Android |
2021-09-23 11:21:18 +02:00
2021-10-15 13:07:25 +02:00
Platforms covered by this project: desktop Windows, Linux and macOS.
2021-10-17 06:49:17 +02:00
< br >
< br >
< br >
< br >
< br >
< br >
## Source
* `pinball.exe` from `Windows XP` (SHA-1 `2A5B525E0F631BB6107639E2A69DF15986FB0D05` ) and its public PDB
* `CADET.EXE` 32bit version from `Full Tilt! Pinball` (SHA-1 `3F7B5699074B83FD713657CD94671F2156DBEDC4` )
## Tools used
`Ghidra` , `Ida` , `Visual Studio`
## What was done
* All structures were populated, globals and locals named.
* All subs were decompiled, C pseudo code was converted to compilable C++. Loose (namespace?) subs were assigned to classes.
## Compiling
Project uses `C++11` and depends on `SDL2` libs.
### On Windows
2021-09-09 10:40:54 +02:00
Download and unpack devel packages for `SDL2` and `SDL2_mixer` .\
2021-10-17 06:49:17 +02:00
Set paths to them in `CMakeLists.txt` , see suggested placement in `/Libs` .\
Compile with Visual Studio; tested with 2019.
### On Linux
2021-09-09 10:40:54 +02:00
Install devel packages for `SDL2` and `SDL2_mixer` .\
2021-10-07 11:53:56 +02:00
Compile with CMake; tested with GCC 10, Clang 11.\
2021-10-17 06:49:17 +02:00
To cross-compile for Windows, install a 64-bit version of mingw and its `SDL2` and `SDL2_mixer` distributions, then use the `mingwcc.cmake` toolchain.
2021-12-14 10:40:44 +01:00
[![Packaging status ](https://repology.org/badge/tiny-repos/spacecadetpinball.svg )](https://repology.org/project/spacecadetpinball/versions)
Some distributions provide a package in their repository. You can use those for easier dependency management and updates.
2021-12-29 07:46:09 +01:00
This project is available as Flatpak on [Flathub ](https://flathub.org/apps/details/com.github.k4zmu2a.spacecadetpinball ).
2021-10-17 06:49:17 +02:00
### On macOS
2023-07-26 13:39:40 +02:00
Install XCode (or at least Xcode Command Line Tools with `xcode-select --install` ) and CMake.
**Manual compilation:**
2021-10-17 06:49:17 +02:00
* **Homebrew**: Install the `SDL2` , `SDL2_mixer` homebrew packages.
* **MacPorts**: Install the `libSDL2` , `libSDL2_mixer` macports packages.
Compile with CMake. Ensure that `CMAKE_OSX_ARCHITECTURES` variable is set for either `x86_64` Apple Intel or `arm64` for Apple Silicon.
2021-01-29 17:34:45 +01:00
2021-09-29 03:42:22 +02:00
Tested with: macOS Big Sur (Intel) with Xcode 13 & macOS Montery Beta (Apple Silicon) with Xcode 13.
2023-07-26 13:39:40 +02:00
**Automated compilation:**
Run the `build-mac-app.sh` script from the root of the repository. The app will be available in a DMG file named `SpaceCadetPinball-<version>-mac.dmg` .
Tested with: macOS Ventura (Apple Silicon) with Xcode Command Line Tools 14 & macOS Big Sur on GitHub Runner (Intel) with XCode 13.
2021-10-17 06:49:17 +02:00
## Plans
* ~~Decompile original game~~
* ~~Resizable window, scaled graphics~~
* ~~Loader for high-res sprites from CADET.DAT~~
2021-10-30 11:51:24 +02:00
* ~~Cross-platform port using SDL2, SDL2_mixer, ImGui~~
2023-07-03 10:49:55 +02:00
* Full Tilt Cadet features
* Localization support
* Maybe: Support for the other two tables - Dragon and Pirate
* Maybe: Game data editor
2021-10-17 06:49:17 +02:00
## On 64-bit bug that killed the game
2021-01-29 17:34:45 +01:00
I did not find it, decompiled game worked in x64 mode on the first try.\
It was either lost in decompilation or introduced in x64 port/not present in x86 build.\
Based on public description of the bug (no ball collision), I guess that the bug was in `TEdgeManager::TestGridBox`