Skip to content

OpenMoHAA - RetroBIOS

Type standalone
Classification Game engines
Source https://github.com/openmoh/openmohaa
Version unknown
Profiled 2026-10-04
Systems mohaa, mohaa-spearhead, mohaa-breakthrough
Technical notes

Reimplementation of the id Tech 3-derived engine that powers Medal of Honor: Allied Assault (2002) and its expansions Spearhead and Breakthrough. BASEGAME = "main" (code/qcommon/q_shared.h:35); the target game is selected at startup via the com_target_game cvar (0 = Allied Assault / TG_MOH, 1 = Spearhead / TG_MOHTA, 2 = Breakthrough / TG_MOHTT, code/qcommon/common.c:3164-3237).

FS_AddGameDirectory (code/qcommon/files.cpp:3106) scans the game folder for every "*.pk3" via Sys_ListFiles(curpath, ".pk3", ...) at line 3136, sorts them with paksort and mounts each one. It does not look up individual retail names and does not refuse an unknown pak. FS_Startup (code/qcommon/files.cpp:3640-3650) always loads com_basegame = "main"; Spearhead additionally sets fs_basegame = "mainta" (common.c:3200) and Breakthrough sets fs_basegame = "maintt" (common.c:3227), which triggers a second FS_AddGameDirectories call for that folder.

The only hard failure during init is "Couldn't load default.cfg" (code/qcommon/files.cpp:4108), i.e. no pak in the active search path provides default.cfg. Retail Pak0.pk3 (main/) carries it; Spearhead and Breakthrough ship a default.cfg inside their own pak1.pk3 so they can run with or without a main/ install under openmohaa.

The retail pak names are documented in-source as reference arrays fs_originalPaks_main / fs_originalPaks_mainta / fs_originalPaks_maintt (code/qcommon/files.cpp:324-350). They are declared but not currently consulted by the loader; they encode the files the engine was authored against. Capitalisation ("Pak0.pk3" under main/, "pak1.pk3" under mainta/ and maintt/) matches the retail ISO filenames and is preserved below for case-sensitive filesystems. FS_FilenameCompare and Sys_ListFiles are case-insensitive, so Windows installs match either casing.

FS_CheckPak0 (code/qcommon/files.cpp:3707) is a documented stub: the comment at 3710-3712 notes that MOHAA ships in too many localised pak versions to pin a checksum, so no CRC / MD5 is enforced on the paks.

com_target_demo 1 selects the demo protocol. The Allied Assault demo is read from main/ like the full game; the Spearhead and Breakthrough demos are read from demota/ and demott/ (code/qcommon/common.c:3168-3182, 3203, 3230, 3249).

16 files | 3 required, 13 optional | 5 in repo, 0 missing, 11 unsourceable Categories: 16 game data

Pak0.pk3 required unsourceable game_data

Pak1.pk3 optional unsourceable game_data

Pak2.pk3 optional unsourceable game_data

Pak3.pk3 optional unsourceable game_data

Pak4.pk3 optional unsourceable game_data

Pak5.pk3 optional unsourceable game_data

Pak6.pk3 optional in repo game_data

pak1.pk3 required unsourceable game_data

pak2.pk3 optional unsourceable game_data

pak3.pk3 optional unsourceable game_data

pak4.pk3 optional in repo game_data

pak5.pk3 optional in repo game_data

  • Path: mainta/pak5.pk3
  • System: mohaa-spearhead
  • Source: code/qcommon/files.cpp:341
  • Added by the 2.15 patch, one build per language.

pak1.pk3 required unsourceable game_data

pak2.pk3 optional unsourceable game_data

pak3.pk3 optional in repo game_data

pak4.pk3 optional in repo game_data

  • Path: maintt/pak4.pk3
  • System: mohaa-breakthrough
  • Source: code/qcommon/files.cpp:349
  • Added by the 2.40b patch, one build per language.

Generated on 2026-10-10T11:26:01Z