this post was submitted on 23 Aug 2023
2 points (100.0% liked)

Emulation

5 readers
1 users here now

Emulation across the ages

founded 1 year ago
 

I thought I would share an app for use with a fairly niche game in the Monster Taming/Sim/Raising genre, Monster Rancher on the Playstation (1). I don't expect many to know what this game is, but there might be a few that remember it. It frequently is called Pokemon ripoff or clone, but it's really a pet (monster) raising sim where you raise a monster up from a baby through it's life all the way through it's death. You can also cross-breed monsters (fuse them; parents are consumed in the process) to create new breeds or new babies with significant advantages over 1st gen monsters.

Monster Rancher had an interesting gimmick in that, while playing the game you could visit the Shrine, where part of the lore allows found "Disc Stones" (CDs) to be used at the shrine to create monsters. The game would prompt you to pop open the lid and put in any Music CD or other PSX game, it would read the meta data of the disc, then prompt you to re-insert Monster Rancher back into the PSX, at which point your new baby monster would be born.

In 2001 we discovered what data was being read and how to extract it from a disc so that the meta data could be shared without passing around copies of games and CDs themselves, then you could burn a blank disc with the meta data and use this to get special monsters that might be hard to get (or without having to buy hundreds of CDs/Games just to get a monster.).

In 2019 we fully reverse engineered the CD Read Process and how the game interprets the track data to create the monsters which allowed us to create an app to generate any monster on-demand and on the fly via the Make-a-Monster app. This process not only allows you to pick any monster on demand, but also any of the "random" stat offsets monsters can be born with.

With the Make-A-Monster files you can still burn physical media to play on console, or generate just the files for download to use directly in emulation where no optical drive is present and the app supports Duckstation, ePSXe (2.0.5), PSX, PCSX-R, CloneCD, ImgBurn

Monster Rancher 1 & 2 DX was released which is a remaster released in 2021 and includes a baked in CD Database to search and look for albums and songs, but for anyone still playing the original version of the game on Emulation, there's options for the CD Swapping gimmick for MR1 and MR2. One of the Monster Rancher community members has a ticket open with PCSX2 to try and get more emulator support for the Playstation2 versions of the later games but at the moment that's a bust.

Anyway, hopefully there's some ranchers here that will appreciate the research over the years that have lead to creating this :)

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 year ago* (last edited 1 year ago)

Small, but huge correction. I forgot to include (omit) replacements in my napkin math above. There are 60 indices and two index fields that are summed to the offset result. so index 0 & 5 produce the same result as index 5 & 0 etc.

  • Offsets can be a combination of 60 indices. Each breed with offsets is a choice of 2 indices from a set of 60 with replacement (1 & 5, and 5 & 1 are the same result), so (60-1+2)!/((60-1)!x2!) = 61x60/2 = 1,830
  • 1,830 x 333 (breeds that offsets can be applied to) = 609,390 spawns total
  • There are 60 ??? spawns in NTSC and 19 special spawns that aren't ???
  • There are 70 ??? spawns on PAL and 19 special spawns that aren't ???
  • There are 6 different monsters in the market and those spawn with base stats
  • 609,390 + 60 + 19 + 6 = 609,475 total monster spawns on NTSC
  • 609,390 + 70 + 19 + 6 = 609,485 total monster spawns on PAL

In MR2DX, the Indices work almost the same, except each index value has a range that it is randomly rolled, so if 2 same indices are together they can still be different. I'm not even sure how to math the possible value range for those but since the original game are static indices, it's much easier.