Skip to content

Resident Evil 4 (PPSA07411): start-up needs a library named Party.prx; with the missing exports added it stops at sce::Json::InitParameter2::setSpecialFloatFormatType #2776

Closed

Description

@xXPBSXx

Resident Evil 4 (PPSA07411 v01.000.000): start-up needs a library named Party.prx that does not exist here; with the missing exports added it stops at sce::Json::InitParameter2::setSpecialFloatFormatType

1. Party.prx

The first start fails before the title runs:

 -> FAILED
Failed to load module: ...\libs\Party.prx
GetLastError: 126

The executable's list of needed libraries contains Party.prx (module name Party), next to libSceUserService.prx. There is no library of that name in core/libs/prx, and tools/import_audit.py does not report it, because the registry only holds import entries and Party has none. unused-filter=2 (1552 imports filtered to 889) keeps Party.prx in the list. I do not know what, if anything, the title imports from it.

2. 36 missing exports (import audit across the executable and its module, libraries built from main at about b5f5362d plus some unrelated stub exports): 937 unique imports, 676 implemented, 51 stubs, 36 absent:

library absent
libSceHmd2 11
libScePad (VR controller, one without a name: n3kSX62fgNo) 6
libSceSsl 6
libSceJson2 (sce::Json::Value and InitParameter2 members) 6
libSceVrTracker2 3
libSceNet (sce_net_in6addr_linklocal_allnodes) 1
libSceConvertKeycode, libSceSharePlay, libSceNpSessionSignaling 1 each

None of these names is in the code or in a pull request, except sce_net_in6addr_linklocal_allnodes (#1808, closed by the intake pause).

Fix: the 35 functions as exports without an implementation (signatures unknown, they throw NotImplemented), one test, one TechnicalDebt entry, and #1808's commit with its author, on my fork, based on main at ba2a0a31:
https://github.com/xXPBSXx/AnyPS5/tree/fix/export-ppsa07411-imports

3. What the title does next. To test the exports I put an unrelated small library next to the others as libs\Party.prx (only so the loader passes; this is a measuring aid and not a proposal). Then everything loads, the title opens /app0/natives/PS5/runtime.args, starts a FileReader thread and calls one of the new exports:

what():  _ZN3sce4Json14InitParameter225setSpecialFloatFormatTypeENS0_22SpecialFloatFormatTypeE not implemented

So the title reaches its own code, and its first real stop is setSpecialFloatFormatType. I have no verified signature or layout for it (InitParameter2's layout is unknown, see TechnicalDebt), so I am not proposing code for it.

Windows 10 (19045), MinGW-w64 GCC 15.2.0 (WinLibs r7), Release. The executable and module were relinked from the ELF copies of the dump. Dump from my own digital copy; no game files shared. AI-assisted.

Activity

  1. Silverash-i8 commented on Oct 10, 2026

    @Silverash-i8
    Contributor

    On the Party.prx part: since nothing is imported from it, I have a branch that lets the Windows start-up skip a missing library like that instead of stopping with error 126. It's Silverash-i8/AnyPS5-fork:fix/windows-skip-missing-unused-library (ce0b99ac on main 57f96fd2); details are on #2591, which is the same problem with libSceXml.prx. With it you shouldn't need the stand-in library any more. The stub prints ...\Party.prx -> not found; nothing is imported from it, continuing without it and carries on. A missing library that the title does import from still stops as before.

    I can't run RE4 here, so I haven't checked it gets you to the same setSpecialFloatFormatType stop. I'd be glad to hear if it does.

    AI-assisted (Claude Code).

  2. xXPBSXx commented on Oct 10, 2026

    @xXPBSXx
    ContributorAuthor

    @Silverash-i8 thanks. I ran RE4 with your branch (see #2591): it starts past Party.prx.

    Update on what stopped RE4 after that, each with a branch and test on current main (verified by running; none of these alone is shown to make the title playable):

    The remaining stop I can see is the AGC state check at register 0x292 (see PR #419). I have not established what that register means, so I'm not proposing a change there.

    AI-assisted (Claude Code).

  3. Silverash-i8 commented on Oct 11, 2026

    @Silverash-i8
    Contributor

    The Party.prx start-up part of this is on main now: #3129 (carried by CnRJay, merged 2026-10-11) skips a needed library nothing imports from, the same change you tested in #2591. The other RE4 stops listed here are unaffected.

    AI-assisted (Claude Code).

  4. xXPBSXx commented on Oct 11, 2026

    @xXPBSXx
    ContributorAuthor

    Refreshed the RE4 export branch on current main (1be0a7c) so it can be carried without rework: https://github.com/xXPBSXx/AnyPS5/tree/fix/export-ppsa07411-imports-v2 (two commits: the IPv6 link-local all-nodes address and the declared-only imports; guest_ppsa07411_exports and the conventions check pass). It no longer contains sceSharePlayGetCurrentConnectionInfoA: RE4 imports it, but it should come from the implementation with the layout in #3210, so the import audit for RE4 shows that one as absent until #3210 is merged. Nothing else changed in content. The old branch stays as it is.

    AI-assisted (Claude Code).

  5. Silverash-i8 commented on Oct 11, 2026

    @Silverash-i8
    Contributor

    Windows check of fix/export-ppsa07411-imports-v2 (head 640172b1) together with #3341 (the SharePlay carry), both merged onto main 5c34f9e without conflicts: Windows 11, WinLibs GCC 15.2.0 r7, Release. guest_ppsa07411_exports, guest_share_play and patched_libraries all pass, so the two can be carried in either order.

    AI-assisted (Claude Code); I ran this on my machine.

  6. xXPBSXx commented on Oct 11, 2026

    @xXPBSXx
    ContributorAuthor

    Also refreshed on current main: the InitParameter2::setSpecialFloatFormatType change that RE4 needed (it stores the value instead of throwing): https://github.com/xXPBSXx/AnyPS5/tree/fix/json2-special-float-format-v2. It is stacked on fix/export-ppsa07411-imports-v2 (the function is one of that branch's declared-only imports, and this commit replaces its stub with the implementation), so it needs that branch first. guest_json, guest_ppsa07411_exports and the conventions check pass.

    AI-assisted (Claude Code).

  7. xXPBSXx commented on Oct 11, 2026

    @xXPBSXx
    ContributorAuthor

    Branches refreshed on current main (a11c8f7), each built and tested (the matching ctest targets and tools/check_conventions.py pass). The earlier -v2 branches conflicted with main after the carried #3177 commits (duplicate setNullAccessCallBack, scePadUnknown_n3kSX62fgNo, SharePlay), so these are rebuilt from the list of functions that main still lacks:

    AI-assisted (Claude Code).

  8. xXPBSXx commented on Oct 11, 2026

    @xXPBSXx
    ContributorAuthor

    Analysis of the RE4 stop scan conversion mode is unsupported (register 0x292 = 0x00000003):

    • Register: 0x292 in the context bank is PA_SC_MODE_CNTL_0 (Linux gc_10_1_0_offset.h: mmPA_SC_MODE_CNTL_0 0x0292). Source is Linux amdgpu GFX10 headers, not PS5 documentation.
    • Value 3: bit 0 MSAA_ENABLE, bit 1 VPORT_SCISSOR_ENABLE (gc_10_1_0_sh_mask.h, PA_SC_MODE_CNTL_0__*_MASK). Bit 1 is already handled (State.cpp applies the viewport scissor when (read(cx, 0x292) & 2u) != 0).
    • Where we throw: core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp on current main: ScanModeMask = ~0x22u (line 110, so bits 1 and 5 are allowed), the check at line 651 (zero(cx, 0x292, result.samples > 1 ? ScanModeMask & ~1u : ScanModeMask, ...)) and the draw precheck at line 1103. So with feat(agc): multisampled color and depth targets with CB resolves #419 on main, bit 0 passes only when the draw's targets have more than one sample; RE4 ends here, so its draw has MSAA_ENABLE set and single-sample targets (or at least result.samples == 1; I have not looked at its targets).
    • Is a narrow allowance supported by a source? Only partly. Mesa treats MSAA_ENABLE as an API-level rasterizer flag independent of the target's sample count: radeonsi sets it as multisample || poly_smooth || line_smooth (si_state.c, around line 968), and radv derives it from the rasterization sample count and line mode (radv_cmd_buffer.c, S_028A48_MSAA_ENABLE(msaa_enable)). So MSAA_ENABLE=1 with a 1-sample target is a legitimate state, for example with smooth lines. What that changes for a 1-sample target depends on the primitive type (polygon/line smoothing), and I found no source for the console's behavior or for shadPS4/KytyPS5 handling of this bit. Without knowing the title's primitives I do not propose letting it through; a draw of plain triangles would be the case a later change could relax, with a test.

    No code from me for this one.

    AI-assisted (Claude Code).

  9. xXPBSXx commented on Oct 11, 2026

    @xXPBSXx
    ContributorAuthor

    Still open, status on main f990506 (Windows import audit of the relinked RE4 executable, 937 unique imports): 8 imports are still absent: sce::Json::InitParameter2::setSpecialFloatFormatType, sceHmd2GetDeviceInformationByHandle, sceHmd2GetFieldOfView, sceHmd2Terminate, scePadVrControllerSetVibration, scePadVrControllerReadCombinedState, scePadVrControllerSetVibrationMode, sceVrTracker2ResetLocalCoordinate. The load therefore still fails with unresolved ELF import WVZBP4IyM+E on a Windows run. #3773 (merged) covered the rest of the list; the remaining eight are in my branches fix/export-ppsa07411-imports-v3/fix/json2-special-float-format-v3 and in open PR #4044 (PS VR2 calls).

    AI-assisted (Claude Code).

  10. oneandonlydean commented on Oct 12, 2026

    @oneandonlydean
    Collaborator

    @xXPBSXx #4309 is on main now, with #3737 and #4044. Could you run PPSA07411 on current main and say whether it gets past scan conversion mode is unsupported (register 0x292 = 0x00000003)? If it stops on a new message from that check (it names the register: a sample 0 off the pixel center, a missing 0x2fe, or a primitive other than triangles), please post it here.

  11. xXPBSXx commented on Oct 12, 2026

    @xXPBSXx
    ContributorAuthor

    Run of PPSA07411 (RE4) on current main c36fd0a0e (contains #4309, #4044 and #3737; no other open PR), Windows 10, MinGW GCC, RTX 4080 SUPER, freshly relinked, 0 absent imports, 150 s limit, one run.

    It no longer stops at scan conversion mode is unsupported (register 0x292 = 3). The new stop, about the first presentation (the run aborts at about 100 lines of log):

    [videoout] presentation failed: AGC graphics: missing register in context bank at DWORD 0x2fe (766)
    what():  AGC graphics: missing register in context bank at DWORD 0x2fe (766)
    FATAL: abort() (SIGABRT)
    

    That is the generic missing register in <bank> bank message from State.cpp, not one of the new messages of the check you mention (sample 0 off pixel center, primitive other than triangle); the register that is absent from the bank is context register 0x2fe. Before it the log has two lines of the form Shader 0x7ff709efa500 could not be prepared at registration (its s_swappc_b64 at program counter 0x74 calls a computed target); preparing it when it is used. I did not look into which draw state lacks 0x2fe, or where the title writes it.

    AI-assisted (Claude Code).

  12. xXPBSXx commented on Oct 12, 2026

    @xXPBSXx
    ContributorAuthor

    @oneandonlydean you asked about 0x2fe; here are the numbers. RE4 (PPSA07411) on main 9aa5fd2 (with #4309), relinked, 0 absent imports, 150 s, with a temporary local print at the failing check (not committed).

    Where it throws. DecodeState in State.cpp, in the result.samples == 1 && (read(cx, 0x292) & 1u) != 0 branch: for (pixel = 0..3) static_cast<void>(read(cx, 0x2fe + pixel * 4u)); (read throws missing register in context bank at DWORD 0x2fe when the register was never written). The function right after it, singleSampleMsaaRejection, reads the same registers through find and already treats an absent register as no objection, and Graphics.cpp pins the strict behavior (queue.context.erase(0x306); expectFailure(..., "missing register") in MsaaEnableSingleSampleTests), so it looks deliberate.

    What the title has in that bank when the draw is decoded (context registers 0x2f5..0x30f; - = never written):

    0x292 = 0x00000003 (MSAA_ENABLE | VPORT_SCISSOR_ENABLE)    0x2f8 = 0x00000000 (1 sample)
    2f5:- 2f6:- 2f7:- 2f8:00000000 2f9:0000002d 2fa:41eaaaab 2fb:3f800000 2fc:41808887 2fd:3f800000
    2fe..30d: all 16 sample-location registers absent
    30e:ffffffff 30f:ffffffff        (the PA_SC_AA_MASK words are written)
    

    So RE4 sets MSAA_ENABLE with one sample and the AA mask but never writes the sample locations (nor PA_SC_CENTROID_PRIORITY_0/1 at 0x2f5/0x2f6).

    Reset value. Linux gc_10_1_0_default.h (amdgpu, not PS5) lists mmPA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0 .. X1Y1_3_DEFAULT = 0x00000000 and mmPA_SC_AA_CONFIG_DEFAULT = 0; all-zero locations are the pixel center, the case the check accepts. Mesa always programs these registers explicitly, so it says nothing about a title that does not. What the console's default hardware-state packets leave there is not known to me (our libSceAgc writes none of them), so I would not treat a missing register as 0 on my own authority.

    Question for you, since you own this check: would you accept "register never written = pixel center" for the single-sample case (dropping the read loop and the test line, keeping everything singleSampleMsaaRejection does), with a TechnicalDebt line that this rests on the amdgpu reset value? If yes I can prepare it with the test changed accordingly; if you prefer the strict behavior, RE4 stays stopped here.

    AI-assisted (Claude Code).

  13. oneandonlydean commented on Oct 12, 2026

    @oneandonlydean
    Collaborator

    Yes, go ahead. With one sample an unwritten location register reads as the pixel center, which is the case the check accepts. Drop the read loop in that branch, keep singleSampleMsaaRejection as it is, and change the MsaaEnableSingleSampleTests line to expect the draw to pass. The TechnicalDebt line should say it rests on the amdgpu reset value, not on a console measurement.

  14. EagleBearerYS commented on Oct 13, 2026

    @EagleBearerYS
    Contributor

    Resident Evil Village (PPSA01556, v1.210) stops on the same line, also at its first presented frame, about 20 s in. Setup: Windows 11, MinGW-w64 GCC 15.2.0 (WinLibs r7), Release, RTX 3070 Laptop, main e51428b, freshly relinked, no missing imports:

    [videoout] presentation failed: AGC graphics: missing register in context bank at DWORD 0x2fe (766)
    

    It throws in the same place as RE4: the read loop in the single-sample MSAA_ENABLE branch of DecodeState. I checked with a temporary print at the check (not committed), on main 7e181fc plus #4693 and #4876, which don't touch the AGC state. The context bank holds the same values as the RE4 dump above, guard band included:

    0x292 = 0x00000003 (MSAA_ENABLE | VPORT_SCISSOR_ENABLE)    0x2f8 = 0x00000000 (1 sample)
    2f5:- 2f6:- 2f7:- 2f8:00000000 2f9:0000002d 2fa:41eaaaab 2fb:3f800000 2fc:41808887 2fd:3f800000
    2fe..30d: all 16 sample-location registers absent
    30e:ffffffff 30f:ffffffff
    

    decodeSampleLocations is never reached with more than one sample. With the change agreed above (the loop dropped, singleSampleMsaaRejection unchanged), Village gets past this frame and keeps presenting, so the fix would unblock PPSA01556 as well as PPSA07411.

  15. oneandonlydean commented on Oct 14, 2026

    @oneandonlydean
    Collaborator

    Closing: the last stop here, missing register in context bank at DWORD 0x2fe, is handled on main since #4949, and the missing exports are in. If PPSA07411 stops somewhere else on current main, reopen or open a new issue with the log line.

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