# fireworksky/rotatingartlauncher architecture

> Architecture diagram of the GitHub repository fireworksky/rotatingartlauncher, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fireworksky/rotatingartlauncher
- Repository: https://github.com/fireworksky/rotatingartlauncher

## Overview

Rotating Art Launcher is an Android launcher for running .NET desktop games, especially FNA/XNA titles and supported mod-loader games. The principal workflow is to add or download a game, select its executable, configure rendering and controls, then launch it in an isolated game process. The README also documents GOG downloads, compatibility patches, EasyTier multiplayer, and shareable control packs. Relationships among unsampled features are shown only where documented; source excerpts confirm the process launcher’s patch lookup and runtime-launch calls.

Main entry points: [`app/src/main/java/com/app/ralaunch/feature/main/ui`](https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/main/ui) (Game library UI), [`app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt`](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt) (Game process), [`app/src/main/java/com/app/ralaunch/core/platform/runtime/GameLauncher.kt`](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/GameLauncher.kt) (Game launcher), [`app/src/main/java/com/app/ralaunch/feature/controls/packs/ControlPackManager.kt`](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/controls/packs/ControlPackManager.kt) (Control packs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_acquisition["Game acquisition"]
  node_game_ui["Game library UI"]
  node_game_repo["Game repository"]
  node_gog["GOG downloads"]
  node_installer["Game installer"]
end

subgraph group_launch["Launch runtime"]
  node_patches["Patch manager<br/>[PatchManager.kt]"]
  node_process["Game process"]
  node_game_launcher["Game launcher<br/>[GameLauncher.kt]"]
  node_dotnet[".NET launcher<br/>[DotNetLauncher.kt]"]
  node_renderers["Renderer system"]
  node_native_sdl["SDL native layer<br/>[SDLActivity.java]"]
end

subgraph group_controls["Controls and multiplayer"]
  node_control_editor["Control layouts"]
  node_control_packs["Control packs"]
  node_easytier["EasyTier VPN"]
end

subgraph group_app["App services"]
  node_app_entry["App entry<br/>[RaLaunchApp.kt]"]
  node_settings["Settings<br/>[SettingsAccess.kt]"]
  node_storage["Storage paths"]
  node_http["HTTP client"]
  node_announcements["Announcements"]
end

node_user(("Player"))
node_external_gog(("GOG services"))
node_external_packs(("Control pack repository"))

node_user -->|"chooses game"| node_game_ui
node_game_ui -.->|"manages library"| node_game_repo
node_user -->|"downloads game"| node_gog
node_gog -.->|"requests downloads"| node_external_gog
node_user -->|"imports game"| node_installer
node_game_ui -->|"launches game"| node_process
node_process -->|"queries patches"| node_patches
node_process -->|"launches assembly"| node_game_launcher
node_game_launcher -.->|"starts runtime"| node_dotnet
node_user -->|"configures renderer"| node_renderers
node_game_launcher -.->|"uses renderer"| node_renderers
node_dotnet -.->|"runs game framework"| node_native_sdl
node_user -->|"configures controls"| node_control_editor
node_user -->|"gets layouts"| node_control_packs
node_control_packs -->|"downloads packs"| node_external_packs
node_user -->|"starts multiplayer"| node_easytier
node_user -.->|"configures app"| node_settings
node_app_entry -.->|"initializes settings"| node_settings
node_app_entry -.->|"initializes services"| node_storage
node_announcements -->|"fetches content"| node_http
node_control_packs -->|"fetches pack data"| node_http

click node_app_entry "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/RaLaunchApp.kt"
click node_game_ui "https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/main/ui"
click node_game_repo "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/di/service/GameRepositoryServiceV3.kt"
click node_gog "https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/gog"
click node_installer "https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/installer"
click node_patches "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/patch/data/PatchManager.kt"
click node_process "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt"
click node_game_launcher "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/GameLauncher.kt"
click node_dotnet "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/dotnet/DotNetLauncher.kt"
click node_renderers "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/AndroidRendererRegistry.kt"
click node_native_sdl "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/org/libsdl/app/SDLActivity.java"
click node_control_editor "https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/controls"
click node_control_packs "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/controls/packs/ControlPackManager.kt"
click node_easytier "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/network/easytier/EasyTierVpnService.kt"
click node_settings "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/common/SettingsAccess.kt"
click node_storage "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/di/service/StoragePathsProviderServiceV1.kt"
click node_http "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/common/JsonHttpRepositoryClient.kt"
click node_announcements "https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/announcement/AnnouncementRepositoryService.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_game_ui,node_game_repo,node_gog,node_installer toneBlue
class node_patches,node_process,node_game_launcher,node_dotnet,node_renderers,node_native_sdl toneAmber
class node_control_editor,node_control_packs,node_easytier toneMint
class node_app_entry,node_settings,node_storage,node_http,node_announcements toneRose
class node_user,node_external_gog,node_external_packs toneIndigo
```

## Components

### Game acquisition

- [Game library UI](https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/main/ui): `app/src/main/java/com/app/ralaunch/feature/main/ui`
- [Game repository](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/di/service/GameRepositoryServiceV3.kt): `app/src/main/java/com/app/ralaunch/core/di/service/GameRepositoryServiceV3.kt`
- [GOG downloads](https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/gog): `app/src/main/java/com/app/ralaunch/feature/gog`
- [Game installer](https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/installer): `app/src/main/java/com/app/ralaunch/feature/installer`

### Launch runtime

- [Patch manager](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/patch/data/PatchManager.kt): `app/src/main/java/com/app/ralaunch/feature/patch/data/PatchManager.kt`
- [Game process](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt): `app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt`
- [Game launcher](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/GameLauncher.kt): `app/src/main/java/com/app/ralaunch/core/platform/runtime/GameLauncher.kt`
- [.NET launcher](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/dotnet/DotNetLauncher.kt): `app/src/main/java/com/app/ralaunch/core/platform/runtime/dotnet/DotNetLauncher.kt`
- [Renderer system](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/runtime/AndroidRendererRegistry.kt): `app/src/main/java/com/app/ralaunch/core/platform/runtime/AndroidRendererRegistry.kt`
- [SDL native layer](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/org/libsdl/app/SDLActivity.java): `app/src/main/java/org/libsdl/app/SDLActivity.java`

### Controls and multiplayer

- [Control layouts](https://github.com/fireworksky/rotatingartlauncher/tree/main/app/src/main/java/com/app/ralaunch/feature/controls): `app/src/main/java/com/app/ralaunch/feature/controls`
- [Control packs](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/controls/packs/ControlPackManager.kt): `app/src/main/java/com/app/ralaunch/feature/controls/packs/ControlPackManager.kt`
- [EasyTier VPN](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/platform/network/easytier/EasyTierVpnService.kt): `app/src/main/java/com/app/ralaunch/core/platform/network/easytier/EasyTierVpnService.kt`

### App services

- [App entry](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/RaLaunchApp.kt): `app/src/main/java/com/app/ralaunch/RaLaunchApp.kt`
- [Settings](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/common/SettingsAccess.kt): `app/src/main/java/com/app/ralaunch/core/common/SettingsAccess.kt`
- [Storage paths](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/di/service/StoragePathsProviderServiceV1.kt): `app/src/main/java/com/app/ralaunch/core/di/service/StoragePathsProviderServiceV1.kt`
- [HTTP client](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/core/common/JsonHttpRepositoryClient.kt): `app/src/main/java/com/app/ralaunch/core/common/JsonHttpRepositoryClient.kt`
- [Announcements](https://github.com/fireworksky/rotatingartlauncher/blob/main/app/src/main/java/com/app/ralaunch/feature/announcement/AnnouncementRepositoryService.kt): `app/src/main/java/com/app/ralaunch/feature/announcement/AnnouncementRepositoryService.kt`

### Other components

- **Player**
- **GOG services**
- **Control pack repository**

## Connections

- Player → Game library UI: chooses game (evidence: `README.md`)
- Game library UI → Game repository: manages library
- Player → GOG downloads: downloads game (evidence: `README.md`)
- GOG downloads → GOG services: requests downloads
- Player → Game installer: imports game (evidence: `README.md`)
- Game library UI → Game process: launches game (evidence: `README.md`)
- Game process → Patch manager: queries patches (evidence: `app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt`)
- Game process → Game launcher: launches assembly (evidence: `app/src/main/java/com/app/ralaunch/core/platform/android/ProcessLauncherService.kt`)
- Game launcher → .NET launcher: starts runtime (evidence: `app/src/main/java/com/app/ralaunch/core/platform/runtime/GameLauncher.kt`)
- Player → Renderer system: configures renderer (evidence: `README.md`)
- Game launcher → Renderer system: uses renderer
- .NET launcher → SDL native layer: runs game framework
- Player → Control layouts: configures controls (evidence: `README.md`)
- Player → Control packs: gets layouts (evidence: `README.md`)
- Control packs → Control pack repository: downloads packs
- Player → EasyTier VPN: starts multiplayer (evidence: `README.md`)
- Player → Settings: configures app
- App entry → Settings: initializes settings (evidence: `app/src/main/java/com/app/ralaunch/RaLaunchApp.kt`)
- App entry → Storage paths: initializes services (evidence: `app/src/main/java/com/app/ralaunch/RaLaunchApp.kt`)
- Announcements → HTTP client: fetches content (evidence: `app/src/main/java/com/app/ralaunch/feature/announcement/AnnouncementRepositoryService.kt`)
- Control packs → HTTP client: fetches pack data (evidence: `app/src/main/java/com/app/ralaunch/feature/controls/packs/ControlPackRepositoryService.kt`)
