GCNTools is a simple, platform-agnostic C# .NET library for working with GameCube discs, including reading, extracting, and creating disc images.
This library is a byproduct of my work on Konga Launcher, a custom track manager for Donkey Konga 2 and 3. I needed a method for manipulating the user's copy of Donkey Konga and building a new disc image if they wanted to create a new version of the game with custom tracks.
Because Konga Launcher already required Dolphin to launch the game from the user's computer, I originally planned on leveraging Dolphin Tools to handle the disc images. However, I soon discovered that Dolphin Tools did not come by default with the Mac and Linux versions of Dolphin, which meant I needed to take a different approach.
Thanks to the community's documentation, I put together my implementation in reasonably short order. Since the work to make this library for Konga Launcher has already been done, I figured sharing it with the community wouldn't hurt. I'm not sure how much demand there is for this library. That said, I still wanted to share GCNTools in case anyone finds it useful. If this library helped you, I would love to hear about it!
- Read and extract GameCube disc images
- Create new disc images from extracted files
- Read and modify disc metadata (title, region, maker code, etc.)
- Handle game banners and multi-language banner metadata
- .NET 8.0 or higher
GCNTools is available via NuGet. You can install it into your project with the following command:
dotnet add package GCNTools
Extracting a disc image:
using GCNTools;
DiscImage myGameImage = new("C:/games/mygame.iso");
// Extract everything
myGameImage.ExtractToDirectory("C:/extractedgames/mygame", ExtractionType.ALL);
// Extract only system files (boot.bin, bi2.bin, apploader.img, etc.)
myGameImage.ExtractToDirectory("C:/extractedgames/mygame", ExtractionType.SYSTEM_DATA_ONLY);
// Extract only game files
myGameImage.ExtractToDirectory("C:/extractedgames/mygame", ExtractionType.FILES_ONLY);
Modifying a disc image's header information and saving the changes as a new file:
using GCNTools;
DiscImage myGameImage = new("C:/games/mygame.iso");
myGameImage.Title = "New Game";
myGameImage.Region = Region.NTSC_J;
myGameImage.SaveToFile("C:/games/mymodifiedgame.iso");
Creating a disc image from an already extracted disc image without instantiating an object:
using GCNTools;
DiscImage.CreateFile("C:/extractedgames/mygame", "C:/modifiedgames/mygame.iso");
I do not have any specific plans yet, but I would like to expand on GCNTools to include the following:
- Asynchronous support
- Data validation
- Comprehensive error handling
- Expanded test coverage
- Additional GameCube-related features
The GCNTools repository and associated NuGet package are available under the MIT license. With this in mind, attribution is appreciated but not required or expected.
Contributions and bug reports are always welcome. Please keep in mind this is a hobbyist project, so I may need time to review any pull requests, bug reports, or general feedback.
This project would not have been possible without the GameCube homebrew community. Yet Another Gamecube Documentation provided essential technical information and Swiss was instrumental in the testing process.