grumpycoders / grumpycoders/pcsx-redux
Thousand Arms (SLUS-00845) soft-locks at first in-engine cutscene: script waits for SPU IRQ that never fires
- Dominant language
- C++
- Stars
- 994
- Forks
- 151
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 18
Description
### Describe the bug
The game loads the first in-engine scripted scene (night village, main character going on a road).
### Expected behavior
The scripted scene starts: dialogue window opens with voiced text
("Be quiet, already." etc.), scene proceeds.
### Steps to reproduce the bug
1. Start new game.
2. The game loads the first in-engine scripted scene
3. Wait.
### Operating System
Windows 11
### PCSX-Redux version
Version: 24734.20260713.10.x64
Build: 345
Changeset: f22e4c122cd8d2e84dc6d2782de3def75d0014ff
Date & time: 2026-07-13 22:49:36
### CPU model
Core I7-860
### GPU model & Drivers
Nvidia RTX 5070 TI, version 610.74
### BIOS version
retail BIOS (SCPH-101, sha-known `171bdcec`) and bundled OpenBIOS
### Options
- [x] Dynarec CPU
- [ ] 8MB
- [ ] OpenGL GPU
- [x] Fastboot
- [ ] Debugger
### Iso checks
_No response_
### Logs
_No response_
### Additional information
- The scene loads fine (the overlay with dialogue text is present in RAM at
0x8009F000, character idle animation plays), but the dialogue window never
appears and the scene never advances.
- In the debugger the game is spinning in a loop waiting for an SPU IRQ that
is never delivered.
- If **"Always enable SPU IRQ"** is toggled ON while the game is stuck: exactly
one dialogue window is displayed (with voice), after which the game freezes
completely.
- If "Always enable SPU IRQ" is enabled from boot: the game hangs right at the
start of gameplay, before the scene.
This matches the game's known reliance on SPU IRQ for streaming dialogue voice
data: Thousand Arms is listed among SPU-IRQ-dependent titles in Mednafen's
SPU-IRQ notes (https://github.com/libretro/beetle-psx-libretro/blob/master/mednafen/psx/notes/SPU-IRQ),
and TODO.md in this repo mentions pending work on IRQ integration.
Contributor guide
Research direction
Start with TODO.md and reproduce the first in-engine scene under the debugger, following the loop that waits for the SPU IRQ. Compare normal boot, enabling “Always enable SPU IRQ” while stuck, and enabling it from boot. Done means the dialogue window opens, voiced playback proceeds, and the scene advances without introducing the reported boot hang.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100