Releases: bearstonem/openmohaa
Release list
OpenMoHAA VR for Quest 3 — 0.1.0
A native OpenXR port of OpenMoHAA — the
open-source Medal of Honor: Allied Assault engine — running standalone on a Meta
Quest 3. No PC, no streaming.
This is a pre-release: it plays, but it is a port in progress and several
things below are known to be unfinished.
You need the original game data
The APK is the engine only. Medal of Honor: Allied Assault is not free software
and none of its content is distributed here — you need a copy you own (the GOG
War Chest release is what this was developed against).
Copy the main/ folder from your install to:
/sdcard/Android/data/org.openmoh.openmohaa/files/main/
Install
adb install -r openmohaa-vr-quest3-0.1.0.apk
adb push autoexec.cfg /sdcard/Android/data/org.openmoh.openmohaa/files/main/autoexec.cfg
adb shell am force-stop org.openmoh.openmohaaThen launch it from inside the headset, from Unknown Sources. Do not start it
with adb shell am start — the launch goes through an interstitial and the
app comes up without a usable surface.
autoexec.cfg is optional. It is the only way to set a cvar on a device with no
console, and it is worth having if you want to change anything, but every value
the port needs to be correct is compiled in — the APK behaves without it.
Two traps worth knowing, both of which cost time here:
adb install -rdoes not kill the running process. Force-stop after
installing, or the next launch resumes the old build.- Never create
main/saveormain/configsyourself withadb. A directory
made byadb shell mkdiris owned byshelland nochmodmakes it
app-writable. The game autosaves on mission start and treats the failure as
fatal, so the symptom is a black screen after New Game. Let the engine create
them.
What works
Stereo VR at 90 Hz with 6DoF head tracking. Stick locomotion, snap turning, and
menus on a quad layer fixed in the room. The weapon is held in your hand and
aimed by the controller rather than by your head, with a hand model on each
controller anchored to its own bone. Missions start and play.
Known limits
- It does not hold 90 fps while moving. The eyes render at the full
1680×1760 per eye: 90 fps standing, 77–85 while moving, so most frames in
motion are reprojected by the compositor. This is a deliberate trade — it
plays well and the picture is much sharper — andvr_resolutionScaleis the
first thing to give back. - The HUD is still flat screen space during gameplay, so it does not
converge properly. Menus are fine; they are on the quad layer. - Weapon grip alignment is one global setting (
vr_weaponAdjust) shared
across every weapon, so a pistol and a bazooka sit the same way in the hand. - Untested on device: the two-handed hold, the reload gesture (tap the weapon
hand's grip), and off-hand steering. - Some foliage still rotates with head movement.
- A SIGSEGV in the Adreno driver appears in the log at every launch. It predates
all VR work, was present in the flat builds, and the process survives it.
Only the Quest 3 has been tested. Other Android XR devices may work and none are
supported.
Notes
The APK is debug-signed — there is no release signing config in the tree — which
is why it installs as an unknown source. It is a Release CMake build of the
engine; only the APK wrapper is the debug variant.
The renderer is renderergl1 on gl4es rather than renderergl2. rend2 ran this
content at 10–15 fps, spending 50–60 ms of CPU per eye binding GLSL programs for
lighting that art authored in 2002 has no maps to feed, while the GPU finished
in 3 ms.
Build instructions are in docs/markdown/04-coding/03-android.md. The state of
the port, including what was learned that contradicts the original plan, is in
VR_PORT_STATUS.md. QUEST_PORTING_GUIDE.md is the reusable version, written
for the next id Tech port rather than for this one.
Built on Team Beef's RTCWQuest, which is
the reference this port was checked against throughout, and on the work of the
OpenMoHAA project.