m35 / jpsxdec

jPSXdec: cross-platform PlayStation 1 audio and video converter
http://jpsxdec.blogspot.com/
461 stars 24 forks source link

Issues with Spyro 2/3 Discs #20

Closed MOVGames00 closed 5 years ago

MOVGames00 commented 5 years ago

Environment

jPSXdec version: v0.99.8 Operating system: Windows 7 Home Premium 64 Bit (though I've also used a Windows 10 Laptop which gave the same results) Java runtime environment: 8 Update 201

PlayStation Game (if applicable)

Name: Spyro 2: Ripto's Rage / Spyro: Year Of The Dragon (both Greatest Hits ver) Region code: SCUS-94425 / SCUS-94467

Description

Hello! I've managed to use JPSXDec to successfully rip from some of my physical PS1 discs, but i'm currently struggling with most of my copies of Spyro 2 & 3. In total I have some scratched PAL copies of Spyro 2 and 3, as well as very good condition NTSC copies of both games which are primarily what I was hoping to rip from. Both of my PAL Spyro 3's rip at least some of SPEECH.STR before they stop about halfway through and end, which i'm sure is due to damage, but my beat up PAL Spyro 2 as well as both NTSC copies of the games give me this error every time immediately after trying to scan SPEECH.STR:

jpsxdec.cdreaders.CdFileSectorReader$CdReadException

At first I thought it was the copy protection that both these games notoriously have that was causing this, but if that was the case why would my scratched up PAL Spyro 3's work? I also tried a couple of the games on my Laptop running Windows 10, but it also gave the same results as my Desktop does. I couldn't find anything else about this specific issue online, so I came straight to the source for help.

Thanks in advance!

m35 commented 5 years ago

Thanks for the details of the issue you're seeing. CdReadException shouldn't happen if the disc data is just corrupted (other errors might appear, but not that one). Can you re-try what you've done, then look for the debug00.log file in the jPSXdec directory and attach it to this issue?

MOVGames00 commented 5 years ago

Okay, I retried it with my GH NTSC Spyro 3 which gave the same error as always. The debug00 log is as follows:

jPSXdec: PSX media decoder (non-commercial) v0.99.8 (beta) Windows 7 6.1 Java 1.8.0_201 2019-07-17 16:33:09 16:33 jpsxdec.cdreaders.CdFileSectorReader INFO: D:\SPEECH.STR 16:33 jpsxdec.cdreaders.CdFileSectorReader INFO: Attempting to identify as 2352/2448 16:33 jpsxdec.gui.Gui SEVERE: jpsxdec.cdreaders.CdFileSectorReader$CdReadException at jpsxdec.cdreaders.CdFileSectorReader.(CdFileSectorReader.java:240) at jpsxdec.cdreaders.CdFileSectorReader.(CdFileSectorReader.java:186) at jpsxdec.gui.Gui.openDisc(Gui.java:393) at jpsxdec.gui.Gui._guiOpenDiscActionPerformed(Gui.java:783) at jpsxdec.gui.Gui.access$700(Gui.java:82) at jpsxdec.gui.Gui$3.actionPerformed(Gui.java:502) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at org.openide.awt.DropDownButton$Model.setPressed(DropDownButton.java:356) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) Caused by: java.io.IOException: Incorrect function at java.io.RandomAccessFile.readBytes(Native Method) at java.io.RandomAccessFile.read(Unknown Source) at jpsxdec.util.IO.readByteArrayMax(IO.java:482) at jpsxdec.util.IO.readByteArray(IO.java:446) at jpsxdec.util.IO.readByteArray(IO.java:426) at jpsxdec.cdreaders.CdFileSectorReader$Cd2352or2448Factory.(CdFileSectorReader.java:734) at jpsxdec.cdreaders.CdFileSectorReader.(CdFileSectorReader.java:219) ... 43 more Spyro 3 Greatest Hits rips fine if I use a ROM as I tested it a few weeks ago, it's just (most of) my discs that are causing problems for me.

m35 commented 5 years ago

Ah I think I know the issue. Reading files directly off the disc can have issues in some cases, so it's not recommended. The PlayStation disc format allows for some files to have extra data that can't normally be read, which causes errors when accessed by most programs. But programs used to rip entire disc images are able to correctly extract that data when saved to the BIN/CUE image format. Then pointing jPSXdec to the disc image allows it to access that extra data correctly.

MOVGames00 commented 5 years ago

So you're saying i'd have to convert the game to a BIN? I was hoping that I wouldn't have to do that, as i've not really done so before and I wanted to try and get the music directly from the source without any potential changes to the files. I bet it probably is the copy protection causing these issues now, as SPEECH.STR cannot be directly copied off of the disc either on it's own (or at least I didn't manage to).

I also don't know what ideal program I should use for doing that with PS1 games.

m35 commented 5 years ago

Unfortunately full disc ripping is the only reliable way I've ever found to retrieve the data correctly. But the rip will be byte-for-byte exactly what is on the physical disc.

Here is a recent video someone made that shows the process I use https://www.youtube.com/watch?v=uaQDovo2qb8

MOVGames00 commented 5 years ago

Thanks, it's extremely late here so I'll check it tomorrow and have a go.

MOVGames00 commented 5 years ago

Sorry for taking ages to get back to this, but that method did work perfectly for both my NTSC Spyro 2 & 3 copies (but not my PAL Spyro 2 as it's too damaged to copy the SPEECH.STR file), thank you! I'll make sure to use this method in the future for any other PS1 games which don't rip straight from the disc.