Skip to content

Releases: bearstonem/openmohaa-vr

OpenMoHAA VR 0.2.0 — Quest prerelease

Pre-release

Choose a tag to compare

@bearstonem bearstonem released this 14 Oct 21:52

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

OpenMoHAA VR for Quest 3 — 0.1.0

Pre-release

Choose a tag to compare

@bearstonem bearstonem released this 31 Jul 21:36

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.