Commit Graph
32 Commits
Author SHA1 Message Date
HayatoGandClaude Opus 5.5 ae62156496 Integrate PR 227 with current main for local gameplay testing
Resolve GPU conflicts while preserving performance diagnostics, RX 580 controls, support links and manual-only release policy. Keep batch GC eviction single-pass with its original diagnostic reasons. Local validation and gameplay testing follow this integration.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-19 00:28:05 -03:00
andretutaandClaude Opus 5.5 a38e7b7ff5 diag(gpu): review fixes for the stall trace
- Enabled()/FramesEnabled() and the Span early-out are inline: a disabled hook is one
  relaxed load, not a call into another translation unit.
- The Hash() salt comes from std::random_device and never leaves memory; session folders
  are named by wall-clock seconds instead of the salt (IDs were invertible from the name).
- The consumer flushes frames.csv and the open capture after each pass with new events,
  so a crash right after a hitch keeps what was read.
- Disabled-path work removed from hooks: the fault handler reads IsWriteError once,
  pipeline key hashes are computed only while tracing, and TlgCopy::HasPending is asked
  only while tracing (under the pool lock, replacing the busy flag kept on the copy path).
- PerfBuildRevision: only git's exit code 1 marks a tree dirty; a source archive is
  "unknown", not "unknown-dirty".
- perf_trace_report: frame-series warnings reach the report's warnings (console and HTML),
  and a mismatched span end keeps its begin in incomplete_spans.

Tests added for the last two points; not run yet.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 22:07:58 -03:00
andretuta fad39416d4 diag(gpu): add opt-in CPU/GPU stall trace, CLI precompile prep, and offline report 2026-10-17 20:23:51 -03:00
batuhankiskacandClaude Opus 5.5 ab3000df8e Scripts: the game view links the newest param.sfo (update, patch-meta/ or a 4th argument) over the base 1.00 one
The update's sce_sys has no param.sfo, so the view kept 1.00's APP_VER and the Mods tab never
listed the 1.07 patches.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 21:00:40 +03:00
batuhankiskacandClaude Opus 5.5 a1acc2a843 Scripts: dump and run helpers for CUSA00223 with env-overridable FTP host, paths and lock; drop the TLG USB import
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 20:31:26 +03:00
batuhankiskacandClaude Opus 5.5 c20d1f571c Leftovers from the earlier ports: default game folder, test scripts, window titles
- run.sh/run.py: the default game folder is game/CUSA00223, as in the launcher
  (it was ../CUSA01623, God of War III's title id).
- newgame_test.sh/skipintro_test.sh start the game with run_infamous.sh
  (run_tlg.sh no longer exists).
- The fallback window title and app metadata name inFAMOUS Second Son
  (were God of War III / The Last Guardian, tlg-pc); the launcher already
  sets them through ISS_APP_NAME/ISS_APP_ID.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 17:35:44 +03:00
2961aefeee Launcher defaults, Linux file reads, recoverable shader failure, gow3_pc texture-cache switches (#107)
* Launcher: compile shaders in the background in every preset, read-ahead off by default

Background shader compilation is no longer turned off by the Quality and PS4-faithful presets.
GPU read-ahead (eager readback) is off by default and old settings.json files are migrated once
(settings_rev 2): in precise mode it made smoke and glow flicker.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Runtime: read game files through a host buffer on Linux too

With precise readbacks the GPU tracker can protect a guest page again between touch_for_write and
the kernel copy, which then fails with EFAULT; after 64 tries the read gave up and left data
missing (10-29 reads per session). Linux now uses the bounce read Windows already had.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: refuse a shader with an unknown ReadConst pattern instead of ending the game

FlattenExtendedUserdataPass asserted "ReadConst base low not from constant memory" and closed the
game in a new area. It now logs the shader hash and throws UnsupportedShaderError; the pipeline
cache marks the shader (or permutation) failed and skips its draws, in the asynchronous and the
synchronous compile paths. The fault-recovery pointer no longer outlives a throwing capture.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: experimental texture-cache switches ported from gow3_pc (off by default) and an image report

- TLG_PARTIAL_HEIGHT_VIEWS (gow3_pc #348): an integer read of the top rows of a cached image reuses
  that image instead of creating a new one.
- TLG_BACKING_INVALIDATE (gow3_pc #331): textures over memory a readback just wrote are reloaded.
- Exact readback waits (gow3_pc #386, only with stale readbacks): uploads and frees wait only for
  copies that share bytes with the image.
- TLG_PERF_DIAG=1 prints every 5 s the images created most often and the partial views used.
The first two are listed in the Advanced screen, off by default; gow3_pc is GPL-2.0.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

---------

Co-authored-by: HayatoG <[email protected]>
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
2026-10-15 23:44:20 -03:00
e7b467e992 Advanced launcher screen, bounded wait for compiling shaders, region trace and shader index (#100)
* Test: BC 1D on NVIDIA (TLG_BC_TINY=auto, promoted BC 1D answers dimension queries as 1D)

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Test script: occlusion and BP09 variants

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Launcher: Advanced screen with the GPU/runtime tuning parameters (switches, numbers, lists)

31 environment-only parameters (synchronisation, threads, readbacks, pipelines, image
workarounds, diagnostics) with bilingual descriptions, Automatic/default handling, search,
restore defaults and a copyable combination. Choices live in tlg.ini (adv_<name>) and reach the
game as ISS_<name> only when changed; the Config: log block shows them.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Test tools: one-round runner, monitor and analyzer for the parameter study

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: bounded wait for a compiling pipeline (TLG_ASYNC_WAIT_MS) and a faster driver cache save

A draw whose pipeline is still compiling in the background used to be skipped at once (missing
ground or effects while the shader cache is cold). With TLG_ASYNC_WAIT_MS=N (default 0 = off)
it first waits up to N ms for the compile, and the waits of one GPU frame add up to at most
TLG_ASYNC_WAIT_FRAME_MS (default 8). The log gets an 'Async wait (total)' line every 5 s.
The driver cache is saved every 60 s (TLG_DRIVER_CACHE_SAVE_S, was 180).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: bounded wait for a compiling pipeline (TLG_ASYNC_WAIT_MS) and a faster driver cache save

A draw whose pipeline is still compiling in the background used to be skipped at once (missing
ground or effects while the shader cache is cold). With TLG_ASYNC_WAIT_MS=N (default 0 = off)
it first waits up to N ms for the compile, and the waits of one GPU frame add up to at most
TLG_ASYNC_WAIT_FRAME_MS (default 8). The log gets an 'Async wait (total)' line every 5 s.
The driver cache is saved every 60 s (TLG_DRIVER_CACHE_SAVE_S, was 180).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Launcher Advanced: async wait and driver cache save parameters

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Tools: shader_index.py, an index of the OrbShdr shaders in the player's own dump

Streaming scan of art/cache (.xpps, KCAP + OrbShdr), SQLite index hash -> file/offset/size/stage,
lookup, verify against existing shader caches, stats. Reads the dump only; nothing of the game
is copied or committed.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: region trace (TLG_REGION_TRACE=1), step A of the per-region pre-warm

Writes region_trace.tsv in the GPU user folder: every .xpps package the game opens (O) and
the first request of each graphics/compute pipeline (P), on one monotonic clock, so an offline
pass can tell which pipelines each region needs before anything is built on top of it.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: the bounded wait also covers a shader still being translated

A new shader is the usual reason for a skipped draw (its pipeline is only queued once the shader
is translated), so GetProgram waits too, within the same per-draw and per-frame budget.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* GPU: region trace records whether a pipeline was ready; the async wait tally is a warning

The log keeps warnings and above, so the 'Async wait (total)' line never showed. The region trace's
P lines get a fifth column: r = the pipeline existed at its first request, m = it was missing.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Docs and polish: Advanced screen, pre-warm notes, region trace parameter, test variant 8

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

* Restore the third_party submodule entries (a worktree's symlinks had been committed)

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BGrrT8Atu6mshYBUh1H1Mm

---------

Co-authored-by: HayatoG <[email protected]>
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
2026-10-15 21:19:49 -03:00
HayatoGandClaude Opus 5.5 3727fde5c0 ISA rewrite: emulate SSE4A EXTRQ/INSERTQ on CPUs without SSE4A (Intel)
A Windows player on Intel crashed with 0xc000001d at guest 0x8938f1:
extrq xmm4, xmm7. SSE4A exists only on AMD; inFAMOUS 1.07 (and GR2) have
96 EXTRQ (register form) in eboot.bin, no INSERTQ/MOVNTSS/MOVNTSD.

- cpu_check: SSE4A (CPUID 0x80000001 ECX bit 6) is a rewritable set, so
  only hosts without it rewrite; AMD keeps the native instruction.
- isa_rewrite.py: EXTRQ/INSERTQ (register and immediate forms) become
  sites (XMM numbers in dst/src1, imm length | index << 8 in disp);
  MOVNTSS/MOVNTSD are recorded as UNSUPPORTED.
- isa_emulate_sse4a (general regs only) follows the AMD APM; undefined
  cases match Zen 3: high qword of the destination zeroed, a field with
  index + length > 64 cut at bit 63.
- Dedicated SSE4A stub: skips the red zone, saves rflags (then cld) and
  the SysV caller-saved GPRs, spills dst/src XMM with legacy movdqu (YMM
  upper halves untouched like EXTRQ), calls the emulation, reloads dst.
  The int3 path gets the XMM registers from the signal frame (XSTATE_BV
  SSE bit set) or the Windows CONTEXT.
- TLG_ISA_REWRITE/ISS_ISA_REWRITE: 1 now includes SSE4A, and a set list
  ("sse4a", "movbe,bmi1") forces only those; infamous_run.sh honours it.

Verified on a Ryzen 5700X3D: tests/test_isa_sse4a.c compares the
emulation with the real instructions (every length x index, 2M random
operands, every immediate pair) and runs rewritten sites (all 16x16
registers, jmp / relocated / int3) against the original code comparing
all GPRs, rflags, YMM0-15 and the red zone; mutations are caught. Python
and existing ISA/cpu-check tests pass; build.sh (LTO off) builds. The
real table for inFAMOUS 1.07: 96 SSE4A sites, 23 jmp + 73 relocated,
0 int3, including 0x8938f1. Pending: in-game run with
ISS_ISA_REWRITE=sse4a, and a check on an Intel CPU / Windows build.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01KHxhRF717FsAPVntc7R6zU
2026-10-14 10:01:48 -03:00
HayatoGandClaude Opus 5.5 420ab44676 Frame recorder: TLG_FRAME_RECORD_TRIGGER records two frames command by command
For effects that flicker in a static scene (fog/volumetrics, sea foam, lights): once the
trigger file exists, the next two complete frames (flip to flip, on the GPU command thread)
are written to TLG_DUMP_DIR/frame_record_0.txt and _1.txt, then the file is removed.

One line per command in the order the GPU thread runs them, graphics and async compute
queues (q=gfx / q=c<vqid>): draws, indirect draws, dispatches, DMA, events, WaitRegMem,
WriteData, markers, flips. Draws and dispatches carry the pgm hash and permutation index of
each stage, a hash of the user data, every bound buffer (address, size, hash of up to 64 KiB),
images (address, format, size, mips), sampler hashes, vertex/index buffers, render targets and
depth, viewport, scissor and blend/depth/stencil registers, counts or dispatch sizes.
Indirect arguments are given as the guest wrote them (args.cpu) and as the GPU read them at
that draw (args).

Buffer contents: memory the GPU wrote (buffer cache GPU-modified) is copied from the GPU
buffer at the draw into a staging buffer (TLG_FRAME_RECORD_GPU_MB, default 256) and hashed
once the frames are done (g...); everything else is hashed from guest memory (c...) under
runtime_fault_recover, so a fault (unmapped or read-protected page) gives "fault" instead of
a readback or a crash on the GPU thread. The copies end the render pass; a draw that clears
its targets inside the pass in progress skips them (gpu=skipped_clear) so nothing is cleared
twice.

While armed or recording the draw pipeline is off (one thread, stream order; one warm-up
frame lets it run dry). Not triggered: one relaxed atomic load per PM4 packet and per
UseDrawPipe call, a getenv-cached check per flip.

scripts/frame_diff.py aligns the two lists by queue, kind and shaders and prints the commands
whose inputs differ, grouped by shaders, most suspicious first (commands in one frame only,
indirect args, counts, state, GPU-written buffers...). Changes shared by many commands
(camera constants, TAA ping-pong) are listed once as frame-global and weigh little.

Verified: Linux build (TLG_LTO=OFF) clean; frame_diff.py on synthetic records. Not run in
game yet (the user tests); the shader cache key is unchanged (no recompiler or pipeline
cache sources touched).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 23:20:27 -03:00
HayatoGandClaude Opus 5.5 d62c94276b ISS_ environment prefix for inFAMOUS; TSC back to the host rdtsc by default
- probe.c: each ISS_X in the environment is copied to TLG_X at start (unless TLG_X is set),
  so the player, launcher and scripts use ISS_* while the shared core still reads TLG_* (one
  common prefix later, once every port uses ps4_core). Launcher, scripts, README and docs
  renamed to ISS_.
- TSC: upstream's process clock at 1 GHz made inFAMOUS run 3-4x too fast (the game executes
  rdtsc itself in 391 places). Default is again the host rdtsc with its measured frequency;
  TLG_TSC=process (ISS_TSC) opts in.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 23:01:47 -03:00
HayatoGandClaude Opus 5.5 f4c30a1a5d Eager readback: drop copies the write merge made stale; launcher options for both (on by default)
- CPU bytes written without a fault (TLG_WRITE_MERGE) and their later upload change the GPU
  copy after the fence: the eager copies of those pages are marked stale. Served together, a
  stale copy overwrote the game's new bytes (objects vanished when a D.U.P. base exploded).
  Not served after an image readback of the same range either.
- Launcher: 'Read GPU results ahead' (TLG_EAGER_READBACK) and 'Write to GPU memory without
  waiting' (TLG_WRITE_MERGE), on by default; scripts/infamous_run.sh defaults match.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 22:52:24 -03:00
HayatoGandClaude Opus 5.5 e54913eb9d README: performance chart of a 7-minute session; session_chart.py uncapped mode
session_chart.py takes the frame cap as an optional 4th argument (30 by default, 0 for
games without a cap: the axis follows the session, 30 and 60 FPS references, median and
time above 30/60 FPS). inFAMOUS, current main on an RTX 2060: median 27 FPS.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 21:17:48 -03:00
HayatoGandClaude Opus 5.5 66bf296626 Precise GPU readbacks by default again: GPU particles (smoke to drain) need them
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 17:43:50 -03:00
HayatoGandClaude Opus 5.5 a6bf6d6827 Touchpad swipes without a touchpad; GPU readbacks off by default for inFAMOUS
- Hold View/Select/- (or Tab) and push the right stick (arrows): a finger slides from the
  middle of the pad toward that side ("Open Door" swipe). A tap still clicks.
- TLG_READBACKS defaults to 0 in scripts/infamous_run.sh as in the launcher: 49 FPS
  instead of ~22, and the player reports an image closer to the console (darker).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 16:02:57 -03:00
HayatoGandClaude Opus 5.5 0ed1002042 Read faults without GPU data skip the GPU thread round trip; fault profiler; GPU accuracy option
- Rasterizer::ReadMemory: no GPU-modified buffer data means nothing to download, so the
  faulting guest thread lifts the read protection itself (TLG_FAST_READ_FAULT=0 restores
  the round trip). The memcpy write faults that waited ~3 ms each (2.7 s of every 5 s) are
  gone: 22 -> ~30 FPS in the first areas.
- TLG_FAULT_PROFILE=1: every 5 s, the guest instructions whose faults cost the most.
- Launcher: GPU accuracy (TLG_READBACKS) setting; scripts/infamous_run.sh honours the
  variable (it forced 2 before).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 15:55:38 -03:00
HayatoGandClaude Opus 5.5 3c0932f562 Motion sensor (real gyro via SDL3, simulated for any controller); VRAM budget 3500 MB
- scePadReadState orientation/acceleration/angular velocity: a controller with sensors
  reports them through SDL3 (gyro integration + gravity correction). Without sensors:
  T/G hold the controller sideways, Y shakes; TLG_MOTION_BUTTON (misc1) + right stick
  tilts. TLG_PAD_FILE tokens tilt_right/tilt_left/shake. Gets past the graffiti prompt.
- inFAMOUS runs out of VRAM loading the first level with a 5600 MB cache budget on 6 GB;
  default 3500. The buffer allocation assert now reports the size and memory type.
- Screenshots: the display buffer is BGRA.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 15:05:55 -03:00
HayatoGandClaude Opus 5.5 630be5c3bc inFAMOUS boots to the title and intro: fs:[0] loads in any register, missing system calls
- link_modules.py / probe.c (Windows): the thread-pointer load is patched for every
  register, not only rax. inFAMOUS loads it into rcx/rbx/r14/... in ~690 places, which read
  glibc's TLS instead of the guest's (null per-thread allocator at 0x3c69b0).
- runtime_infamous.c: the 15 imports only this game uses (NpManager A variants, PlayGo
  ETA/to-do/language mask, Http, NetCtl, AppContent add-on info, SystemService string).
- TLG_IMPORT_TRACE=<n>: logs the first n calls of every runtime-resolved import.
- scripts/infamous_quick.sh: windowless CPU-only bring-up run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 14:50:28 -03:00
HayatoGandClaude Opus 5.5 bf012375e2 Packaging: inFAMOUS port profile and an original placeholder icon
port.env: inFAMOUS Second Son / infamous / infamous_launcher.py / CUSA00223.
New original placeholder icon (abstract bolt drawn with PIL, no game art) at
packaging/icon/infamous-icon-1024.png and launcher/infamous.png/.ico; the GR2
icons are gone and the Windows .rc files and make_icon.py point at the new
ones. The packages' system_lib/LEIA-ME now says no firmware module is needed.
scripts/install_desktop.sh reads port.env instead of hard-coding TLG.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 13:59:08 -03:00
HayatoGandClaude Opus 5.5 29fa3f09ea scripts/infamous_run.sh: timed test run for CUSA00223 under the shared game lock
Was scripts/gr2_run.sh: same flock on the workspace game.lock, now on
game/CUSA00223 with only the game's libc.prx and libSceFios2.prx linked (no
JobManager, libSceSecure or firmware libSceNgs2), infamous-* log names and the
inFAMOUS window name/app id.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 13:58:16 -03:00
HayatoGandClaude Opus 5.5 56bfe53df7 GR2 README in the TLG standard (pt + en, screenshots, chart); 1.11 game view; TLG-only files removed
- README.md mirrors tlg_pc's: status, download, required files of 1.00 + 1.11,
  how to play, build, how it works, issues #1-#6, credits; four 1080p captures
  (title, pause menu, ruins, gameplay) and a 5-minute performance chart
- scripts/make_game_view.py: merged game folder (base + update) made of links;
  launcher and gr2_run.sh now run game/CUSA03694 with eboot 1.11 (0 missing
  imports, boots to gameplay at 30 FPS)
- session_chart.py takes the game name
- TLG's screenshots, docs and analysis reports left this repo

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 11:45:46 -03:00
HayatoGandClaude Opus 5.5 a3aa54366d gr2_run.sh: shared game lock (flock) so only one instance runs
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 02:24:48 -03:00
HayatoGandClaude Opus 5.5 929428eb55 AvPlayer: stop all source threads and wake their queues before joining; GR2 run script and roadmap
Gravity Rush 2 stayed in sceAvPlayerStop after its opening movie. The three
source threads are now asked to stop together and every queue they may wait
on is notified before the joins (instrumented with tlg-av log lines for now).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 02:05:14 -03:00
HayatoGandClaude Opus 5.5 b077802041 README: bilingual overview with screenshots and performance chart
- README.md: pt_BR overview with 'English below', then the English version:
  screenshots, status, nightly download, requirements, how to play, build
- docs/TECNICO.md: the technical notes that used to be the README
- docs/screenshots: four in-game captures (native 1080p) and a session chart
  made by scripts/session_chart.py from a port log

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 00:59:17 -03:00
HayatoGandClaude Opus 5.5 404c7d4117 CI fixes, new port icon, project moved to its own folder
- runtime_tlg.c: portable local time (localtime_s + _mkgmtime on Windows) instead
  of a localtime_r shim that clashed with MinGW's macro
- Linux CI: robin-map and VMA built from source (not packaged in Ubuntu 24.04)
- Port icon: original artwork (packaging/icon/tlg-icon-1024.png) for the window,
  the menu entry and the Windows executables
- Paths: docs and helper scripts no longer assume ~/decomp (repo now lives in
  ~/decomp/tlg_pc)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-13 00:52:54 -03:00
HayatoGandClaude Opus 5.5 edf9fbc0c8 Launcher com a arte oficial do dump do usuário e atalho no menu de aplicativos
- tlg_launcher.py: ícone da janela (icon0.png) e banner (faixa do pic1.png)
  lidos de sce_sys do dump; a arte da Sony não vai para o repositório
- scripts/install_desktop.sh: instala ~/.local/share/applications/tlg-pc.desktop
  e o ícone em hicolor (512..48) a partir do dump; --remove desfaz

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 23:58:40 -03:00
HayatoGandClaude Opus 5.5 bd7e2a2a2a Renomeia tudo de gow3 para TLG
Arquivos, identificadores, variáveis de ambiente (GOW3_* -> TLG_*), binários
(tlg-probe, libtlggpu.so), nomes de threads e mensagens de log. As
referências ao projeto de origem (gow3_pc, UPSTREAM.md, LICENSE) e os
submódulos de terceiros foram mantidos. A camada de aliases TLG_->GOW3_
deixou de ser necessária e foi removida.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 23:34:55 -03:00
HayatoGandClaude Opus 5.5 47154188f1 Flags com nomes TLG_*: camada de aliases para os nomes herdados
- probe.c: copia cada TLG_<NOME> para GOW3_<NOME> no início do main
- run_tlg.sh: padrões do TLG como TLG_* e a mesma tradução antes de
  executar (cobre os inicializadores da biblioteca de GPU)
- scripts de teste usam TLG_PAD_FILE / TLG_TOGGLE_FILE
- README: seção Opções

O código herdado continua lendo GOW3_*, para manter fácil o merge com o
upstream (gow3_pc/bloodborne_pc).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 23:25:00 -03:00
HayatoGandClaude Opus 5.5 1507a8f2ca Vigia de sessão: FPS no log (GOW3_FRAME_STATS) e dump automático em travamento
- run_tlg.sh liga GOW3_FRAME_STATS=1 (linha 'Frame stats' a cada 5 s)
- scripts/watch_session.sh: avisa início/fim/crash da sessão, resumo de
  FPS, e com 20 s sem frames manda kill -USR1 (dump das threads)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 23:07:09 -03:00
HayatoGandClaude Opus 5.5 3e1e4e96cd Formato de dados reservado não aborta mais; backtrace de guest no fault handler
- pixel_format.h: data_fmt reservado (15) com SnormNz -> sem conversão
  (o hardware ignora), em vez de UNREACHABLE; era o crash ao pular a intro
- probe.c: em falhas no código do jogo, imprime registradores e a cadeia
  rbp (offsets do eboot) para achar o chamador
- scripts/skipintro_test.sh: menu -> New Game -> pausa -> pular intro

Pendente: ponteiro nulo de handle em 0x1c4c570 (renderer) logo após pular.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 22:17:25 -03:00
HayatoGandClaude Opus 5.5 c3340a5438 Intro do New Game rodando; importação do dump USB e teste automatizado
- scripts/import_usb_dump.sh: completa os psarc truncados a partir do
  pendrive, conferindo prefixo, tamanho (LIST) e os demais arquivos
- scripts/newgame_test.sh: entrada roteirizada (GOW3_PAD_FILE) do menu
  até o New Game
- sce_sys do jogo base (playgo-chunk.dat: 27 chunks) vindo do pendrive

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 22:06:32 -03:00
HayatoGandClaude Opus 5.5 1bd6cd7427 Documentação inicial do port nativo de The Last Guardian
- README com estratégia (runtime nativo + shadPS4/Vulkan), status,
  inventário do dump (sha256), achados e estimativa preliminar
- Relatórios de RE do eboot 1.03: loop principal/threads, áudio,
  I/O/psarc/controle/saves/sistema
- Imports SCE por biblioteca (base 1.00 e 1.03) e caminhos-fonte do engine
- Scripts: extração de imports, leitor de TOC PSARC, mirror/verify FTP,
  progresso do dump USB
- .gitignore exclui arquivos do jogo, ferramentas e saída bruta de descompilação

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01JyWhQUvUQf2YSf8HJWnAtd
2026-10-12 21:08:02 -03:00