Esta página também está disponível em inglês.
Sonic Heroes Decomp
Nintendo GameCube · Decompilação correspondente

Decompilação de Sonic Heroes

Uma decompilação em andamento e sem fins comerciais de Sonic Heroes (SEGA, 2003) para o Nintendo GameCube: código C e C++ que, compilado com os compiladores originais, reproduz o jogo original byte a byte. Sem código do jogo, sem assets, sem download.

G9SE8P · NTSC-U · rev 0main.dol + 17 módulos RELMetrowerks CodeWarriorSHA-1 verificado no CI
src/rel/itembaloon_hooks.cpp
extern "C" void itembaloonObjectUnload(void)
{
    endObjItempanel();
    itembaloonResource = NULL;
}

extern "C" void itembaloonObjectLoad(void)
{
    itembaloonResource =
        objPointerReadFromClumpAnim(itembaloonModelName);
    initObjItempanel();
}
✓ objdiff2/2 funções · 100% correspondente
Código real do repositório: os hooks de descarga e carga do balão de itens.
Status ao vivo

Progresso da decompilação

Os números vêm do relatório do objdiff de cada build na main. Uma função só conta quando compila exatamente para os mesmos bytes do original. Progresso completo e marcos →

Código correspondente
35,4%
4.618.108 / 13.039.060 bytes
Dados correspondentes
9,47%
679.064 / 7.167.586 bytes
Funções correspondentes
52,6%
20.559 / 39.062 funções
Unidades completas
66,6%
11.012 / 16.538 unidades
Última publicação: 2026-10-24 Último commit: …
Escopo

O que este projeto é, e o que não é

É

  • Código C, C++ e assembly inline escrito à mão
  • Verificado byte a byte contra o main.dol original e os 17 módulos REL
  • Um esforço sem fins comerciais de estudo e preservação
  • Conferido pelo CI: cada mudança recompila o DOL e todos os RELs e compara o SHA-1
  • Código aberto sob a licença MIT (apenas o nosso código)

Não é

  • Um jogo jogável, um port ou um download do jogo
  • Distribuição de ROM, imagem de disco ou asset do jogo
  • Distribuição de código binário original ou assembly extraído do disco
  • Afiliado ou endossado pela SEGA
  • Monetizado: sem anúncios, sem doações, sem builds pagos

Você precisa de uma cópia do jogo obtida legalmente para compilar qualquer coisa. Um build só serve para quem já tem o jogo.

Método

Como funciona uma decompilação correspondente

O objetivo não é um código que apenas se comporte como o jogo. O objetivo é um código que, compilado com as ferramentas originais, gere exatamente os mesmos bytes do disco.

Byte a byte

Cada função é reescrita até que o resultado compilado seja idêntico ao original, conferido no objdiff. Qualquer coisa menos que isso não conta.

Ferramentas originais

O jogo foi compilado com o Metrowerks CodeWarrior. As mesmas versões do compilador são baixadas na hora do build (e rodam pelo wibo no Linux e no macOS). Nenhum binário de compilador fica no repositório.

Verificado a cada mudança

O disco não traz arquivo .map, então nomes e limites de arquivo são deduzidos por evidências. Cada push recompila o main.dol e os 17 RELs e confere o SHA-1 contra o disco original.

objdiff showing a fully matching object
objdiff: um objeto correspondente, código original e recompilado lado a lado, todo verde.
Por quê

Por que decompilar Sonic Heroes?

Preservação

Sonic Heroes saiu em 2003 para GameCube, PlayStation 2, Xbox e PC. Um código legível é o registro mais durável de como um jogo funciona de verdade, muito depois de o hardware sumir.

Entendimento

A física, o sistema de formação dos três personagens, os objetos das fases e a renderização em RenderWare viram código documentado que qualquer pessoa pode ler, em vez de suposições.

Uma base

Uma decompilação correspondente completa é a base em que ports de fãs, mods e correções costumam ser construídos. Este repositório só reproduz o jogo original; o que outras pessoas construírem depois é com elas.

Transparência

Assistido por IA, verificado pelos bytes

Modelos de linguagem ajudam a escrever partes desta decompilação, e dizemos isso abertamente. Eles nunca decidem o que está pronto: uma função só é marcada como correspondente quando os bytes compilados são idênticos aos do original no objdiff, e o CI recompila e confere o hash do jogo inteiro a cada mudança.

Essa verificação não é enganada por código que só parece certo. Código que não reproduz exatamente as instruções, os dados e as relocações do original simplesmente não entra como correspondente.

Marcos

Marcos recentes

  1. 61 pull requests de reconstrução integrados

    Um lote grande de Cypress entra numa integração só (#612).

  2. 23,7% do código

    O código compartilhado entre fases é escrito uma vez e ligado em todos os módulos que o usam, às vezes 13 de uma vez.

  3. decomp.dev encerra o índice público

    O rastreador de progresso usado desde julho para de listar projetos. O acompanhamento passa para o ByteMatch, que lê os mesmos relatórios do CI.

  4. 35,4% do código, mais da metade das funções

    20.559 de 39.062 funções correspondem, e todas as funções das bibliotecas do SDK estão prontas.

Ver a linha do tempo completa →

Comunidade

Feito em público

Pessoas das cenas de decompilação de GameCube, homebrew de Dreamcast e modding de Sonic ajudam desde o primeiro dia. Dúvidas, pesquisa e divisão de tarefas acontecem no Discord; o código passa por pull requests no GitHub.