Skip to content

libScePlayGo: optional chunks report an empty bitmask, so Guardians of the Galaxy (PPSA01748) offers no English text; fix branch ready #6031

Closed

Description

@Tamalero

Guardians of the Galaxy (PPSA01748, US release) opens on a language picker. On main the voice row offers English, French, German, Spanish and the rest, but the text row offers only Arabic, Korean and the Chinese variants, so the whole game runs in Chinese. With scePlayGoGetSupportedOptionalChunk and scePlayGoGetOptionalChunk reporting every optional chunk as installed, every text language appears, English included. Fix branch below.

Title: Marvel's Guardians of the Galaxy (PPSA01748 v01.006.000)
Where it shows: the first screen, on main bebff8b0e; 9f03c4fe0 has the same two functions. Linux, RTX 4090. 3 of 3 runs.

What the game asks

With a trace on the two functions, the title calls scePlayGoGetSupportedOptionalChunk twice and scePlayGoGetOptionalChunk once, all with type 0, before the picker appears. It never imports scePlayGoGetLanguageMask. Both functions return 0 with an empty bitmask, which reads as "this package has no language packs and none are installed".

The title's sce_sys/playgo-scenario.json lists ten chunk languages:

"chunkSupportedLanguages": ["en-US", "fr-FR", "it-IT", "de-DE", "es-ES", "pl-PL", "ru-RU", "es-419", "pt-BR", "ja-JP"]

The text row hides exactly the languages in that list and keeps the ones param.json lists outside it (ar-AE, ko-KR, zh-Hans, zh-Hant). scePlayGoGetLocus is not the cause: the scenario file already makes main accept chunks 0 to 59 as LOCAL_FAST.

Fix

Branch: https://github.com/Tamalero/AnyPS5/tree/fix/playgo-optional-chunks-installed (one commit on 9f03c4fe0).

A dump is fully installed, so both functions now set every bit, the same answer scePlayGoGetLanguageMask already gives for languages. type stays ignored. The bit layout and the type values are not known, and that is recorded in docs/dev/debt/libScePlayGo.md.

--- a/core/libs/prx/libScePlayGo/Export.cpp
+++ b/core/libs/prx/libScePlayGo/Export.cpp
@@ -19,6 +19,7 @@
 static constexpr uint64_t PLAYGO_LANGUAGE_MASK_ALL = ~0ull;
+static constexpr uint64_t PLAYGO_OPTIONAL_CHUNK_MASK_ALL = ~0ull;
@@ -160,7 +161,7 @@ int APS5_VABI scePlayGoGetOptionalChunk(int handle, int32_t type, PlayGoOptional
-    option->bitmask = 0;
+    option->bitmask = PLAYGO_OPTIONAL_CHUNK_MASK_ALL;
@@ -177,7 +178,7 @@ int APS5_VABI scePlayGoGetSupportedOptionalChunk(int handle, int32_t type, PlayG
-    option->bitmask = 0;
+    option->bitmask = PLAYGO_OPTIONAL_CHUNK_MASK_ALL;

core/libs/tests/GuestPlayGo.cpp gains a check for both functions (bad handle, null pointer, all bits set).

Details and tests

Tested and written by Claude (AI assistant) on a contributor's machine.

Activity

  1. milescoviello commented on Oct 14, 2026

    @milescoviello
    Contributor

    Carried in #6033 with your commit and authorship unchanged (rebased onto main 411e5e6). guest_playgo passes there and fails with main's Export.cpp; the title evidence in that PR is yours, since I do not have PPSA01748. Thanks for the clear write-up.

    AI-assisted: yes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions