Rotating Art Launcher
Celeste
About the project
Celeste es un videojuego de plataformas publicado por Maddy Makes Games Inc. en 2018.
Official project information
<a href="README.md">English</a> | <a href="README_ZH.md">中文</a>
<br/><br/>
<br/>Rotating Art Launcher is an Android application that lets you run .NET-based desktop games on mobile devices.<br/> Supports native/original releases of FNA/XNA and Mono games, as well as mod loaders like tModLoader, SMAPI, and Everest.<br/> The runtime supports both SDL2 and SDL3, with an integrated Mono runtime for compatible games.
</div><details> <summary><h2>📖 Table of Contents</h2></summary>
- Supported Games
- Features
- Getting Started
- Building from Source
- Project Architecture
- Contributing
- License
- Acknowledgments
- Contact
🎮 Supported Games
<div align="center">| Game | Edition / Runtime | Status |
|---|---|---|
| Terraria | Original release · Mono | ✅ Supported |
| Celeste | Original release · Mono / Everest | ✅ Supported |
| FEZ | Original release · Mono | ✅ Supported |
| Terraria | tModLoader | ✅ Supported |
| Stardew Valley | SMAPI | ✅ Supported |
| Other FNA/XNA and Mono games | — | 🚧 In progress |
✨ Features
<table> <tr> <td width="50%" valign="top">🧩 Runtime & Frameworks
- Full .NET 10.0 Runtime integrated
- Integrated Mono runtime for original Mono-based games
- Native .NET assembly execution
- FNA / XNA game framework support
- Built-in MonoMod patch system
🔌 SDL Compatibility
- SDL2 runtime and native libraries supported
- SDL3 runtime and native libraries supported
- Select the SDL version required by the game at launch
🖥️ Multiple Renderers
| Renderer | Description |
|---|---|
| Native OpenGL ES 3 | Fastest, direct GPU |
| GL4ES | Best compatibility |
| GL4ES + ANGLE | Vulkan, for Snapdragon |
| MobileGlues | GL 4.6 → GLES 3.2 |
| SDL3 + Vulkan | Native SDL3 Vulkan renderer |
🎛️ Control System
- Virtual Joysticks — Custom touch controls
- Virtual Buttons — Irregular shapes
- Virtual Keyboard — Drag & transparency
- Xbox Controller — Bluetooth / USB
- Mouse + Keyboard — Touch mapping
- Layout Editor — Visual customization
- Control Packs — Shareable layouts
🌐 More Features
- GOG Integration — Download purchased games
- EasyTier Multiplayer — P2P VPN networking
- Patch System — Auto game compatibility
- Multi-Process — Isolated game process
- Dynamic Loading — On-demand native libs
- Compose UI — Material 3 modern design
🚀 Getting Started
Requirements
- 📱 Android 9.0 (API 28) or higher
- 🏗️ ARM64-v8a architecture device
- 💾 At least 2GB free storage
Installation
1. Download the latest APK from the Releases page
2. Enable "Install from Unknown Sources"
3. Install the APK and launch the app
4. Follow the setup wizard
<div align="center">
</div>
Usage
- Open Rotating Art Launcher
- Tap "+" to add a game (or download via GOG)
- Select the game executable
- Configure the renderer, SDL version (SDL2 or SDL3), runtime (.NET or Mono), and controls; with SDL3, Vulkan rendering is available
- Launch and enjoy 🎮
🛠️ Building from Source
<details> <summary><b>Click to expand build guide</b></summary>Prerequisites
| Tool | Version |
|---|---|
| Android Studio | Latest stable |
| Android NDK | r28 |
| CMake | 3.22.1+ |
| JDK | 21 |
| Git | With LFS support |
Build Steps
# Clone the repository
git clone --recursive https://github.com/FireworkSky/RotatingartLauncher.git
cd RotatingartLauncher
# Build the Debug APK
./gradlew assembleDebug
Output: app/build/outputs/apk/debug/
📁 Project Architecture
<details> <summary><b>Click to expand directory structure</b></summary>RotatingartLauncher/
├── app/ # Main Android application module
│ └── src/main/
│ ├── java/.../ralaunch/ # Kotlin/Java source code
│ │ ├── core/ # Game launch core logic
│ │ ├── dotnet/ # .NET runtime integration
│ │ ├── renderer/ # Renderer config & loading
│ │ ├── controls/ # Virtual control system
│ │ ├── gog/ # GOG Galaxy integration
│ │ ├── easytier/ # EasyTier multiplayer service
│ │ ├── patch/ # Patch management system
│ │ └── ui/ # Compose UI screens
│ ├── cpp/ # Native C/C++ (SDL2, GL4ES ...)
│ └── assets/ # Runtime resources
├── shared/ # Kotlin Multiplatform shared module
│ └── src/
│ ├── commonMain/ # Shared UI, domain, data layer
│ └── androidMain/ # Android-specific implementations
└── patches/ # C# game patch files
</details>
🤝 Contributing
Contributions are welcome! Feel free to submit Issues and Pull Requests.
<details> <summary><b>Click to expand contributing guide</b></summary>- Fork this repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Code Style
- Follow Android Kotlin coding guidelines
- Use meaningful variable and function names
- Add comments for complex logic
Reporting Issues
- Check existing Issues to avoid duplicates
- Create a new issue with:
- Clear description of the problem
- Steps to reproduce
- Device info (model, Android version)
- Logs (if applicable)
📄 License
This project is licensed under the GNU General Public License v3.0 (GPLv3). See the LICENSE file for details.
<details> <summary><b>Third-Party Licenses</b></summary>| Library | License |
|---|---|
| SDL2 | Zlib License |
| GL4ES | MIT License |
| .NET Runtime | MIT License |
| FNA3D | Microsoft Public License |
🙏 Acknowledgments
<div align="center">Special thanks to the following open-source projects and communities
</div>| Project | Description |
|---|---|
| SDL Project | Cross-platform media library |
| GL4ES | OpenGL compatibility layer |
| .NET Runtime | .NET runtime |
| FNA | XNA compatibility framework |
| ANGLE | OpenGL ES over Vulkan |
| EasyTier | P2P networking |
| PojavLauncher | Launcher inspiration |
Thanks to all contributors and Patreon supporters!
</div>