Skip to content

Luccifer/OpenTrainyard-Mobile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenTrainyardRemake

Build

A native mobile remake of the classic iOS puzzle game Trainyard by Matt Rix, based on the open-source OpenTrainyard Rust/Bevy reimplementation by Mike Tasca.

A love letter to Trainyard.

This project exists because Trainyard is one of the most brilliant puzzle games ever made, and it deserves to live on. The original app disappeared from stores years ago, and its creator has moved on. This remake is built by people who love this game as much as you do — not for profit, not for clout, just so that anyone can pick it up and play it again.

If you enjoy this, go find Matt Rix on Twitter (@MattRix) and tell him his game is still amazing.

Platforms

Platform Status Location
Android ✅ Playable MVP Android/
iOS ✅ Playable MVP iOS/

Features

Both Android and iOS versions include:

  • All 152 original puzzle levels
  • Railroad-style track sprites matching the original game
  • Touch-based track drawing with curve detection
  • Dual-track switch tiles with visual flip on train passage
  • Color mixing, splitting, painting mechanics
  • Speed control slider
  • Persistent progress (solved puzzles) and speed settings
  • Auto-advance to next level on completion

Project Structure

OpenTrainyardRemake/
├── Android/                     — Native Android app (Kotlin)
│   ├── app/src/main/kotlin/
│   │   └── com/opentrainyard/game/
│   │       ├── engine/          — Pure game logic
│   │       │   ├── Types.kt     — GameState, Tile, Train, Track, etc.
│   │       │   └── Simulator.kt — Tick pipeline, collision, parsing
│   │       ├── data/            — Persistence & levels
│   │       │   ├── GamePrefs.kt — SharedPreferences (speed, progress)
│   │       │   └── Puzzles.kt   — 152 level definitions
│   │       └── ui/              — Android UI
│   │           ├── MainActivity.kt    — Level selection
│   │           ├── GameActivity.kt    — Game screen
│   │           ├── GameView.kt        — Touch + tick loop
│   │           └── GameRenderer.kt    — Canvas sprite rendering
│   └── ...
├── iOS/                         — Native iOS app (SwiftUI)
│   └── OpenTrainyard/
│       └── OpenTrainyard/
│           ├── Engine/          — Pure game logic
│           │   ├── Types.swift     — GameState, Tile, Train, Track, etc.
│           │   └── Simulator.swift — Tick pipeline, collision, parsing
│           ├── Data/            — Persistence & levels
│           │   ├── GamePrefs.swift — UserDefaults (speed, progress)
│           │   └── Puzzles.swift   — 152 level definitions
│           ├── UI/              — SwiftUI views
│           │   ├── LevelSelectView.swift — Level selection
│           │   ├── GamePlayView.swift    — Game screen
│           │   └── GameBoardView.swift   — Canvas rendering & touch
│           ├── Assets.xcassets  — App icons & colors
│           ├── sprites/         — Game sprite assets
│           └── Info.plist
├── LICENSE
└── README.md

Build — Android

Requirements

  • Android Studio Meerkat (2024.3+) or later
  • JDK 21 (bundled with Android Studio or install separately)
  • Android SDK 35 (API level 35)
  • Kotlin 2.1.0
  • Gradle 8.13 (wrapper included)

Android Studio (Recommended)

  1. Open Android Studio
  2. File → Open → select the Android/ directory
  3. Wait for Gradle sync to complete
  4. Connect an Android device via USB (enable USB Debugging)
  5. Click Run or press Shift+F10

Command Line

# Set environment (adjust paths for your system)
export JAVA_HOME="/path/to/jdk-21"
export ANDROID_SDK_ROOT="/path/to/Android/Sdk"

# Build
cd Android
./gradlew assembleDebug

# Install on connected device
adb install -r -t app/build/intermediates/apk/debug/app-debug.apk

Build — iOS

Requirements

  • Xcode 16.4+ (or latest version)
  • macOS 15.0+ (for latest Xcode)
  • iOS 16.0+ target device or simulator
  • Swift 5.0+

Xcode (Recommended)

  1. Open Xcode
  2. File → Open → select the iOS/OpenTrainyard/OpenTrainyard.xcodeproj file
  3. Wait for indexing to complete
  4. Select a target device or simulator from the scheme menu
  5. Important: Configure code signing:
    • Select the project in the navigator
    • Select the "OpenTrainyard" target
    • Go to Signing & Capabilities tab
    • Check Automatically manage signing
    • Select your Team from the dropdown
  6. Click Run or press ⌘R

Command Line

cd iOS/OpenTrainyard

# Build for simulator
xcodebuild -project OpenTrainyard.xcodeproj \
  -scheme OpenTrainyard \
  -destination 'platform=iOS Simulator,name=iPhone 16' \
  build

# Or use xcodebuild to run on connected device
# (requires proper provisioning profile setup)

Credits

  • Matt Rix (@MattRix) — Original Trainyard game creator. All game design rights belong to him.
  • Mike Tasca (@micoloth) — Open-source Bevy/Rust reimplementation of the game logic.
  • Gleb Karpushkin — Android/iOS native mobile remake.

Assets

Original sprite assets were extracted from the Trainyard Android app (version 1.1, circa 2012) published by Noodlecake Studios. These assets are used here solely for non-commercial fan recreation purposes. All rights to the original artwork belong to Matt Rix.

License

See LICENSE for full terms. The mobile source code is strictly non-commercial.

Disclaimer

This is a fan-made project created out of love for the original Trainyard game. It is not affiliated with, endorsed by, or connected to Matt Rix or Noodlecake Studios in any way. No original game assets are included. If the original creator has any objections, this project will be taken down immediately — just open an issue or reach out.

About

one of the greatest mobile puzzle game "Trainyard" REMAKE for iOS and Android

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors