Skip to content

Repository files navigation

iPinball 🎱

A native iOS & macOS pinball machine in the style of the 90s tables: one neon playfield, six chained missions, multiball and a wizard mode.

Report Bug Request Feature CI

iPinball gameplay on iPhone: launching the ball, pop bumpers and the bonus display

✨ Features

  • ✅ A full 90s playfield — three pop bumpers, two slingshots, a five-target drop bank, four standup targets, two ramps, two orbits, a spinner, two saucers, a magnet and the P-I-N-B rollover lanes
  • ✅ Two flippers on real pin joints, as on the classic 90s tables, a pull-and-release plunger, and a nudge that tilts the table if you push your luck three times in two seconds
  • ✅ Six chained missions — Warm-Up, Ramp Rush, Target Frenzy, Orbit Loop, Lock 3 and Jackpot Hunt — leading into the Final Shot wizard mode, tracked on a lit mission ladder under the top arch
  • ✅ A 90s skill shot: the lit lane walks across P-I-N-B while you aim, and the flipper buttons move the lit lanes (lane change)
  • ✅ An amber dot-matrix display for the score, the missions, jackpots, TILT and the end-of-ball bonus counted out line by line
  • ✅ Three-ball multiball where everything scores double, lit jackpots and super jackpots
  • ✅ Combo multiplier up to 8× on back-to-back ramps and orbits, player multiplier up to 5× from the lanes and the drop bank
  • ✅ Ball save, extra balls, end-of-ball bonus, a stuck-ball watchdog and a ten-entry high score table with initials
  • ✅ Lamp inserts that flash at the shot to make, general illumination that goes out on a tilt, lamp flashes on a jackpot and cabinet movement when nudged
  • ✅ Fully synthesised audio and Core Haptics — no sound files, every effect generated at launch
  • ✅ Bilingual PT-PT / English in-app language switch, independent of your device language
  • ✅ Dark, Light and System appearance, with the iVidi.dev orange, burnt yellow and black
  • ✅ Animated splash screen with developer credits, then straight into the main menu
  • ✅ Touch controls on iPhone and iPad, full keyboard play on the Mac, and Reduce Motion support throughout
  • ✅ Shared SwiftUI codebase running natively on both iPhone/iPad and Mac

🛠️ Tech Stack

Category Technology
Language Swift 5.9
UI SwiftUI
Physics & Rendering SpriteKit
Audio AVFoundation (synthesized SFX and music)
Haptics Core Haptics
Project XcodeGen
Min. iOS 17.0
Min. macOS 14.0

🚀 Quick Start

Prerequisites

  • Xcode 15+ on macOS
  • XcodeGen if you change the file structure (brew install xcodegen)

Installation

git clone https://github.com/VidiPT89/iPinball.git
cd iPinball
open iPinball.xcodeproj

Pick the iPinball-iOS or iPinball-macOS scheme and run (⌘R).

The Xcode project is generated with XcodeGen from project.yml. If you add or move Swift files, regenerate it with xcodegen generate.

📖 Usage

  1. Watch the splash screen, then choose Play from the main menu
  2. Drag down anywhere and release to pull the plunger — the further you pull, the harder the ball is launched
  3. Tap the left or right half of the screen for that flipper
  4. Flick a finger sideways while holding a flipper to nudge the table. Three nudges in two seconds cause a TILT and cost you the ball
  5. Shoot a saucer to start a mission. Finish all six to unlock Final Shot, and clear Lock 3 to start multiball
  6. Chain ramps and orbits within four seconds to build the combo up to 8×, and complete the P-I-N-B lanes to raise the player multiplier up to 5×
  7. On the Mac: ← / → flippers, Space hold and release to launch, N / M nudge, Esc pause
  8. Switch language, appearance, sound and controls any time from Settings

🧪 Testing

xcodebuild -project iPinball.xcodeproj -scheme iPinball-macOS -destination 'platform=macOS' test
xcodebuild -project iPinball.xcodeproj -scheme iPinball-iOS -destination 'generic/platform=iOS Simulator' build
xcodebuild -project iPinball.xcodeproj -scheme iPinball-macOS -destination 'platform=macOS' build

The suite covers rules, table clearances, persistence, translations and SpriteKit scene regressions, including an off-screen table render. Release builds keep the macOS hardened runtime enabled; Debug disables it so XCTest can load its test bundle.

📄 License

Distributed under the MIT License. See LICENSE for details.

👨‍💻 Author

David Arsénio Martins

🤝 Contributing

Contributions, issues and feature requests are welcome. Feel free to check the issues page.


Developed by David Arsénio Martins

⭐ If you like this project, give it a star!

About

Native iOS & macOS pinball game built with SwiftUI and SpriteKit — 90s-style table with ramps, orbits, six missions, multiball and tilt, bilingual PT-PT/EN, dark and light theming.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages