scottrice / Ice

Application to automatically add ROMs to Steam
http://scottrice.github.io/Ice/
MIT License
834 stars 96 forks source link

Multi-disc games #93

Open Spongeroberto opened 10 years ago

Spongeroberto commented 10 years ago

How does Ice deal (or plan to deal) with games consisting of multiple discs? Most notably bigger RPGs on the Playstation and Gamecube.

I saw on consolegrid that there are double entries for the Baten Kaitos games (an entry per disc). This seems workable but there would need to be a set way to identify the disc number.

Thoughts?

scottrice commented 10 years ago

Ill be honest, I have no idea what the best way to deal with multi-disk games is. Can you open disc 2 of games in an emulator using the command line? I haven't messed with it that much because I am afraid the solution might take a lot of work, and I have no idea how many games will be effected by this.

I am totally open to ideas on how to deal with this situation.

marcusmoller commented 10 years ago

First of all we need to look into how multi disc-games are named. I have only one example available, Tekken 3:

Would be great if you could list some examples @Spongeroberto.

saftle commented 10 years ago

After doing a quick google search, it looks like these 3 are the main ones used:

Chrono Cross (Disc 1) Xenogears [Disc1of2] Resident Evil 2 [Dual Shock] [CD1]

Spongeroberto commented 10 years ago

I looked at some of the labels on my PS1 discs when I insert them in my computer and there doesn't seem to be a consistent way of naming them, even for games from the same developer and EVEN sometimes not for discs of the same game (my FF9 discs are named FFIX1OF4, FFIX2OF4, FFIX3OF4 and FFIXCD4).

But that might be irrelevant. After all, different discs will give different ISOs so what really matters is the filename. Parsing a filename to see if it mentions a disc number should be simple enough provided we present some sort of naming scheme:

The issue with this is that Ice will use the disc number in the search term when looking for images, and it won't find results. From the top of my head there are two ways around this:

marcusmoller commented 10 years ago

Another problem is that Ice adds seperate entries for each CD into Steam as well.

scottrice commented 10 years ago

It is possible to do text overlays on images with Python (I just need to add a library when I compile). My intuition is to add a standardized way of specifying disc numbers (I'm partial to "Final Fantasy VII (2)"). When Ice detects that it will search for Grid Images with the name "Final Fantasy VII" and then overlay the text "Disc 2" over the resulting image.

This all assumes that emulators can just launch disc 2 without any problems. I would imagine they can, but I have never tried so I figure I should ask.

saftle commented 10 years ago

Yeah emulators can launch directly from any disc. It is actually very useful for our purpose of integrating the emulators into BPM.


Final Fantasy 7 Scenario:

Once you reach CD2, it will prompt you to save using CD1 still. After saving it asks to swap to CD2. This is not possible without a mouse, keyboard, etc since you have to specify CD2.

However, after saving, you can then instead just close the emulator and load up CD2 within BPM. After loading CD2, you can launch your save.

This allows full control within BPM using the controller.

Most games use this method. However, there are some that require a disc swap. In those cases, the user wouldn't have any other choice except to bind his controller to mouse and keyboard keys with a 3rd party program (Xpadder for example) in order to manually swap ISOs.

Edit: It may not be pretty to have a seperate Steam entry per CD, however I think in most cases, it adds ease of use.

ghost commented 10 years ago

If you use a preloader for multi-disc games, does steam's overlay still works? Like, an application to select which disc you want to run or something like that.

scottrice commented 10 years ago

Possibly. When I set up the emulators myself I used 'launcher' programs, and the Steam Overlay had no problem displaying on the emulator even though it wasn't referenced directly from Steam.

Do you have a preloader in mind? Do those exist already, or is that something I need to make?

ghost commented 10 years ago

I don't think anyone have made anything like that. Mate, I don't think you understand how much pioneering your application is doing here, in terms of sychronizing Steam and emulators.

Anyway. In terms of development, strictly speaking, all the app has to do is provide an interface where the user selects which disc he wants to load (and it has to be compatible with a controller, because Big Picture), and it runs a .bat or whatever to launch the emulator.

The catch is how to make the app user friendly when it comes to configuring it. I mean, I think ICE's installer could recognise which file is CD1, CD2 etc using certain file naming conventions, kinda like it does when finding the grid covers.

Maybe in the future (I see you spoke of ICE 2 somewhere else) you can have a GUI where the user sets all that stuff up, like they have on DOSbox (but way simpler since it's a lot less stuff to configure).

marcusmoller commented 10 years ago

No matter how this is handled, it won't be easy to switch disc in-game using the controller, as this would heavily rely on how the emulators do this. It usually requires un-mounting the current disc and then mounting disc 2 afterwards (as you would do on the real PS1). Emulators usually don't allow controller support for these actions.

What happens if you fire up disc 2 of game? Do you continue the game from a sort of save-state?

saftle commented 10 years ago

@marcusmoller check out my above comment :)

drobson1005 commented 10 years ago

Hey Scott - any new word on what this should look like and maybe when it can be implemented? I'm just getting going with ICE and I love it - a little afraid to do PSX/PS2 emulation with it though because of the advanced way those games have to be set up - but I'd love to be able to play FFVIII seamlessly. And just a thought - I'm sure there is a way to get individualized memory cards for each game as well on a particular console - those things fill up too quick.

Really solid work here though. There has been a serious lack of good development in this area for a long time. Glad it's in Python, too - maybe I can actually contribute at some point!

scottrice commented 10 years ago

No update right now. Looking back on this the list of issues that I can see are:

That's how I see it at least. The first two are actually big projects to get right, especially the parsing could be a huge pain. I will try to look into it in the near future.

drobson1005 commented 10 years ago

Had another thought on this - maybe this is a feature for when the GUI is implemented but perhaps we don't need to add all discs into Steam, just add the current disc in use, in other words, let Ice handle disc changing. I can't speak for all games, but at least with Final Fantasy games the emulator will boot from the second or third or fourth disc and then prompt the user to load a save file (that gets created when the player reaches the end of the previous disc). I imagine this is how most of these games function on PSX/PS2/GC. I think that was also the workflow with Resident Evil for GC. Since in general, the player will constantly be opening the same disc until it is time to change, I don't see a real downside to only placing one disk at a time into the Steam grid.

Anyway - on your bullet points:

Sounds like the GUI is really the most important thing you're working on currently - I'd love to help but I have no experience with GUI's in Python - but I'd love to donate to the project if you want to provide a link.

ghost commented 9 years ago

I see that a lot of ideas have been given. addressing marcusmoller 's comment on

Tekken 3 (Track 1).bin
Tekken 3 (Track 2).bin
Tekken 3 (Track 3).bin

in case of bin files, they may belong to a single CD image rather than to CD1, CD2 and CD3. in this case there should be a cue sheet file which is a text based file and should contain entries of multilayer disc. emulator is using cue sheet to mount Image. I believe the algorithm should be as following>> 1)scan the directory for files. and add them to the list(list is a root branch tree where root is directory.) 2)if cue sheet (of meta descriptor like for mdf files is .mds). 3)scan for entries of multilayer disc. remove the occurrences of the layers from the list and insert below the cue sheet. 4)identify the game by virtually mounting image scanning file system for presence of SLES or SLUS(for play station CD identification. others may differ and require md5 checkup) 5)based on information from step 4 retrieve game information from database.

I hope this is helpful. Regards Arsham

adoormouse commented 8 years ago

To further clarify, many PS1 games can be in .bin/.cue format. The .cue file specifies track info.

One solution https://github.com/OpenEmu/OpenEmu/wiki/User-guide:-CD-based-games#q-i-have-a-multi-disc-game

Folder structure example: /roms/MyGame --MyGame.m3u --MyGame_D1.bin --MyGame_D1.cue --MyGame_D2.bin --MyGame_D2.cue

saftle commented 8 years ago

Luckily thanks to the libretro mednafen psx fork, it now supports multi-disc PBP eboot images. So now, you can add all of the discs into one ultra compressed file. Switching discs is then handled via a hotkey. M3U is also a great option.