PS4 is described in Platform by what it can do, and the launcher asks for
those capabilities instead of checking console names:
- Platform: ps4 flag, console, no child processes, save-directory ROM import,
no self-updater or remote fetch. Three new capabilities:
padNavigation ("pointer" on NX, "focus" on Xbox and PS4),
systemQuit (iOS, PS4: no in-app Quit button) and
inboxTransfer ("mtp" on NX, "ftp" on PS4).
- RomImporter: isNX means the Switch again. The save-directory inbox flow
("Scan again", transfer hints) asks _inboxImport(); fixtures that only set
isNX keep the NX flow. Pad focus navigation follows padNavigation, so PS4
gets Xbox's D-pad focus ring by default (Triangle still toggles the cursor).
Inbox hints gain FTP variants; the NX strings are unchanged. Custom
Carts (.g1rcart) import rescans imports/carts/ on PS4 as on NX.
- LauncherView: Quit button and header layout follow systemQuit; import label,
drop hint and open-folder follow the inbox capability. pcall around the
footer invert shader so a driver rejecting it cannot abort the boot.
- conf.lua: fixed 1920x1080 window (single EGL surface on the console);
VideoMode/FaithfulRes: fixed display; Performance: balanced tier.
- tests/engine/platform_ps4_test.lua: the capability matrix for PS4, NX,
Xbox, iOS and desktop.