8fa8dc4ba9809c4649a3bcd555b4f4b67f7c5f97
- VsmxInterpreter.interpretFunction: save/restore pc/exit/stack/callStates so re-entrant event firing (FireEventAnim, timers, movie callbacks) no longer truncates the outer script. This is what left ss_btn_mm without focus (Scenes appeared frozen: no selection, input ignored while audio continued). - Add default geometric focus traversal for buttons with no direction handler: Controller.moveFocus picks the nearest visible focusable object. The PSP does this natively; English/Francais buttons have no onUp/onDown events in the RCO and relied on it. - Track page visibility (BaseObject.displayed, set by PageObject.open/close) so traversal skips closed pages and collapsed (alpha 0) columns. - Make BaseObject.trigger null-safe.
useless-umd-player
a standalone player for PSP UMD Video ISO images: open a disc, render its real menu, and play the movie (H.264 video + ATRAC3+ audio) with mouse and keyboard/media-key controls.
Status: playable. Opens a UMD Video ISO, plays the real RCO menu (rendered from the disc), and plays the movie (H.264 video + ATRAC3+ audio).
Build
Requires JDK 21 (Gradle auto-provisions it).
./gradlew build
Run the player
./gradlew ui:run --args="/path/to/disc.iso"
Controls:
- ↑ ↓ ← → — navigate the menu
- Enter — select
- M — back to the menu
- S — skip the current intro/track
- Space / P — pause
- F11 — fullscreen
CLI
The cli module has inspection/debug commands:
./gradlew cli:run --args="dump /path/to/disc.iso" # metadata + playlist
./gradlew cli:run --args="rco <iso> UMD_VIDEO/RESOURCE/EN100000.RCO" # menu data
./gradlew cli:run --args="play <iso> <streamName>" # headless A/V sync test
License
GPL-3.0-or-later — see LICENSE.
Languages
Java
100%

