7 Commits
Author SHA1 Message Date
PodeCaradoxandClaude Opus 5.5 9bd10a2d81 Steam Frame: native Linux arm64 build
- Cross-build against the Steam Runtime 4 arm64 SDK (build_linux.sh,
  cmake/steamrt4-arm64.cmake): the executable sits at 0x98000000 next to
  the game's 32-bit window, with the OpenXR loader and jsoncpp beside it
  (RPATH $ORIGIN); build_linux.sh also packs a release archive.
- OpenXR on SteamVR: EGL surfaceless through XR_MNDX_egl_enable, the
  Frame controller profile (both names), a flick or a wrist turn as the
  Wii Remote's shake, the D-pad as look; the refresh rate goes to 120 Hz
  through vrcmd where the runtime offers only its current rate.
- Timewarp in the app: SteamVR shows frames that arrive in time as they
  were rendered, so at 120 Hz every game frame stood still for two
  refreshes while the head turned.  The game frame's eyes now go into a
  scene set, and every refresh composites the last finished set turned
  to its own head pose (timewarp.h, checked by tools/timewarp_test and
  by the simulator's PETARI_XRSIM_WARP); sharpening runs once per game
  frame; the pacing changes only after a new display period has held.
- Fixes found on the way: libstdc++'s <cstdio>/<cwchar> against the MSL
  renames (compat.h), language archives a disc carries damaged (cook.py
  takes another language's), host allocations on the DVD and DSP
  threads, quitting without waiting on the game's threads, case of two
  include names.
- ANLEITUNG-STEAM-FRAME.md: the player's guide in German.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 17:26:28 +02:00
bigmak94 d8a039c96f GalaxyQuest 0.1.8: Windows installer and gameplay fixes 2026-10-03 22:24:38 +02:00
bigmak94andClaude Opus 5.5 c206232332 Every setting on the VR settings panel; language, camera turns, passthrough
The settings panel beside the pause menu held nine of the settings of
petari_vr.ini; the others needed the file edited over adb.  Players asked
for all of them in the game, for a choice of language, for the camera's
turns the other way round and for the room around the giant screen.

- One table of the numeric settings (vr::Setting in vr_game.cpp: key,
  range, default, how to read and change it) now serves the file's loader
  and the panel.  Values outside a setting's range are clamped instead of
  ignored.
- The panel (vr_settings.cpp) is drawn from tables of rows (a switch, a
  stepper or a slider) on four tabs: Screen, Diorama, Picture, Game, with
  a Defaults button for the open tab.  It writes only the lines of the
  settings changed on it, in one pass, so the rest keep following the
  defaults.  The refresh rate and the highest resolution now apply at
  once; the clock levels and the language at the next start.
- language: each disc's languages (European: English, French, German,
  Spanish, Italian; American: English, French, Spanish) with their
  folders; SCGetLanguage answers with the one asked for when the copy has
  its texts.  The European disc's EuDutch folder holds the English texts
  again and is not offered.
- invert_camera (on by default): the game moves its camera round Mario
  the way the D-pad is pressed, so the view turns the other way.  With
  the setting CameraLocalUtil's two tests swap sides (and CameraInfo's
  two arrows), and the diorama's snap turn takes the other sign: pushing
  the right stick right turns the view to the right.  Pages and menus
  keep their sides.
- passthrough (off by default): XR_FB_passthrough, with
  com.oculus.feature.PASSTHROUGH declared (not required) in the manifest.
  The feature and a reconstruction layer are made when the setting first
  asks, and paused while it does not.  While they run the passthrough
  layer goes out first and the eye layer blends by its alpha; around the
  giant screen the eye images are cleared to transparent, fading over
  0.3 s.  The diorama's eye images stay opaque.

Checked headless on the headset (every tab and control, the saved file,
the camera's direction with the setting off and on, French and Spanish
texts on the two discs) and in the app unworn (the language from the
file, passthrough started, paused and started again without an error,
the refresh rate changed from the panel).  Measured there with
passthrough: the compositor's GPU time goes from 1.9 to 3.1-4.2 ms a
refresh; worn, a player's heavy scene fell from 60 to 44 frames a second.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 19:25:57 +02:00
bigmak94andClaude Opus 5.5 3bc2924053 The American disc plays: the disc is told from its language folders
A player with the American disc (RMGE01) reported a crash at the start.
The game picks the folder of its texts from the disc's game code and the
console's language (Language.cpp), and the port had the European code
RMGP01 fixed in low memory: on American files the game asked for
/EuEnglish/MessageData/Message.arc and stopped ("File isn't exist").

- dvd.cpp reads the region off the language folders in the disc's own
  file table (sys/fst.bin: EuEnglish, UsEnglish, JpJapanese, KrKorean),
  boot.cpp puts the matching code at 0x80000000 and SCGetLanguage answers
  with a language that disc has.
- The setup screen shows a folder whose file table names none of those
  folders, or whose copy lacks the texts, as "Unknown disc" instead of
  letting the game start on it.
- FileRipper names the file it did not find before it panics.
- run_headless.sh and galaxy_tour.sh take the game files and the save
  folder from HEADLESS_DATA and HEADLESS_NAND, to test another disc's
  files beside the app's own.

Checked on the headset with both discs' converted files: the prologue
and Good Egg Galaxy, and on the American ones the two galaxies whose
stage files differ from the European disc's (Gold Leaf, Rolling Gizmo)
plus Gateway, Honeyhive, the observatory and Battlerock.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 19:25:56 +02:00
bigmak94andClaude Opus 5.5 bee442f81d README: the installation, step by step
The installing section took a developer's setup for granted.  It now goes
through it in eight numbered steps for someone who has none: developer
mode on the headset (Meta's steps), one folder for the app, the converter
and adb, a terminal opened in it with adb on its PATH, the checks that
Python and the headset answer, the install, the disc, the conversion, the
copy, the first start, and what the usual failures mean.

- The Python files the steps use are a download on the release page,
  GalaxyQuest-converter.zip: said up front, with direct links, and that
  the repository itself is not needed.
- On Windows the command is py, not python (which does nothing or opens
  the Microsoft Store); on macOS and Linux, python3.  Said before the
  steps and next to each command.  The converter zip's README.txt says it
  too.

The commands were run as written from a fresh folder in cmd on Windows
(py 3.14): set PATH, adb devices, and a whole conversion.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 15:46:18 +02:00
bigmak94andClaude Opus 5.5 d87e144fca Package the converter as a download of its own
To play, nobody needs the source: tools/package_converter.py makes
GalaxyQuest-converter.zip for the release page, with the disc converter
(tools/cook/cook.py and the modules it imports) and tools/push_data.py at
the paths they have in the repository, plus a short README.txt.  The file
list follows the scripts' imports, and the zip is the same byte for byte
whenever the files are.

Converting a disc with the unzipped package alone gives the same 2375
files as from the repository.  The README's first step now asks for the
APK and this zip instead of a download of the repository.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 15:28:53 +02:00
bigmak94andClaude Opus 5.5 bd9bded792 GalaxyQuest: Super Mario Galaxy in VR on Meta Quest 3
A native port built on the Petari decompilation (previous commit): an
HLE platform layer (OS, DVD, GX, audio, input, NAND) under the game's
own code, an OpenXR presentation (a diorama around the player, a giant
screen, the HUD and settings as compositor layers, SpaceWarp, dynamic
resolution), Touch Plus controls, the tools that convert your own game
files (tools/cook, which also takes the few pieces of data the game's
executable holds from your sys/main.dol), and the port's changes to the
decompilation (`git diff petari-base -- decomp`).  README.md explains
installing and building, docs/TECHNICAL.md how it works.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 01:59:38 +02:00