A decompilation of Kirby Air Ride.
  • C 55.1%
  • C# 24.4%
  • C++ 17.5%
  • Python 2.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
wowjinxy cb94b15761
Merge pull request #16 from wowjinxy/agent/wii-disc-apploader
Add source-built Wii disc apploader and IOS DI path
2026-08-15 22:23:08 -05:00
.github/workflows Replace decomp output hacks with typed layouts 2026-07-27 16:35:27 -05:00
.github.example/workflows Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
.vscode Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
assets Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
config Fix GKYE01 matching build after gmautodemo 2026-07-15 18:55:21 -05:00
docs Add Wii disc apploader and IOS DI path 2026-08-15 21:36:14 -05:00
external Move KAR toolkit into decomp repo 2026-07-15 18:31:46 -05:00
include Add Wii disc apploader and IOS DI path 2026-08-15 21:36:14 -05:00
src Replace decomp output hacks with typed layouts 2026-07-27 16:35:27 -05:00
tools Add Wii disc apploader and IOS DI path 2026-08-15 21:36:14 -05:00
.flake8 Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
.gitattributes Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
.gitignore Add Wii disc apploader and IOS DI path 2026-08-15 21:36:14 -05:00
.gitmodules Move KAR toolkit into decomp repo 2026-07-15 18:31:46 -05:00
configure.py Add experimental Wii-mode build flag 2026-08-15 13:43:09 -05:00
LICENSE Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
README.example.md Initial KAR decomp project checkpoint 2026-06-06 11:46:02 -05:00
README.md Add Wii disc apploader and IOS DI path 2026-08-15 21:36:14 -05:00
THIRD_PARTY_NOTICES.md Add Wii disc apploader and IOS DI path 2026-08-15 21:36:14 -05:00

Kirby Air Ride Decompilation Code Progress

A work-in-progress decompilation project for Kirby Air Ride using decomp-toolkit.

This repository does not contain game assets or original binaries. An existing copy of the game is required.

Supported Versions

  • GKYE01: USA
  • GKYJ01: Japan
  • GKYP01: Europe

Compiler Baseline

KAR uses CodeWarrior for GameCube 2.4.2 build 81, represented by the GC/1.3.2 toolchain in the project config.

Source imported or cross-checked against doldecomp/kar keeps that project's source flags (-cwd source, -I-, and -inline all) separate from the broader game-code baseline. Dolphin SDK-shaped objects are also kept separate from game objects and are configured with the SDK compiler slot (GC/1.0) because the SDK code was not built with the same compiler as the KAR game code.

Observed game-code flags:

-O4,p -nodefaults -fp hard -Cpp_exceptions off -enum int -fp_contract on -inline auto

Setup

Place each extracted disc in orig/<GAMEID> with the original sys/main.dol at orig/<GAMEID>/sys/main.dol.

In this local workspace, the orig entries may be directory junctions to the already-extracted folders next to this project.

Configure one version:

python configure.py --version GKYE01

Swap GKYE01 for GKYJ01 or GKYP01 to configure another version.

Build or run initial analysis:

ninja

Experimental Wii-mode Loader

An opt-in KAR-specific Wii-mode compatibility build is available for testing MEM2-backed ARAM and a separate mod heap. It leaves the normal matching GameCube configuration unchanged:

python configure.py --version GKYE01 --non-matching --wii-mode
ninja

This produces the normal main.dol plus a standalone Wii-mode loader. Use ninja wii-loader to build only the loader after configuring with the flag.

See docs/wii_mode_loader.md for the standalone and merged-disc build paths, memory layout, Dolphin launch instructions, and the mod allocation API. The source-built Wii disc boot stage has no Homebrew Channel dependency and is documented end to end in docs/wii_apploader.md.

The merged-disc workflow starts from the exact retail DOL for the selected region. Before replacing sys/main.dol, preserve it as files/orig.dol and pass that copy to the merged-DOL builder. It is a rebuild input, not a file read at runtime, and must not be committed or redistributed. The current merged ISO path deliberately rejects arbitrary rebuilt/relocated target DOLs; see the guide for the reason, limitations, disc layout, licenses, and release checklist.

Project Layout

  • configure.py - Project generator and compiler/linker settings.
  • config/<GAMEID>/config.yml - decomp-toolkit config for each version.
  • config/<GAMEID>/symbols.txt - Symbols, generated by initial analysis.
  • config/<GAMEID>/splits.txt - File splits, generated by initial analysis.
  • orig/<GAMEID> - Local original game files, ignored by Git.
  • src/ and include/ - Decompiled source and headers.
  • THIRD_PARTY_NOTICES.md - Licenses for the MIT loader and GPLv2 apploader.

Notes

  • docs/kar_us_shiftability.md records the current GKYE01 split heuristic, verification result, and the largest remaining anonymous text gaps.
  • docs/kar_us_auto_text_audit.md ranks the remaining GKYE01 auto text units.
  • docs/kar_shiftability_checklist.md tracks what still blocks version-shift confidence.
  • docs/kar_data_split_notes.md outlines the conservative data-splitting path.
  • tools/import_doldecomp_kar_symbols.py imports conservative symbol upgrades from a local doldecomp/kar clone. By default it trusts SysDolphin, Dolphin SDK, and runtime/SDK labels with concrete addresses, while leaving asm-only game labels for manual review.
  • Source files mirrored from doldecomp/kar live under src/sysdolphin, src/os, and src/Dolphin; mirrored headers live under include.