A port of a Windows Phone 7 XNA game to iOS/macOS using Swift and SpriteKit.
Nathaniel is a top-down RTS mobile game. Control Nathaniel and his robot companion Hermes as they fight alien invaders from a crashed vessel to save Earth.
Nathaniel/
├── Legacy/ # Original WP7/XNA codebase (C#, ~2011)
├── Nathaniel Shared/ # Swift/SpriteKit game code
├── Nathaniel iOS/ # iOS app target
└── Nathaniel macOS/ # macOS app target
Requirements: Xcode 15+, macOS Sonoma+
Run from Xcode:
- Open
Nathaniel.xcodeproj - Select
Nathaniel iOSorNathaniel macOSscheme - Press Cmd+R
Build from command line:
# iOS
xcodebuild -project Nathaniel.xcodeproj -scheme "Nathaniel iOS" build
# macOS
xcodebuild -project Nathaniel.xcodeproj -scheme "Nathaniel macOS" buildSmoke test from command line:
# macOS (builds + runs a headless smoke test)
bash scripts/smoke_macos.sh
# iOS Simulator (builds + installs + launches + screenshots)
bash scripts/smoke_ios_sim.shSee docs/automation.md for Codex MCP setup and script options.
- TMX map loading and rendering (Tiled format)
- Player character (Nathaniel) with sprite animations
- Touch/click-to-move controls
- Camera following player
This is a learning project for Swift/SpriteKit development. See AGENTS.md for detailed architecture docs and legacy code reference.
Issue tracking: Uses bd (beads) - run bd ready to see available work.
Source control: Uses git
This project uses automated code quality tools:
- SwiftFormat - Auto-formats Swift code
- SwiftLint - Catches code quality issues
- pre-commit - Runs checks on every commit
./scripts/setup-hooks.shThis installs the tools via Homebrew and configures git hooks.
# Format all Swift files
swiftformat .
# Lint all Swift files
swiftlint
# Auto-fix some lint issues
swiftlint --fixIf you need to commit without running checks:
git commit --no-verify