🌐 Sprache / Language: English · Deutsch
A native Asteroids-style arcade shooter for macOS and iOS (Swift 6 · SpriteKit) with a Commodore‑64‑inspired vector look, rendered at modern high resolution and butter‑smooth frame rates (Apple Silicon, ProMotion 120 Hz). Almost every graphic is procedural vector geometry — only the two bosses use contour textures — and sound effects use real-time synthesis or optional bundled recordings; the bundled media are two chiptune music tracks, the boss textures and an optional pack of recorded sound effects. Three game modes on macOS (two on iOS), nine power‑ups, gravity wells, enemy saucers, two bosses, a pixel‑font HUD, and a deterministic replay system that can render promo GIFs headlessly.
➜ Download the latest signed & notarized DMG — open it, drag Exploids into Applications and double‑click. Signed with a Developer ID and notarized by Apple, so it opens without a Gatekeeper warning. Requires macOS 11 or newer (Apple Silicon).
Prefer to build from source? See Build & run below.
| Option drone + shield | In-game glossary |
|---|---|
![]() |
![]() |
| Laser beam | Gravity well + screen bomb |
![]() |
![]() |
The macOS build uses Swift Package Manager and compiles into a .app bundle; the iOS port has its own Xcode project under ios/. The whole toolchain is scriptable (handy for automation and AI agents):
./build-app.sh # build -> Exploids.app (double-clickable)
open Exploids.app # launch
.build/release/exploids # launch the bare binary (logs in the terminal)
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer swift test # run the unit testsThree entry points, deliberately separated:
./build.sh # build only, stays in the project directory (wrapper for build-app.sh)
./install.sh # build, notarize, install into /Applications
./release.sh # build, notarize, package the DMG — never installs
./release.sh --publish # also tags + uploads the DMG to GitHub Releases
./release.sh --no-finder-layout # skip the Finder window layout (headless runs)install.sh and release.sh both notarize the app itself and staple its
ticket before anything else happens. That matters: an app that only travels
inside a notarized disk image loses its guarantee the moment someone drags it
out. release.sh then notarizes and staples the disk image as well.
Notarization needs a notarytool keychain profile. Keychain profiles are local to
each Mac and are never synchronized, so the name is taken from NOTARY_PROFILE
or from this clone's own configuration:
git config --local exploids.notaryProfile <profile>
xcrun notarytool store-credentials <profile> --apple-id <apple-id> --team-id <team-id>Pick on the start screen (▲/▼ to switch, ◀/▶ for the starting level, Space to start):
- Ancient Asteroids — the classic mode. Fixed playfield; objects wrap around the screen edges.
- Mad Meteoroids — the whole field (asteroids, gravity wells, power‑ups, starfield) rotates continuously around the screen center while your ship stays exempt (Crazy‑Comets style). Rotation speed ramps with the level, with scheduled direction changes and occasional "record‑scratch" jolts at higher levels.
- Event Horizon — currently macOS only. Moving gameplay objects disappear once they are fully outside the screen. The ship reflects off the edges. One permanent black hole remains at the center; this mode creates no additional black holes.
Nine pickups, each with its own vector glyph:
| Glyph | Power‑up | Effect |
|---|---|---|
S |
Shield | Energy shield absorbs a hit |
W |
Spread | Triple spread shot |
R |
Rapid | Greatly increased fire rate |
O |
Option | A satellite drone fires alongside you |
B |
Bomb | Screen‑clearing explosion |
L |
Laser beam | Hold to fire a beam; stops at the edge in Event Horizon, wraps in the other modes |
T |
Rear | Adds a backward‑firing shot |
C |
Compress | Shrinks the ship to ~30 % (smaller target) |
+ |
Extra life | Revive at the starting position with brief invincibility |
Beyond the splitting rocks, the field fills up as you climb the levels:
- Enemy saucers — a large green UFO that fires in random directions, and a small pink one that snipes at your ship. Both drift in with a slight homing pull.
- Gravity wells — black holes that warp space, drag everything inward and crush the ship on contact.
- Imploding asteroids — magenta‑outlined rocks that collapse into a fresh gravity well when you shoot them (no extra wells in Event Horizon).
- Wobbling bombs — red rocks that pulse and grow through stages, then detonate into a spread of fast fragments.
- Space Cat — a stalking boss that takes cover behind asteroids, leads your movement and fires twin eye‑beams; takes three hits to drive off.
- The Idol — a floating skull surrounded by a stone ring, with a bright contour and eyes that track your ship. It drifts in, dodges your fire and spews an armada of saucers from its mouth; takes ten hits to destroy.
- Start screen: ▲/▼ switch game mode · ◀/▶ choose starting level · Space/Enter start · D (or 30 s idle) watch an autopilot demo · I glossary · 1–5 watch a high‑score replay
- In game: Arrow keys / WASD to fly · Space to fire (hold for continuous fire; with the Laser beam power-up active, hold to sweep the beam) · F toggle auto-fire · M toggle music · N switch synthesized / recorded effects · Esc pause / quit
- Replay view: Esc exits the replay back to the title screen.
- High scores are saved locally; enter your name on the board when you make the cut.
- Cheat: press
#for a free extra life — handy for testing, or for a relaxed, no‑pressure run.
The simulation is deterministic: every run is recorded as just its seed plus your key presses, so it can be reproduced bit‑for‑bit. Two things fall out of that:
- During recording and replay, resizing scales the view while the simulation keeps its starting dimensions. The title screen fits the window again.
- Playback requires the matching simulation logic version. Version 0.15.4 uses logic version 9 and rejects older recordings; their saved bytes and high scores remain intact.
- Watch high‑score runs again — on the title screen press
1–5to replay that entry exactly as it was played;Escexits. - Render promo GIFs headlessly — turn a replay into a clean, cursor‑free animated GIF straight from the command line, no window needed:
exploids --render-demo --out demo.gif # scripted sample run -> GIF (pipeline self-test)
exploids --export-replay 0 --out run.replay # export high-score entry #0's replay to a file
exploids --render-replay run.replay --out run.gif --scale 480 --fps 30GIF export preserves duration in whole hundredths of a second and combines rates above 50 FPS; video keeps the requested frame rate.
Exploids is a hobby clone, not a product. For honest context, with the weak spots named too:
Versus the original Asteroids (1979) — the original is monochrome vector graphics with splitting rocks, two saucers, hyperspace and an extra life at 10,000 points. Exploids keeps that core and adds a rotating-field mode (Mad Meteoroids), the bounded Event Horizon mode on macOS, nine power-ups, gravity wells, imploding and wobbling special asteroids, two bosses, a sweeping laser beam, color, chiptune music, an in-game glossary, local high-score entry and deterministic replays you can re-watch or export as GIFs.
Versus Maelstrom — Maelstrom (Ambrosia, 1992; a GPL SDL port since 1995, today an SDL3 build that runs on Apple Silicon) is the best-known still-maintained open-source Asteroids clone for the Mac, and the fairer yardstick: it already has power-ups, bonus objects and rich sound. Where Exploids actually differs:
- Rendering: Exploids is real-time vector geometry drawn procedurally at high resolution and 120 Hz ProMotion; Maelstrom is bitmap / sprite raster art.
- Audio: Exploids synthesizes its sound effects live on the audio thread and offers optional bundled effect recordings; Maelstrom plays sampled sound.
- Mechanics: the rotating Mad Meteoroids mode, gravity wells and imploding asteroids are specific to Exploids.
- Stack: native Swift 6 / SpriteKit / AppKit on Apple Silicon, versus a C/SDL port.
Where Maelstrom is plainly ahead: it has single- and multiplayer (cooperative and competitive), game-controller and touch support, runs on more platforms, and carries 30 years of refinement and community. Exploids offers single-player gameplay with keyboard controls on macOS and touch controls on iOS. It also ships non-commercial music (see below), a restriction Maelstrom's CC-licensed assets don't impose.
- Code: MIT — © 2026 Daniel Müller.
- Heading font
Sources/GameCore/Fonts/PressStart2P-Regular.ttf(Press Start 2P): SIL Open Font License 1.1 (Sources/GameCore/Fonts/OFL.txt) — free for any use, including commercial. ⚠️ MusicSources/GameCore/Music/*.mp3(two chiptune tracks): generated with musely.ai on its Free Plan — personal, non‑commercial use only. These tracks are not covered by the MIT code license and keep musely.ai's separate terms. Before any commercial use, replace them with your own / CC0 / commercially‑licensed music. Procedural effects are generated by the code; the optional SFX recordings have separate provenance. See bundled assets.
The iOS port under ios/ uses SpriteKit, on-screen touch controls and the same GameCore engine as the macOS build. It supports iPhone and iPad running iOS 17 or later in landscape orientation. Touch controls, simultaneous input, release, background/resume, audio and display passed an iPhone device check on 2026-10-01.
The app icon and asset catalog are present; Xcode generates the launch screen. bash ios/generate.sh creates the Xcode project and copies its version from VERSION. GameController support is not implemented yet. An App Store release is currently not planned.
macOS 11+, Apple Silicon. To build: a full Xcode install (the scripts use DEVELOPER_DIR=/Applications/Xcode.app/... for the SpriteKit/XCTest toolchain).
Status: private / personal project — a procedural, vector‑style homage to the 1979 Asteroids arcade classic, with no code or assets taken from it.




