Muonline
No description available
Install / Use
/learn @bernatvadell/MuonlineREADME
MuOnline Clone
<div align="center">A cross-platform MuOnline client implementation built with .NET 10 and MonoGame framework.
Features • Quick Start • Building • Architecture • Contributing
</div>⚠️ Educational Purpose Disclaimer This project is created strictly for educational and research purposes to explore game client architecture, network protocols, and cross-platform development with .NET and MonoGame. This is a non-commercial, open-source learning project that demonstrates reverse engineering and game development concepts.
Demo
https://youtu.be/_ekXCQI2byE
🎮 Features
- 🌐 Cross-Platform Support - Windows (OpenGL/DirectX), Linux, macOS, Android, and iOS
- 🎨 Full 3D Rendering - MonoGame-based graphics engine with dynamic lighting and effects
- 🎯 Dual Graphics Backends - Choose between OpenGL (compatibility) or DirectX 11 (performance)
- 📦 Original Data Compatibility - Supports Season 20 (1.20.61) game data files
- 🔌 Network Protocol - Season 6 (S6) protocol implementation
- 🎯 Multiplayer Ready - Full networking stack with packet handling system
- 🖼️ Custom UI System - Resolution-independent UI with virtual coordinates
- 🗺️ Terrain Rendering - Heightmap-based terrain with walkability attributes
- 🏃 Character Animation - BMD skeletal animation system
- 💡 Real-Time Lighting - Dynamic lighting with shader support
- ⚡ Performance Optimized - Multi-threaded packet processing with main thread scheduling
📋 Prerequisites
Required Software
| Component | Version | Download Link | |-----------|---------|---------------| | .NET SDK | 10.0+ | Download | | Git | Latest | Download | | MuOnline Data | Season 20 (1.20.61) | Download | | Data S6 Patch | Season 6 | Download |
Platform-Specific Requirements
<details> <summary><b>⊞ Windows</b></summary>- Windows 10/11 (64-bit)
- Visual Studio 2022 (optional, for IDE support)
Graphics Backend Options:
- OpenGL (MuWinGL) - Better hardware compatibility, works on older GPUs
- DirectX 11 (MuWinDX) - Better performance on modern hardware, Windows-only
Recommended: Try DirectX first for best performance. Use OpenGL if you encounter graphics issues or have older hardware.
</details> <details> <summary><b>🐧 Linux</b></summary>- Compatible with most x64 distributions
- Required packages:
libgdiplus,libopenal-dev
# Ubuntu/Debian
sudo apt-get install libgdiplus libopenal-dev
# Fedora
sudo dnf install libgdiplus openal-soft-devel
</details>
<details>
<summary><b>🍎 macOS</b></summary>
- macOS 11.0+ (Big Sur or later)
- Xcode Command Line Tools
xcode-select --install
</details>
<details>
<summary><b>📱 Android</b></summary>
- Android SDK (API Level 21+)
- Java Development Kit (JDK) 11 or later
- macOS with Xcode installed
- Valid Apple Developer account (for device deployment)
- iOS 10.0+ target
🚀 Quick Start
1️⃣ Clone the Repository
git clone https://github.com/xulek/muonline.git
cd muonline
2️⃣ Download Game Data
This client requires Season 20 (1.20.61) client data files for assets (models, textures, maps) but communicates using Season 6 protocol.
- Download: MU Red 1.20.61 Full Data
- Extract the archive to a location on your system
- Note the path to the
Datafolder
3️⃣ Configure Data Path
Open Client.Main/Constants.cs and update line 25:
// Windows
public static string DataPath = @"C:\Games\MU_Red_1_20_61_Full\Data";
// Linux/macOS
public static string DataPath = "/home/user/Games/MU_Red_1_20_61_Full/Data";
4️⃣ Configure Server Settings
Edit Client.Main/appsettings.json:
{
"MuOnlineSettings": {
"ConnectServerHost": "localhost",
"ConnectServerPort": 44405,
"ProtocolVersion": "Season6",
"ClientVersion": "1.04d",
"ClientSerial": "0123456789ABCDEF"
}
}
5️⃣ Set Up Server (Recommended: OpenMU)
This client is designed to work with OpenMU, an open-source MuOnline server implementation.
Quick Start with Docker:
# Download and run OpenMU server
curl -o docker-compose.yml https://raw.githubusercontent.com/MUnique/OpenMU/master/deploy/all-in-one/docker-compose.yml
docker-compose up -d
The server will be available at localhost:44405 (matches default client configuration).
Alternative: You can also connect to any Season 6 compatible MuOnline server.
6️⃣ Restore Tools & Build
# Restore .NET tools
dotnet tool restore
# Build the solution
dotnet build
7️⃣ Run the Client
# Windows (DirectX 11 - Recommended)
dotnet run --project ./MuWinDX/MuWinDX.csproj -f net10.0-windows -c Debug -p:MonoGameFramework=MonoGame.Framework.WindowsDX
# Windows (OpenGL - For compatibility)
dotnet run --project ./MuWinGL/MuWinGL.csproj -f net10.0-windows -c Debug -p:MonoGameFramework=MonoGame.Framework.DesktopGL
# Linux
dotnet run --project ./MuLinux/MuLinux.csproj -f net10.0 -c Debug
# macOS
dotnet run --project ./MuMac/MuMac.csproj -f net10.0 -c Debug
🔨 Building the Project
Project Structure
muonline/
├── Client.Data/ # Data file readers (BMD, ATT, MAP, OZB, etc.)
├── Client.Main/ # Core game engine, networking, UI, game logic
│ ├── Client.Main.Shared.props # shared settings
│ ├── Client.Main.*.csproj # platform variants: desktop/windows/android/ios
├── Client.Data/ # data processing (platform variants)
│ ├── Client.Data.Shared.props
│ ├── Client.Data.*.csproj
├── Client.Editor/ # Asset editor tool
├── MuWinGL/ # Windows OpenGL executable (MonoGame.Framework.DesktopGL)
├── MuWinDX/ # Windows DirectX 11 executable (MonoGame.Framework.WindowsDX)
├── MuAndroid/ # Android executable project
├── MuIos/ # iOS executable project
├── MuLinux/ # Linux executable project
└── MuMac/ # macOS executable project
Development Builds (per head)
For predictable restores and to avoid missing workloads, build/clean one head at a time.
# Windows DirectX (Recommended)
dotnet clean MuWinDX/MuWinDX.csproj && dotnet build MuWinDX/MuWinDX.csproj -c Debug -p:MonoGameFramework=MonoGame.Framework.WindowsDX
# Windows OpenGL
dotnet clean MuWinGL/MuWinGL.csproj && dotnet build MuWinGL/MuWinGL.csproj -c Debug -p:MonoGameFramework=MonoGame.Framework.DesktopGL
# Linux
dotnet clean MuLinux/MuLinux.csproj && dotnet build MuLinux/MuLinux.csproj -c Debug
# macOS
dotnet clean MuMac/MuMac.csproj && dotnet build MuMac/MuMac.csproj -c Debug
# Android (requires Android workload)
dotnet workload restore
dotnet clean MuAndroid/MuAndroid.csproj && dotnet build MuAndroid/MuAndroid.csproj -c Debug
# iOS (requires macOS + Xcode + iOS workload)
dotnet workload restore
dotnet clean MuIos/MuIos.csproj && dotnet build MuIos/MuIos.csproj -c Debug
Production Builds
Build outputs are placed in bin/Release/ directories.
Windows
# DirectX 11 (Recommended for modern hardware)
dotnet publish ./MuWinDX/MuWinDX.csproj -c Release -r win-x64 -o publish-dx -p:MonoGameFramework=MonoGame.Framework.WindowsDX
# OpenGL (Better hardware compatibility)
dotnet publish ./MuWinGL/MuWinGL.csproj -c Release -r win-x64 -o publish-gl -p:MonoGameFramework=MonoGame.Framework.DesktopGL
The GitHub Actions workflow automatically builds both Windows versions (OpenGL and DirectX) on every push to main and publishes them to GitHub Pages.
Linux
dotnet publish ./MuLinux/MuLinux.csproj -f net10.0 -c Release -r linux-x64 --self-contained
macOS
dotnet publish ./MuMac/MuMac.csproj -f net10.0 -c Release
Android
dotnet publish ./MuAndroid/MuAndroid.csproj -f net10.0-android -c Release \
-p:AndroidSdkDirectory="<path-to-android-sdk>" \
-p:JavaSdkDirectory="<path-to-jdk-11>" \
-p:AcceptAndroidSdkLicenses=True
iOS
# Requires macOS with Xcode and valid signing certificates
dotnet publish ./MuIos/MuIos.csproj -f net10.0-ios -c Release
🏗️ Architecture Overview
High-Level Design
This project implements a layered architecture with clear separation of concerns:
┌─────────────────────────────────────────────────────────┐
│ Platform Layer │
│ (MuWinGL/MuWinDX, MuLinux, MuMac, MuAndroid, MuIos) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Client.Main (Core) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Scenes │ │ Networking │ │ Rendering │ │
│ │ (Login/Game) │ │ (S6 Proto) │ │ (MonoGame) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐
