Files
libretro/emulators/openmohaa.yml
T
Abdessamad Derraz 1697767909 fix: ship the demo Pak6 placeholder with its set
main/Pak6.pk3 now goes to the demo disc's empty placeholder, listed
with the demo entries, so the pack carries Pak0 to Pak7 as the
Allied Assault single-player demo 0.05 installs them. The 1.11 patch
Pak6.pk3 stays a named and collected retail entry, not chosen: the
retail Pak0 to Pak5 are not held, and no release shipped the demo
with it.
2026-11-10 02:51:36 +01:00

301 lines
12 KiB
YAML

emulator: OpenMoHAA
type: standalone
core_classification: game_engine
source: "https://github.com/openmoh/openmohaa"
upstream: "https://github.com/openmoh/openmohaa"
profiled_date: "2026-10-04"
source_commit: "a2f340195975f4f042e28a60b62561dd9a0b2700"
upstream_commit: "a2f340195975f4f042e28a60b62561dd9a0b2700"
core_version: "0.83.0"
version_basis:
kind: file
path: "cmake/identity.cmake"
pattern: 'set\(PROJECT_VERSION\s+([0-9][^)\s]*)\)'
display_name: "OpenMoHAA"
cores: []
systems: [mohaa, mohaa-spearhead, mohaa-breakthrough]
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), and 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, while the Spearhead and Breakthrough
demos are read from demota/ and demott/
(code/qcommon/common.c:3168-3182, 3203, 3230, 3249).
files:
# ================================================================
# Allied Assault single-player demo 0.05 (December 2001), read from
# main/ like the full game with com_target_demo 1. Same names as the
# retail paks, other content: each is an alternative for its slot, listed
# first so the pack ships the set the demo disc installs.
# ================================================================
- name: "Pak0.pk3"
category: game_data
system: mohaa
path: "main/Pak0.pk3"
required: true
size: 16264817
sha1: "528eccd0f55a51030bfd2de856d53261574485d4"
md5: "4ce697656c5f1967764fb5a3c2f9b2ec"
source_ref: "code/qcommon/files.cpp:326 (fs_originalPaks_main[0]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/), code/qcommon/files.cpp:4108 (Couldn't load default.cfg)"
note: "Carries default.cfg."
- name: "Pak1.pk3"
category: game_data
system: mohaa
path: "main/Pak1.pk3"
required: false
size: 18798683
sha1: "56d659e387f279a98e617f497c2dd12b2bae4959"
md5: "cebf628aa0be4a0b96f04c4eba1f0422"
source_ref: "code/qcommon/files.cpp:327 (fs_originalPaks_main[1]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
- name: "Pak2.pk3"
category: game_data
system: mohaa
path: "main/Pak2.pk3"
required: false
size: 31038822
sha1: "ed00c36523d934cc76b7ccecaa0dd8ebf4378b5d"
md5: "f4ccd60285289135e10e8e119b2b5cfb"
source_ref: "code/qcommon/files.cpp:328 (fs_originalPaks_main[2]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
- name: "Pak3.pk3"
category: game_data
system: mohaa
path: "main/Pak3.pk3"
required: false
size: 34737631
sha1: "e6bae955ce243980964df649ec716baea2b8c97b"
md5: "b15e06909965e7946d235517cc57280d"
source_ref: "code/qcommon/files.cpp:329 (fs_originalPaks_main[3]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
- name: "Pak4.pk3"
category: game_data
system: mohaa
path: "main/Pak4.pk3"
required: false
size: 9576
sha1: "7a610452d040402483f1b4c5334b1695b41375a3"
md5: "0d4c501f8d5c33d2a567a22fbc46d4c8"
source_ref: "code/qcommon/files.cpp:330 (fs_originalPaks_main[4]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
- name: "Pak5.pk3"
category: game_data
system: mohaa
path: "main/Pak5.pk3"
required: false
size: 2739284
sha1: "e8a18e62ecafa7d9aee46ecbac95be03d9eecaa2"
md5: "a8a9113bf71c08f0460c9f4d6635baf5"
source_ref: "code/qcommon/files.cpp:331 (fs_originalPaks_main[5]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
note: "Holds Mission 3 Level 3, the demo's one level."
- name: "Pak6.pk3"
category: game_data
system: mohaa
path: "main/Pak6.pk3"
required: false
size: 108
sha1: "492ab480a8dbefb888acbf6f3ee5bc1277945e28"
md5: "71f32f3ff6814b28531a70cf91689c8f"
source_ref: "code/qcommon/files.cpp:332 (fs_originalPaks_main[6]), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
note: "An empty placeholder holding one folder entry."
# ================================================================
# Medal of Honor: Allied Assault retail (BASEGAME = "main")
# Reference list: fs_originalPaks_main[] at code/qcommon/files.cpp:324
# ================================================================
- name: "Pak0.pk3"
category: game_data
system: mohaa
path: "main/Pak0.pk3"
required: true
source_ref: "code/qcommon/files.cpp:326 (fs_originalPaks_main[0]), 4108 (Couldn't load default.cfg)"
note: "Carries default.cfg. Without it FS_Startup aborts with ERR_FATAL."
unsourceable: "retail release data the collection does not hold, and a same-named file of another game must not stand in"
- name: "Pak1.pk3"
category: game_data
system: mohaa
path: "main/Pak1.pk3"
required: false
source_ref: "code/qcommon/files.cpp:327 (fs_originalPaks_main[1])"
unsourceable: "retail release data the collection does not hold, and a same-named file of another game must not stand in"
- name: "Pak2.pk3"
category: game_data
system: mohaa
path: "main/Pak2.pk3"
required: false
source_ref: "code/qcommon/files.cpp:328 (fs_originalPaks_main[2])"
unsourceable: "retail release data the collection does not hold, and a same-named file of another game must not stand in"
- name: "Pak3.pk3"
category: game_data
system: mohaa
path: "main/Pak3.pk3"
required: false
source_ref: "code/qcommon/files.cpp:329 (fs_originalPaks_main[3])"
unsourceable: "retail release data the collection does not hold, and a same-named file of another game must not stand in"
- name: "Pak4.pk3"
category: game_data
system: mohaa
path: "main/Pak4.pk3"
required: false
source_ref: "code/qcommon/files.cpp:330 (fs_originalPaks_main[4])"
unsourceable: "retail release data the collection does not hold, and a same-named file of another game must not stand in"
- name: "Pak5.pk3"
category: game_data
system: mohaa
path: "main/Pak5.pk3"
required: false
source_ref: "code/qcommon/files.cpp:331 (fs_originalPaks_main[5])"
unsourceable: "retail release data the collection does not hold, and a same-named file of another game must not stand in"
- name: "Pak6.pk3"
category: game_data
system: mohaa
path: "main/Pak6.pk3"
required: false
source_ref: "code/qcommon/files.cpp:332 (fs_originalPaks_main[6])"
note: "Added by the 1.11 patch. The demo placeholder takes the slot: the retail Pak0-Pak5 are not held, and no release ships the demo with this patch."
# The demo's Pak7.pk3, a second empty placeholder.
- name: "Pak7.pk3"
category: game_data
system: mohaa
path: "main/Pak7.pk3"
required: false
size: 108
sha1: "492ab480a8dbefb888acbf6f3ee5bc1277945e28"
md5: "71f32f3ff6814b28531a70cf91689c8f"
source_ref: "code/qcommon/files.cpp:3136 (every .pk3 of the folder), code/qcommon/common.c:3168-3182 (TG_MOH demo reads main/)"
note: "An empty placeholder holding one folder entry, mounted like any pak of the folder."
# ================================================================
# Spearhead expansion (fs_basegame = "mainta", TG_MOHTA)
# Reference list: fs_originalPaks_mainta[] at code/qcommon/files.cpp:335
# Set com_target_game 1 to load this branch.
# ================================================================
- name: "pak1.pk3"
category: game_data
system: mohaa-spearhead
path: "mainta/pak1.pk3"
required: true
source_ref: "code/qcommon/files.cpp:337 (fs_originalPaks_mainta[0]), 3200 (fs_basegame=mainta), 4108"
note: "Spearhead default.cfg lives here, so the file is required when com_target_game=1."
unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in"
- name: "pak2.pk3"
category: game_data
system: mohaa-spearhead
path: "mainta/pak2.pk3"
required: false
source_ref: "code/qcommon/files.cpp:338 (fs_originalPaks_mainta[1])"
unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in"
- name: "pak3.pk3"
category: game_data
system: mohaa-spearhead
path: "mainta/pak3.pk3"
required: false
source_ref: "code/qcommon/files.cpp:339 (fs_originalPaks_mainta[2])"
note: "Added by the 2.11 patch."
- name: "pak4.pk3"
category: game_data
system: mohaa-spearhead
path: "mainta/pak4.pk3"
required: false
source_ref: "code/qcommon/files.cpp:340 (fs_originalPaks_mainta[3])"
note: "Added by the 2.15 patch."
- name: "pak5.pk3"
category: game_data
system: mohaa-spearhead
path: "mainta/pak5.pk3"
required: false
source_ref: "code/qcommon/files.cpp:341 (fs_originalPaks_mainta[4])"
note: "Added by the 2.15 patch, one build per language."
# ================================================================
# Breakthrough expansion (fs_basegame = "maintt", TG_MOHTT)
# Reference list: fs_originalPaks_maintt[] at code/qcommon/files.cpp:344
# Set com_target_game 2 to load this branch.
# ================================================================
- name: "pak1.pk3"
category: game_data
system: mohaa-breakthrough
path: "maintt/pak1.pk3"
required: true
source_ref: "code/qcommon/files.cpp:346 (fs_originalPaks_maintt[0]), 3227 (fs_basegame=maintt), 4108"
note: "Breakthrough default.cfg lives here, so the file is required when com_target_game=2."
unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in"
- name: "pak2.pk3"
category: game_data
system: mohaa-breakthrough
path: "maintt/pak2.pk3"
required: false
source_ref: "code/qcommon/files.cpp:347 (fs_originalPaks_maintt[1])"
unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in"
- name: "pak3.pk3"
category: game_data
system: mohaa-breakthrough
path: "maintt/pak3.pk3"
required: false
source_ref: "code/qcommon/files.cpp:348 (fs_originalPaks_maintt[2])"
note: "Added by the 2.40b patch."
- name: "pak4.pk3"
category: game_data
system: mohaa-breakthrough
path: "maintt/pak4.pk3"
required: false
source_ref: "code/qcommon/files.cpp:349 (fs_originalPaks_maintt[3])"
note: "Added by the 2.40b patch, one build per language."