Master of Magic — Economic Analysis

Apply BV and MIRR frameworks to the original 1994 4X classic. Everything is broken — but is it equally broken?

Links: BattleValue, MOO1 MIRR Analysis, Gaming, D&D Monster Tournament — Exact Markov Chains (this page is that project’s precedent — same complication classes: immunities, attack types, special abilities, decisions frozen into a policy; and the same expected payoff, a good approximation plus the ability to diagnose why a unit over- or under-performs) Project: masterofmagic


The Thesis

Master of Magic is famous for its “balance through imbalance” — powerful units, devastating spells, and game-warping combos exist across all five magic realms. The community consensus is that this works because everything is overpowered, creating a rough equilibrium.

But is that true? If we apply the same BV and MIRR analysis that worked for MOO1, we can quantify exactly which units, buildings, and spells are the best deals — and which are traps. The wiki data is complete enough to do this systematically across the entire game.

Scope

Units (~150 total)

BV model for MoM:

Base BV = sqrt(Melee × Hits × Figures)

MoM complications beyond base BV:

Cost metrics:

Buildings

MIRR model: Same structure as MOO1 factories — cost now, return stream over time. But buildings also unlock other buildings and units, creating option value (the right to build something better later).

Spells (214 total)

MIRR model for spells:

Architecture — Python Gather, LLM Analyze

Phase 1: Data Gathering (Python)

Scrape the MoM Fandom wiki via MediaWiki API:

  1. Enumerate all pages in target categories (Normal_Units, Fantastic_Creatures, Town_Building, spells by realm)
  2. Fetch wikitext for each page
  3. Parse infobox templates into structured JSON
  4. Store as data/units.json, data/buildings.json, data/spells.json

Wiki source: https://masterofmagic.fandom.com/wiki/Master_of_Magic_Wiki API endpoint: https://masterofmagic.fandom.com/api.php

Phase 2: BV Computation (Python)

Phase 3: MIRR Analysis (Python + LLM)

Phase 4: Synthesis (LLM → Vault)

The Hard Counter Problem

Base BV assumes all damage is fungible — 10 melee damage is the same as 10 ranged damage. In MoM, this is wildly false. Abilities create hard counters where one unit’s effectiveness against another drops to zero:

This means the correct model isn’t a single BV number but a matchup matrix: unit A’s effective BV against unit B, considering both units’ abilities and the damage type rules. A unit might have BV 50 against normal units but BV 0 against anything with Weapon Immunity. This is the Capability Without Leverage pattern in combat (failure mode B: a capability gated on a condition the opponent can negate).

The community gravitates to strategies that exploit the most hard counters (or that are immune to the most counters). The “broken” units are likely the ones with the highest average effective BV across all matchups — or the ones that counter the most common threats.

Fan/official rewrites (Caster of Magic, 2022 remaster) provide natural experiments: comparing BV/Cost rankings across versions reveals which hard counters the community and developers agreed were too dominant.

Sub-Pages

Simulator Status and Next Steps

Working Markov chain battle simulator (simulator/battle.py) with:

Next steps:

Open Questions

Tags

games, strategy, economics, game-theory, mathematics