/MQReawakened

An open source emulation for the backend of MQ's servers, written from scratch with love!

Primary LanguageC#GNU Affero General Public License v3.0AGPL-3.0


A community-driven server emulator, written completely from scratch in C#, for MQ!

License Wiki Wiki Stars

This server emulator is completely free from the original game's assets / intellectual property.

None of the repo, the tool, nor the repo owner is affiliated with, sponsored, or authorized by any affiliates of the original game.

Information

MQReawakened is a community-driven server emulator meant for non-commercial, educational use only. It is intended to show how games like these are created through reverse engineering and how they work, and thus is not, and should never be, commercialised in any way. It is fundamentally transformative from the original client, as it handles the inverse of requests and only shares similar data models. Users must provide the original game's code, assets, executables etc themselves.

Please email me at feroxfoxxo@gmail.com if anything is in breach, which will be rectified ASAP.

Developer information

We've moved to use Discord to handle our to-do list!

If you have anything you wish to report, please submit an issue through the repo's issue system, and it will be assigned to someone accordingly.

Contributing

If you'd like to contribute to this project, please read CONTRIBUTING.md.

Prerequisites

  • You must have your own copy of the game and its associated asset bundles.
  • You must have the associated DLL for the game added to your server project to ensure it doesn't contain any copywritten code.

How to set up MQReawakened

Please read the developer guide here on how to set up MQReawakened.

If you want to play 2012 or earlier (NOT RECOMMENDED), please use the new and improved! MQClient found here.

Otherwise, simply edit the settings.txt and game/LocalBuildConfig.xml files from the original game client to point to the MQReawakened server you are trying to connect to, replacing the default supplied.

Gameplay

The project's goal is to faithfully recreate the game as it was at the time of the targeted build. While most features are implemented and the game is playable from start to finish, functionality or bugs may be missing.

When hosting a local server, you can access all commands by default (account level: owner).

Architecture

MQ consists of the following components:

  • A login server and asset hosting service over HTTP
  • A shard server that speaks the MQ network protocol over TCP

For 2012

  • A web browser compatible with the old NPAPI plugin interface
  • A .unity3d bundle that contains the game code and essential resources (loading screen, etc.)

For 2013/2014

  • A Unity executable file, typically in the /game/ folder, and a launcher.

Both the login and shard server run on the same Asp.Net application, as seen in this git repository.

The original game used the player's actual web browser to launch the game. Still, since then, the NPAPI plugin interface the game relied on has been deprecated and is no longer available in most modern browsers. MQR gets around this issue by distributing an older version of Electron, a specialised web browser software package.

The browser/Electron client opens a web page with an <embed> tag of the appropriate MIME type, where the src param is the address of the game's .unity3d entry point. This triggers the browser to load an NPAPI plugin that handles said MIME type, in this case, the Unity Web Player.

(similarly to https://github.com/OpenFusionProject/OpenFusion)

Other information

Running the game client on Linux

While the MQ server supports Windows and Linux (and other Unix-like systems), the game client natively supports only Windows because of the NPAPI Unity Web Player plugin needed to run the game. Nevertheless, the client runs very well in Wine if appropriately configured.

Due to the plethora of Wine prefix managers that people use (in addition to the option of just configuring your Wine prefix by hand), you could set the game up in several ways. Regardless of which you prefer, for MQ, there's a handful of dependencies you need to satisfy:

  • Electron (MQClient.exe) needs all fonts to run
  • It also needs to be run with the following arguments: --no-sandbox --disable-gpu
  • Using DXVK instead of wined3d is highly recommended to avoid graphical glitches like mission indicator rings not rendering

While we have not written a complete guide of how to do this yet, visiting OpenFusion's guide in how to do this, another Unity WebPlayer MMO, may provide a good enough understanding of where to start.

Open Source Licenses

Commemorations

  • Z6mbie - Logo designer.
  • Victti - Concept contributor & mentor.