Screenshot API needs implementing
Moving this out of #3128 because it affects multiple games:
- Cladun: This is an RPG / Classic Dungeon: Fuyoku no Masoujin
- Dead or Alive Paradise
- Grand Knights History
- Motorstorm: Arctic Edge
- Phantasy Star Portable 1 & 2 (possibly)
- Senjou no Valkyira 3: Unrecorded Chronicles ... maybe others?
Dead or Alive Paradise uses this for saving ingame photos as JPEG screenshots to ms0:\PSP\SCREENSHOT\ULUS10521\ and then listing (but not full screen viewing) these screenshots when you open Precious Memories.
Example output screenshot: ULUS10521.zip
Grand Knights History seems to try to take a screenshot every time the player presses Start on any dialog sequence.
37:37:107 user_main W[SCEUTIL]: Dialog\PSPDialog.cpp:70 Game requested language 0, ignoring and using user language
37:37:107 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1097 0=sceUtilityScreenshotInitStart(08de3060)
37:37:107 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1126 1=sceUtilityScreenshotGetStatus(): status changed: STATUS_INITIALIZE
37:37:129 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1126 2=sceUtilityScreenshotGetStatus(): status changed: STATUS_RUNNING
37:37:130 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1114 0=sceUtilityScreenshotUpdate(2)
37:37:140 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1126 3=sceUtilityScreenshotGetStatus(): status changed: STATUS_FINISHED
37:37:140 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1106 0=sceUtilityScreenshotShutdownStart()
37:37:163 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1126 4=sceUtilityScreenshotGetStatus(): status changed: STATUS_SHUTDOWN
37:37:173 user_main W[SCEUTIL]: HLE\sceUtility.cpp:1126 0=sceUtilityScreenshotGetStatus(): status changed: STATUS_NONE
Similarly, Motorstorm: Arctic Edge uses it to save photos.
Hold SELECT for 3-5 seconds in any Phantasy Star Portable game and it snaps a screenshot. Saves directly to ms0:\PICTURE\NPJH50332SS\<timestamp>.jpg in original resolution.
Since it's not a very useful thing, even if it's not properly implemented, it would be nice to at least auto-exit out of these API calls to prevent the games from softlocking.
Wipeout Pulse has photo mode by accessing pause menu.
The captured screenshot displays black screen in hardware modes but software mode displays correctly.
Hardware:
Software:
The Wipeout issue is different since it's not using the sceUtility screenshot API. Instead there's some function we need to hook, where Wipeout reads back the image using the CPU.
As for DOAP, yeah, we should indeed at least implement the funcionality enough to avoid soft-lock.
Actually, we do have a stub implementation, but apparently it's not quite working then.