GCNTools 1.0.0

dotnet add package GCNTools --version 1.0.0                
NuGet\Install-Package GCNTools -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GCNTools" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add GCNTools --version 1.0.0                
#r "nuget: GCNTools, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install GCNTools as a Cake Addin
#addin nuget:?package=GCNTools&version=1.0.0

// Install GCNTools as a Cake Tool
#tool nuget:?package=GCNTools&version=1.0.0                

GCNTools

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.

Since 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!

In the future, I would like to build on GCNTools to include asynchronous support, validation, additional error handling, better tests, and more GameCube-related tasks, but I do not have any specific plans yet.

Features

  • 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

Requirements

  • .NET 8.0 or higher

Usage

Installation

GCNTools is available via NuGet. You can install it into your project with the following command:

dotnet add package GCNTools
Example

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");

License

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.

Contribution

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.

Acknowledgements

Thank you to the GameCube homebrew community for being an invaluable resource. Yet Another Gamecube Documentation was vital for making this library. Additionally, Swiss was used for testing the library.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0 35 1/7/2025

Initial release