Skip to main content

OpenMU Documentation

OpenMU is an easy to use, extendable and customizable server for the MMORPG MU Online. The server supports multiple versions of the game; the main focus is Season 6 Episode 3 using the ENG (english) protocol. Additionally, the long-term focus is on the open source client, which supports a slightly extended network protocol.

The code is a complete rewrite from scratch. It is not based on pre-existing projects, and it is explicitly not based on decompiled server sources or any of their derivates.

Project state

This project is under development and there is no release yet. You can try the current state with the available docker image — see Run with Docker.

Where to start

I want to …Start here
… just try it out on my machineRun with Docker
… host a server for other playersDeployment overview
… configure my server (rates, items, monsters, …)Admin Panel
… build and debug the server myselfRun from source
… understand how OpenMU works internallyArchitecture
… contributeContributing

Used technologies

The project is mainly written in C# and targets .NET 10.0.

The server's admin panel is hosted on an embedded ASP.NET Core web server (Kestrel) and implemented as a Blazor Server App.

The persistence layer uses Entity Framework Core with PostgreSQL as the database. Additionally, it is possible to start the server in a non-persistent in-memory mode.

The project is prepared to be hosted in a single process or distributed over multiple processes. For the communication between the processes, Dapr is used.

Gameplay differences to the original server

This project does not have the goal to copy the original MU Online server behaviour to 100 %. That is not entirely possible, because the original server is written in another programming language and has a completely different architecture. In some points we make our life easier, in other points we try to improve the gameplay.

Calculations

The calculations of attribute values (like character damage decrement etc.) are done with 32 bit float numbers and without rounding off, like the original server does at some places.

For example, distributed stat points always have an effect, while in the original server effects might get rounded down: when 4 points of strength give 1 base damage, the original server doesn't calculate a fraction of 1 damage for 3 points, while OpenMU calculates 0.75 damage. This damage then has an effect in further calculations.

Countdown when changing character or sub-server

The original server uses a five second countdown when a player wants to change their character or the sub-server. Maybe this was done for performance reasons, as the original server would then save the character/account data. We think that's really annoying and see no real value in it, so we don't use a countdown.

Getting help

  • Discord — the fastest way to ask a question
  • GitHub issues — bugs and feature requests
  • Blog — background articles about the development