Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
82a164e
[WIP] macOS: Add ARM64 (Apple Silicon) support
mateusbentes Feb 20, 2026
0ba8dc5
Add missing InfoPlist.strings for macOS localization
mateusbentes Feb 20, 2026
0111cf6
Add missing OSX/English.lproj/MainMenu.xib required for macOS build
mateusbentes Feb 20, 2026
3f7e384
Add Xcode build phase to auto-generate pnglibconf.h
mateusbentes Feb 20, 2026
41b1d18
Remove missing Boost.Signals v1 source files from Xcode build
mateusbentes Feb 20, 2026
77f60d1
Remove missing libpng x86 MMX files from Xcode build
mateusbentes Feb 20, 2026
a0fa617
Fix SDL2 header search paths for macOS Homebrew (ARM64 + Intel)
mateusbentes Feb 20, 2026
cdee396
Add RTSimpleApp/source to Xcode header search paths for ParticleTestC…
mateusbentes Feb 20, 2026
6651c7f
Fix ParticleTestComponent paths to point to Proton SDK location
mateusbentes Feb 20, 2026
1d7125a
Fix ParticleTestComponent paths: RTSimpleApp is in proton/, not shared/
mateusbentes Feb 20, 2026
ad8ec62
Fix ParticleTestComponent path: proton/ is sibling of RTDink/, not gr…
mateusbentes Feb 20, 2026
1ef5da2
Update README/INSTALL: document macOS build requirements (FMOD, SDL2,…
mateusbentes Feb 20, 2026
920c78f
Skip FMOD in CI: RT_NO_FMOD guard in App.cpp for macOS no-FMOD builds
mateusbentes Feb 20, 2026
619c417
Remove libfmod.dylib from Frameworks and CopyFiles build phases
mateusbentes Feb 20, 2026
88e62d1
Include SDL2/SDL.h for PLATFORM_OSX in App.cpp
mateusbentes Feb 20, 2026
8f95a5d
Fix linker: add SDL2, EmulatedPointerComponent, LogDisplayComponent, …
mateusbentes Feb 20, 2026
25b1351
Fix SDL2 linking and add TouchDragComponent to Xcode project
mateusbentes Feb 20, 2026
4f4cd85
Add SDL2Main.cpp to Xcode project (defines g_bIsFullScreen)
mateusbentes Feb 20, 2026
2d96f0e
Fix duplicate symbols: define g_bIsFullScreen in App.cpp, remove SDL2…
mateusbentes Feb 20, 2026
9901919
Fix g_bIsFullScreen: define only on PLATFORM_OSX, not Linux
mateusbentes Feb 20, 2026
8867d69
Update docs: macOS ARM64 build now working
mateusbentes Feb 20, 2026
b5a9a1c
Exclude PNG NEON ARM files from x86_64 builds in Xcode
mateusbentes Feb 20, 2026
3836cf4
Update docs: macOS ARM64-only, CI verified, correct directory layout …
mateusbentes Feb 20, 2026
945bbbc
Remove CI note from INSTALL.md macOS section
mateusbentes Feb 20, 2026
4653ddc
Fix macOS FMOD install paths to match Xcode project build settings
mateusbentes Mar 3, 2026
2c201c2
Remove missing bin/game reference from Xcode project
mateusbentes Mar 3, 2026
01e286f
Skip install_name_tool for libfmod when not present
mateusbentes Mar 3, 2026
f7ca1ac
Fix Xcode signing: use automatic signing with no team for portability
mateusbentes Mar 3, 2026
a835353
SDL2: link as framework, support ~/Library/Frameworks for non-admin i…
mateusbentes Mar 3, 2026
903465a
INSTALL.md: add no-admin SDL2 install option via ~/Library/Frameworks
mateusbentes Mar 3, 2026
9a40c7c
Fix PhaseScriptExecution: fix shellPath, guard otool, add alwaysOutOf…
mateusbentes Mar 3, 2026
624037d
Fix SDL2 framework path: use stable opt/sdl2/Frameworks instead of ha…
mateusbentes Mar 3, 2026
62008ab
Revert "Fix SDL2 framework path: use stable opt/sdl2/Frameworks inste…
mateusbentes Mar 3, 2026
0af53e4
Fix SDL2 framework path: use stable opt/sdl2/Frameworks instead of ha…
mateusbentes Mar 3, 2026
aa0e1f8
Fix Generate pnglibconf.h script: handle missing prebuilt gracefully,…
mateusbentes Mar 3, 2026
a334fbc
Fix pnglibconf.h script: try all possible proton/shared layouts inclu…
mateusbentes Mar 3, 2026
1c499ca
Use PROTON_SHARED variable for all shared/ paths, defaults to ../../s…
mateusbentes Mar 3, 2026
28e946c
Fix shared path: auto-create ../../shared symlink to ../proton/shared…
mateusbentes Mar 3, 2026
5cf1218
Suppress deprecated NSOpenGL and char* warnings in all configs
mateusbentes Mar 3, 2026
263b3de
Add ../proton/RTSimpleApp/source to HEADER_SEARCH_PATHS for inside-re…
mateusbentes Mar 3, 2026
0a9aa98
Fix pre-build script: also create ../../proton symlink for inside-rep…
mateusbentes Mar 3, 2026
8edddaf
Suppress all warnings in OTHER_CFLAGS for old proton SDK compatibility
mateusbentes Mar 3, 2026
d35fa2b
Add per-file compiler flags to MyOpenGLView.mm to suppress pointer ca…
mateusbentes Mar 3, 2026
edea2af
Pre-build script: patch MyOpenGLView.mm nil->0 cast fix for ARM64
mateusbentes Mar 3, 2026
1982bea
Switch macOS audio from FMOD to SDL2_mixer (RT_USE_SDL_AUDIO)
mateusbentes Mar 3, 2026
d34d776
Switch to SDL2_mixer framework, update INSTALL.md with no-admin instr…
mateusbentes Mar 3, 2026
bee2620
Use AudioManagerSDL for macOS when RT_USE_SDL_AUDIO is defined
mateusbentes Mar 3, 2026
1d7c0c6
macOS: remove FMOD/stub audio, use SDL audio only
mateusbentes Mar 3, 2026
b576d3b
README: update macOS audio from FMOD to SDL2_mixer
mateusbentes Mar 3, 2026
0fcf61c
INSTALL.md: remove FMOD reference from macOS section
mateusbentes Mar 3, 2026
31c46c4
Add SDL2_mixer header and framework search paths to all configs
mateusbentes Mar 3, 2026
0db3a65
Pre-build: create SDL_mixer.h symlink inside SDL2.framework/Headers f…
mateusbentes Mar 3, 2026
2c49263
Add rpath for SDL2 frameworks to fix runtime dyld error
mateusbentes Mar 3, 2026
6430ce5
Fix XIB: replace AppDelegate with MainController as app delegate
mateusbentes Mar 3, 2026
0c86556
Fix AddTextToLog: create save dir if missing, don't assert on fopen f…
mateusbentes Mar 3, 2026
1f5afbf
Fix AddTextToLog: use _mkdir on Windows, mkdir on POSIX
mateusbentes Mar 3, 2026
64f9fa5
Fix mkdir: include sys/stat.h on non-Windows
mateusbentes Mar 3, 2026
fbea8db
Add gamepad support for macOS via GamepadProviderSDL2
mateusbentes Mar 4, 2026
a1b34a7
Include GamepadProviderSDL2.h for PLATFORM_OSX to fix build error
mateusbentes Mar 4, 2026
ec3a830
Add GamepadProviderSDL2.cpp to Xcode project to fix linker error on m…
mateusbentes Mar 4, 2026
f18d9e9
Add GamepadSDL2.cpp and SDL2Main.cpp to Xcode project to fix remainin…
mateusbentes Mar 4, 2026
a12fe95
Fix macOS gamepad duplicate symbols: define g_sig_SDLEvent in App.cpp…
mateusbentes Mar 4, 2026
bdf3294
Fix Variant::Set call: cast SDL_Event* to Entity* like SDL2Main.cpp does
mateusbentes Mar 4, 2026
83f7eb4
Add GamepadProviderSDL2.cpp and GamepadSDL2.cpp to Xcode project (fix…
mateusbentes Mar 4, 2026
a57623a
Remove GamepadProviderSDL2/SDL2 from iOS Xcode project (they belong o…
mateusbentes Mar 4, 2026
6d54d9f
Restore GamepadProviderSDL2/SDL2 to iOS project file navigator only (…
mateusbentes Mar 4, 2026
dc71374
Fix duplicate SDL event polling: remove SDL_InitSubSystem and SDL_Pol…
mateusbentes Mar 4, 2026
efe1c6c
Restore SDL_InitSubSystem and SDL_PollEvent in App.cpp for macOS (ups…
mateusbentes Mar 4, 2026
e5f85af
Fix indentation in App::Update
mateusbentes Mar 4, 2026
84c30a7
Separate Linux-only SDL window guards from macOS: GetSDLWindow/Update…
mateusbentes Mar 4, 2026
4076341
Fix compile error: OnFullscreenToggleRequestMultiplatform is Linux-on…
mateusbentes Mar 4, 2026
ef6b3c0
Fix linker error: add macOS stub for OnFullscreenToggleRequestMultipl…
mateusbentes Mar 4, 2026
74e46a6
Fix indentation in fullscreen block
mateusbentes Mar 4, 2026
966ecf4
Fix: extend SDL window/fullscreen block to PLATFORM_OSX, remove dupli…
mateusbentes Mar 4, 2026
841578a
Fix indentation
mateusbentes Mar 5, 2026
be2f600
Remove SDL_InitSubSystem from App.cpp: GamepadProviderSDL2::Init() ha…
mateusbentes Mar 5, 2026
182e529
INSTALL.md: add duplicate symbols fix tip for MacInCloud users
mateusbentes Mar 5, 2026
086296a
Fix OSX build: restore SDL files, define g_sig_SDLEvent in App.cpp fo…
mateusbentes Mar 5, 2026
3ec267f
Update INSTALL.md: fix macOS build instructions
mateusbentes Mar 5, 2026
1b8e565
Restore Option B (no admin) SDL2 install instructions in macOS section
mateusbentes Mar 5, 2026
a95b899
Ops
mateusbentes Mar 5, 2026
773e66f
Update INSTALL.md: universal binary, SDL2 framework install instructions
mateusbentes Mar 6, 2026
28b3f94
Update README: macOS is now universal binary (Intel + Apple Silicon)
mateusbentes Mar 6, 2026
e83e2bb
macOS: bring all App.cpp fixes from test_mac_arm64
mateusbentes Mar 6, 2026
078f41c
ci: add workflow to auto-sync master from test_mac_arm64 (no .github)
mateusbentes Mar 6, 2026
51ffaa3
chore: remove .github from master (workflows only in test_mac_arm64)
mateusbentes Mar 6, 2026
1c32113
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
4b549e3
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
1f4e691
macOS: forward-declare OSXToggleFullscreen instead of including OSXUt…
mateusbentes Mar 6, 2026
cf5ceda
multiplatform: fix OnFullscreenToggleRequestMultiplatform for all pla…
mateusbentes Mar 6, 2026
c54b98f
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
2db29bc
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
de87e12
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
61f7f91
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
6569443
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
fae3c44
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
91b7958
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
fa02422
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
3ce8eaa
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
830259e
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
ecdb41c
ci: retrigger build after drawRect init fix
mateusbentes Mar 6, 2026
812d24b
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
e7f1323
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 6, 2026
d1c6b50
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 7, 2026
c4f2c0c
chore: sync master from test_mac_arm64 [skip ci]
github-actions[bot] Mar 9, 2026
2891564
Add macOS GameController files to OSX Xcode project
mateusbentes Mar 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 68 additions & 12 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ See [README.md](README.md) for download links if you just want to play the game.
| **Linux** | CMake | Proton SDK cloned inside project, uses SDL2 + SDL2_mixer for audio |
| **iOS** | Xcode | Proton SDK sibling layout, uses FMOD for audio |
| **Android** | Gradle + CMake | Proton SDK sibling layout, uses FMOD for audio |
| **macOS** | Xcode | Broken/unmaintained |
| **macOS** | Xcode | Universal binary (Intel + Apple Silicon), uses SDL2 + SDL2_mixer for audio (see [macOS section](#macos)) |
| **HTML5** | Emscripten | See [Proton HTML5 setup](https://www.rtsoft.com/wiki/doku.php?id=proton:html5_setup) |

All platforms require the **Dink Smallwood game data** (`dink/` directory) to play. See [README.md](README.md#just-want-to-play) for how to obtain it.
Expand Down Expand Up @@ -92,23 +92,79 @@ proton/

---

## macOS (broken/unmaintained)
## macOS

> **Note:** The macOS build has not been maintained for a long time and likely does not build without fixes. It is left here for reference.
The macOS build uses the Xcode project at `OSX/RTDink.xcodeproj`.

The Xcode project is at the repo root (`RTDink.xcodeproj`). Same sibling layout as Windows:
- **Supported architectures:** Universal binary — runs natively on both **Intel (x86_64)** and **Apple Silicon (ARM64 / M1+)**.
- **Audio:** Uses **SDL2** + **SDL2_mixer** — no FMOD required.
- **SDL2 frameworks are bundled inside the `.app`** — no SDL2 installation required to run the game.

### Directory layout

Clone both repos as **siblings**:

```
proton/
shared/ <-- Proton SDK
RTDink/
RTDink.xcodeproj
some_folder/
proton/ <-- Proton SDK (cloned here)
shared/
RTDink/ <-- this repo (cloned here)
OSX/
RTDink.xcodeproj
```

1. Clone [Proton SDK](https://github.com/SethRobinson/proton)
2. Clone this repo inside the Proton directory
3. Open `RTDink.xcodeproj` in Xcode
4. Build and run (may require fixes)
The Xcode project references `../../shared/` (relative to `OSX/`) to find the Proton SDK.

### Steps

1. Clone the Proton SDK and this repo as siblings:

```bash
git clone https://github.com/SethRobinson/proton.git
git clone https://github.com/SethRobinson/RTDink.git
```

2. Install **SDL2** and **SDL2_mixer** frameworks:

**Option A — DMG frameworks** (recommended, works on all Macs, required for universal binary):
```bash
# SDL2 framework
curl -L -o ~/SDL2.dmg "https://github.com/libsdl-org/SDL/releases/download/release-2.30.9/SDL2-2.30.9.dmg"
hdiutil attach ~/SDL2.dmg
mkdir -p ~/Library/Frameworks
cp -r /Volumes/SDL2/SDL2.framework ~/Library/Frameworks/
hdiutil detach /Volumes/SDL2

# SDL2_mixer framework
curl -L -o ~/SDL2_mixer.dmg "https://github.com/libsdl-org/SDL_mixer/releases/download/release-2.8.0/SDL2_mixer-2.8.0.dmg"
hdiutil attach ~/SDL2_mixer.dmg
cp -r "/Volumes/SDL2_mixer/SDL2_mixer.framework" ~/Library/Frameworks/
hdiutil detach /Volumes/SDL2_mixer
```
The Xcode project looks for both frameworks in `~/Library/Frameworks/` automatically. These are universal frameworks (arm64 + x86_64) so the resulting `.app` runs on both Intel and Apple Silicon Macs.

**Option B — Homebrew** (native arch only, not suitable for universal binary):
```bash
brew install sdl2 sdl2_mixer
```
> **Note:** Homebrew on Apple Silicon only provides arm64 libraries. Use Option A if you need a universal binary.

3. Generate the required libpng config header:

```bash
LIBPNG=proton/shared/Irrlicht/source/Irrlicht/libpng
cp "$LIBPNG/pnglibconf.h.prebuilt" "$LIBPNG/pnglibconf.h"
```

4. Open the Xcode project:

```bash
open RTDink/OSX/RTDink.xcodeproj
```

5. Select the **Release** configuration and build (`⌘B`).

> **Note:** The SDL2 frameworks are automatically embedded into the `.app` bundle at build time, so the final app is self-contained and does not require SDL2 to be installed on the target machine.

---

Expand Down
4 changes: 4 additions & 0 deletions OSX/English.lproj/InfoPlist.strings
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/* Localized versions of Info.plist keys */

CFBundleGetInfoString = "Dink Smallwood HD v2.08, Copyright © 2024 Robinson Technologies";
NSHumanReadableCopyright = "Copyright © 2024, Robinson Technologies";
90 changes: 90 additions & 0 deletions OSX/English.lproj/MainMenu.xib
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantiationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="MainController">
</customObject>
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="Dink Smallwood HD" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Dink Smallwood HD" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About Dink Smallwood HD" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Services" id="NMo-om-nkN">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
<menuItem title="Hide Dink Smallwood HD" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit Dink Smallwood HD" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</objects>
</document>
Loading