• DieMitchell released this 2026-10-15 01:00:34 +02:00 | -53 commits to main since this release

    OpenMoHAA VR is a standalone VR port of Medal of Honor: Allied Assault targeting Meta Quest and Steam Frame, built on OpenMoHAA and OpenXR. This Quest prerelease is based on the OpenMoHAA 0.83.0 engine. Quest 3 is the headset tested so far; other Quest models are unverified. Steam Frame integration is pending and no Steam Frame build is included.

    Changes since 0.1.0

    • Body holsters, grip-driven ladder climbing, and controller-velocity grenade throws; hands remain visible while unarmed.
    • An on-demand HUD on the off-hand X button, grouping compass, objectives, health, and ammo. The compass includes objective and damage-direction indicators.
    • Corrected use interaction, weapon-wheel placement, health colors, objective initialization, and death/mission screen presentation.
    • Fixed stereo subtitle/message lifetimes, upright sprite disappearance, offscreen sprite culling, invalid sprite handles, and multipass font color/opacity handling.
    • Removed forced per-eye GPU waits during normal play, reduced redundant HUD parsing/render submissions, and corrected world/HUD/backend timing reports.
    • Safer OpenXR swapchain retries and stereo submission: timed-out images are not rendered or released early, and incomplete eye pairs are not submitted.
    • Release configuration starts at the normal menu with cheats, test-map loading, automatic weapon grants, and diagnostic logging disabled.
    • Included the Android Gradle build scripts in the source tree and fixed CMake tracking of new client-game sources.

    Install or upgrade

    The APK contains the engine only. You need your own Medal of Honor: Allied Assault game data. Copy all .pk3 archives from the game's main/ directory to:

    /sdcard/Android/data/org.openmoh.openmohaa/files/main/
    

    Install the APK and replace the external configuration with this release's autoexec.cfg:

    adb install -r openmohaa-vr-quest3-0.2.0.apk
    adb push autoexec.cfg /sdcard/Android/data/org.openmoh.openmohaa/files/main/autoexec.cfg
    adb shell am force-stop org.openmoh.openmohaa
    

    Then launch OpenMoHAA from inside the headset, under Unknown Sources. This published APK retains that launcher name; newer source builds use OpenMoHAA VR. Do not launch it with adb shell am start.

    Upgrading preserves the old configuration. Install the new autoexec.cfg as well as the APK; it supplies the dynamic-lighting workaround and removes the development autostart. Back up any personal configuration changes before replacing it. Let the app create its own main/save and main/configs directories so it can write saves and settings.

    The APK uses the same signing certificate as 0.1.0, Android version code 2, and version name 0.83.0-vr0.2.0. It packages optimized Release native libraries with the debug-signed Android wrapper, as before. The renderer is GL1 through gl4es.

    Validation and known limits

    The fixes passed desktop and Android GL1/GL2 builds plus targeted regression and sanitizer checks. The release APK was rebuilt from the tagged source; its package metadata, signature compatibility, and packaged native-library build IDs were checked.

    No headset was connected for the latest review or release preparation. Visual changes and performance impact have not been measured on a device; previously reported frame rates are not measurements of this release.

    • Font-atlas black boxes remain unresolved; fixing multipass font settings does not fix the underlying zero-texture-ID issue.
    • World dynamic lighting can darken scenery. The supplied configuration keeps r_worldDlights 0 as a workaround; the APK's default alone does not include it.
    • Per-weapon grip alignment, remaining foliage behavior, and controller interactions still need device testing/tuning. Quest 3 is the intended target; other headsets are unverified.

    SHA256SUMS covers the APK and configuration. After downloading all three assets, verify them with sha256sum -c SHA256SUMS.

    Full changes · Port status and build instructions

    Project overview and platform status · Quest installation guide

    Downloads
  • DieMitchell released this 2026-10-15 01:00:37 +02:00 | 11 commits to vr-quest3 since this release

    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.openmohaa
    

    Then 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 -r does not kill the running process. Force-stop after
      installing, or the next launch resumes the old build.
    • Never create main/save or main/configs yourself with adb. A directory
      made by adb shell mkdir is owned by shell and no chmod makes 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 — and vr_resolutionScale is 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.

    Downloads