3dsrecomp é um recompilador estático geral para jogos de Nintendo 3DS que já foi testado com 19 títulos no Zakuro. Em vez de recompilar um jogo específico, a ferramenta lê o código ARM11 e os módulos CRO de um dump descriptografado, converte o que consegue para C e deixa o Zakuro executar a biblioteca compilada.
O projeto continua experimental. Por isso, o desenvolvedor trata Zakuro como um runtime/emulador HLE em desenvolvimento, e não como uma garantia de que qualquer jogo de 3DS virará automaticamente um port independente.
3dsrecomp transforma código ARM do 3DS em C
O 3dsrecomp procura funções no executável principal e nos módulos CRO carregados durante o jogo. Depois, gera código C para instruções ARM, Thumb e VFP e compila esse material como uma biblioteca usada pelo Zakuro.
Nem tudo precisa ser encontrado de primeira. Quando a análise estática não resolve uma instrução ou função, o Zakuro ainda pode executá-la pelo intérprete. Além disso, o próprio runtime registra esses pontos para ajudar uma recompilação posterior a cobrir mais código.
Persona Q rodando no Zakuro com código recompilado pelo 3dsrecomp. Fonte: fearkov/zakuro.
Nos exemplos técnicos publicados no repositório, Pokémon Y e Persona Q ficam com apenas uma pequena fração das instruções passando pelo intérprete. Assim, o restante vem da biblioteca recompilada antecipadamente.
Zakuro já lista 19 jogos de Nintendo 3DS testados
A lista de compatibilidade atual registra 19 jogos testados com recompilação. Desses, 17 aparecem como Playable, enquanto Monster Hunter XX e Fire Emblem Fates: Special Edition chegam ao jogo, mas ainda apresentam problemas.
Entre os títulos jogáveis estão Pokémon X e Y, Omega Ruby e Alpha Sapphire, Sun, Ultra Sun e Ultra Moon; Super Mario 3D Land; Super Smash Bros. for Nintendo 3DS; Ocarina of Time 3D, Majora’s Mask 3D e A Link Between Worlds; Persona Q; Animal Crossing: New Leaf; Monster Hunter 4 Ultimate; Yo-kai Watch; e Bloodstained: Curse of the Moon.
The Legend of Zelda: Majora’s Mask 3D executado no Zakuro. Fonte: fearkov/zakuro.
Ainda assim, essa compatibilidade não significa que todos os jogos estejam perfeitos ou que o desempenho seja sempre melhor que em emuladores mais maduros. Além disso, o desenvolvedor destaca que a parte gráfica do runtime ainda está em evolução e pode continuar sendo um gargalo.
3dsrecomp e Zakuro não são a mesma coisa
O 3dsrecomp faz a recompilação antecipada do código do jogo. Por sua vez, o Zakuro fornece o ambiente que implementa serviços do 3DS, gráficos, áudio, entrada e outras partes necessárias durante a execução. Portanto, o resultado combina código recompilado nativamente com um runtime HLE e um intérprete de fallback.
Por isso, o projeto se diferencia de recompilações feitas especificamente para um único jogo. O Allves Games também acompanha projetos desse outro modelo, como o Conker Recompiled e a recompilação de God of War de PS2.
Zakuro tem builds para Windows e Linux
O README do Zakuro informa builds públicas para Windows e Linux. Assim, o usuário pode abrir um dump descriptografado diretamente ou usar a biblioteca do programa, que oferece um botão de recompilação para preparar cada jogo uma vez.
Para recompilar, ainda é necessário um compilador C, como GCC ou Clang. Além disso, no Windows, a documentação cita GCC via MinGW-w64. Depois da etapa inicial, o Zakuro passa a carregar a biblioteca recompilada e usa o intérprete apenas nos trechos que ficaram de fora.
Por outro lado, o projeto não distribui dados de jogos. Assim, o usuário precisa usar o próprio dump de um jogo que possui legalmente. Além disso, o repositório pede que bibliotecas e programas gerados a partir do código do jogo não sejam redistribuídos.
Projeto ainda é experimental
Por fim, o Zakuro nasceu como um projeto pessoal e segue em desenvolvimento ativo. Por isso, a lista de 19 jogos deve ser lida como um retrato do que foi testado até agora, não como uma lista definitiva de compatibilidade do Nintendo 3DS.
A proposta, porém, é diferente: usar recompilação antecipada como parte de um runtime geral, reduzindo a quantidade de código que precisa ser interpretada durante a execução. À medida que o 3dsrecomp encontra mais funções e o Zakuro amadurece, a cobertura pode crescer sem criar um port separado para cada título.
Fontes: 3dsrecomp no GitHub; Zakuro no GitHub; lista oficial de compatibilidade; anúncio do desenvolvedor no Reddit incorporado acima.