Universal Dreamcast Patcher
Universal Dreamcast Patcher aims to provide an easy, cross-format game patching solution for the Dreamcast community. Such patches typically come in the form of English translations and other ROM hacks.
Universal Dreamcast Patcher is designed to accept any disc image as its source, whether it be formatted as a TOSEC-style GDI or a Redump-style CUE. This application will extract any disc image meeting those standards, overwrite and/or add to its data according to a given patch (DCP file), and then rebuild the disc image with the new data. Due to the flexible nature of acceptable disc image input, file hashes are not utilized for pre/post-patching verification.
Under the hood, this application utilizes gditools, buildgdi, bin2iso, extract, and a version of RedumpCUE2GDI modified by me.
Latest VersionThe latest version of Universal Dreamcast Patcher is 1.0.
- Version 1.0 (2021-11-26)
- Fixed bug in LBA calculation used for extracting GDI data tracks.
- Version 0.9 (2021-11-22)
- Due to many anti-virus tools erroneously flagging the modified version of gditools from v0.8 as malware, this version uses an alternative method for GDI extraction that still delivers the same level of compatibility
- Version 0.8 (2021-11-19)
- Now using modified version of gditools (thanks to mrneo240) that can extract the dozen-or-so problematic GDIs which previously failed.
- Version 0.7 (2021-06-01)
- Fixed bug with temporary folders/files if they're written to a different disk drive than the one from which the application is launched.
- Version 0.6 (2021-05-26)
- Changed location of temporary folders/files to use Windows' default location rather than the application's working directory.
- Updated logo (also, watch what happens when the "Apply Patch" button is clicked).
- Version 0.5 (2021-05-19)
- Fixed bug in file path parsing.
- Version 0.4 (2021-05-18)
- Fixed bug with incorrect GDI building when source disc image contains CDDA.
- Version 0.3 (2021-05-17)
- The "bootsector" folder and its IP.BIN were erroneously being included as a folder and file in the patched GDI's filesystem.
- Version 0.2 (2021-05-17)
- Added support for source disc images with CDDA.
- Fixed bug with source disc image integrity verification.
- Version 0.1 (2021-05-16)
- Initial release.
Existing FeaturesBelow is a specific list of Universal Dreamcast Patcher's current features.
- Source disc image integrity verification.
- Support for source disc images (input) with CDDA.
- Disc image patching with custom IP.BIN.
- Supported formats for source disc image (input):
- TOSEC-style GDI
- Redump-style CUE
- Supported formats for patched disc image (output):
- TOSEC-style GDI
- Supported formats for patch files:
Known Issues and LimitationsWhile Universal Dreamcast Patcher delivers its core features reliably, all known issues and limitations of the application are listed below.
- Patched disc image (output) cannot be created in Redump-style CUE format.
- No CDI format support for source or patched disc images (input and output).
- While source disc images (input) with CDDA are supported, the DCP patch format does not yet include a method for modifying CDDA tracks.
- File hashes of patched disc images (output) are not consistent even when using the same source disc image (input) and same patch file. This is partly due to an issue with gditools which does not preserve timestamps on extracted folders. Instead, the current day and time are used to generate the folder creation timestamp at the moment of extraction. As of now, no ISO extraction utilities (with the necessary LBA options) that I've researched successfully preserve timestamps on folders. As a workaround, the hardcoded timestamp of 1999-09-09-12:12:12 (UTC) is being used. However, buildgdi is still inserting some dynamic timestamps (and other metadata) into the modified data track. After some research, I believe buildgdi's implementation of DiscUtils is to blame, although this may just be part of the ISO 9660 standard and thus considered expected behavior.
RoadmapAs Universal Dreamcast Patcher evolves and improves over time, the list below represents features which I'd like to implement.
- Support for patched disc image (output) in Redump-style CUE format.
- Support for source and patched disc images (input and output) in CDI format.
- Extend DCP patch format to support modifying CDDA tracks.
- Ensure consistent file hashes for patched disc images (output).
- New feature for automatically creating DCP patches by supplying the original source disc image and the fully patched disc image.
- Research methods for decreasing size of patch file, such as using diffs/deltas on modified files.
- Linux and Mac support.
Usage: PatchingUniversal Dreamcast Patcher is simple to use. After launching the application, follow the steps below.
- Click "Select GDI or CUE" to open the source disc image.
- Click "Select Patch" to open the DCP patch file.
- Click "Apply Patch" to generate the patched GDI.
- The patched GDI will be generated in the folder from which the application is launched.
- Click "Quit" to exit the application.
Usage: Creating PatchesThe DCP patch format was designed specifically for Universal Dreamcast Patcher. This format is neither complex nor difficult to understand. It is extremely simple by design and as a result, DCP patches can be created without the use of any special software. The steps for creating a patch are as follows.
- Create a ZIP archive containing (in its root) all of the files/folders from the game's data that have been modified or are new. Be sure to retain original folder structure and hierarchy.
- If the patch should use a modified IP.BIN file, simply create a folder named "bootsector" in the root of the ZIP archive and place IP.BIN inside of it. Note that this folder and file will not be included in the patched disc image's (output) filesystem.
- Change the extension of the file from ZIP to DCP.
- Note that the base filename of the DCP will be used when this application generates the patched GDI (e.g. a patch file named "My Game (v1.0).dcp" will result in a patched GDI folder named "My Game (v1.0) [GDI]").
ExampleIn this example, an existing DCP patch is seen being opened with 7-Zip, a common archive creator and extractor.
All modified or new files reside in the root of the patch. Likewise, all folders containing modified or new files exist in the root of the patch just as they did within the game's original disc structure. Furthermore, a "bootsector" folder is seen in this example, along with its content.