RED-Project icon indicating copy to clipboard operation
RED-Project copied to clipboard

Psycho Dream (Steam)

Open Computerlabrat opened this issue 3 months ago • 12 comments

From what I understand, Psycho Dream is emulated. However, looking at it, the files are in the game's exe. Any idea on how to get them out?

Computerlabrat avatar Sep 08 '25 15:09 Computerlabrat

Located at hex offsets BDBCD6 and D5BD0A both with hex length of 100000. Both are No-Intro's "Psycho Dream (Japan)". Any way to extract the new localization?

DrAzathoth avatar Sep 08 '25 18:09 DrAzathoth

At this point, I'd just settle for an easy way to extract them for now. However, I wouldn't rule out the possibility that the translation could be a patch that the emulator applies to one of those two on the fly.

Computerlabrat avatar Sep 08 '25 19:09 Computerlabrat

I tried dumping from RAM, but the ROM freezes upon boot. Hopefully, the translation is playable on real hardware or emulation.

Edit: Here's my patch. Perhaps someone might be able to make it work and it isn't completely unusable?

Second edit: Upon further inspection, the "new" translation seems to be identical to this one. Maybe there's some tweaks with this one? I'm going to run a diff checker between the fan one and my RAM dump to see what is different.

DrAzathoth avatar Sep 08 '25 21:09 DrAzathoth

Okay, here are my final findings. Good news, albeit very boring.

  • Two ROMs are stored in the .exe file
  • The second ROM starts at D5BD0A and is 100000 in hex length. It is identical to No-Intro's "Psycho Dream (Japan)".
  • The first ROM starts at BDBCD6 and is 180000 in hex length.
  • The first ROM's first 100000 bytes are identical to No-Intro, but the entire ROM is identical to the fan translation.

DrAzathoth avatar Sep 08 '25 22:09 DrAzathoth

Okay, so any tips on what I'd do to go about extracting them easily such as console commands for Windows and Linux, any special hex editors that would make this easier, etc.?

Edit: It looks like the values might have changed as they updated the game.

Computerlabrat avatar Sep 09 '25 07:09 Computerlabrat

Okay, so any tips on what I'd do to go about extracting them easily such as console commands for Windows and Linux, any special hex editors that would make this easier, etc.?

It might be worth giving ROM Masquerade a shot. Download the tool and open the .exe as Base File, then click: "Go Analyze!" According to the No-Intro DB, the ROM has a size of 1048576 bytes, which converts to 100000 in hex and the CRC32 for the ROM should be 5c145e98. Enter both of these in the "Brute Force" section and then click "Go Attack!", the tool should be able to identify the ROM and save the dump file. I don't have the re-release of Psycho Dream, so I can't verify it myself.

RealRelativeEase avatar Sep 09 '25 11:09 RealRelativeEase

It seems like that program stops responding. I wonder if it's because of how old the program is or if they altered the game itself.

Computerlabrat avatar Sep 09 '25 12:09 Computerlabrat

It seems like that program stops responding. I wonder if it's because of how old the program is or if they altered the game itself.

I see. I checked SteamDB, maybe the .exe is too large at 30 MB for the tool to handle. Have you tried analyzing the new .exe with binwalk?

RealRelativeEase avatar Sep 09 '25 14:09 RealRelativeEase

No. First time I've heard of it. It looks like binwalk's in source code and I've no idea how I'd be able to use it in Windows at the moment.

Computerlabrat avatar Sep 09 '25 15:09 Computerlabrat

For the update that was just released yesterday, here are the new offsets that the ROMs are located at:

  • Offset BDC7D6 -> hex length 180000
  • Offset D5C80A -> hex length 100000

Before the start of the first ROM there is a string RAWD followed by another string cfs. several bytes later. Exactly 8 bytes after the cfs. string is the start of the first ROM. Then immediately after the first ROM ends there is another RAWD string, with cfs. shortly thereafter, then 8 bytes after that is the start of the second ROM, which goes until we hit another string CDIR.

Doing a quick Google search for the strings RAWD and CDIR led me to this project: https://github.com/raysan5/rres - which may be the overall container format that these ROMs are stored in.

EDIT: Seems like the main rres package is located from offsets 52D4D0 to E5D1DF if anyone wants to take a stab at unpacking it.

farmerbb avatar Sep 10 '25 01:09 farmerbb

It looks like using Rom Masquerade with those new values works. Thanks. Plugging in the values given both files working, but I had to use microsoft calculator in programmer mode to figure out the end points for plugging it in. Worked pretty quickly.

For the English version, the file ends at: D5C7D6 (Microsoft Calculator puts a space between the number, which will cause it to say it's out of memory if you don't fix your calculations) For the Japanese version, it's E5C80A where it ends.

Of course, the issue with this is that these games are open to change, so those values may change in the future.

Computerlabrat avatar Sep 10 '25 14:09 Computerlabrat

It looks like binwalk's in source code and I've no idea how I'd be able to use it in Windows at the moment.

You can run binwalk on Windows via the Linux Subsystem (WSL). First, install a Linux distribution via the Microsoft Store, then start WSL and run sudo apt install binwalk. This will install the (outdated) Python version of binwalk, but that one should still be suitable to test out. Installing a more current version of binwalk is a bit more complicated.

RealRelativeEase avatar Sep 14 '25 18:09 RealRelativeEase