Open reimplementation of Might and Magic 6 7 8 game engine
  • C++ 93.3%
  • CMake 1.9%
  • Lua 1.9%
  • C 1.6%
  • Python 0.6%
  • Other 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
captainurist 864e7cad75
Test Issue1447b in code instead of a trace (#2948)
The trace test doesn't guard #1447 for Fireball, for the same reason Issue1447a didn't. With the bug back the fireball leaves no trail in turn based mode, but the trace also plays the impact, which emits particles the stopped game timer doesn't gate. So the check on the highest particle count over the whole trace still passes.

The new test enters turn based mode from a new game, casts Fireball, and checks for particles while it's still in the air, with no impact on the tapes. The trace and its save are gone.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 23:08:41 +00:00
.claude Update the screenshot skill's test for master's renames (#2915) 2026-10-09 20:42:01 +01:00
.devcontainer Allow learn.microsoft.com through the devcontainer firewall (#2866) 2026-09-27 16:33:39 +01:00
.github Run UBSan alongside ASan in the sanitizer CI job (#2926) 2026-10-29 20:44:07 +00:00
android Build only libmain.so on Android (#2339) 2025-12-30 19:23:16 +00:00
CMakeModules Use zlib-ng instead of zlib (#2814) 2026-09-26 21:26:38 +01:00
distribution Build the macOS dmg with dmgbuild, package releases through a CMake target (#2873) 2026-10-01 21:37:16 +01:00
resources Build the config entry message in one expression (#2947) 2026-10-31 23:07:48 +00:00
scripts Build the macOS dmg with dmgbuild, package releases through a CMake target (#2873) 2026-10-01 21:37:16 +01:00
src Fill the loading bar on the last step of a map load (#2946) 2026-10-31 23:06:15 +00:00
test Test Issue1447b in code instead of a trace (#2948) 2026-10-31 23:08:41 +00:00
thirdparty Run UBSan alongside ASan in the sanitizer CI job (#2926) 2026-10-29 20:44:07 +00:00
.clang-tidy Enable bugprone-suspicious-stringview-data-usage (#2758) 2026-09-13 12:39:33 +01:00
.editorconfig Change all lua scripts to align to the new guidelines 2024-04-21 20:15:50 +02:00
.gitattributes attributes 2017-01-11 05:34:59 +02:00
.gitignore Ignore bazel's convenience symlinks (#2697) 2026-09-03 21:06:16 +01:00
.gitmodules Replace backward-cpp with cpptrace (#2643) 2026-08-29 08:49:28 +03:00
.luarc.json Various luaLS fixes 2024-07-30 00:36:28 +02:00
CMakeLists.txt Run UBSan alongside ASan in the sanitizer CI job (#2926) 2026-10-29 20:44:07 +00:00
CMakeSettings.json missing comma (#2246) 2025-09-22 11:01:52 +02:00
CPPLINT.cfg Enforce a 200 column line limit (#2655) 2026-08-24 22:19:54 +01:00
Doxyfile Fix Doxy choking 2025-06-30 11:34:28 +01:00
HACKING.md Say which braces the first brace rule is about (#2744) 2026-09-09 21:52:08 +01:00
LICENSE Update LICENSE 2024-04-03 09:27:35 -06:00
README.md Fix the data cache token leak and clean up the CI workflows and release files (#2719) 2026-09-29 09:14:56 +03:00

OpenEnroth

Build Lint

OpenEnroth is an open-source reimplementation of the Might & Magic VI-VIII game engine, allowing you to play the original games on modern platforms. It uses the original game data, so you will need a copy of the game to play.

Currently only MM7 is playable. MM6 and MM8 support is planned — check the milestones to see where we're at.

Supported platforms: Windows, Linux, macOS, and Android (experimental).

screenshot_main

Download

Prebuilt binaries are available from our releases page.

Currently only nightly builds are available, which may have bugs. A stable release is in progress — see the v0.1 milestone.

Discord

Join our Discord to discuss, track progress, or get involved in development.

Discord channel invite

Getting Started

You will need two things: the OpenEnroth binary and the original Might and Magic VII game data.

Getting the game data

You can buy Might and Magic VII from GOG.com. Copies from other sources (e.g. an original retail disc) should also work.

At the very least, OpenEnroth requires the ANIMS, DATA, MUSIC and SOUNDS directories from the game data.

Non-GOG versions

Install or extract your copy of the game as normal.

GOG Version

Windows

On Windows, run the GOG installer to extract the game data to your computer.

Linux and macOS

The installer cannot be run directly on Linux and macOS, but you can use innoextract to extract its contents.

  • On macOS, install Homebrew if you don't have it already and run brew install innoextract
  • On Linux, the exact command depends on your distribution:
    • Ubuntu or Debian-based (including Linux Mint, Pop!OS, etc): sudo apt install -y innoextract
    • Fedora or other RedHat-based (except "immutable" distributions like Bazzite): sudo dnf install -y innoextract
    • For other systems, Repology lists the package name for most distributions.

Once you have innoextract, run:

innoextract -e -d <new game data directory> <path to GOG installer .exe>

Game Assets Path Override

You can set an environment variable called OPENENROTH_MM7_PATH to point to the location of the game data. If set, OpenEnroth will look for game assets only in that location. You may want to add this to your shell profile (e.g. ~/.profile on Linux or ~/.zshrc on Mac):

export OPENENROTH_MM7_PATH="<path-to-mm7-game-assets>"

Installing OpenEnroth

Windows

  1. Download OpenEnroth_nightly_Windows_x86_64_RelWithDebInfo.zip (x86 for 32-bit Windows) from the releases page.
  2. Unzip OpenEnroth.exe and OpenEnroth.pdb into the directory containing the game data.
  3. Run OpenEnroth.exe.

macOS

  1. Move the game data to ~/Library/Application Support/OpenEnroth, creating this directory if needed.
  2. Download OpenEnroth_nightly_macOS_arm64_RelWithDebInfo.dmg (x86_64 for Intel Macs) from the releases page, open it and drag OpenEnroth.app into Applications.
  3. Run xattr -rc /Applications/OpenEnroth.app. This clears the quarantine flag — macOS will refuse to launch unsigned binaries without this step.
  4. Run OpenEnroth.app.

Linux

OpenEnroth ships for Linux as a Flatpak package.

  1. Check for Flatpak support:
    • Run flatpak --version. If you get a version number, you're ready; otherwise visit https://flatpak.org/setup/ for setup instructions.
  2. Install OpenEnroth:
    • Download the OpenEnroth_nightly_Linux_x86_64_RelWithDebInfo.flatpak package from the releases page.
    • Run flatpak install --user /path/to/OpenEnroth_nightly_Linux_x86_64_RelWithDebInfo.flatpak.
    • Create ~/.var/app/io.github.openenroth.openenroth/data/mm7/data/
    • Move the game data (at least ANIMS, DATA, MUSIC and SOUNDS) into this new directory.
  3. Run OpenEnroth from your application menu or using flatpak run io.github.openenroth.openenroth.

Android (Experimental)

Android is not actively tested by the dev team — expect issues and be prepared to troubleshoot.

  1. Download OpenEnroth_nightly_Android_universal_RelWithDebInfo.apk from the releases page.
  2. Install the APK on your device (you will need to allow installation from unknown sources in your device settings).
  3. Copy the game data (ANIMS, DATA, MUSIC and SOUNDS) to /sdcard/Android/data/io.github.openenroth.openenroth/files/ on your device.

Development

See HACKING.md for build instructions, code style guidelines, and contribution guidelines.

Screenshots

screenshot_1

screenshot_2

screenshot_3

screenshot_4