Files
bigmak94andClaude Opus 5.5 b5f400bbbd AstroQuest 0.11: ASTRO BOT Rescue Mission in VR on Meta Quest 3 and PC VR
On top of the shadps4-arm64 core imported in the previous commit:

- PlayStation VR emulation: headset, tracker, reprojection, camera and social screen; the
  player's seat and view reset; head velocity for head-butts; field of view settings
- Sound: a native Ngs2 engine (samplers, submixers, effects), the Audio3d spatializer, virtual
  surround for headset speakers, microphone pass-through; libSceJson2; libSceFiber on FEX
- Fixes for CUSA12392 under emulation: real-time step, pace and resolution governor, larger
  render sizes on the PC, save loading at start
- Renderer: geometry shaders fed with fans/polygons/loops, cube-array layers of light probes,
  sample-count mismatches on Adreno, timeline semaphore hang, FXAA in place of the MSAA
  resolve, sharpening, VR frame export
- quest-host: the Quest app (OpenXR host that runs the glibc core as a child process, frames
  through AHardwareBuffers, DualSense mapping, hand-tracked controller placement, KGSL shim)
- PC: in-process OpenXR host (Virtual Desktop or any OpenXR runtime), Touch controllers as the
  gamepad, launcher with a settings window; vendored OpenXR SDK 1.1.63
- Builds keep the build machine's folders out of the binaries (-ffile-prefix-map); machine
  settings (Python, headset serial, signing key) live in git-ignored tools/*.local files
- tools: build, packaging and test scripts for Windows and the headset
- README with installation, license (GPL-2.0-or-later), third-party notices and thanks

No game files are part of the repository; .gitignore only lets listed paths in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 15:00:43 +02:00

43 lines
1.6 KiB
Python

"""Cuts the same region out of several pictures and puts the cuts side by side, enlarged without
smoothing, to compare what a setting does to the picture.
python tools/crop.py <out.png> <x,y,w,h as fractions of the picture> <zoom> <picture> [<picture> ...]
A picture may be given as <label>=<path>. The region is in fractions (0..1) so that pictures of
different sizes show the same part of the scene; each cut is brought to the size of the first
picture's cut times the zoom (nearest neighbour for the first, so its pixels stay pixels, and for
the others too when their size is the same).
"""
import sys
from PIL import Image, ImageDraw
def main():
out = sys.argv[1]
fx, fy, fw, fh = (float(v) for v in sys.argv[2].split(','))
zoom = float(sys.argv[3])
cuts = []
size = None
for item in sys.argv[4:]:
label, _, path = item.rpartition('=')
picture = Image.open(path).convert('RGB')
w, h = picture.size
box = (round(fx * w), round(fy * h), round((fx + fw) * w), round((fy + fh) * h))
cut = picture.crop(box)
if size is None:
size = (round(cut.size[0] * zoom), round(cut.size[1] * zoom))
cut = cut.resize(size, Image.NEAREST)
cuts.append((label or path.split('/')[-1][:24], cut))
sheet = Image.new('RGB', (size[0] * len(cuts) + 4 * (len(cuts) - 1), size[1] + 18), 'black')
draw = ImageDraw.Draw(sheet)
for i, (label, cut) in enumerate(cuts):
x = i * (size[0] + 4)
sheet.paste(cut, (x, 18))
draw.text((x + 3, 3), label, fill='white')
sheet.save(out)
print(out, sheet.size)
main()