mirror of
https://github.com/mitch030504/AstroQuest-Frame.git
synced 2026-10-21 16:01:15 +02:00
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>
42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
// Condenses an emulator log: one line per distinct message (numbers folded), in order of first
|
|
// appearance, with how often it occurred.
|
|
// node logsum.mjs <log> [--from <regex>] [--skip <regex>] [--only <regex>] [--max <n>]
|
|
import { readFileSync } from "node:fs";
|
|
|
|
const args = process.argv.slice(2);
|
|
const file = args.shift();
|
|
const opt = (name) => {
|
|
const i = args.indexOf(name);
|
|
return i >= 0 ? args[i + 1] : undefined;
|
|
};
|
|
const from = opt("--from") ? new RegExp(opt("--from")) : null;
|
|
const only = opt("--only") ? new RegExp(opt("--only")) : null;
|
|
const skip = new RegExp(
|
|
opt("--skip") ??
|
|
"^\\[Core\\.Linker\\] <(Info|Warning)>|^\\[Config\\]|BACHATA_|FRAME_SLOT|GET_RENDER_FRAME|Skipped \\d+ duplicate",
|
|
);
|
|
const max = Number(opt("--max") ?? 200);
|
|
|
|
const seen = new Map();
|
|
let started = !from;
|
|
for (const raw of readFileSync(file, "latin1").split(/\r?\n/)) {
|
|
if (!started) {
|
|
if (!from.test(raw)) continue;
|
|
started = true;
|
|
}
|
|
if (!raw || skip.test(raw) || (only && !only.test(raw))) continue;
|
|
const line = raw.replace(/^\[([^\]]+)\] <(\w+)> \(([^)]*)\) /, "[$1|$2|$3] ");
|
|
const key = line.replace(/0x[0-9a-fA-F]+/g, "0x#").replace(/\d+(\.\d+)?/g, "#");
|
|
const entry = seen.get(key);
|
|
if (entry) entry.count++;
|
|
else seen.set(key, { line, count: 1 });
|
|
}
|
|
let shown = 0;
|
|
for (const { line, count } of seen.values()) {
|
|
if (shown++ >= max) {
|
|
console.log(`... ${seen.size - max} more distinct lines`);
|
|
break;
|
|
}
|
|
console.log(`${String(count).padStart(6)}x ${line.slice(0, 250)}`);
|
|
}
|