Você está na página 1de 360

Traduzido do Inglês para o Português - www.onlinedoctranslator.

com

Guia de hacking de GBA e DS ROM - edição 2016.

RÁPIDO6191

13 de janeiro de 2016

1
Seção Conteúdo para fazer, melhorar ou x.
Parte 2
Seção 1 Links de descompactação iso do PS3, para dreamcast certifique-se e inclua Iso
Correção LBA (iso x) por DeXT
Mais links de documentação de hardware. nocash para PS1, SNES
e mais. Também depuradores.
https://wiki.neogeodev.org/index.php?title=Main_Page
Seção 2 Matrizes 3D, ponto de vista (analisar truques de mario kart) e polimento
resto do 3d

Ajustar a localização da paleta NSBMD


Decodificação de vértices NSBMD (ferramenta) polonesa

Exemplo de YuGiOh finalizado


Exemplo de Eragon?
Seção 3 Termine o exemplo de engenharia reversa El Tigre
Scripting-lua de El tigre e talvez quebra-cabeça
Melhore a extração/inserção de texto padrão
Seção 4 Melhorar o loop sseq
Som GBA - hacks sentimentais
http://www.hcs64.com/mboard/forum.php?showthread=34052&showpage=1
novo formato de som DS.
Melhorar seção de vídeo (castlevania e digimon)
Seção 5 Termine os itens e inicie os níveis, exemplo trabalhado, melhore a
discussão dos randomizadores e dê alguns exemplos trabalhados.
Tire fotos do novo mecanismo de cheat desmume
Localização do menu secreto/depuração via monitoramento e controle de controle
mudando
Conclua a esquiva da compactação de sobreposição
http://gbatemp.net/threads/recompressing-an-overlay-
le.329576/#post-4387691
Parte 3
Rastreamento de GBA

Rastreamento DS

Exemplos de hacks
Seção Python e lote básico os
romulano descartado para radare2, precisa de acabamento e arrumação.
Possivelmente considere apenas python.
Links e leituras adicionais
Parte 4 Formatos (todos)
Mais glossário?

Índice?

2
Abstrato
O hacking de ROM para os fins deste documento será definido como a
edição de imagens ROM e imagens ISO (sendo ISO o termo tradicional para
imagens de mídia óptica) com a intenção de mudar a forma como o código do
jogo subjacente ou seus ativos funcionam em uma maneira útil. Simplesmente
alterar seções de uma imagem sem rima ou razão não é hackear ROM, pois
hackear ROM geralmente é o resultado final de uma medida de engenharia
reversa.
O documento a seguir aborda métodos de hacking de ROM com foco nas
técnicas de hacking de GBA e DS, mas com aparições ocasionais em outros
consoles domésticos. Em termos gerais, existem dois métodos principais de
produzir hacks de ROM úteis, sendo o mais eficaz, mas inicialmente mais complexo,
a definição tradicional de hacking de ROM (às vezes chamado de hacking de ROM
de baixo nível), onde formatos e métodos de interação passam por engenharia
reversa antes de serem alterados e estendido. O outro tipo, mais frequentemente
associado à franquia Pokémon, mas longe de ser exclusivo dela, gira em torno do
uso de ferramentas pré-fabricadas para mudar extensivamente os jogos de uma
maneira mais próxima dos textos, gráficos e edição de níveis mais tradicionais,
porém com o uso de tais ferramentas pode ser hacks muito extensos criados em
um curto período de tempo por aqueles com conhecimento mínimo dos processos
subjacentes. Deve-se notar também que nos últimos tempos surgiu um terceiro e
possivelmente um quarto tipo, especialmente no DS, onde os desenvolvedores são
comumente vistos usando formatos do SDK ou alguma outra biblioteca de
desenvolvimento que traz aspectos de hacking de baixo nível e hacking orientado
por ferramentas. juntos, permitindo a rápida decodificação de formatos e
exportando-os antes de realizar operações de nível inferior para inserir as
modificações e o quarto candidato potencial foi visto em programas que permitem
a criação de plug-ins ou scripts usando formatos simples, geralmente de texto ou
XML, para fazer coisas semelhantes .
No que diz respeito às ferramentas pré-fabricadas, elas não serão o foco deste
documento, embora, se existirem, possam ser mencionadas.
A categorização pode ocorrer várias vezes, com uma em particular
formando o esboço deste documento. Resumindo, as quatro categorias
principais de hacking de ROM vistas hoje são edição gráfica, edição de texto,
edição multimídia e lógica de jogo (que inclui codificação assembly). Cada um
deles pode ser subdividido pelo menos mais uma vez, para não falar de cada
um deles extraído de outras categorias ou com elementos cruzados (por
exemplo, em muitos jogos de quebra-cabeça, o texto é codificado como
formatos gráficos regulares). A outra categorização, neste caso dos próprios
hacks, que será discutida um pouco é tradução, melhoria, alteração e
falsificação. Tais categorizações são de utilidade limitada para este
documento, pois todas podem apresentar técnicas muito avançadas em cada
uma das categorizações discutidas anteriormente.
Este documento é amplamente destinado àqueles que não sabem muito sobre
hacking de ROM ou computação de baixo nível além, talvez, da interface de linha de
comando, que diz que aqueles em todos os níveis de conhecimento de computação
e hacking de ROM devem ser capazes de obter algo com isso e espera-se que o
foco no GBA e no DS ajudará aqueles que desejam transferir de outros consoles.

3
Prefácio
Esta é uma atualização rápida para 2016 do meu guia de hacking de ROM, um guia sobre o
qual venho escrevendo há vários anos. Esta versão é uma continuação da edição de 2012,
que em si foi quase uma reescrita completa dos esforços anteriores e contém
principalmente alguns links quebrados. Não foi adicionado muito desde a versão de 2014,
que por sua vez foi para atualizar alguns links. Um guia foi tentado pela primeira vez pouco
menos de um ano depois que eu decidi começar a hackear ROM a sério, um período que
coincidiu com o surgimento do carrinho de cinzas DS dedicado. Dê ou receba algum
brincar com jogos de PC muitos anos antes de minha primeira experiência provavelmente foi
aprender a reduzir imagens ROM para caber em dispositivos da era GBA que não foram
construídos para atender aos tamanhos de arquivo vistos em títulos comerciais de DS. A primeira
versão era pouco mais do que coleções de postagens em fóruns que fiz sobre diversos assuntos e
breves resumos das áreas com o objetivo de apontar as pessoas na direção certa caso quisessem
aprender como fazer algo, as versões posteriores visavam ensinar às pessoas algumas das
princípios subjacentes e isso continua nesse caminho.
A certa altura, havia um documento irmão voltado mais para a invasão de hardware e
dispositivos. Várias partes foram fundidas nele, mas na maior parte o projeto foi colocado
em espera por tempo indeterminado. Além disso, pode ser considerado fora do escopo
deste documento, no entanto, está longe de ser incomum ver pessoas com sérias
habilidades em engenharia elétrica e mecânica se tornarem hackers de ROM talentosos, já
que os processos de pensamento e a mentalidade tendem a se encaixar bem.
Sempre desmontei as coisas e vasculhei diretórios de programas na tentativa de
ver como eles os marcavam ou ajustavam de acordo com minha preferência. No que
diz respeito ao hacking de ROM, o ponto de viragem veio quando decidi que se algo
não se revelasse através de meios super ciais (texto simples ou alguma marcação
menor, clicando duas vezes nos arquivos e talvez uma pesquisa rápida do programa/
extensão), então eu iria tente se aprofundar para descobrir. Logo me ocorreu que isso
exigiria conhecimento de como as coisas funcionam desde o início (ou próximo o
suficiente disso), de modo que isso se tornou o que eu procurei fazer. Este foi o início
de um processo contínuo que pude aplicar em muitos aspectos da vida e que incutiu
uma mentalidade que continua a me servir bem.
Inúmeros sites, hackers, conversas e ferramentas foram usadas para obter este
documento e o autor até este ponto, mas menções especiais vão para a seção de hacking
de DS ROM do GBAtemp, romhacking.net e qualquer pessoa com quem eu tenha discutido
nesses sites, para saber quem foi o autor do tutorial de programação de GBA, Tonc e
Martin Korth, que é o autor das especificações no$gba, embora eles detalhem muito pouco
sobre o uso direto para muitos hacks de ROM, pode-se facilmente dizer que a maioria dos
hacks atuais de GBA e DS ROM seriam não teríamos saído do chão sem eles. Por último,
mas não menos importante, os responsáveis pelo programa Crystaltile2, que reúne várias
ferramentas interessantes em um único programa, o que me permite rasgar as imagens
ROM em um ritmo alucinante de uma maneira que seria difícil de fazer usando ferramentas
básicas e, de fato, demorou até 2011 para vermos outras ferramentas que se equiparam a
ele, ao tentar descobrir como funciona uma ROM.

4
Conteúdo

I. Introdução 12

Conceitos de hacking de ROM II 15


1 Fundamentos 15
1.1 Hexadecimal ............................. 15
1.1.1 Representação . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1.2 BCD (decimal codificado em binário) . . . . . . . . . . . . . . . . 18
1.1.3 Endian grande e pequeno. . . . . . . . . . . . . . . . . . . . . 19
1.1.4 Valores sinalizados, ponto flutuante e ponto fixo. . . . . . . . 19
1.2 Operações hexadecimais. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2.1 Turno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2.2 Girar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2.3 Virar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2.4 Lógica booleana. . . . . . . . . . . . . . . . . . . . . . . . . 26
1.2.5 Matemática Hexadecimal. . . . . . . . . . . . . . . . . . . . . . . 27
1.3 Aplicação de patches e criação de patches . . . . . . . . . . . . . . . . . . . . . 28
1.4 Sistemas de arquivos e operações . . . . . . . . . . . . . . . . . . . . . 30
1.4.1 Dispositivos sem sistema de arquivos . . . . . . . . . . . . . . . . . . . . 30
1.4.2 GBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.4.3 DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.4.4 3DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.4.5 GC (gamecube) . . . . . . . . . . . . . . . . . . . . . . . . 32
1.4.6Wii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.4.7 Xbox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.4.8Xbox360. . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.4.9 PS1 e PS2 . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.4.10 PS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.11 PSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.12 Saturno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.13 Dreamcast . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.14 Amiga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.4.15 PC e hardware relacionado. . . . . . . . . . . . . . . . . . . 36
1.5 Encontrando o objeto de seu interesse. . . . . . . . . . . . . . . . . . 36
1.6 Abstração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.7 Continuação das ferramentas do comércio. . . . . . . . . . . . . . . . . . . . . 39
1.7.1 Editor hexadecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.7.2 Editor de blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.7.3 Planilha e linha de comando . . . . . . . . . . . . . . . 55
1.7.4 Compressão . . . . . . . . . . . . . . . . . . . . . . . . . 57
1.7.5 Música . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
1.7.6 ASM/Montagem . . . . . . . . . . . . . . . . . . . . . . . . 59
1.8 Conceitos básicos de formato de arquivo . . . . . . . . . . . . . . . . . . . . . . 63

5
2 Gráficos 65
2.0.1Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.0.2Halo. . . . . . . . . . . . . . . . . . . . . . . . . . . . Profundidade de 66
2.0.3bits. . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.1 Paletas e cores ......................... 67
2.1.1 Cores GBA (15 bits) . . . . . . . . . . . . . . . . . . . . . 67
2.2 Azulejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.1 1Bpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.2 4 Bpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.3 8Bpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.2.4 GBA3 Xbpp ......................... 70
2.2.5 GBA2 4BPP ......................... 71
2.2.6 Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.2.7 Formatos conhecidos . . . . . . . . . . . . . . . . . . . . . . . . 73
2.2.8 Exportação e importação do Crystaltile2. . . . . . . . . . . . . . . . 73
2.2.9 Evitando gradientes, AA, compressão com perdas, ruído e
coisas assim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.3 Layout, temporização, OAM e efeitos especiais. . . . . . . . . . . . . . 78
2.3.1 Introdução aos modos OAM e BG. . . . . . . . . . 78
2.3.2 Tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.3.3 GBA e DS OAM (sprites) . . . . . . . . . . . . . . . . 79
2.3.4 Modos GBA e DS BG . . . . . . . . . . . . . . . . . . . 82
2.3.5 Animação básica. . . . . . . . . . . . . . . . . . . . . . . 86
2.3.6 Recurso de janela. . . . . . . . . . . . . . . . . . . . . . . . 91
2.3.7 Recursos especiais (ipping, transformação ane, alfa e
outros). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.3.8 Mapeamento e formatos básicos de layout do DS . . . . . . . . . . . 93
2.3.9 Manipulação e alinhamento da memória de vídeo . . . . . . . . . . . 96
2.4 3d. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.4.1 3D básico (ossos, coordenadas, quadros-chave) . . . . . . . . . . 98
2.4.2 Pontos de Vista . . . . . . . . . . . . . . . . . . . . . . . . . . 100
2.4.3 Texturas e cores de materiais . . . . . . . . . . . . . . . . 100
2.4.4 Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.4.5 Iluminação/sombras . . . . . . . . . . . . . . . . . . . . . . 102
2.4.6 Fumaça e neblina 3D . . . . . . . . . . . . . . . . . . . . . . . 103
2.4.7 Animações . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.4.8 Hardware DS 3D . . . . . . . . . . . . . . . . . . . . . . . 105
2.4.9 A mudança do 3D para o DS 2d. . . . . . . . . . . . . . . . 107
2.4.10 NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.4.11 Não NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . 117
2.5 Notas e leituras adicionais . . . . . . . . . . . . . . . . . . . . . . 118

3 Texto 119
3.1 Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.1.1 Pesquisa relativa. . . . . . . . . . . . . . . . . . . . . . 121
3.1.2 Corrupção e alteração. . . . . . . . . . . . . . . . . . 127
3.1.3 Visualização e corrupção de memória . . . . . . . . . . . . . . 130
3.1.4 Análise de frequência . . . . . . . . . . . . . . . . . . . . . . 131
3.1.5 Análise de linguagem. . . . . . . . . . . . . . . . . . . . . . 133
3.1.6 Ponteiro e análise de codificação/hex. . . . . . . . . . . . . 134

6
3.1.7 Rastreamento de montagem . . . . . . . . . . . . . . . . . . . . . . . 134
3.1.8 Visualização de fontes . . . . . . . . . . . . . . . . . . . . . . . . . 134
3.1.9 Comparação de idiomas . . . . . . . . . . . . . . . . . . . . . 135
3.1.10 Ferramentas de criação de tabelas . . . . . . . . . . . . . . . . . . . . . 135
3.2 Indicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
3.2.1 Casos especiais e conceitos não ponteiros. . . . . . . . . . . 139
3.2.2 Exemplo de engenharia reversa de ponteiros. . . . . . . . . . 140
3.3 Marcação, códigos de controle e espaços reservados . . . . . . . . . . . . . . 144
3.3.1 Exemplo resolvido. . . . . . . . . . . . . . . . . . . . . . . 144
3.4 Fontes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.4.1 NFTR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.4.2 Hacks comuns . . . . . . . . . . . . . . . . . . . . . . . . 156
3.5 Script e layout . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.5.1 Layout e limites . . . . . . . . . . . . . . . . . . . . . . . 168
3.6 Extração e inserção de texto . . . . . . . . . . . . . . . . . . . . 169
3.6.1 Extração de texto . . . . . . . . . . . . . . . . . . . . . . . . 170
3.6.2 Inserção de texto . . . . . . . . . . . . . . . . . . . . . . . . . 172
3.7 Detecção de idioma em jogos de DS . . . . . . . . . . . . . . . . . . 174
3.8 Hacking de tradução . . . . . . . . . . . . . . . . . . . . . . . . . 174
3.8.1 Os tipos de caracteres japoneses e como funcionam - . 176
3.8.2 Glifos/caracteres japoneses e observações sobre o
idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
3.8.3 Sobre o idioma . . . . . . . . . . . . . . . . . . . . . . . . . 180
3.8.4 Idiomas e tradução da direita para a esquerda. . . . . . . . . . . 180
3.9 Editores de texto e ferramentas de tradução em japonês. . . . . . . . . . . . . 181
3.9.1 Editores de texto com capacidade geral para japonês . . . . . . . . . . . 181
3.9.2 Ferramentas de hacking de ROM . . . . . . . . . . . . . . . . . . . . . . 182
3.9.3 Ferramentas CAT . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

4 Multimídia 184
4.1 Som . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
4.1.1 SDAT (NDS) . . . . . . . . . . . . . . . . . . . . . . . . . 188
4.1.2 Outros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
4.1.3 Formatos do rastreador . . . . . . . . . . . . . . . . . . . . . . . . 197
4.1.4 Regra geral para formatos de áudio personalizados. . . . . 197
4.1.5 Hacks comuns de áudio DS SDAT (retirada de dublagem,
injeção, ajustes e relinking) . . . . . . . . . . . . . . . . . . . . 197
4.1.6 Áudio GBA. . . . . . . . . . . . . . . . . . . . . . . . . . 216
4.2 Vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
4.2.1 Teoria geral do vídeo. . . . . . . . . . . . . . . . . . . . . 221
4.2.2 Mods/VX/act imaginados por Mobiclip. . . . . . . . . . . . . 222
4.2.3 RAD/Bink . . . . . . . . . . . . . . . . . . . . . . . . . . 222
4.2.4 Criware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
4.3 Cenas cortadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

5 Lógica do jogo 224


5.1 Níveis e Estatísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
5.1.1 Exemplos de ferramentas . . . . . . . . . . . . . . . . . . . . . . . . 226
5.1.2 Técnicas de edição de níveis . . . . . . . . . . . . . . . . . . . 227
5.1.3 Estatísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

7
5.1.4 Randomizador de RPG . . . . . . . . . . . . . . . . . . . . . . . 238
5.2 Compressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
5.2.1 Com perdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5.2.2 Sem perdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5.2.3 Teoria básica das implementações reais. . . . . . . . 240
5.2.4 Compressão em nível hexadecimal . . . . . . . . . . . . . . 246
5.3 Trapaça. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
5.3.1 Criação geral de cheats . . . . . . . . . . . . . . . . . . . . 249
5.3.2 Criação de cheats no GBA. . . . . . . . . . . . . . . . . . . . . . 251
5.3.3 Criação de cheats no DS . . . . . . . . . . . . . . . . . . . . . . . 253
5.3.4 Criação básica de um cheat. . . . . . . . . . . . . . . . . . . 256
5.3.5 Métodos de prevenção de trapaças e frustrações. . . . . . . . 260
5.3.6 Trapaças na edição de instruções . . . . . . . . . . . . . . . . . 264
5.4 Conceitos de programação . . . . . . . . . . . . . . . . . . . . . . . . 267
5.4.1 Funções e programação processual. Também programação
orientada a retorno/ROP . . . . . . . . . . . . . . . . . . 267
5.4.2 SE OUTRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.4.3 Recursão . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.4.4 Iteração . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
5.4.5 Laços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
5.4.6 Turing concluído. . . . . . . . . . . . . . . . . . . . . . . 269
5.4.7 Fundamentos de Montagem . . . . . . . . . . . . . . . . . 270
5.5 Montagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
5.5.1 BRAÇO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
5.5.2 Especificações de montagem do GBA. . . . . . . . . . . . . . . . . . . 275
5.5.3 Especificações da montagem do DS. . . . . . . . . . . . . . . . . . . . 279
5.5.4 O GBA e o DS comparados. . . . . . . . . . . . . . . . 284
5.5.5 Nos controles . . . . . . . . . . . . . . . . . . . . . . . . . . 285
5.5.6 Enganchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
5.5.7 Carrinho GBA como memória extra para hacks de DS. . . . . . . . . . 287
5.6 Discussão em assembleia não específica. . . . . . . . . . . . . . . . . . . 287
5.6.1 Exemplo de modificação de idioma. . . . . . . . . . . . . . . . . . . 287
5.6.2 Não código em ASM . . . . . . . . . . . . . . . . . . . . . . 290
5.6.3 Edição de montagem destrutiva versus não destrutiva . . . . . . 291
5.6.4 Código polimórfico e dinâmico. . . . . . . . . . . . . . . 292
5.6.5 Desaceleração e aceleração . . . . . . . . . . . . . . . . . . . 294
5.6.6 Criptografia (criptografia, checksums e assinaturas) . . 295
5.6.7 Multiplayer e a falha da segurança online do DS da Nintendo.301
5.6.8 Salvar edição . . . . . . . . . . . . . . . . . . . . . . . . . . 301
5.6.9 Linguagens interpretadas . . . . . . . . . . . . . . . . . . . . 303
5.6.10 IA de jogos, lógica de jogos e teoria de jogos . . . . . . . . . . . 303
5.7 Flash cart e teoria do emulador . . . . . . . . . . . . . . . . . . . 307
5.7.1 GBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
5.7.2 DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
5.8 Proteção contra hacking de ROM . . . . . . . . . . . . . . . . . . . . . . 313

III Exemplos, curiosidades e técnicas. 315


6 Guia de uso geral do Crystaltile2 315

8
7 Rastreamento de GBA 320
7.0.1 Exemplos resolvidos . . . . . . . . . . . . . . . . . . . . . . . 321

8 Rastreamento DS 321
. . . . . . . . . . . . . . . . . . . . . . . . . 322
8.1 Comando de leitura do carrinho
8.1.1 Pesquisa básica e métodos para isso . . . . . . . . . . . . . . 322
8.1.2 Engenharia reversa do cabeçalho/valores gerados . . . . . . . . 322

9 Engenharia reversa de várias imagens ROM 322


9.1 Arquivo grande no topo do sistema de arquivos . . . . . . . . . . . . . . . . . . 323
9.1.1Tony Falcão. . . . . . . . . . . . . . . . . . . . . . . . . . 323
9.1.2 Star Wars – A Força Liberada . . . . . . . . . . . . . . 323
9.1.3 El Tigre Faça minha mula . . . . . . . . . . . . . . . . . . . 323
9.2 Compressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
9.3 Jogo em primeira pessoa. . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.4 Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.5 Jogos de luta. . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.6 Jogos de RPG. . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.7 Jogos de corrida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.8 Quebra-cabeça . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.8.1 Jogo de Mahjong . . . . . . . . . . . . . . . . . . . . . . . . 326
9.8.2 Tetris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
9.9 Outros gêneros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

10 sobras do desenvolvedor 326

11 soluções alternativas 327

12 Mudando para um novo sistema 327

13 truques de desenvolvedor, também conhecidos como pensar como um desenvolvedor de jogos 328
13.0.1 Projeto de nível e mecanismo . . . . . . . . . . . . . . . . . 328
13.0.2 Reutilização de Sprites e paletas . . . . . . . . . . . . . . . . . . . 329
13.0.3 Pré-renderização . . . . . . . . . . . . . . . . . . . . . . . . . 330
13.0.4 Desfoque de velocidade e neblina. . . . . . . . . . . . . . . . . . . . . . 330
13.0.5 Carregando tampas . . . . . . . . . . . . . . . . . . . . . . . . 330
13.0.6 Otimização de carregamento . . . . . . . . . . . . . . . . . . . 330
13.0.7 Imagens 3D em geral. . . . . . . . . . . . . . . . . . . . 331
13.0.8 Geração processual . . . . . . . . . . . . . . . . . . . . 332
13.0.9 Ruído em imagens e sons. . . . . . . . . . . . . . . . . 332
13.0.10Utilizar os limites do sistema/trabalhar com eles . . . . . . 332
13.0.11 Codificação de rede . . . . . . . . . . . . . . . . . . . . . . . . 333

14 Design de jogos e mídia 333

15 Python, arquivos em lote e programação para hackear ROM 334


15.1 Ferramentas de engenharia reversa radare2 . . . . . . . . . . . . . . . . . . 334
15.2 Linguagens de programação . . . . . . . . . . . . . . . . . . . . . . . 334
15.3Píton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

9
16 hackeamento de programas de PC 335
16.1 Depuração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
16.2 Descompilação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

17 Controle de versão e gerenciamento de projetos. 338


17.1 Gestão de projetos e equipes . . . . . . . . . . . . . . . . . . . 338
17.2 Controle de versão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

18 Links interessantes e leituras adicionais. 340


18.1 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
18.2 Leitura adicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

IV Formatos de arquivo (especificações, métodos e formatos


conhecidos). 342
19 coisas gerais sobre o DS 342

20 Formato DS nitro SDK genérico 342

21 Geral sobre engenharia reversa 342


21.1 Cabeçalhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
21.2 Tamanhos de arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
21.3 Múltiplas versões do jogo. . . . . . . . . . . . . . . . . . . . 343
21.4 Nomes e extensões de arquivos . . . . . . . . . . . . . . . . . . . . . . 343
21.5 Visualizadores de blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
21.6 Ponteiros e outros . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

22 Som 344
22.1 SDAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.2 SSEQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.3 STRM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.4 SWAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22,5 SWAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22.6 BANCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
22.7 Outros formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

23 Gráficos 347
23.1 NCER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
23.2 NANR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
23.3 NCGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.4 RSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23,5 NMCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.6 NFTR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.7 NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
23,8 NSBTX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
23.9 NSBCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

24 Formato da embalagem 350


24.1 NARC, ARC e CARC . . . . . . . . . . . . . . . . . . . . . . . 350

10
25 Texto 350
25.1 BMG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

V Glossário, índice e afins 352


26 Glossário 352

11
Parte I
Introdução
Embora as seções anteriores tenham detalhado um pouco do que está por vir e como
funcionará, a introdução ainda é necessária. Em termos gerais, este documento
contém quatro partes, incluindo esta seção introdutória. A maior parte deste
documento será ocupada por partes nas áreas de hacking de ROM (edição gráfica,
edição de texto, edição multimídia e lógica de jogos) e uma parte mais livre onde são
mostrados ao leitor alguns exemplos de hacks, métodos e jogos em uma tentativa de
transmitir alguma base do mundo real para muitos dos exemplos na seção mais geral
que teria sido muito difícil manter naquela parte, muito problemático categorizá-los
ou se eles fossem pequenas curiosidades descobertas ao longo dos anos (é são essas
pequenas curiosidades que mantêm as coisas interessantes para muitos hackers de
ROM).
Tradicionalmente, em tais guias, algo limítrofe filosófico ou geral tende a ser dito sobre
o agora e há pouca necessidade de romper com a tradição neste momento. Para este fim,
no que diz respeito às qualidades que constituem um bom hacker de ROM, elas são
indiscutivelmente paciência, ou talvez uma aceitação profunda de que todos os problemas
de computação podem ser resolvidos, e uma curiosidade quase ilimitada. Grandes hackers
de ROM vieram de todas as esferas da vida, mas o mais interessante é que a educação
tradicional, boas ou ruins, não é necessariamente um grande indicador de quão bem uma
pessoa aceitará o hacking de ROM.
As ferramentas do comércio são muitas e variadas, mas geralmente podem ser
divididas em cinco princípios básicos, sendo apenas o último específico para hackear ROM.
1. Um editor hexadecimal. A menos que a computação quântica apareça e assuma o controle
amanhã, todos os computadores com os quais você lidará se resumirão em binário
(abordado mais tarde, mas este é o 1 e 0 stu ), que é simplesmente abstraído para
hexadecimal. Geralmente não é aconselhável fazer nada além de visualizar um formato
como um todo amplo, procurar em profundidade um padrão ou uma pequena seção, ou
fazer uma simples alteração (seja uma simples edição de uma linha, e substituir, um
operação básica ou inserção de algo novo) em um editor hexadecimal, mas essas
pequenas alterações podem ser o que faz um hack de ROM funcionar. 1a poderia ser
considerado uma ferramenta de manipulação de compactação, já que a compactação é
frequentemente padronizada e muitas vezes fornece uma barreira imediata e, pelo menos
hoje em dia, simplesmente contornada para ver um formato como o próprio programa o
verá.

2. Uma planilha ou algum método capaz de manipular/realizar operações repetidas em


uma grande lista de números (em hexadecimal ou não). Os computadores são, em
grande parte, apenas ferramentas para manipulação repetida de números, e
qualquer coisa geralmente tem um custo elevado em termos de recursos
necessários, portanto, ser capaz de manipular grandes listas de números é útil.

3. Um editor de texto. Relacionado aos dois itens acima, muitas vezes é benéfico ser
capaz de manipular seções de texto e hexadecimais e realizar pesquisas extensas
sobre elas, uma área na qual os editores de texto há muito tempo têm sérias
habilidades.

4. Um navegador da web. Embora muitas vezes você desmonte coisas que nunca
foram desmontadas antes (e como linguagens de programação de alto nível

12
tornar-se mais viáveis para os sistemas atuais que podem ser mais verdadeiros do
que nunca), você também estará sempre apoiado nos ombros dos outros. Para esse
fim, é muito necessário ser capaz de ver o que outros fizeram antes de você e
pesquisar os métodos subjacentes. Como a porta de entrada para o mundo técnico
hoje em dia é um navegador da web...

5. Um editor de blocos. Usado corretamente, um editor hexadecimal permitirá que você veja padrões em
código e texto, mas os gráficos são uma grande parte de quase todos os jogos, portanto, ser capaz de
ver os gráficos é imensamente útil. Veja também a nota sobre compactação para editores hexadecimais,
pois ela pode ser aplicada ainda mais aqui (em um editor hexadecimal você ainda pode acompanhar
razoavelmente o que está acontecendo, mas qualquer pessoa que use um editor de blocos por mais de
alguns minutos normalmente verá como uma bagunça de pixels podem se transformar em uma
imagem visível muito rapidamente e ser quebrados com a mesma facilidade).

Uma familiaridade com o uso básico da linha de comando (executar algo a partir de uma
usando algumas opções, a ideia de tubulação e como criar um arquivo em lote no nível de
apenas uma série de comandos) e o uso de uma planilha (quais células são , o comando ll e
como inserir funções básicas) serão úteis, mas quaisquer detalhes específicos ou conceitos
mais complexos serão abordados quando apropriado.
Seu computador para fazer tudo isso não precisa necessariamente ser tão poderoso
para os padrões de qualquer época e especialmente nos tempos atuais. Naturalmente,
existem técnicas como algumas de busca de ponta, algumas atividades relacionadas à
compressão e emulação de outros consoles que forçam os sistemas, mas muitos danos
podem ser causados com sistemas consideravelmente mais modestos. O bônus adicional
de começar a hackear ROM em comparação com desmontar dispositivos do mundo real
(embora essas atividades também sejam muito divertidas) é que, desde que haja backups
adequados, e você realmente deve praticar a realização de backups regulares e, de
preferência, incrementais de seu trabalho (algumas menções aos métodos pelos quais você
pode fazer isso são feitas na parte 3), qualquer dano pode ser desfeito pressionando
desfazer ou copiando e colando outra coisa, sem mencionar o bônus adicional de permitir
que você siga muitos caminhos ramificados na tentativa de resolver seu problema. No
entanto, muitos sugerirão que se você conseguir uma máquina com pelo menos dois
monitores de resolução razoavelmente alta, você estará se saindo bem.
No jargão. Sem voltar às reflexões filosóficas em outras partes desta parte ou
contemplar algumas das áreas mais extremas da física, chega um ponto em que
descrever algo se torna desnecessariamente prolixo, de modo que é abstraído para
um termo ou série de termos ao custo de ter alguém em algum lugar (em algum
momento?) falta um quadro de referência para isso. Esperamos que quaisquer termos
técnicos encontrados sejam explicados no parágrafo, tenham sido explicados antes ou
não sejam de relevância imediata para o assunto em questão. Observe que esta
definição difere ligeiramente da definição do The Jargon File.

Aviso
Muito do que você está prestes a ler irá treiná-lo em como desmontar as coisas, isso
eventualmente o levará a ser capaz de desmontar as coisas apenas olhando para elas
e isso se tornará um instinto; você provavelmente já viu variações disso em outras
pessoas que passam seus dias preocupadas ou tiveram treinamento em um campo e
constantemente notarão problemas onde outros tentaram fazer algo nesse campo.
Existem maneiras de os criadores de obras diminuirem isso, mas

13
são caros de fazer e como a maioria das pessoas não gasta seu tempo desmontando as coisas,
eles tendem a não ser feitos. Isso significa que muitas vezes você verá como as coisas funcionam
e, além disso, verá exatamente como elas falharam, o que pode arruinar coisas que você poderia
ter gostado anteriormente.
Se você não tomar cuidado, isso pode transformá-lo em um esnobe/crítico de arte.
Outra variação é a melhor versão disso, onde você possivelmente será capaz de ver o valor
de praticamente qualquer coisa e se divertir. Para tanto, esteja avisado sobre cada uma
dessas possibilidades.

14
parte II
Conceitos de hacking de ROM
Foi feita uma tentativa de dividir seções, mas é aconselhável não prestar muita
atenção a elas, ou pelo menos não considerá-las indivisíveis, se por nenhuma outra
razão que não seja qualquer uma delas, é digno de ser objeto de uma documento
mais longo que este. Embora seja a posição padrão deste guia, esta parte se
concentrará mais no hardware que sustenta as coisas, em quaisquer formatos/
conceitos dominantes e em algumas técnicas básicas para usar, em vez do simples
uso de ferramentas (embora muito disso também seja abordado) na próxima parte
sendo entregue a exemplos totalmente trabalhados, em vez de técnicas simplistas ou
visões gerais favorecidas nesta seção.

1 Básico
Esta seção contém alguns dos termos básicos, conceitos e ideias que tornarão o hacking de
ROM e este documento um pouco mais fácil de entender. Antes que isso comece, há três
verdades igualmente importantes a saber

1. Algum problema quanto ao que isso representa? vai pode ser resolvido.

2. Os bits que você está vendo podem significar qualquer coisa e somente com o
contexto você descobrirá o que eles fazem naquele caso.

3. Os bits podem representar qualquer coisa, mas qualquer sistema moderno e não trivial
colocará coisas umas sobre as outras em um processo conhecido como abstração.
Aprofunde ou aprofunde o quanto for necessário, mas geralmente haverá um limite em
que ir mais longe é apenas por curiosidade intelectual e não muito mais.

1.1 Hexadecimal
Como você deve saber, todos os computadores atuais são máquinas binárias, o que significa que
operam com a ideia de uma alimentação razoavelmente contínua de valores 1 e 0 para vários
pinos para fazer o que precisa ser feito. 1 e 0 ficam muito difíceis de ler, então eles são
empilhados em 4 profundidades para formar hexadecimal (uma lógica muito semelhante a
escrever coisas como 1x10 ^ 9 em vez de 1000000000). 4 coisas, cada uma com a capacidade de
ser um de dois estados diferentes, significam 16 combinações e, então, é desejável poder exibir
cada combinação como um único caractere, de modo que as letras de A a F se juntem aos
números arábicos (0 a 9) para formar 16 (A = 10 decimal, B = 11 e assim por diante até F = 15,
momento em que é encerrado e 10 = 16 decimal).
Uma tabela de referência rápida

15
Decimal Hexadecimal Binário
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
O que devemos lembrar sobre binário é que ele é muito parecido com o número 1567
decimal significa 1 contagem de 1000, 5 contagens de 100, 6 contagens de 10 e 7 contagens de 1
ou em palavras é uma lista de contagens de dez elevadas a um poder. Para binário em vez de dez,
você usa 2, então 1110 significa uma contagem de 8, uma contagem de 4, uma contagem de 2 e
zero contagens de 1. Existem todos os tipos de truques e coisas que você pode aprender aqui,
muitos dos quais serão abordados em pouco tempo, e alguns são quase tão essenciais quanto o
hexadecimal quando se trata de entender o documento que está por vir.
Você pode aprender a convertê-lo e fazer contas com ele em sua cabeça, se quiser, e é
certamente uma habilidade útil; no entanto, na maioria das vezes, você estará apenas
encontrando o valor (nesse caso, um programa provavelmente estará fazendo isso) e tudo,
desde a calculadora incluída no Windows (no modo científico) para cima, será convertido
entre as várias bases (base10 = decimal, base2 = binário, base16 = hexadecimal) e será
capaz de realizar matemática com ela.
Existe um quarto método chamado Octal, também conhecido como base 8, que usa de
0 a 7 e representa 3 bits, mas 3 é um número terrível para trabalhar e multiplicar (sendo
um número primo e tudo), então tende a não ser usado fora das especificações. c
aplicações. Existem outras variações deste tema em coisas como Base64, mas esse é um
esquema de codificação para transmissão de dados e será abordado posteriormente em
hacking de texto.
Em resumo, hex (adecimal) é apenas um esquema de numeração que funciona melhor
que o decimal normal para fins de computação e nada mais. Muitas vezes, novos hackers
atribuem um status quase mágico ao hexadecimal, quando na verdade ele não merece
nada disso; a coisa mágica é hackear assembly. Certamente é muito difícil dar uma olhada
em uma ROM inteira e editá-la apenas a partir de um editor hexadecimal, e é por isso que
ninguém faz isso do zero, se eles parecem fazer isso, é quase certo que eles trabalharam
muito para chegar a isso ponto (existem muitos programas que divulgam localizações e
valores interessantes). Investir tempo na engenharia reversa do trabalho original foi o que
finalmente permitiu a edição simples, na falta de que o arquivo esteja em conformidade
com um padrão conhecido (abra qualquer DS ROM adequado e a primeira linha será uma
sequência de texto codificada em ASCII do nome interno da ROM e há coisas semelhantes
para a maioria dos arquivos/formatos do DS) ou um padrão suficiente para que uma edição
básica seja possível.

16
1.1.1 Representação
Há uma piada muito exagerada sobre computação: existem 10 tipos de pessoas no
mundo (aquelas que conhecem binário e aquelas que não conhecem).
Como a piada que acabamos de ilustrar, é difícil ou mesmo impossível saber que
conjunto de números está sendo usado. Como você pode derrubar um sistema inteiro com
um bit errado, e muito menos com uma interpretação totalmente errada, é preciso haver
uma maneira de indicar o que está sendo usado. Em matemática, é usado um valor decimal
subscrito da base que você está usando, mas é difícil escrever em um editor de texto
básico, portanto, várias notações foram usadas. Os mais comuns são 0x???????? (às vezes o
0x se repete depois de tantos valores, mas nem sempre), ????????h/h?????????,
#????????? (é assim que o HTML faz, mas poucos hackers de ROM o usarão),%?????????? (é
assim que seu navegador provavelmente sinaliza com %20, por exemplo, sendo a
codificação de texto ASCII para um espaço) ou simplesmente ???????? hexadecimal. A
maioria das pessoas fica muito feliz em aceitar um pouco de redundância em troca da falta
de confusão aqui.
Junte dois números hexadecimais (às vezes chamados de nibbles/nybbles) e você
terá um byte. A partir daí, ele pode empilhar ainda mais, embora possa ser um pouco
complicado, pois varia entre arquiteturas de computador (32 vs 64 bits, por exemplo),
sistemas operacionais e, às vezes, linguagens de programação. Em geral, a maioria
das pessoas se aterá às interpretações C de 32 bits de tudo isso e é isso que este
documento usará, salvo indicação em contrário.
Indo além, os termos halfword, word, double word (dword), quad word, short,
long e int são o que é interessante e provavelmente vale a pena conhecer.
Na maioria das vezes, ele segue bytes, com meia palavra sendo 16 bits, também
conhecida como 2 bytes, palavras sendo 32 bits, também conhecidas como 4 bytes, dwords
sendo 64 bits e assim por diante. No hacking de ROM, poucas pessoas usarão os termos
curto e longo e especialmente não o termo int, pois o bit do processador em questão irá
variar isso, a principal exceção será se eles estiverem de nindo um formato de maneira
semelhante ao usado em uma linguagem de programação. (nesse caso, uint para número
inteiro sem sinal, u8, u16 e coisas semelhantes aparecem). Se você procurar, typedef é o
termo comum para descrever esse tipo de coisa e muitos tutoriais de programação
gastarão muito tempo cobrindo esses conceitos. De muitas maneiras, não é tão útil hackear
ROM até que você analise o que pode ter acontecido na fonte original para chegar até aqui,
neste ponto você provavelmente já conhece a/uma linguagem de programação.

Um termo extra importante ao discutir isso é limite/alinhamento. A menos que você esteja
escrevendo poesia, provavelmente não precisará formar suas frases com um determinado
número de letras/palavras, mas os computadores tendem a gostar mais se os dados começarem
com um múltiplo de um determinado valor (às vezes pode ser "alinhado por bytes", mas mais
muitas vezes é alinhado por palavra ou até mais alto1) ou envolve a manipulação de um
determinado comprimento de memória (várias funções internas do DS e GBA preferem operar
apenas em seções de memória alinhadas de forma semelhante).
Um link que tem algumas coisas boas se você quiser ir mais longe é a arte da montagem,
mas se as coisas forem preferidas um pouco mais próximas da matemática convencional, sorria

1Existem limites de hardware no GBA e no DS dependendo do que você está fazendo (isso será abordado em
gráficos e compactação posteriormente), mas em teoria nada precisa ser alinhado por palavras. A maioria das
coisas será palavra ou alinhada a um múltiplo ainda maior, a menos que você possa demonstrar o contrário,
fique com o que vê primeiro. Certamente, para as passagens iniciais da maioria dos arquivos, assuma pelo
menos o alinhamento de bytes.

17
nell.edu tem uma página legal.

1.1.2 BCD (decimal codificado em binário)

Mencionado principalmente porque é um bom exemplo de como binário e hexadecimal


significam muito pouco sem contexto. Ele é visto em um lugar no DS no firmware e coisas
decorrentes dele (principalmente as funções de relógio e calendário), bem como programas
mais antigos, por um tempo certos processadores até tinham funções em seu silício para
isso, mas raramente é visto ao hackear imagens ROM atualmente.
Existem algumas pequenas variações aqui (o padrão 8,4,2 e 1 pode fazer todas as
combinações entre 0 e 9, mas 5,3,1 e -1 também podem), mas elas não são comumente
vistas. Como mencionado, o método padrão é o mesmo que a tradução de binário para h
exadecimal, então trazendo de volta o ta apenas com as entradas relevantes.
Decimal Hexadecimal Binário
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
Usando o exemplo do relógio, se você quiser representar o horário 15:30, você pode
descobrir uma maneira de codificá-lo ou apenas usar BCD
0001 0101 0011 0000 que tem um equivalente decimal de 5424 (não 1530), mas pode
representar a hora com bastante alegria.
Para um exemplo rápido de 5,3,1 e -1 sc heme também mencionou
Decimal Hexadecimal Binário
0 0 0000
1 1 0010
2 2 0101
3 3 0100
4 4 1001 ou 0110
5 5 1000
6 6 1010
7 7 1101
8 8 1100
9 9 1110
15h30 mais uma vez
0010 1000 0100 0000 que tem um equivalente decimal de 10304, mas de acordo com o
esquema acima será decodificado como 1530.
Houve casos de coisas que o usaram para exibir valores fracionários que podem
ser úteis, pois há certas coisas comuns com as quais o hexadecimal simples luta.

18
1.1.3 Endian grande e pequeno

Absolutamente vital ao lidar com GBA e DS em qualquer profundidade real é o conceito de


endianness. Razões históricas são as principais razões para sua existência em primeiro
lugar, embora ainda tenha valor, já que muitos sistemas o utilizam, o aspirante a hacker de
ROM precisa saber sobre isso. Resumindo, onde a matemática convencional e os
dispositivos com chips da família X86 (a maioria dos PCs) exibem o número mais
significativo, os primeiros dispositivos que usam chips ARM (e muitos outros), que incluem
o GBA e o DS, exibem o número menos significativo.bytesprimeiro.
Na prática, isso significa que alguns locais/comprimentos podem ser escritos como algo
como A036 0104 quando na verdade são 0401 36A0. Embora muitos editores hexadecimais
suportem uma mudança entre big e little endian, o processo pelo qual a maior parte dele se
torna legível é geralmente um ip em tantos bits (ip de 32 bits significaip significa
32 bits como acima serão ipados, 16 bits que apenas dois bytes serão icado).
Visto como a maioria das pessoas codifica em um PC ou em um dispositivo que emula uma
configuração de PC, está longe de ser inédito um dispositivo ver um formato usar o tipo de
endian oposto ao que é.

1.1.4 Valores sinalizados, ponto flutuante e ponto fixo


Há também a questão dos bytes assinados e dos valores de pontos (flutuantes), pois,
como os computadores não conseguem escrever subscritos facilmente, eles também
tendem a não ter provisões para símbolos negativos e valores após o ponto decimal.
Observe que alguns desses métodos também chegaram ao silício, embora o GBA e o
DS estejam um pouco ausentes aqui.

Valores assinadosExistem vários métodos aqui, incluindo os mais populares, incluindo


complemento de dois, complemento de dois e excesso 7. Cada um tem vantagens e
algumas desvantagens dependendo do que você está fazendo, embora as maiores
desvantagens de alguns dos métodos mais simples sejam a incapacidade de fazer contas
simples sem conversão e o existência de dois valores para 0, o que torna complicado
comparar e agir de acordo com os resultados.
Os números assinados também são uma das razões para algumas estatísticas terminarem
em 511 ou 127 ou similar (deve ficar claro por que isso ocorre muito em breve), com a outra
grande razão, assumindo que o O primeiro bit não é simplesmente ignorado, é aquele primeiro
os mers frequentemente gostam de usar o bit do programa para codificar algo ou agir como um sinal de
alguma forma (por exemplo, o formato de arquivo DS NARC o usa, portanto, significa um
subdiretório). Para outra fonte sobre o assunto, o CS152 do grinnell.edu tem uma boa
versão.

Sinal e magnitudeAqui o primeiro bit de um valor é entregue e chamado de ag


negativo, que também é outro nome para o método (embora o termo possa ser usado
de forma mais geral ao lidar com números com sinal), outro nome é magnitude com
sinal.
Aqui o primeiro bit passa a ser um sinal, sendo o resto dos números interpretados
normalmente. É o método mais semelhante à contagem/matemática convencional. 0
significa positivo enquanto 1 significa negativo. 0000 0001 é igual a 1 e 1000 0001 é
igual a -1

19
ComplementoPara aqueles que complementam, uma operação NOT bit a bit (abordada
com mais detalhes posteriormente, mas em resumo, transforma cada 0 em 1 e cada 1 em
0) é aplicada a um número positivo, formando a contraparte negativa. Tem problemas
porque a matemática básica não pode ser feita tão facilmente e tem o problema de dois
valores para 0.

0001 torna-se 1110

0010 torna-se 1101

0011 torna-se 1100

Complemento de doisUm pouco mais complexo do que os outros mencionados até


agora é o complemento de dois, mas como não tem as armadilhas dos outros números
(duas representações de zero e matemática simples são possíveis), é popular. Aqui o
complemento de unidades é feito (NÃO bit a bit para todos os dígitos) e então 1 é
adicionado ao resultado usando adição binária convencional. 0000 torna-se 1111 e depois
0001 0000, mas a outra parte é ignorada.
Exemplos
Exemplo 1
-1
O positivo é 0001
NÃO dá 1110
adicionando 0001 dá 1111
Exemplo 2
-3
Três positivo é 0011 Um NOT bit
a bit dá 1100 Adicionar um 0001
dá 1101 Exemplo de matemática

Semelhante ao exemplo de 0 acima de 2 decimais (0010) adicionados a -1 (1111) que dá 0001


0001 e tem o transbordamento mais à esquerda ignorado.

Excesso 7 Embora os dois se complementem e os outros irão atendê-lo bem


e formar a maior parte de tudo com o qual você entra em contato, existe outro
método um pouco mais complexo de uso comum. Pode variar um pouco dependendo
da sua implementação (o nome técnico/conceito é excesso 2^(m-1) onde m é o
número ou dígitos binários com os quais você deve trabalhar), mas o excesso 7 será
usado por enquanto.
Torna-se mais complexo e um pouco mais importante quando surgem números
fracionários (abordados na seção abaixo). Na prática, é uma espécie de combinação da
ideia básica de magnitude sinalizada e do elogio de dois. Conforme mencionado, isso
significa manter o excesso de 7 no exemplo, mas aumentar a escala é bastante lógico.
Neste sistema o o O primeiro bit é usado para indicar o sinal (embora não seja o
necessariamente o sinal do número final), deixando os 7 restantes (excesso de 7) para
faça o que precisa ser feito. Até agora não é muito diferente de tudo o que foi abordado,
mas é aqui que o truque acontece, embora um exemplo antes de ser abordado a sério.
Nos últimos anos, você pode ter sido encorajado a simplesmente aumentar os números
como uma solução alternativa para ter que lidar com números negativos.
A equação

20
8-1-3 + 6 + 9 = 19
Uma equação simples, mas com uma calculadora ou na cabeça é bem
possível errar e bagunçar tudo.
Adicionar, neste caso, dez a todos os números torna-os todos positivos

18 + 9 + 7 + 16 + 19 = 69
Cinco números, todos 10 maiores, tornam o por 50, mas simples adição
resultado muito mais fácil de evitar erros.
A razão para a digressão para truques matemáticos simples é que um princípio semelhante é usado
para o excesso de 7.
No caso do excesso de 7 (também chamado de excesso de 8 bits 127), geralmente
é 01111111 ou 127 em decimal. Aqui, o valor que você deseja codificar é obtido
(números positivos) ou adicionado (números negativos) a esse valor. Em teoria, e
provavelmente em algum lugar de um jogo, o excesso não precisa ser 127.

Se você preferir, pode ser visto como uma contagem começando no número mais
baixo possível, que seria -(-1 +2^m) ou para 8 bits -(-1 + 2^7) que é negativo 127 e
chame isso de início / valor zero. 0 (como em nada) é então o valor de polarização.
Tem a vantagem de ser facilmente comparado com outros números, por isso vale a
pena conhecer.
Exemplos
Número para codificar -7 ou (-) 0000 0111
0111 1111 0000 0111 = 0111 1000
Número para codificar 18 ou 0001 0010
0111 1111 + 0001 0010 = 1001 0001
Exemplos
0000 0000 -127
0000 0001 -126
0000 0010 -125
0111 1111 0
1.000.0000 +1
1000 0001 1111 1111 +128
Na prática/no mundo real, isso é coberto pelo padrão quase universal IEEE 754, que é
mais comumente visto quando se lida com números de ponto flutuante. Você poderia criar
outro método, mas ninguém realmente o faz e o hardware é construído para usá-lo, então,
novamente, ninguém o faz, mais ou menos algumas coisas usando números de pontos
fixos. Aqui, 32 bits ou mais podem ser usados, sendo o primeiro o sinal, o próximo o valor
de polarização e o restante o número codificado em questão. Falando em números
fracionários

Números fracionários e números reaisOs números fracionários geralmente são feitos


usando o chamado ponto flutuante, no entanto, o GBA e o DS fazem uso extensivo de
números de ponto fixo para várias partes do hardware, incluindo transformações 2D e
3D, e serão abordados em breve. A ideia de deixar as coisas como valores e apenas
calculá-las no último momento é incentivada na programação, mas em hardware ou
na representação final isso pode ser complicado e como é onde os hackers de ROM
passam a maior parte do tempo, isso será notado e nada mais. disse sobre o assunto.

21
Ponto flutuanteÀ primeira vista, o ponto flutuante parece relacionado ao método do
excesso 7 de exibição de números assinados; na prática, ele está mais próximo da
notação científica padrão para exibição de números grandes. O conceito disso então é
a ideia de números de ponto flutuante, em essência eles são

1. Um valor de sinal

2. Um multiplicador (na verdade, um expoente) para garantir ponto decimal obtém


onde ele precisa estar

3. O número em si, mas sem a parte 1, pois é assumido como 1 para poder
economizar um pouco.

Para 3. acima, da mesma forma que você nunca escreveria 0,31x10 ^ -3, a menos que
você seja um engenheiro onde as potências usadas são geralmente múltiplas de três,
sempre se assume que o primeiro bit é 1, pois você está trabalhando em binário, isso
significa o único valor que pode ser é 1 e você pode omiti-lo do número transmitido,
desde que se lembre de reconstruí-lo.
Provavelmente não é preciso muita imaginação para ver como isso se torna muito complexo
para operar com múltiplos valores (potências diferentes ou não) muito rapidamente. Para esse
fim, embora a maioria dos kits e sistemas de desenvolvimento de software apresentem
habilidades para lidar com essas coisas, seu uso é idealmente salvo para quando não há outra
opção; na verdade, sistemas mais novos/de alto desempenho geralmente têm a potência do
computador comparada por quantas operações (ponto flutuante operações por segundo) ou
mesmo criticado por sua falta de suporte para várias versões de ponto flutuante (precisão
simples, precisão dupla.....). Ao contrário do binário e do hexadecimal acima, a capacidade de
decodificá-lo é algo que você deve ser capaz de executar, mas a maioria espera que você use
ferramentas para lidar com isso.
Existe uma classe de compressão baseada nesta ideia conhecida como codificação aritmética. Ele
trabalha com a ideia de que, para o arquivo que pode representar, ele ainda é um número e alguns
números podem ser representados de forma mais curta, codificando-os como um ponto flutuante.

A versão curta
32 bits de comprimento, o primeiro bit é o sinal do multiplicador, os próximos 8
bits são o valor do expoente do multiplicador em excesso de notação 7 e os bits finais
são o valor básico que precisa ser multiplicado, exceto pelo valor oculto 1 que o
fracionário parte é adicionada.
Isso é um pouco prolixo, então exemplos
Decodificação hexadecimal 40a4cccd
A representação binária é a seguinte: 0100 0000
1010 0100 1100 1100 1100 1101 0 começando
significa que é positivo.
O excesso de 7 bits
1000 0001
0111 1111 + ???? ???? = 1000 0001
???? ???? = 0000 0010 = 2 decimais (levando a 2 ^ 2 ou 4)
Pegando a seção restante e adicionando o invisível 1 1010
0100 1100 1100 1100 1101
Muito parecido com o binário são potências de dois, a parte fracionária vai para o
outro lado e diminui nas potências de dois, pegando esse padrão e comparando-o
com ele.

22
1 0 0,25 0 0 0,03125 e assim por diante
Usando apenas os números 1,28125
Multiplicando por 4 dá 5,125
Aquém do número real que deveria representar, que é 5,15, mas se você
continuasse adicionando números do padrão binário, ele chegaria muito perto
disso.
Representando 3.14
Positivo então o primeiro é 0
Dividir por 2 resulta em 1. algo e 2^1 = 2 2 em
excesso 7 é 10000000
0,57 é o número que precisa ser representado. 0,5
+ 0 + 0 + 0,0625 e assim por diante
Por enquanto, parando aí 1001000000000000000000 Trabalhando novamente, deixa-o
em 0100000001001000000000000000000 binário ou 4048 0000 hexadecimal
Decodificação que fornece 3,125, então o padrão deveria ter sido continuado ainda
mais

Na prática, termina como


10010001111010111000011, que
combinado com o resto dá 4048f5c3
hexadecimal.
A versão um pouco mais longa
Precisão simples (32 bits) e precisão dupla (64 bits) são as versões mais comuns de
ponto flutuante, com qualquer coisa além disso (exceto talvez precisão quádrupla em
algum hardware) geralmente sendo relegada a métodos de software (muito lentos).

Além disso, os valores do expoente, em teoria, variam pelo menos de -126 a 127 (00000001 e
11111110), o que significa que todos os valores 0 e todos os 1 não estão disponíveis. Na prática,
eles são usados da seguinte forma

0Todo 0 indica 0 exato ou com mais precisão valores menores que o mais baixo
valor viável.

1Todo 1 indica unidade positiva ou negativa para todos os valores 1, assumindo


a seção mantissa não contém nada. Se a mantissa contiver algo, isso significa
um erro como dividir por 0 ou algo semelhante (NaN, também conhecido como
não um número).

Para obter mais representações de números reais em ponto flutuante do IEEE, há uma visão
geral básica e O que todo cientista da computação deve saber sobre aritmética de ponto
flutuante tem uma discussão muito mais aprofundada e uma análise histórica. Se você quer
apenas algo para brincar e organizar em sua cabeça, o FloatConverter é muito bom.
Para compensar algumas das deficiências do método, existem duas
funções comuns que são usadas ao lidar com essas coisas.

TetoResumindo, arredonde para um determinado valor (ou múltiplo dele),


independentemente do que uma rodada convencional faria. Também não necessariamente
limitado a números fracionários.

23
ChãoResumindo, arredonde para um determinado valor, independentemente do que uma
rodada convencional faria. Também não necessariamente limitado a números fracionários.

Valores de pontos fixosO ponto flutuante é usado em todos os lugares da computação


(especialmente em 3D e no mapeamento de coisas em 3D, algo que você pode ter visto em
jogos ocasionais) e é bastante caro em termos de recursos, então o ponto fixo aparece.

O ponto fixo tenta contornar alguns dos problemas do ponto flutuante ao custo
potencial de alguma precisão e alguma flexibilidade. É visto em partes do sistema DS 3d,
entre outras coisas, onde 4 bits de número natural e 12 bits fracionários estão
frequentemente na ordem do dia. Isso quer dizer que o computador assume que todos os
números após um determinado dígito binário são fracionários. Alguns preferem vê-la como
uma função do tipo intervalo com 0000 a 1111 representando a diferença entre dois
números inteiros (ou no caso de seno e cosseno -1 a 1).
Os temporizadores são comumente feitos assim, embora também possam ser apenas
múltiplos, o temporizador usado para o formato de áudio DS SSEQ sendo um bom exemplo
deste último.
O que os números significam geralmente é a extensão lógica das potências binárias (2
^ -1 = 0,5 decimal, 2 ^ -2 = 0,25 decimal .....) ou eles contam novamente e o número após o
ponto é efetivamente assumido ser um número normal. Decimais codificados em binário,
quase invariavelmente no arranjo 8421, também podem aparecer aqui.
Tal como acontece com os valores assinados, seu uso evita que o número seja lido como um
número inteiro simples e usado em matemática simples, embora com um pouco de mudança,
rotação e coisas assim você possa fazer bastante e até mesmo fazer algumas comparações e
matemáticas básicas. Falando em mudar e girar

1.2 Operações hexadecimais

Hexadecimal é apenas numeração, mas há coisas comuns que são feitas


Quanto aos formatos usados, a lógica interna do computador usará e pode ser usada
para manipular de forma rápida e fácil algo que precisa ser manipulado.

1.2.1 Turno
Deslocamento para a direita e para a esquerda é útil quando você precisa cortar um pouco de um
valor, você precisa gerar um valor onde não possa ajustá-lo em um comprimento menor que o
destino ou em alguns formatos que deixam as coisas em uma forma inalterada Por qualquer
motivo. Na prática, 32 bits permitem muitos endereços e 31 bits ainda podem lidar facilmente
com a maioria das necessidades de endereçamento GBA e DS, de modo que o bit superior pode
ser usado para indicar coisas como de fato os arquivos NARC fazem para indicar um subdiretório.
Além disso, muitos componentes internos do DS precisam apenas de alguns bits para as coisas
que fazem, de modo que são combinados com outras coisas, às vezes não relacionadas, que você
pode precisar perder para ver o que está acontecendo. Em um editor hexadecimal,
provavelmente seria melhor usar a lógica booleana (abordada em um momento) em vez de
mudanças, mas no hardware isso pode acontecer de qualquer maneira.
Uma mudança pode ser para a direita (você desloca os números para a direita, perdendo os
dados mais à esquerda) ou para a esquerda, perdendo os dados mais à direita.
Também é útil como um multiplicador rápido (pense em como você desloca
tecnicamente os números ao multiplicar ou dividir por 10 em decimal).

24
Há também a distinção entre deslocamento lógico e deslocamento aritmético, onde no caso deste último
você não perde os dados se deslocar para a esquerda e depois para a direita. Você também pode fazer
deslocamentos de bloco, mas eles são apenas um caso especial, o que geralmente significa que um determinado
número de bits é deslocado.

1.2.2 Girar
Relacionado ao deslocamento, mas onde você perde dados se você deslocar, ele aparece do outro lado
quando você gira.
1011 gira 1 bit para a esquerda formando 0111

1.2.3 Virar
Flip é mais útil quando você está trabalhando com endian grande e pequeno. Já foi
visto quando big e little endian foram abordados acima, mas um ip de 32 bits de A036
0104 lê 0401 36A0.
Em alguns casos pode ser útil ip valores maiores ou menores, por exemplo, embora
muitos formatos usem 32 bits completos para um comprimento, o arquivo pode ser muito
curto e precisar apenas dos primeiros 16 bits. Mais útil (e nem sempre uma função de
editores hexadecimais), o formato de imagem GBA 4BPP usa 4 bits por pixel, mas irá ipá-los
entre o armazenamento e a exibição na tela.
Na figura abaixo você pode ver o hexágono que representa a peça destacada
(é o ícone da versão wi do Yakuman DS, um título competitivo de Mahjong).

ˆNa primeira linha você pode ver 0000 D0DD onde os pixels rosa (na prática
eles seriam transparentes, mas mais sobre isso quando os gráficos são discutidos) que são
representados por 0, neste caso executados por 5 pixels.

ˆNa próxima linha você pode ver 4 pixels rosa como eles são, mas depois o cinza
pixel (neste caso D) está após o valor F que representa o pixel branco

ˆNa próxima linha você pode ver o pixel de cor creme (E) sendo o penúltimo
em vez de realmente durar. Isso foi feito porque é assim que o hardware funciona/espera
as coisas, mas pode ser complicado se você estiver tentando simplesmente editá-lo.

25
1.2.4 Lógica booleana
Freqüentemente, um conjunto de técnicas mais útil do que os turnos básicos e outras
operações já abordadas. Existem vários tipos, embora você provavelmente verá padrões
em breve (principalmente que NAND, NOR e XNOR são apenas o inverso de suas
contrapartes). A lógica booleana existe em duas grandes áreas com as quais o hacking de
ROM e atividades relacionadas podem estar preocupados; um é programação e o outro é
lógica eletrônica, onde eles executam funções idênticas, mas em alguns aspectos são
pensados de forma um pouco diferente.
Provavelmente é útil discutir aqui a ideia de alto e baixo conforme ela se aplica à
computação e à eletrônica. Na grande maioria dos casos (especialmente hacking de
software e ROM), você deve sempre assumir que, salvo indicação em contrário, um valor
alto corresponde a 1 e um valor baixo corresponde a 0. Isso é diferente de algumas outras
coisas nesta seção onde você normalmente desejará busque esclarecimentos sobre as
coisas (que método de números negativos ou de pontos você está usando, por exemplo).
Há, no entanto, uma variação nesta chamada lógica de borda negativa (referindo-se a
certos chips que mudam na borda descendente de um pulso de clock) que pode ser
descrita com o oposto, onde 0 é alto e 1 é baixo.
Os exemplos serão feitos em binário.

NÃO também conhecido como inversoFaz o que diz e ips cada bit.
1001 1110 torna-se 0110 0001

EAqui você pega dois números (de preferência de comprimento igual, mas se não, a sequência
mais curta é repetida conforme apropriado na maioria dos casos) e combina o resultado de modo
que somente se ambas as entradas forem altas o resultado será alto
1100 1111 E 1010 0100 torna-se 1000 0100

NANDMuito parecido com AND, você pega dois números e os junta, mas em vez de
ambos serem altos, é se ambos forem baixos. É muito útil porque é uma operação
lógica fundamental; você pode empilhar operações NAND ou mesmo portas NAND de
forma que possa realizar qualquer outra operação booleana.
1100 1111 NAND 1010 0100 torna-se 0111 1011

OUNovamente dois números, mas se qualquer uma das entradas for alta, o resultado será alto.
1100 1111 OU 1010 0100 torna-se 1110 1111

NEM Dois números, mas apenas altos se ambas as entradas forem baixas
1100 1111 NOR 1010 0100 torna-se 0001 0000

XORDois números, mas apenas altos se apenas uma entrada for alta. Útil como criptografia por si
só e como base de muitos métodos de criptografia mais úteis. Como um aparte rápido, há sérias
desvantagens quando se trata de realmente ser usado como criptografia; se feito corretamente, é
um dos poucos que não pode ser quebrado com poder de computação suficiente. Além disso,
onde os outros podem facilmente ter múltiplas entradas em eletrônica, um XOR de múltiplas
entradas é, na melhor das hipóteses, complicado.
1100 1111 XOR 1010 0100 torna-se 0110 1011

26
XNORDuas entradas, apenas saídas altas quando nenhuma ou ambas as entradas são
iguais. Sendo o inverso do XOR, tem problemas semelhantes.
1100 1111 XNOR 1010 0100 torna-se 1001 0100

Discussão da lógica booleana.Os mais úteis no hacking diário de ROM são


provavelmente NOT, AND, OR e, puramente por causa da criptografia, XOR.
NOT, também conhecido como inverso, é útil em muitas ocasiões para muitas coisas,
especialmente em gráficos (pode não ser tão simples na prática, mas inverter cores é
bastante comum). Também é útil para corromper dados e recuperá-los facilmente (basta
invertê-los).
AND é útil para remover certos bits, por exemplo, se você deseja remover o bit mais
alto de um byte, apenas AND o resultado com 0111 1111 e qualquer que seja o resto
permanecerá o mesmo, mas o bit mais alto será 0 independentemente.
OR é útil se você deseja definir um determinado bit alto, por exemplo, para definir o bit
mais alto em um byte como alto apenas OR o resultado com 1000 0000 e o primeiro bit será
definido como alto independentemente, mas o resto só será alto se forem começar com.

XOR também é usado algumas vezes nas partes internas do GBA e DS e é


amplamente usado como proteção simples em pontos de dispositivos de trapaça e
coisas como o leitor GBA e.

Um aparte sobre operadores lógicos/relacionaisEles compartilham o mesmo nome e função ampla da


lógica booleana, mas aqui são usados como verificações para ver se ambas as entradas atendem a uma
determinada condição. Nas linguagens do tipo C, ele funciona da seguinte maneira
AND verifica se ambas as entradas são diferentes de 0 e retorna verdadeiro se for o
caso OU verifica se apenas uma entrada é diferente de 0 e retorna verdadeiro se for o
caso NÃO apenas inverte a saída das outras funções.
No que diz respeito à maior parte do hacking de ROM, isso geralmente será interpretado
mais próximo da montagem, onde comparações e ramificações serão usadas.
Da mesma forma, um deslocamento lógico para a direita é diferente de um deslocamento
convencional para a direita, pois reterá a parte mais significativa.
1000 1110 deslocado para a direita em 1 resulta em 1100 0111

1.2.5 Matemática Hexadecimal.

Algumas pessoas podem operar em hexadecimal, mas na maioria das vezes a matemática
se assemelha à divisão longa e à matemática longa. É bastante útil saber rapidamente o
que é 9 + 3 em hexadecimal.
A resposta é C, mas provavelmente usando decimal durante toda a sua vida, seu
pensamento imediato pode muito bem ter sido 12, o que poderia bagunçar todo o seu
hack se você colocar isso na ROM.
A subtração funciona da mesma maneira até chegar a números negativos
(sinalizados); nesse caso, você consegue descobrir qual método está usando para isso.
Multiplicar é bastante fácil
1D x 09 é 10 x 9 + 0D x 9 ou 90 + 75 = 105
A divisão é uma dor e, mais importante, depende da função da linguagem de
programação usada; muitos métodos básicos irão eliminar o material depois do dec-
ponto final onde outros o transformarão em um número flutuante. Ponto flutuante
pode não ser tão preciso, pois hexadecimal é um pouco menos capaz de exibir os
resultados de divisões comuns, sem mencionar que será arredondado em algum momento.

27
Esse truque é frequentemente usado para confundir e, assim, ensinar novos programadores e até mesmo
surpreender os mais antigos; os pacotes de financiamento são especialmente perturbados por esta situação,
pois se falharem alguns pontos de arredondamento, isso pode fazer com que grandes quantias de dinheiro não
vão para onde deveriam ir. No entanto, existem alguns conceitos dignos de nota à medida que surgem nas
linguagens de programação e nos processadores em que são executadas.

ModoComo mencionado, algumas funções básicas de divisão hexadecimal


deixarão você apenas com a parte inteira do resultado (99 dividido por 6 é 16,5, mas
muitas funções de divisão dariam apenas 16). Mod é então uma função que lhe dá o
resto como um número inteiro (99 dividido por 6 é 16 resto 3) que você pode deixar
na esperança de que seja multiplicado mais tarde ou alimentado para outro comando
(muitas funções de divisão lutam com números grandes e prefira os pequenos).

Absoluto)A matemática regular potencialmente confusa às vezes também chama esse


módulo com a abreviação às vezes sendo mod . Dependendo de quão longe você deseja
levar a matemática, ela pode ficar bastante complexa, mas a versão resumida é que o valor
abs de um número é apenas o número (sempre positivo) sem o sinal. É então bastante útil
alimentar funções para que você possa simplificá-las ou a matemática resultante.

1.3 Patch e criação de patch


Hackers de ROM alteram imagens de ROM, sendo os comprimentos de direitos autorais o que são, isso
significa que essas coisas são códigos protegidos por direitos autorais. Mesmo o código editado ainda
tem proteções, então as diferenças entre as versões são encontradas e transformadas em um arquivo
de patch. Tal coisa também terá o ótimo bônus de tender a ser bem menor e mais fácil de transmitir. Os
arquivos de patch permitem que alguém pegue a ROM original, aplique o patch para transformá-lo em
sua versão alterada e depois reproduza-o. Tal como acontece com a maioria dos conceitos, você pode
usar um computador para ajudar e, também como a maioria dos conceitos, existem muitos métodos
pelos quais você pode criar e aplicar patches. No entanto, ao contrário da maioria dos outros momentos
em que você precisa decidir entre formatos concorrentes, há mais do que diferenças de token e
dependência de fornecedor. Cada tipo está vinculado ao melhor exemplo/implementação no momento
da escrita, com mais alguns no final, se houver. outros são dignos de nota.

ˆIPS. O método original de correção de hackers de ROM preferido. É um verdadeiro


formato básico (o formulário básico contém um carimbo/valor mágico, uma lista de
patches a serem aplicados (que consiste em uma localização, comprimento e carga útil) e
um sinal para o final do arquivo), embora existam algumas versões personalizadas que
não são amplamente apoiado. Ele não pode lidar com mudanças de localização, o que não
é um problema para consoles mais antigos, mas com consoles que possuem sistemas de
arquivos (ou seja, a maioria das mídias ópticas que usam e pós-consoles GBA) é um
problema. Também é limitado a menos de 16 megabytes ou menos. Novamente, isso não
é um problema em consoles mais antigos, mas mesmo o GBA permitia a execução de
códigos de até 32 megabytes.

ˆUPS. Feito como sucessor direto do IPS, encontrou alguma utilidade em sistemas mais antigos.
consoles e patches posteriores de GBA, mas chegaram um pouco tarde demais e os
métodos de patch abaixo roubaram os holofotes. Chateado, Tsukuyomi UPS e NUPS
são boas ferramentas para UPS.

28
ˆPPF. Feito originalmente para corrigir jogos PS1 (Pestação de repousoPanexandoFformato
sendo a forma mais longa), ele passou por algumas revisões e, como tal, alguns estão
cautelosos, no entanto, ele teve alguma utilidade no Wii e continua funcionando. Os
limites de tamanho não são realmente um problema (não se sabe qual é o limite superior)
e as mudanças são tratadas corretamente. PPF-O-Matic é um bom programa de patch de
GUI e o programa PPF original deve fornecer uma boa alternativa de patch
multiplataforma e criação de patch.

ˆXdelta e BSDi. Ambos os formatos gerais de patch (na verdade, eles tendem a
posicionam-se como formatos rivais) que foram usados para o DS e consoles mais
recentes (os hackers de ROM tendem a favorecer o Xdelta, onde o BSDi viu mais uso
na forma de treinadores e patches de cena). As mudanças são tratadas bem o
suficiente (embora possam não ser perfeitas) e os tamanhos provavelmente não
chegarão ao limite tão cedo (embora algumas implementações do BSDi sejam
bastante baixas). Apresenta algum suporte para verificação e hash de arquivos
originais. A versão atual do Xdelta foi vinculada, mas há uma versão mais antiga que
foi usada há algum tempo e houve alguns problemas de compatibilidade.

ˆNinja. Um candidato anterior para substituir o IPS e caiu em desgraça por vários
razões. Alguns patches foram usados para usá-lo e, em muitos aspectos, funciona muito
bem.

ˆPAR2. Não é um método de patch em si e mais uma detecção de corrupção


e formato de recuperação de dados. Os dados alterados não são diferentes dos dados
corrompidos, no que diz respeito, portanto, podem corrigir programas, embora tenham
alguns problemas com as mudanças de dados. Melhor ainda, supondo que você tenha
redundância suficiente, você pode ter certeza de que seu patch transformará a ROM
original exatamente no que você precisa, o que é bastante útil quando há vários dumps
corrompidos ou modificados à solta (cabeçalhos em arquivos ROM do SNES, por
exemplo). ).

ˆPersonalizado. Havia alguns outros formatos feitos para várias coisas (Jump
Super Stars, por exemplo) e outros voltados para coisas mais específicas (Fire-
Ower é um formato de patch voltado para certos hacks gráficos, por exemplo), mas
eles não serão abordados aqui. Algumas pessoas decidiram descompactar os
arquivos ISO/ROM, corrigi-los individualmente e construir uma ROM/ISO
posteriormente. Isso proporcionou os menores tamanhos de patch, geralmente
contornava o problema de realocação de arquivos, proporcionava a melhor
compatibilidade com várias versões de ROM e dava a opção de ter várias opções
para o patch; uma tradução gráfica pode traduzir gráficos que são em sua maioria
decorativos, em vez de ter que tomar uma decisão executiva, você pode apenas fazer
uma opção no nível do patch. A principal desvantagem é que ele pode muito bem ser
específico da plataforma, exigir a criação de vários arquivos em lote ou a instalação
de tempos de execução. Também pode ajudar onde os arquivos são criptografados
ou compactados e, ao fazer um patch, você ainda está redistribuindo tecnicamente o
código que não pertence a você (criptografia e compactação parecem diferenças em
relação a uma função básica de comparação).

Algumas pessoas levaram esse conceito de formato personalizado um passo adiante no Wii e em alguns
outros consoles, criando uma espécie de jump loader usando um hack de console no nível do painel/
menu para aplicar um patch aos dados de um jogo quando ele estava mantido na memória. Isso
também teve a vantagem adicional de permitir que aqueles com o jogo original e

29
um Wii não hackeado para jogar o jogo hackeado. A Nintendo faria algo semelhante para
corrigir um bug no resort esportivo do Wii, já que o Wii não possui um recurso real de
gerenciamento de patches como o 360 e o PS3.

1.4 Sistemas de arquivos e operações


Esta seção irá detalhar as ferramentas e métodos gerais de operação dessas ferramentas
para separar/descompactar/extrair imagens ROM. Provavelmente também será a única
seção a cobrir outros sistemas além do GBA e DS com detalhes reais. A forma geral desta
seção é o nome do dispositivo, o nome do método pelo qual o código hackeado pode ser
executado e se ele pode ser emulado, os nomes/extensões/tipos de binários, qualquer
documentação de hardware e finalmente técnicas para analisar sistemas de arquivos. Para
obter informações adicionais ou informações sobre sistemas não abordados aqui, as
principais fontes de informações de hardware e similares são normalmente
desenvolvedores de homebrew, aqueles que desejam executar vários tipos de Linux em
consoles e autores de emuladores.

1.4.1 Dispositivos sem sistema de arquivos

Método - geralmente carrinhos de cinzas de vários formatos que podem não existir de
forma atualizada ou ser bastante caros, se existirem. A emulação geralmente está
disponível e de alto nível se você quiser, e além disso, tudo até o final da era de 16 bits e um
pouco além geralmente pode ser emulado em consoles e dispositivos portáteis mais novos
em algum nível.
Como o GBA é o foco deste guia, ele recebe uma seção adequada, mas em geral
os dispositivos mais antigos que o DS ou que não usam mídia óptica tendem a não ter
um sistema de arquivos, isso significa que você pode empregar várias técnicas
abordadas no GBA seção abaixo. Eles são frequentemente acessíveis diretamente na
memória, mas além do GBA, muitas vezes têm peculiaridades que você precisa
resolver (mapeadores no NES, hirom e lorom no SNES e controladores de banco de
memória no gameboy original e no GBC). Deve-se notar que essas peculiaridades
geralmente oferecem recursos extras sérios, mas além de serem difíceis de lidar, são
extremamente difíceis de adicionar ou remover de um jogo.
Hoje, além do GBA, você tenderá a encontrar apenas a falta de um sistema de
arquivos ao editar os executáveis para coisas (embora isso não seja uma certeza) e
se você começar a editar os programas de segurança/processador secundário/
hipervisor para os consoles (coisas como IOS no Wii e código de segurança para os
coprocessadores do PS3 Cell).
romhacking.net mantém um banco de dados de informações de hardware para consoles mais
antigos e alguns mais novos. Você também pode gostar de infrid.com para o N64.

1.4.2GBA
Método - carrinho de cinzas ou emulador.
O GBA é independente, mas o local do executável (ou o início dele e o início do
material útil) é facilmente encontrado.
GBAtek e CowBite são geralmente considerados os principais documentos de hardware;
também existe alguma documentação mais específica para certas áreas de hardware, como a
configuração de áudio.

30
Além de alguns homebrew, o GBA realmente não possui um sistema de arquivos, o que
significa que não existe algo como explodir a imagem da ROM em um grupo de arquivos
dos quais ela é composta. Existe uma técnica avançada conhecida como rastreamento que
pode encontrar onde qualquer dado está localizado na ROM e um punhado de variações
mais simples, embora às vezes menos eficazes, sobre o tema (registro de chamadas SWI do
BIOS e pesquisa de campo de ponteiro) que serão abordadas nas seções apropriadas.

Algumas ferramentas como as vistas nos editores Golden Sun da Atrius contêm rotinas de
busca por sub arquivos, a compactação pode ser pesquisada com várias ferramentas, o formato
de áudio GBA sentimental que pode ser detectado em alguns casos e ferramentas mais gerais
para jogos como Pokémon também conterá uma lista da localização de vários componentes do
jogo (ou das coisas que apontam para eles), assim como alguns outros jogos. Além de carrinhos
de cinzas, algumas imagens ROM não despejadas (vídeos completos) e alguns daqueles carrinhos
30 em 1 que você encontra em armadilhas para turistas, o carrinho inteiro fica visível na memória
o tempo todo e isso significa que o limite de espaço é de 32 megabytes.

1.4.3 DS
Método - carrinho de cinzas ou emulador. DS e DS Lite executam código GBA nativamente se você tiver
um carrinho de slot GBA.
Os formatos executáveis para o DS são ARM9, ARM7 e arquivos de sobreposição
que geralmente vêm com a extensão .bin e às vezes SRL.
GBAtek é o principal documento de referência de hardware para o DS.

Ferramenta NDSNDStool na linha de comando letrip e muito rápido e fácil, mas falha
para reconstruir certas imagens ROM corretamente (a maioria ainda funciona).

NitroexploradorNitroexplorer letrip Construído para compensar deficiências em ND-


Métodos de fezes. Com exceção da edição manual, a ferramenta ideal para a maioria.

NDSTSPágina de ferramentas No-Intro Capaz de extrair arquivos e inserir arquivos do mesmo


tamanho (você pode preenchê-los se quiser), se ele travar quando você o editou
onde funcionava antes, então a culpa é definitivamente sua.

Cristaltile2Cristaltile2 letrip Capaz de analisar o sistema de arquivos DS, bem como


extrair indivíduo arquivos. Suporte neste nível para compactação, bem como arquivos,
determinado recipiente bem como suporte para todos os tipos de formatos conhecidos e
funcionalidade adicional. Clique no ícone DS na barra de ícones para abrir o
visualizador.

TinkeLink Github Uma ferramenta semelhante em capacidade ao Crystlatile2 e também suporta


descompressão de arquivos em ROM e amplo suporte para outros formatos.

O sistema de arquivos do DS é bem conhecido e bem compreendido, então você tem muito mais opções
aqui; na verdade, é geralmente o primeiro recurso que os aspirantes a ferramentas de edição de ROM
do DS ganham. Jogos compatíveis com DSi geralmente podem ser analisados por ferramentas padrão e
o código específico do DSi agora deve ter chaves relevantes para ajudar, embora não possa realmente
ser executado. A maioria dos jogos terá formatos de arquivo para alguns
arquivos empilhados em cima, mas observou-se que alguns jogos de DS usam grandes arquivos únicos
para todos ou a maioria de seus arquivos, sendo os arquivos não colocados no arquivo geralmente
componentes de reprodução para download, som ou vídeo.

31
A maior parte do uso será coberta ou bastante óbvia, exceto para o ndstool, que possui um
comando básico de extração como
ndstool -x *.nds -9 arm9.bin -7 arm7.bin -y9 y9.bin -y7 y7.bin -d dados -y
sobreposição -t banner .bin -h header.bin
Substitua -x por -c e *.nds por um nome válido e você poderá reconstruir uma
ROM. O NDStool não é tão útil para hacks finais, mas é bastante útil para testes
rápidos. ndstool -l *.nds fará uma listagem dos arquivos dentro de uma ROM e
suas localizações.

1.4.4 3DS
Vários hacks, embora as coisas estejam frequentemente em um estado de ux, pois é um firmware
sistema que pode ser atualizado. A tendência é a customização moderno, embora ash
carrinhos também existem. A descriptografia de jogos inteiros é possível, consulte XORpad e similares, e
pode ter métodos independentes em pouco tempo. ROMs descriptografadas podem estar disponíveis
on-line e alguns arquivos podem ser obtidos em despejos de memória.
A execução de código modificado está dentro do escopo dos hacks capazes de
executar versões copiadas dos jogos.
3dbrew é a principal documentação do hardware 3ds. Uma rápida visão geral diz que ele
compartilha muito de sua história com o DS, mas também está um pouco mais próximo de uma
arquitetura de computador totalmente moderna (hipervisores/kernels, memória segmentada e
similares), também apresenta uma implementação de 3d semelhante a opengl.

1.4.5 GC (gamecube)
Método - chip mod e caixa miniDVD/modded e DVD normal, carregador SD,
adaptador IDE. Emuladores exigentes, mas viáveis.
boot.dol é o principal formato executável.
Hitmen YAGCD é geralmente considerado o melhor documento de hardware do
gamecube.
Ferramenta de GC

Utilitário GCM (principalmente inicialização múltipla em vez de manipulação iso).


Ferramenta ISO do Gamecube

1.4.6Wii
Método - Carregamento de Softmod de USB externo. Modchips e alguns softmods
suportam gamecube. Emulação exigente, mas viável.
Wiibrew abriga a principal coleção de informações de hardware e informações
internas de software, embora existam outras que se movem mais para formatos e
edição de software interno.
. dol é novamente o formato principal, embora ELF apareça no homebrew. Os jogos e
arquivos de Wii vêm em dois sabores originais e um usado por alguns tipos de carregamento
iso.

DiscosVárias ferramentas disponíveis, mas o limpador de Wii será o método de escolha aqui

Baixar Wii Scrubber Letrip


No entanto, você também pode considerar as ferramentas ISO do Wiimms como uma boa
alternativa de linha de comando e suporte para alguns dos formatos personalizados que se tornaram
bastante populares no Wii.

32
Console virtual e Wiiware, também conhecido como arquivos WADNão deve ser confundido com
doom wad les.
Uma das ferramentas anteriores para isso era o WWpacker, mas existem exemplos melhores nos
binários de exemplo do libwiisharp. Ferramentas simples, mas que podem descompactar bem as
coisas. showmiiwads. Uma ferramenta GUI com a capacidade de descompactar arquivos wad e lidar
com coisas comuns feitas nos arquivos que eles contêm depois disso.
Muitos títulos também aninham coisas em um formato conhecido como u8 (e muitas vezes
combinam a compactação yaz0), mas ambas as ferramentas podem extrair, descompactar e lidar
com isso também.
https://github.com/BtbN/libwiisharp página
showmiiwads do github

Disco rígidoA maioria das pessoas não usa mais imagens iso inteiras ou pequenos ajustes
e, em vez disso, usa um disco rígido USB e talvez um formato personalizado. Eles vêm em
vários formatos e camadas de suporte, mas WBFS é o método principal que geralmente é
empilhado sobre sistemas de arquivos FAT ou NTFS. As ferramentas ISO do Wiimms
vinculadas acima têm certo suporte para algumas dessas coisas.

1.4.7 Xbox
Método - Softmods e hardmods, ambos usando pequenas variações na ideia de disco rígido
interno ou DVDs copiados. A emulação não é realmente adequada para a maioria das
coisas, mas está melhorando, o 360 apresenta uma medida de suporte a jogos xbox
hackeados quando hackeado corretamente.
O formato executável do 360 é arquivos xbe.
Tal como acontece com a maioria das coisas aqui, existem várias opções, embora três se
comparem aqui.
Ferramenta C-Xbox

Qwix
Craxação
Download do Filetrip (todos os três)

1.4.8Xbox360
Método - nenhum softmod real. DVD mod (não permite jogos alterados, XBLA ou DLC, a
menos que combinado com um dos seguintes métodos), JTAG (hardware mais antigo
necessário) e RGH (pode ser feito na maioria dos hardwares, embora atualizações
posteriores possam ser mais difíceis de contornar) levam a onboard e carregamento USB.
Emulação nem perto.
Free60 apresenta muitas informações de hardware.
Os jogos do Xbox 360 vêm em dois aspectos gerais, com um terceiro método
mencionado. O formato executável do 360 é arquivos .xex. Eles podem ser extraídos
posteriormente (eles são baseados no formato executável portátil/Windows PE usado em
arquivos exe e dll).

XexXextool e xextool GUI são ferramentas que podem ajudar aqui. Eles podem
descompactar o formato, aplicar vários patches nos próprios arquivos e aplicar os patches
de atualização do título.
Baixar Xextool letrip Baixar
XextoolGUI letrip

33
DiscosVários programas extraem coisas, incluindo a ferramenta de verificação ISO
conhecida como ABGX360, mas muitos são pesados, então o e-xiso é o principal método.
Extraia a página inicial do xiso
Download de viagem de arquivo

As instalações GOD e NXE/disco rígido vieram de discos e têm apenas alguns bytes
de diferença entre si. Eles podem ser transformados em isos mais ou menos
inutilizáveis com GOD2ISO.
Os arquivos XEX são os binários do 360, podem haver vários. Os patches existem na forma de
atualizações de títulos e podem ser aplicados aos arquivos XEX se você realmente desejar.

XBLA/DLCPIRS, AO VIVO e CON. Os PIRS são assinados pela MS e podem ser


instalados em qualquer 360 sem problemas. Eles são provenientes principalmente do
jogo do ano da Bethesda e dos jogos de pacote duplo Borderlands, mas existem
vários outros.
LIVE é o formato de XBLA e DLC. As demos XBLA são jogos completos, mas uma pequena string é
trocada para permitir a reprodução do jogo completo (naturalmente, isso quebra a assinatura e precisa
de um desenvolvedor ou caixa JTAG/RGH para executá-lo).
Um conjunto relacionado de formatos e geralmente manipulado pelas mesmas ferramentas. Le Flu
e é um dos principais.
Página de download do Le Flu e
Download do Filetrip

USBNão é realmente um formato, mas um dos principais métodos de acesso, por isso é notado.
Mais tarde, na vida do 360, a Microsoft adicionou suporte para um formato USB personalizado (na
prática, era uma seção reservada de uma unidade USB). XTAF.
Suportado por várias ferramentas, mas USBXTAF é o método principal. Download de
viagem de arquivo

1.4.9 PS1 e PS2


PS1 - chip mod. A emulação está disponível há muitos anos, mas pode ser complicada se você se
aventurar nos emuladores baseados em plug-ins, muitas vezes superiores.
Playtown tem muito no PS1 (principalmente em japonês). O link romhacking.net
de outros sistemas contém um pouco de informação e psx.rules.org tem mais
algumas.
Modchip PS2 e algum carregamento de rede/USB acionado por softmod possível.
Emulação exigente, mas viável.
philvaz.com tem algumas boas informações sobre o hardware gráfico e alguns componentes
internos. scee.net (link de aviso em PDF) também tem uma boa introdução.
ISO 9660 estava na ordem do dia para muitos, mas jogos posteriores no PS1 e muitos
no PS2 adicionaram uma configuração fictícia a isso e, em vez disso, criaram uma nova
sistema de arquivos posteriormente e/ou ler endereços diretamente dos discos.
Na maior parte, o PS2 também era uma imagem ISO 9660 padrão que inúmeras
ferramentas como 7zip e superiores podem abrir, mas certos jogos (principalmente jogos
da Square Enix para música) usavam leituras LBA brutas ou um sistema de arquivos
personalizado para ler certas partes de as imagens iso em questão. Existem algumas
ferramentas que tentam detectar a assinatura dos arquivos musicais e, ocasionalmente, de
toda a imagem.
As leituras LBA também foram usadas na proteção antipirataria para muitos desses jogos.

34
Ambos usam uma versão dos formatos executáveis conhecidos como ELF como
executáveis.

1.4.10 PS3
Método diferente- softmod (talvez com gatilho de hardware) levando ao carregamento do
USB e do disco rígido. Emulação nem perto.
Tecnicamente, o PS3 usa uma versão do ELF para os executáveis.
ISO
Arquivos PUP (atualizações)
Conteúdo DLC e PSN.

1.4.11 PSP
Método - carregamento de softmod a partir de cartão de memória (adaptadores Memory Stick PRO Duo
oficiais ou microSDHC disponíveis) ou carregamento de armazenamento integrado (PSP Go). A emulação
é mais possível do que antes, mas pouco desenvolvida em comparação com muitos outros sistemas.

O processador PSP MIPS R4000 (aviso PDF) é uma análise do nível de desenvolvedor do
sistema do processador PSP.
Formato executável formato pbp (geralmente chamado eboot.pbp).
Existem algumas ferramentas aqui, mas o UMDGen é a dominante e há poucos motivos
para usar outra. Suporta extração, inserção de qualquer comprimento, reconstrução da
tabela de localização de arquivos e religação de arquivos, bem como criação de imagens
compactadas.
Link de viagem de arquivo

1.4.12 Saturno
Método - Modchip em sua maior parte. A emulação é surpreendentemente boa, embora a
arquitetura do Saturn signifique que a emulação é exigente para a idade relativa do
sistema.
Yabause (um dos emuladores mais populares para o Saturn) possui muitas
informações de hardware.
Uma ligeira variação no formato iso, embora possível com ferramentas padrão.
Guia envolvendo a manipulação de Saturno Les

1.4.13 Dreamcast
Método - Basta inserir o disco copiado ou usar um carregador de disco conhecido como Utopia.
Emulação, o que não é ruim para alguns jogos.
O manuseio da imagem do disco varia. Gravadores de CD eram um conceito novo
quando o DC foi lançado e havia muitos formatos concorrentes para mídia óptica, então
você vai querer uma ferramenta iso padrão para explodi-lo nas trilhas componentes (o bom
é normalmente a terceira trilha em diante). As faixas funcionam mais ou menos como isos
padrão, exceto pelo fato de que estão deslocadas e a maioria das ferramentas iso normais
não conseguem lidar com isso como estão. Felizmente, o Iso LBA Fix (iso x) da DeXT existe e
mudará o LBA para começar do zero, ponto em que tudo irá lidar com isso.

dextremes.com tem links para algumas informações.

35
1.4.14 Amigo
Método - discos copiados. Emulação bem desenvolvida.
As imagens ADF são as mais comuns (ADZ são apenas versões compactadas do ADF), mas,
sendo provenientes de disquetes, elas tendem a ter um sistema de arquivos.
amigadev tem muita informação de primeira qualidade. UnADF
deve permitir que você descompacte imagens ADF. Página inicial
da Unadf
Link de viagem de arquivo

1.4.15 PC e hardware relacionado.


Método - você controla o hardware para emulação de disco, executáveis crackeados ou
emulação de método (veja emulação Steam)......
Vários formatos executáveis dependendo da linguagem de desenvolvimento e do sistema
operacional.
Um pouco mais sobre hacking de PC será mencionado posteriormente, mas para uma descompactação simples.

EDUCAÇAO FISICAO formato principal do Windows é o formato PE, geralmente conhecido pelo
extensões exe e dll. Isso pode ser descompactado com muitas coisas,
incluindo 7zip.

DUENDEUsado como base para muitos formatos executáveis (incluindo muitos dos
consoles abordados em outro lugar).

ISOTermo amplo para imagens de discos ópticos (e às vezes outras coisas) e


existem vários formatos para ele (muitas coisas serão chamadas de iso e serão gravadas
como uma só, mas não poderão ser extraídas). Pode ser extraído por várias ferramentas,
incluindo 7zip e Ultraiso (software pago)

Lote/bashA maioria dos sistemas operacionais fornece uma linha de comando onde os comandos
pode ser digitado e colocado em camadas sobre isso é o conceito de pequenos scripts de
texto que podem fazer coisas bastante extensas, mas na prática são apenas uma lista de
comandos com alguns extras.

Roteiros (Python, lua, Java, visual basic e muito mais). Muitas programações
linguagens operam fora dos domínios do executável padrão (ou o possuem
como wrapper) e podem ter seu código original, ou algo próximo a ele,
recuperado por vários meios.

SD/CF/XDAlguns pontos que você pode precisar para copiar um SD, CF, XD ou algum outro
cartão de memória setor por setor. Nessas ocasiões existe um programa
chamado DD que é popular no Linux e também possui uma porta Windows.

1.5 Encontrando o objeto de seu interesse.


Os jogos vêm como imagens ROM ou, se vierem originalmente de mídia óptica, então
imagens ISO, mas o comum a ambos é que eles são um grande pedaço de código. A
seção anterior tratou dos métodos para separar esses arquivos iniciais, mas isso é
apenas o começo, pois você desejará encontrar o arquivo ou seção relevante que
contenha o que deseja ver ou alterar.

36
Existem técnicas aqui que vão do óbvio ao sutil, do básico ao complexo e do bruto ao preciso
e muitas serão inúteis para você sem conhecer várias outras coisas detalhadas em outras partes
deste documento. Muitos hackers de ROM que estão começando verão os métodos mais
avançados de localização de dados e entrarão em pânico, mas para dispositivos como o DS e a
maioria dos outros dispositivos esportivos de sistema de arquivos, o principal método que as
pessoas usam para encontrar os arquivos que desejam é o
nomes de arquivos (a maioria dos jogos os apresenta mesmo que não os usem diretamente),
tamanhos e extensões de arquivos diretamente (English.bmg pode muito bem ser o texto em
uma ROM do DS) ou indiretamente (sound_data.sdat provavelmente será o som, então você pode
eliminar esse pedaço da sua pesquisa pelo texto de um jogo que é duplamente bom, já que o
som geralmente ocupa uma boa parte do espaço em uma ROM) com uma rápida olhada nos
nomes dos diretórios ao lado (o som provavelmente conterá som, 3d provavelmente conterá 3d e
dwc\utility.bin provavelmente são download play2).
Além disso, existem diversas extensões e valores de cabeçalho conhecidos para vários
formatos onde os primeiros bytes são decodificados como uma string ASCII ou
hexadecimal conhecida. Muitos mais exemplos depois, mas por enquanto o sdat é um
formato de som extremamente comum no DS e o bmg é um formato de texto bastante
comum. Deve-se notar que as extensões muitas vezes podem revelar a presença de
compactação com exemplos comuns, sendo que se um arquivo termina com .l , .lz , ._ ou
algo nesse sentido, especialmente se tiver outra extensão conhecida antes dele, então pode
bem, seja comprimido e você poderá agir de acordo.
A corrupção da ROM também deve ser mencionada aqui. Fica um pouco caro se você tiver
que gravar discos todas as vezes, mas quando emuladores e carrinhos de cinzas estão
disponíveis, você pode corromper uma parte da ROM, executá-la e, quando ocorrer um erro ou
travar, você poderá ver quais partes fazem o quê. O método simples é usar uma das operações
hexadecimais que você aprendeu anteriormente, mas existem ferramentas de corrupção
dedicadas. Da mesma forma, a técnica pode precisar ser refinada para certas coisas, já que coisas
como gráficos só podem usar uma série selecionada de valores que a ferramenta de corrupção
pode usar inadvertidamente. Você também pode refinar o conceito a um ponto onde alteração é
provavelmente um termo melhor, por exemplo, ao tentar descobrir como o texto é codificado,
pode ser útil repetir um valor ou sequência em vez de usar lixo aleatório.

Depois disso, você começa a seguir para técnicas de nível de programação, como
pesquisa relativa, que usa o fato de que em caracteres romanos usando idiomas, A é
seguido por B, que é seguido por C e, portanto, se você souber que a palavra CAB está em
uma ROM, você pode procurar por um string o que tem um valor seguido por um valor dois
a menos que ele e aquele seguido por um valor um a menos que o valor de abertura
(embora na prática um termo de pesquisa mais longo seja mais útil).
O rastreamento é considerado o método definitivo e ainda é bastante
diferente da simples análise hexadecimal e nomes de arquivos, porém não é tão
difícil acompanhar a ideia básica. Ao rastrear, você encontra o que deseja ver na
memória (se estiver na tela ou saindo dos alto-falantes, provavelmente está na
memória) e o que o colocou lá, e onde foi dito para procurar arquivos
e assim por diante até que você tenha a localização do na ROM ou dados suficientes para
encontrá-lo, e possivelmente também os meios pelos quais tudo é decodificado. Naturalmente é

2O componente de download de uma ROM às vezes atua como uma versão reduzida do jogo
principal, mas separá-lo e usar os dados coletados lá para tentar fazer engenharia reversa da ROM
principal não é tão útil. Às vezes, ele pode gerar uma bela arte, talvez fornecer mais alguns arquivos de
exemplo, mas não é a primeira opção ao fazer engenharia reversa de uma ROM DS para a maioria.

37
uma técnica bastante complicada, mas muito precisa e confiável. Ao lidar com jogos para
PC e em menor grau com alguns emuladores você pode observar quais arquivos estão
abertos e carregados durante a execução do jogo, mas isso nem sempre está disponível/
viável para os consoles. Existe o método menor de observar as chamadas do BIOS (o BIOS
geralmente usado para lidar com a compactação pode levar você diretamente ao local no
GBA) e você pode fazer coisas como procurar um campo de ponteiros (no GBA isso
geralmente significa uma lista de 08 com 3 bytes depois, pois o endereço GBA mais comum
tem o formato 08XXXXXX), o que pode ajudar.

1.6 Abstração
Certamente um tema digno de um documento por si só, a ideia principal aqui está
relacionada ao jargão anterior. Ao custo de não ser imediatamente acessível a todos
(ou neste caso ao computador em questão), você constrói um método pelo qual
interpreta algo em um formato compreensível para um alvo, neste caso geralmente o
console em questão que o traduz para um formato utilizável. Tal movimento
obviamente tem penalidades de velocidade, mas o bônus é que você pode usar um
método mais simples para armazenar, lidar e, com sorte, alterar o item escolhido
conforme necessário.
As linguagens de programação tratam disso, pois todas tentam se afastar de um
usuário que alimenta o computador com uma sequência de 1s e 0s. Um bom exemplo seria
comparar o GBA e o DS, pois, se você se lembrar, o GBA agrupa tudo em um arquivo onde o
DS pode explodir uma ROM em uma série de outros arquivos. Agora, se você deseja
adicionar uma seção de código ao GBA, você altera todas as referências a tudo após a seção
cujo tamanho está aumentando de acordo (um processo muito tedioso que ninguém faz)
ou adiciona ao final da ROM (ou algum outro espaço em branco). No DS, sua ferramenta de
reconstrução de ROM simplesmente adiciona o extra aos locais dos arquivos subsequentes
(e outros tamanhos, conforme necessário) e como os arquivos geralmente não estão
vinculados uns aos outros como um todo (obviamente, os arquivos podem funcionar juntos
de vez em quando), nada é problemático. . No entanto, quando comparado ao GBA, isso
significa que o DS terá que realizar uma etapa extra quando se trata de executar a ROM
para descobrir para onde apontar o comando de leitura. Muito parecido com uma teoria
unificada da física, existe um nível de abstração teórico, mas perfeito, no qual você poderia
inserir um valor inicial e executá-lo de acordo, mas assim como a física, você
ocasionalmente deseja realizar algum trabalho real, então interrompê-lo e possivelmente
simplificar/restringir as coisas para começar a fazer algo.

Relacionado a isso é que nem todos os dados que você vê em uma ROM serão usados nela.
Por exemplo, quaisquer nomes de arquivo contidos em subarquivos ou ocasionalmente até
mesmo os próprios arquivos podem ser completamente irrelevantes, assim como alguns dos
ponteiros/valores de tamanho. Geralmente, vale a pena conhecer e entender o que cada valor
pode significar e considerá-lo à medida que você edita os arquivos, a menos que você possa
provar comprovadamente que isso não importa.
Isso também se aplica ao contrário, com alguns desenvolvedores optando por codificar
valores em algum lugar, apesar de não ser necessário ou mesmo de ser tão bom do ponto
de vista da qualidade da programação (como um hacker de ROM, você pode ter que corrigir
vários bugs introduzidos dessa maneira); lembre-se de que os programadores de jogos
também são pessoas e não são estranhos ao hackear algo juntos e derrubar
para a rotina do almoço.
Se for necessário estabelecer uma regra prática, seria compreender o nível apenas

38
acima, o que você está tentando fazer tenderá a ser benéfico e essa lógica sustenta
grande parte do conteúdo deste documento.

1.7 Ferramentas do comércio continuação


A seguir listamos apenas alguns exemplos de ferramentas, pois geralmente há várias opções
para um programa realizar uma tarefa, alguns usos muito básicos e algumas capturas de tela
quando necessário. No caso de ferramentas grandes ou ferramentas específicas para áreas, o uso
adequado será abordado em outras partes deste documento, onde também pode haver outras
pequenas ferramentas para ajudar. O uso básico de programas para analisar sistemas de
arquivos relevantes já foi abordado e não será abordado aqui. Com exceção dos editores
hexadecimais pagos, alguns programas de áudio, a ferramenta de depuração/engenharia reversa
conhecida como IDA (uma grande exceção) e algumas das ferramentas de memória de tradução/
CAT, todos os programas cobertos são freeware, muitas vezes até de código aberto, e tudo pode
ser feito com programas de código aberto/freeware.

1.7.1 Editor hexadecimal

Como parte do projeto subjacente, este documento faz parte de vários editores hexadecimais que
foram testados e avaliados quanto à sua utilidade, de modo a criar uma lista restrita. A maioria
dos hackers de ROM terá vários à sua disposição, cada um voltado para tarefas diferentes. No
entanto, se você puder escolher um pago, obtenha as quatro sugestões de freeware e obtenha
uma ROM específica para hackear, a maioria das coisas pode ser feita com relativa facilidade.
Resumindo, um editor hexadecimal é um editor hexadecimal e todo o resto é muito extra que um
dia poderá tornar sua vida um pouco mais fácil. A GUI para a maioria deles é amplamente
personalizável, mas na maioria das vezes as imagens são aquelas do editor de estoque com
alguns menus exibidos conforme apropriado.
Os recursos que facilitam a vida dos hackers de ROM são

ˆOperações bit a bit

ˆLógica/operações booleanas (às vezes agrupadas com operações bit a bit)

ˆIpping de bytes

ˆPesquise e pesquise tudo

ˆPesquisar e substituir

ˆDistribuição hexadecimal

ˆOperações em áreas selecionadas (alguns editores operarão apenas em todo o


todo o arquivo)

ˆScripts

ˆSuporte de listagem de formato/estrutura

ˆJanelas de largura variável

ˆDesfazer refazer

ˆInserir

ˆValores de hash incluindo opções personalizadas

39
ˆDespejos de strings (ocasionalmente você pode querer apenas todas as strings de um jogo
mesmo que inseri-lo novamente seja uma dor sem as informações ao redor)

ˆSuporte para codificação de caracteres personalizada

ˆCompare arquivos (incluindo diferenças de tamanho/suporte de seção inserida)

Edição de disco bruto, edição de programa/memória, desmontagem de X86, decodificação


base64 e coisas semelhantes são outros recursos que um editor pode ser vendido como tendo
são ótimos, mas eles foram de uso limitado para hackers de ROM no passado, até mesmo a
edição de programa/memória é geralmente resolvido por programas especializados, como você
verá quando os cheats forem discutidos.

40
PagoOs editores freeware fornecem, de muitas maneiras, um substituto mais do que adequado
para as ferramentas comerciais, mas muitos ainda gostam das ofertas comerciais. Os dois
melhores são bastante caros e têm aproximadamente a mesma capacidade.

Oficina hexadecimalPágina inicial do Workshop Hex


Provavelmente o editor pago mais popular entre os hackers de ROM.

41
Editor 010página inicial do editor 010
Outro editor pago no mesmo nível do workshop hexadecimal

42
freewareAs ofertas de freeware aqui, ao contrário de algumas outras áreas da computação, não
estão no mesmo nível, mas com uma GUI ligeiramente diferente. No entanto, quando as
sugestões da categoria freeware são combinadas, obtém-se todas as funcionalidades das ofertas
comerciais.

Hexplorador GELADOPágina do SourceForge


Quase no nível em que você poderia incluí-lo como um substituto para as ofertas
comerciais (exceto pela falta de capacidade de ter vários arquivos abertos ao mesmo
tempo). Precisa de alguma configuração para que a GUI funcione bem, mas uma vez feita, é
adequada para uso como editor do dia a dia.

43
XVI32Pagina inicial
Ainda está sendo desenvolvido ativamente e está aqui principalmente porque apresenta uma
linguagem de script poderosa que pode realizar a maioria das tarefas que os editores freeware
pagos e funcionais usam um pouco mais depois disso, por ser uma verdadeira linguagem de
script.

44
Hexer minúsculoDownload de viagem de arquivo
Um editor descontinuado, mas com algumas características muito
impressionantes, iguais e às vezes até melhores que as ofertas comerciais.

45
HxDPagina inicial
Download de viagem de arquivo

Provavelmente o editor mais simples desta lista, mas é o editor freeware para
muitas pessoas.

46
Específico para hackear ROMTão maravilhosos quanto os editores, comerciais ou não, acima, eles
carecem de recursos como suporte de tabela de alto nível (a maioria dos acima suporta uma certa
quantidade de caracteres personalizados, mas nada verdadeiramente personalizado como o que
é visto em hackers), o que é bastante essencial para texto propósitos de hacking.

Cristaltile2Download de viagem de arquivo


Suporta muitos conjuntos de caracteres prontos para uso e, mais importante, suporta arquivos de
tabela.
Carece de manipulações booleanas junto com as operações hexadecimais padrão e
aparentemente fixadas em 16 bytes por linha.
Tem uma pesquisa relativa muito boa (talvez não tão amigável quanto monkey moore, mas
funciona e vai direto para pesquisa de 4 bytes/32 bits, bem como muitos outros recursos de
classificação de texto abordados posteriormente)
Possui busca por compressão (principalmente tipo 10 LZ e menor suporte para tipo 11
LZ e humano).
CRC 16 e 32 estão disponíveis e podem ser focados em uma seleção. Suporte ao sistema de
arquivos DS e visualização de cabeçalho, parte superior editor/visualizador de blocos, completo
ARM9 e ARM7 vistos no desmontador do DS
Suporte para alguns SDK e formatos comuns (formatos NARC, SDAT, NFTR, DS
2d, alguns formatos de arquivo gerais)

47
48
Windhex32Não deve ser confundido com o popular editor hexadecimal de grau forense
de disco winhex, que não está na lista paga devido à falta de recursos bit a bit e coisas
semelhantes (embora seja muito bom em análise forense de disco).
Página Romhacking.net
Excelente suporte para tabelas e textos (incluindo suporte para múltiplas mesas entre as quais você
pode alternar), alguns mapeamentos de memória específicos do SNES e editor de blocos SNES/NES.
Principalmente apenas um editor hexadecimal com capacidade de texto muito bom, com suporte de
tabela e algumas ferramentas para complementar isso. Falta suporte para desfazer e algumas opções de
GUI são um pouco estranhas, o que impede que seja uma substituição para HxD.

49
Dedo de ouro Página Romhacking.net Não deve ser confundida com o GBA as-
sembler Goldroad, a tradução comum do termo chinês para cheats ou a
tradução comum do termo chinês para pins de carrinho.
Suporte para 9 tabelas ao mesmo tempo, não vem com leitura ASCII como padrão,
então você terá que encontrar/criar uma. Ele apresenta algumas habilidades de edição de
tabela.
Embora não seja muito adequado para exibição de texto completo, é diferente da maioria
dos outros editores, pois não está necessariamente vinculado ao final da linha. Isso o torna uma
ótima opção para edição de texto sem a necessidade de criar uma ferramenta personalizada ou
descartar o texto e tentar fazer algo em um editor de texto mais convencional.

50
TraduçãoPágina Romhacking.net Novo fork/
versão Tópico do fórum Romhacking.net
Para muitos, o editor hexadecimal de hacking de ROM padrão já existe há muito tempo
(embora o Crystaltile2 esteja um pouco além).
Ajuste do tamanho da janela hexadecimal possível através do editor, mas não do
agrupamento. Salto incluindo suporte de salto relativo disponível e pode manipular bits.
Pode pesquisar usando tabelas e suporte de pesquisa relativa está disponível.
Não há suporte para desfazer, mas uma boa opção somente leitura pressionando tab.

51
1.7.2 Editor de blocos

Embora você possa editar qualquer coisa com um editor hexadecimal, fica muito complexo fazer
qualquer coisa além da edição mais básica usando um e a primeira coisa a mudar para uma
ferramenta de nível superior são os gráficos 2D que recebem um editor de blocos. Existem vários
disponíveis, embora apenas alguns sejam focados aqui. Vários kits de desenvolvimento de
homebrew também possuem alguns programas interessantes voltados para a conversão de
formatos comuns para formatos um tanto estranhos usados por dispositivos portáteis e outros
consoles.

Cristaltile2Download de viagem de arquivo


Apresenta um dos melhores editores de blocos disponíveis (suporte até mesmo para
formatos de exibição de hardware personalizados e um editor de blocos capaz de ser configurado
para larguras arbitrárias) e tem suporte para vários formatos de imagem DS no próprio sistema
de arquivos DS. Exportar e importar imagens também é possível.

52
TileEd2002Pagina inicial
Download de viagem de arquivo

Um editor vintage do GBA, mas como o hardware do GBA e do DS são basicamente os


mesmos, ele pode ir longe. Ele pode fazer blocos de tamanho básico nos dois formatos de
hardware mais comuns e tem uma boa opção de paleta (uma cor por vez, se você quiser),
algo que falta em alguns outros e, portanto, é útil ao tentar descobrir quanto de
preenchimento que um formato de paleta usa. Não tem suporte para tamanhos de blocos
altamente personalizados (ele travará se você tentar imagens no formato GBA), embora
suporte o carregamento de savestates para obter paletas diretamente deles. Observe
também o uso de imagens para exibir texto em oposição a um mecanismo de renderização
de texto; tal coisa é muito comum em jogos de quebra-cabeça menores onde não há muita
necessidade de texto real, para uso em texto estilizado e em menus em geral.

Também a paleta mantida no GBA.

53
TelhaGGDPágina do Github
Baixar Romhacking.net
Embora os dois acima devam servir para a maioria dos propósitos de edição, este programa
tem suporte extremamente personalizável, o que significa que a maioria dos formatos de
hardware concebíveis devem ser cobertos (de 1 a 32bpp com suporte big e little endian) e, de
certa forma, tem uma interface de usuário um pouco melhor do que o crystaltile2. Ao contrário
dos outros dois, não há capacidade de edição incorporada no programa, mas há exportação e as
informações podem ser usadas para direcionar um editor de outro programa.

54
1.7.3 Planilha e linha de comando
A seguir estão algumas ferramentas básicas que podem ser usadas para ajudar ao hackear ROM quando
as ferramentas existentes são insuficientes e antes/em vez de pular para a programação de uma
ferramenta específica de jogo/formato.

Uso gratuitoPágina inicial do O ce suite


Página de uso/ajuda do Calc
Calc é o programa de planilhas gratuito e suporta hexadecimal de certa forma.
Certamente não substitui uma linguagem de programação totalmente desenvolvida,
mas provou ser bastante valiosa ao criar scripts rápidos e sujos ou formatos de
engenharia reversa.
Existem sete operações principais que podem ser realizadas além da adição,
subtração e multiplicação básicas.

ColandoPelo menos um de seus editores hexadecimais deve ter uma opção de exportação de
texto que, quando você definir a quantidade apropriada de colunas, possa exportar uma lista de
texto hexadecimal (efetivamente criando uma matriz) e igualmente uma opção de pesquisa
deverá ser capaz de exportar os resultados . De qualquer forma, você precisará colar isso na
planilha, que em sua maior parte é bastante intuitiva e automatizada, mas ocasionalmente você
terá que importar como uma largura fixa ou como um conjunto delimitado de texto (geralmente
um espaço ou tabulação fazendo a delimitação). Mesclar células (digamos, para um valor de 32
bits distribuído por 2 colunas onde você não deseja alterar o comportamento do seu editor) pode
ser feito, mas a maneira rápida e fácil é colar as colunas em um editor de texto e pesquisar e
substituir o valor delimitador .
Se for necessário, é melhor abusar de uma função matemática e multiplicar
pelo valor hexadecimal apropriado (65025 e 255 para mudar o equivalente
hexadecimal em 2 e 1 bytes, respectivamente) e vice-versa usando mod, oor e
outras funções.
As operações bit a bit, booleanas e ipping são melhor executadas em um editor hexadecimal
e, com a opção, você também desejará importar como texto (todas as funções ainda funcionarão),
pois os números têm o hábito de serem analisados em alguma coisa.

PreencherUm comando/opção básico, mas que nem todo mundo conhece. No canto inferior
direito de uma determinada célula, quando selecionada, haverá um pequeno quadrado no qual
você pode clicar e segurar antes de arrastar para baixo ou para cima (ou transversalmente) e as
células terão o conteúdo replicado nas células cobertas pelo intervalo de arrastar. Se você tiver
um padrão, ele tenderá a ser continuado e se você tiver uma fórmula que tenderá a ser
continuada, mas o conteúdo da célula estiver alinhado com a mesma coisa (se o original era c4 -
c3, o próximo provavelmente será c5-c4), não é infalível e algumas das coisas mais avançadas que
você deseja fazer podem ser difíceis de executar, mas funcionou com muito mais frequência do
que não.

Dec2hex e hex2decEmbora calc suporte hexadecimal e você possa


combinar itens em uma função, geralmente é mais fácil ter os valores
hexadecimais iniciais, os equivalentes decimais e a conversão novamente.
No calc os comandos são dec2hex para converter de decimal para hexadecimal e
hex2dec para fazer o oposto.

55
DiferençasÉ verdade que isso é mais uma técnica do que uma função real, mas é o
conceito mais usado que realmente altera/gera dados. Se você tiver um campo de
ponteiros (abordado posteriormente, mas a ideia geral é um valor que contém a localização
de outro valor) e os resultados de uma pesquisa por algo que indica o início de um valor,
você pode precisar que eles se alinhem, mas pode não ser facilmente aparente. Na maioria
das vezes, os valores dos ponteiros mudam entre eles (se os dados estiverem a uma
distância fixa, não há necessidade de incorrer na penalidade de tempo para procurar o
ponteiro e talvez fazer algumas operações sobre ele) e isso pode revelar coisas. Para fazer
isso, basta pegar o próximo valor do ponteiro e subtrair o atual. O resultado será a
diferença e se você fizer isso para um conjunto de ponteiros desconhecido, poderá
facilmente combinar as coisas e determinar se elas estão fora de um determinado valor.
Você pode fazer algo semelhante ao contrário para gerar novos comprimentos de arquivo
para economizar o cálculo e a alteração manual de uma tabela de ponteiros inteira, mas
neste ponto provavelmente é melhor construir um programa adequado.

Função de arredondamentoComo mencionado, os dados tendem a ser encontrados em


8,16 ou 32 bits ou algum outro intervalo (observou-se que vários formatos de arquivo no DS
se alinham a um endereço que é múltiplo de 100h). TETO é a função principal aqui, embora
lembre-se de que é necessária uma entrada decimal para o número ser arredondado.
MROUND também pode ser usado rapidamente, mas lembre-se de que também pode
arredondar para baixo, o que seria ruim, então é melhor adicionar uma quantia se for usá-
la.

Função de classificaçãoNão tão útil no hacking de ROM quanto no uso diário é a capacidade
de classificar por um valor (seja na ordem das letras ou na ordem dos números)

Consultas verdadeiro/falso e dados analisadosOs humanos não são tão bons em


reconhecer e interpretar números rapidamente, mas belos quadrados coloridos são uma
questão diferente e bastante possíveis em várias planilhas. Ainda assim, se você precisar
usar os números 1 e 0, são mais fáceis de contabilizar do que valores longos e planilhas
podem ajudar com isso. O método básico usa o comando IF e normalmente é formado IF
(algum valor/célula, igual a/é menor que/é maior que, então FALSO/VERDADEIRO), mas
excluindo conforme apropriado.

crackerscrap.com (clique em downloads)


Cortador de arquivos

Uso: lecutter le.in comprimento le.out <-s start>


Como o Windows não tem a capacidade de dividir arquivos da linha de comando você
tem esse programa. Uma vez que você tenha sua lista de endereços você poderá usá-la para
gerar um arquivo em lote com os endereços como argumentos e embora seja específico para
aquela encarnação do arquivo (não é um problema se você apenas precisar que todos dividam o
arquivo como vem da ROM) você acabou de construir um descompactador de arquivos. Se
precisar combiná-lo com uma ferramenta de descompactação, você também pode fazer isso em
apenas algumas etapas extras no estágio do arquivo em lote.
A entrada é decimal por padrão, mas hexadecimal pode ser usado se você colocar 0x na frente dos
números relevantes.

GetmyhexBaixar Romhacking.net
Download de viagem de arquivo

56
Uma ferramenta simples para obter a leitura hexadecimal de várias seções curtas de
texto.

Radar(2)Página inicial do projeto


Agora substituindo o programa romulano apresentado nas edições anteriores. É uma
linguagem de script, mas não exatamente, destina-se a fins de engenharia reversa, embora
o foco esteja mais no PC e plataformas relacionadas.

1.7.4 Compressão
A compactação já foi a ruína dos hackers de ROM, mas ficou muito mais fácil de
manusear no DS e também não é tão ruim para o GBA. Neste ponto, pode até ter sido
reduzido a uma simples etapa extra usando uma ferramenta conhecida ao extrair algo
de uma ROM ou colocá-la de volta, mas não muito mais.

DSdempPágina do Github
Suporta compactação e descompactação de formatos LZSS vistos no GBA
e DS (tipo 10, 11, 40 e binário/BLZ), RLE e Hu man.

Compressores GBA DS da CueDownload do Filetrip do


tópico GBAtemp
Também suporta compactação e descompactação de formatos LZSS vistos no
GBA e DS (tipo 10, 11, 40 e binário/BLZ), RLE e Hu man, bem como LZE (usado em
títulos de arco Luminous).

Cristaltile2Download de viagem de arquivo


Tem uma medida de suporte de compressão embutido no gerenciador de arquivos
(tipo 10, tipo 11, descompressão binária suporta alguns RLE e talvez Hu man) e suporte
para algumas opções de busca de compressão. Um pouco complicado, mas você pode
aprendê-los e tocá-los bem o suficiente.

Específico de GBAO BIOS e, em menor grau, a compactação LZ geral podem ser


pesquisados, pois fazem alterações bastante distintas no hexadecimal. Existem também
algumas ferramentas voltadas para lidar diretamente com imagens de GBA ROM e
solucionar problemas decorrentes da falta de um sistema de arquivos.

GBA Multi Descompressorbaixar romhacking.net


Podem ser direcionados e alimentados logs SWI do VBA (SWI é o nome das chamadas
do BIOS e, como mencionado, o BIOS no GBA e DS apresenta funções de descompressão).

Avanço NLZ-GBAbaixar romhacking.net


Aparentemente um editor gráfico, mas com suporte e pesquisa de
compactação.

unLZ-GBAbaixar romhacking.net
Uma ferramenta um pouco mais antiga, mas uma das poucas capazes de pesquisar por compactação.

57
Lz77restructor2Download de viagem de arquivo
Uma ferramenta mais recente com recursos de extração e inserção/edição de gráficos e
texto, além da capacidade de pesquisar compactação e restringir essas pesquisas.

GBADecmpbaixar romhacking.net
Uma ferramenta simples para descompactar e recompactar dados de/para um local conhecido.

Cristaltile2Link de viagem de arquivo


Suporta tipo 10 LZ, que é igual à compactação GBA BIOS LZ. Também oferece
suporte à pesquisa de compactação.

GBACrusherLink de viagem de arquivo


Uma ferramenta para compactar arquivos usando métodos de compactação compatíveis com GBA
BIOS, como compactações Hu man de 8 e 4 bits, diferencial, codificação de comprimento de execução,
LZ (tipo 10) para VRAM e para WRAM. Versão de linha de comando incluída.

1.7.5 Música
Ferramentas específicas de formato e console serão abordadas nas seções relevantes. No
entanto, é útil ter algumas ferramentas de alto nível.

Edição de ondas - AudacityPágina do Audacity Sourceforge


Importa a maioria das variações de wave, PCM e ADPCM e edição de recursos, alguma
capacidade de mixagem e filtros.

Formato do rastreador - Open MPTAbra a página inicial do MPT


Um programa bastante avançado com suporte para reprodução, edição e exportação
de vários formatos de rastreadores. Deveria ter uma medida de suporte DLS, embora possa
ser problemático. Anteriormente conhecido como ModPlug Tracker, que é como alguns
tutoriais escritos antes da renomeação se referirão a ele.

Midi específico - Anvil StudioPágina inicial do estúdio Anvil


Um programa freeware que muitos dos que editam áudio para o GBA gostam de usar
usar.

58
Edição geral - estúdio AwavePágina inicial do estúdio Awave
Um software amplamente pago que pode ajudar a converter arquivos e lidar com
implementações nada perfeitas de alguns formatos de áudio que várias ferramentas específicas
de jogos podem produzir. Suporte Midi e DLS está disponível.

1.7.6 ASM/Montagem
O uso costuma ser tão extenso quanto a própria montagem, mas mesmo assim algumas ferramentas

Emuladores (grau de depuração/hacking)A seguir está uma lista de emuladores que


possuem funções de depuração de um grau que é útil para hackear ROM sem recorrer
a métodos abstratos de depuração.

DShá vários emuladores disponíveis, mas apenas três têm suporte real
para imagens ROM comerciais e depuração.
Desmume
Desmume página de download
As versões desenvolvedor e regular apresentam visualizadores de memória, desmontadores,
VRAM, OAM e outros visualizadores. Também oferece suporte para depuração do tipo GDB e LUA,
como visto em emuladores focados em hackers de alto nível, como FCEUX. Suas opções de
criação de cheats também estão bastante desenvolvidas hoje em dia.
não$gba
página de versão do desenvolvedor no$gba
A versão para jogos do no$gba apresenta poucos recursos de depuração (embora existam
alguns editores de memória que fazem interface com ele), mas há uma versão de depuração, que
agora pode ser baixada gratuitamente, disponível com extensas capacidades de depuração.
Observe que as imagens ROM podem precisar ter sua área segura criptografada para serem
executadas, mas o eNDryptS Advanced deve ser capaz de lidar com isso.
Ideias
Página inicial do iDeaS
Embora um pouco menos desenvolvido que o Desmume na frente da ROM
comercial, ele suporta algo mais próximo dos pontos de interrupção, como visto no
no$gba e nos emuladores GBA como padrão. Os logs de função e o comando executar
para seleção são mais proeminentes na seção de depuração e não são um substituto
completo para no$gba.

GBAO GBA tem uma coleção um pouco maior e com mais recursos de emuladores
de nível de depuração.
VBA-SDL-h
Página inicial do VBA-SDL-h
Página de compartilhamento VBA-SDL-
h Download do Filetrip
Versão do popular emulador GBA retrabalhado para adicionar suporte de depuração, como a
capacidade de definir pontos de interrupção.
VBA-h
Download de viagem de arquivo

O VBA-sdl-h acima é voltado para hacking de assembly e carece de uma


GUI, onde o VBA-h é voltado para visualização de memória e criação de
cheats.

59
não$gba
página de versão do desenvolvedor no$gba
Junto com o DS, o GBA é bem suportado nas edições de depuração do
no$gba.
BoicoteAvanço
Download de viagem de arquivo

Alguns preferem isso ao VBA-SDL-h e certamente é um pouco mais feliz com a GUI. Pode
demorar um pouco mais para que algumas imagens ROM funcionem e alguns dos recursos não
são tão extensos, mas possuem pontos de interrupção que contam muito.

DesmontadoresDesmontadores são ferramentas que podem ser direcionadas para transformar


código de máquina e informações relacionadas novamente em código assembly. Eles são
bastante burros em sua maior parte e sua produção tenderá a não ser capaz de ser remontada
sem alguma modificação por um ser humano, no entanto, reserve um tempo para configurá-los
adequadamente para a tarefa que você deseja e eles são inestimáveis.

GBA e DSOs emuladores geralmente fornecem alguma desmontagem e, como sabem em


que modo o processador está sendo executado no momento e possuem vários visualizadores de
memória (vídeo, normal ou outro), eles podem ser ainda mais úteis, mas existem ferramentas de
desmontagem independentes. Observe que o DS apresenta um formato de compactação
personalizado, embora amplamente suportado, que seus binários podem usar e usam.

ˆBaixar Crystaltile2Filetrip. Possui um desmontador básico para ARM9 e


ARM7 integrado ao programa e capacidade de interface com outros
programas.

ˆPágina inicial do NDSDIS2 NDSDSI2 Download do Filetrip. Um autônomo básico


desmontador voltado para o DS.

60
Traduzido do Inglês para o Português - www.onlinedoctranslator.com

ˆarm-eabi-objdump Parte das cadeias de ferramentas devkitpro/GNU. Não é tão útil em


Imagens ROM/apenas para arquivos únicos e não suporta compactação, mas deve
funcionar bem se você conseguir algo em que possa cravar os dentes. Se estiver
lidando com sistemas mais novos, olhar para esses tipos de conjuntos de
ferramentas lhe dará algo.

ˆIDA Página inicial do IDA Software pago, a edição freeware está bastante bloqueada
embora (basicamente X86 ou nada). Esta é a ferramenta de desmontagem/depuração de
uso geral e uma para a qual todos os novos desmontadores e plug-ins/ferramentas de
depuração para várias plataformas tendem a ser escritos.

MontadoresOs processadores no GBA e no DS são bastante semelhantes, então geralmente você


pode alternar de um para outro. Os desenvolvedores no$gba e crystaltile2 apresentam edição de
instruções únicas e o IDA também possui algumas habilidades nessa área. Também tendendo a
ter 16 ou 32 bits de comprimento, muitas vezes você pode editar as instruções manualmente.
Isso se concentrará mais em montadores de nível hacker, principalmente porque os montadores
de nível de programação têm ótimos recursos, como a capacidade de criar variáveis/referências
legíveis por humanos e coisas semelhantes por padrão, onde os de nível hacker tendem a exigir
mais entrada bruta (embora armips tenha muitos sutilezas aqui).
O GBA ARM7 e o DS ARM9 são muito semelhantes e as instruções adicionadas
para o DS ARM9 (todas as três que não são tão comumente usadas) você pode viver
perigosamente e alternar entre elas. Como as versões anteriores deste documento, o
ARM cresceu ainda mais no mundo (eles basicamente possuem todos os telefones
celulares e tablets), portanto, se você estiver usando ferramentas mais recentes ou
não sugeridas aqui, certifique-se de usar os modos corretos .
Novamente, a montagem será abordada posteriormente (incluindo alguns links para as
especificações oficiais), mas enquanto isso, imrannazar.com ARM Opcode Map tem uma lista
completa em um formato mais legível.
axilas
página inicial do programa de
download romhacking.net
Um relativamente novo no mundo do assembler de hacking de ROM (o primeiro
lançamento foi em setembro de 2009). Voltado para hackear GBA e DS ROM (também MIPS
R3000 para PS1) tem a opção de usar macros, rótulos (globais e locais), pode carregar
tabelas para poder carregar strings customizadas e algo mais próximo da família C/C++
matemática do que o montador médio. Devido à forma como funciona, também possui um
suporte muito bom para sobreposições.
ARMeabitoolchain
ARMeabi lida com o assembler subjacente para as cadeias de ferramentas de
desenvolvimento GNU (embora para o material específico do GBA/DS você queira dar uma
olhada no devkitpro).
Como parte de um projeto de hacking anterior, um kit foi feito para montar pequenos
fragmentos de arquivos em coisas que poderiam ser colocadas na ROM. Dois métodos principais
destinados a hackear aqui
kit ARM ASM do cracker crackerscrap.com
(clique em projetos) gbatemp download
(versão mais antiga) Garmy

baixar romhacking.net
Para o GBA você também pode gostar deste script do Dwedit.

61
estrada do ouro

baixar romhacking.net
Por um bom tempo, o principal montador disponível para o GBA no que diz respeito ao
hacking de ROM. Não é a ferramenta mais limpa que existe, mas pode fazer as coisas e,
para algumas axilas, substituí-la, mas as ferramentas acima são agora o método preferido.

militar
Página inicial do projeto
Escrito em lisp e voltado mais para programação homebrew, é mais um montador
para a família de processadores ARM.
braço sdt
É mais um montador de programação e apresenta algumas funções muito
interessantes para ajudar no desenvolvimento de programas. Muitos dos emuladores
homebrew GBA, e algumas versões do moonshell no DS, foram codificados usando isso em
preferência às cadeias de ferramentas GNU, algo que tornou a manutenção, bifurcação e
contribuições de terceiros mais difíceis em alguns casos.
FASMARM
Um plugin ARM para o montador FASM X86 e x86-64. Você pode encontrar
FASMARM aqui.

62
1.8 Conceitos básicos de formato de arquivo

Grande parte do restante deste guia gira em torno da capacidade de extrair formatos de
arquivos de peças e será abordado e relacionado um pouco ao hardware subjacente e aos
conceitos nos quais a área é baseada, mas há coisas a serem observadas ao desmontar um
arquivo .

Identificadorestambém conhecidos como selos mágicos, são pequenos comprimentos geralmente


Texto ASCII ou hexadecimal que seja exclusivo para o início de um determinado arquivo
formato, seção do mesmo ou comando.

arquivos contidos em um arquivo


Comprimentosna maioria das vezes o comprimento de um arquivo ou o

formato é muito importante ter. Não precisa estar presente se você puder calcular os
comprimentos de outra forma.

Ponteirosbem como os comprimentos, é útil ter as localizações dos arquivos, assim como
as subseções de um formato de arquivo complexo e estas tenderão a ter valores que
indicam a localização delas (aponte se desejar).

Cabeçalhoo início (ou às vezes o fim) de um arquivo que geralmente contém informações sobre
o resto do arquivo.

Fica muito mais complexo, específico para uma área e existem vários métodos e armadilhas,
alguns dos quais já foram mencionados (coisas como alinhamento de palavras), mas se você
puder encontrar um ou mais dos itens acima e documentá-los, geralmente estará bem. sua
maneira de fazer engenharia reversa em um formato de arquivo.
Também para dar um exemplo de por que seu editor hexadecimal desejará alterar o
tamanho da janela (de preferência quando maximizada e com um simples clique e arrastar
o mouse)

63
Apenas abrindo o arquivo e depois de um rápido redimensionamento e uma pequena exclusão

64
2 Gráficos
Seja copiando-os ou desejando editá-los, o campo do hacking gráfico é, e tem sido,
uma grande parte do hacking de ROM. Geralmente há uma linha que pode ser traçada
entre imagens 2D e 3D, pois elas tendem a ter hardware diferente por baixo de tudo,
no entanto, ambas podem ser usadas em conjunto para influenciar e aumentar a
outra; imagens isométricas e sprites usados para gerar uma visão 3D em primeira
pessoa não são novidade, mas muitos ficam surpresos ao saber que New Super Mario
Brothers no DS usou modelos 3D em vez de sprites para fazer um jogo de plataforma
2D bastante tradicional. O hardware 3D do DS é usado de várias maneiras que podem
não estar imediatamente alinhadas com a percepção geral do 3D.

Conceitos gráficos básicos


Em jogos de computador e na maioria das mídias visuais ou outras mídias sensoriais, até
encontrarmos coisas como obras abstratas (observe um conceito um tanto diferente de
abstração, como visto em outras partes deste documento), há dois conceitos que se
alimentam no trabalho. 1) é a suspensão da descrença e 2) é fazer com que o público use a
imaginação. 2) é o assunto de qualquer bom tutorial artístico, mas enquanto isso, pense em
como uma câmera pode se mover e usar algumas dicas de áudio em vez de tentar exibir
violência ou um bom livro gastará muito tempo definindo uma cena e descrevendo coisas
ou de outra forma descrever situações atraentes para os humanos. Como é muito
complicado 2) não é realmente algo que possa ser abordado aqui, a não ser dizer que vale a
pena aprender, mesmo que você seja principalmente uma pessoa técnica, tanto em geral
quanto para ajudar quando você tenta adivinhar quais métodos irão ser usado para obter
um efeito. 1), no entanto, é uma disciplina muito mais científica, embora para abordá-la em
profundidade teríamos que nos aprofundar em vários aspectos da biologia e da psicologia,
para que seja abordada. Para fazer uma imagem parecer real, supondo que você queira
esse tipo de coisa3, isto

1. Tem que replicar cores suficientes que o olho humano não consegue perceber
(normalmente é considerado cerca de 24 bits, também conhecido como 16,7 milhões de
cores, embora aqueles que editam imagens gostem de ir para 32 bits (4294967296
valores) para ter mais informações para editar e evitar que as cores pulem de uma para
outra) e embora a tela do GBA e do DS seja de 16 bits, ela pode dar conta do recado se
você fizer direito.

2. Tem que ter informações suficientes, isso normalmente significa ter um ponto e
o ponto próximo a ele não serem distinguíveis um do outro (se você puder ver
os pontos que compõem a imagem média, algo deu errado). Agora, existem
maneiras de contornar isso, pois o olho humano é melhor em brilho
(luminância) do que em cores e existe algo como ampliação vazia, onde você
pode ampliar/ampliar coisas, mas nenhuma informação nova real será obtida,
para não mencionar os humanos não veem ultravioleta, então tende a não

3Origina-se da robótica, mas existe um conceito conhecido como vale misterioso, que pode ser
resumido. À medida que um robô ganha mais qualidades humanas, os humanos reagirão mais
favoravelmente a ele em um nível emocional, até que um ponto de inflexão seja alcançado onde o robô
é bastante semelhante a um humano, mas não exatamente, e os humanos começarão a reagir de forma
menos favorável, ou mesmo negativa, em um nível emocional, até que o robô se torne
consideravelmente mais realista (o que não é pouca coisa). Nesse ponto, a reação emocional volta-se
para o positivo. A ideia tem paralelos na mídia e em outras tentativas de emular um ser humano ou algo
que é visto no mundo real. Para este fim, optar pelo ultra-realismo nem sempre é a melhor aposta.

65
para ser replicado em imagens. Na verdade, grande parte da compactação com perdas tem a tarefa de
fazer exatamente isso.

A alternativa aos pixels reais e à renderização 3D em pixels é a chamada imagem vetorial. As


imagens vetoriais são nomeadas em homenagem ao termo matemático/gráfico chamado vetores
e definem imagens inteiramente matematicamente (por exemplo, desenhe um quadrado, a
espessura da linha 3 com um comprimento de 4 no ponto 0,14 pode ser dimensionada para
qualquer tamanho com simples multiplicação). As fontes em computadores o usam há anos e os
consoles recentemente entraram nele (as versões de combate mais recentes de Street Fighter são
conhecidas por isso), mas é muito raro ver o resultado final de um jogo de console, muito menos
de um título portátil. Ainda assim, se você quiser, existem programas como o Inkscape que você
pode experimentar e tentar renderizar pixel art como imagens vetoriais é uma atividade bastante
popular em certos círculos.

2.0.1 Aliases
A maioria das telas do mundo (e no que diz respeito aos jogos é principalmente apenas o
Vectrex que difere aqui) usa uma grade de pixels que pode ser definida individualmente em
várias cores para exibir imagens. Renderizar isso significa que uma linha bem definida pode
aparecer como uma sequência de alguns pixels e depois parecer deslocar um pixel e depois
outra sequência. O olho humano é bastante hábil em captar isso e, ao contrário de outros
conceitos em vídeo e gráficos, mesmo quando não treinado para isso (veja o exemplo
abaixo), foram desenvolvidas técnicas (conhecidas como anti-aliasing) para diminuir o
efeito.
Exemplo (pode ser necessário aumentar um pouco o zoom)

Isso também é um problema quando você pega uma imagem que foi feita em um tamanho e
a amplia, ou às vezes quando você a reduz, para algo que não seja uma simples metade (ou um
quarto ou assim por diante) do tamanho do original, além que embora o dimensionamento de
imagens não vetoriais tenha várias armadilhas potenciais, faça-o com moderação ou, melhor
ainda, não o faça.

2.0.2 Halo
Relacionado de certa forma ao alias acima, o alias e as técnicas para evitá-lo podem causar
problemas. Aqui, ao tentar selecionar apenas o contorno de um item em um fundo
complexo, ele pode ser prejudicado pelo anti-aliasing, que tem o hábito de causar uma leve
fusão/suavização de cores e transições, como resultado, um contorno colorido pode
aparecer ao redor dele, o que não parece muito diferente de uma auréola.

66
Esta é uma das razões pelas quais folhas de sprites e coisas semelhantes geralmente vêm
como uma seleção de sprites em um fundo rosa choque ou verde limão, o que diminui os
efeitos de fusão.

2.0.3 Profundidade de bits

Em imagens gerais significa uma coisa: quantos bits são atribuídos às cores, algo que
foi abordado na introdução desta seção, mas em imagens de console 2D significa qual
número é atribuído para representar cada pixel com valores típicos sendo 4 e 8,
embora 1 e 2 sejam vistos com bastante frequência em vários sistemas, incluindo GBA
e DS. Agora, isso não significa cores de 4 e 8 bits, mas que você pode selecionar entre
uma variedade de cores de uma seleção pré-fabricada composta por cores de 16 bits.
Posteriormente, é abordado um conceito conhecido como endereçamento setorial,
que funciona com base em um princípio relacionado.

2.1 Paletas e cores


Embora o GBA e o DS sejam capazes de cores de 16 bits (bem, 15 bits), você geralmente não tem a capacidade
de definir qualquer número de cores de 16 bits para usar em uma determinada imagem (lembre-se que os
blocos são como pintar por números e você só pode ter 4 bits, também conhecidos como 16 cores de uma vez
ou 8 bits, também conhecidos como 256 cores de uma vez).

2.1.1 Cores GBA (15 bits)


Existe um recurso não documentado no GBA (e no modo GBA do DS) que
troca o verde e o azul, mas não é tão comumente usado.
Diz-se que o GBA é uma tela de 16 bits, mas como existem três cores usadas para
formar outras, cada valor de 16 bits é na verdade 15, com o 16º bit desperdiçado.
Os bits 0 a 4 lidam com o vermelho
Os bits 5 a 9 lidam com o verde Os
bits 10 a 14 lidam com o azul
Isto permite 32 intensidades (considere um número de 5 bits e os números mais altos são
mais intensos e os mais baixos ficam mais próximos do preto4).
Isso também significa que, dependendo de como você olha para isso, o GBA/DS (e o
SNES) usa vídeo BGR em vez da notação RGB padrão usada em quase todos os outros
lugares (naturalmente, com a impressão usando cores primárias diferentes para iluminar,
ela usa uma configuração de cores diferente que geralmente éCeuMagenteSamarelo preto
K portanto, sua impressora colorida geralmente possui quatro cartuchos ou monitores de
nível de tinta). O outro método de observação geralmente entra em ação quando o vídeo
está envolvido e é conhecido como yuv (que também leva ao YV12), mas isso será
mencionado mais tarde e não tem efeito em nenhuma das imagens 2D e 2D padrão usadas
no GBA ou DS.
4A faixa inferior até pelo menos 10 casas decimais nas primeiras telas do GBA, e em alguns casos nas
posteriores, não é tão boa, então os desenvolvedores muitas vezes aumentam manualmente o contraste
ou o brilho de seus jogos. Isso não funcionou bem quando o GBA SP chegou e que apresentava luz
frontal e, posteriormente, luz de fundo, como padrão. Para isso diversas pessoas hackearam e
continuam hackeando jogos GBA para melhorar as cores ou, no caso de jogos com originais no SNES
(também usa um modelo de cores BGR) e afins, portar cores dos originais. Deve-se notar que Donkey
Kong Country na verdade mudou muito mais e reduziu alguns sprites, o que significa que não é um
simples hack restaurá-lo.

67
Na maioria das operações o DS e o GBA fazem uma paleta de várias cores usando o
método acima e as imagens se referem a isso para gerar as cores. Se você precisar
transformá-lo em um valor de cor de 32 bits, digamos para notação de cores HTML, na
maioria das vezes ele é diretamente interpolado (multiplique por 7,96875 que é 255
dividido por 32) sem correção, exceto talvez por um arredondamento (isso pode variar
entre implementações), e como a maioria das telas não são calibradas corretamente e as
telas do GBA/DS não são excelentes para começar, ele funciona bem o suficiente.
Também deve ser observado que o DS possui uma seção mestre de brilho logo
antes da imagem ser exibida e hardware de captura opcional que altera a forma como
uma imagem é exibida e isso é um acréscimo a alguns dos recursos extras
encomendados ao GBA e DS que será abordado mais tarde.

2.2 Azulejos
Embora você possa desenhar uma imagem inteira na tela de uma só vez (muitos jogos de DS são
grandes fãs disso e efetivamente fazem um bloco de 256 de largura por 192 de altura, necessitando de
um editor de blocos capaz de lidar com isso, um truque que muitos jogos legados não são capazes de
fazer). ) a maioria dos gráficos 2D é construída a partir de pequenos blocos de construção conhecidos
como blocos. Normalmente, esses blocos têm 8 por 8 ou 16 por 16 pixels, embora as fontes de texto e as
texturas 3D, bem como os blocos de tela inteira mencionados anteriormente, gostem de quebrar a
forma aqui. A maneira simples de pensar sobre eles é considerá-los versões muito chatas (graças aos
pixels quadrados) de uma imagem pintada por números, com os números sendo procurados em uma
paleta. Embora a maioria das pessoas nunca precise mexer nos gráficos com um editor hexadecimal, é
necessária uma apreciação de como o hardware funciona para fazer engenharia reversa de alguns dos
formatos mais complexos. Da mesma forma, para obter uma apreciação dos mecanismos de animação/
manuseio, aprender sobre os métodos pelos quais os blocos e as paletas operam é praticamente
obrigatório.

2.2.1 1Bpp
Tecnicamente, é um método de compactação (o hardware de tela/vídeo em si não exibe o
modo em nenhum sentido real), mas é um caso especial, pois é tão simples que um editor
básico de blocos pode lidar com ele e pode ser editado no local sem problema como de fato
o Crystaltile2 faz, para esse fim ele está aqui e não mais tarde, quando a compressão for
discutida. A idéia é que se você tiver uma fonte em preto e branco ou alguma outra imagem
de duas cores a cada quatro bits, o comprimento mínimo de um pixel que o hardware
aceita será de fato um ou outro, permitindo compactar a imagem em 1 bit por pixel.
Embora não seja obrigatório para os desenvolvedores usá-lo ao lidar com imagens de
1bpp, o BIOS do GBA e do DS, na verdade, carrega um método de descompactação no
SWI10h conhecido como BitUnPack.

2.2.2 4 Bpp
O carro-chefe do GBA e uma boa parte do DS. Trazendo de volta o ícone do Yakuman DS. A
seleção das formigas em marcha é a seção visualizada no editor hexadecimal, que é como
está na ROM original (certos editores hexadecimais podem fazer ip nibbles, mas isso não foi
feito aqui). Como você pode ver, cada nibble procura o valor de uma única cor (uma de 16),
que pode ser qualquer coisa no formato de 15 bits que o GBA e o DS podem usar. Da
mesma forma, existem 32 paletas, cada uma com a opção de 16 cores entre as quais o jogo
pode alternar em tempo de execução. Embora não seja

68
a única animação colorida possível (a paleta também pode ser editada em tempo de execução)
um desenvolvedor pode usar essas paletas múltiplas para alterar a aparência dos itens dentro do
jogo e se você vir a opção de alterar, digamos, no início de uma batalha (avançar guerras guerra
room é bom para isso) ou mesmo em tempo de execução, então é quase certo que você esteja
olhando para isso.

Paleta

Como podem imaginar o fundo não é cor-de-rosa no jogo real e isto acontece porque a
primeira cor numa paleta é tratada como se fosse transparente independentemente do que
seja (embora na prática seja bastante inútil tendo em conta a forma como o ecrã funciona
permite uma gama completa de cores sem a perda de uma única cor).

2.2.3 8Bpp
Apesar de disponível e bem utilizado no GBA ele realmente começou a ser utilizado no
DS.
Aqui cada entrada de paleta tem 8 bits e duas paletas de 256 cores estão
disponíveis, embora apenas uma para cada modo (BG e OAM)

69
Aqui cada dígito hexadecimal é a busca pela paleta com o primeiro sendo a linha e o
segundo sendo a coluna (embora se você realmente quisesse você poderia ipá-los e de fato
o hardware provavelmente faz exatamente isso mas isso está introduzindo um trabalho
completamente desnecessário para nenhum ganho real).

2.2.4 GBA3 Xbpp


Existe outro método que, muito parecido com 1Bpp, atua como uma espécie de
método de compactação e formato de hardware. Crystaltile2 é um dos poucos
editores com suporte para este método e é realmente muito raro (a fonte muito
ocasional é a única coisa que a utiliza).
É uma espécie de formato de 4 cores (2 bits por pixel), mas os valores são, na verdade,
intercalados entre dois blocos consecutivos.
Nibbles são ipados de forma semelhante ao formato GBA de 4bpp. A ordem dos petiscos é então o
ladrilho inferior, o ladrilho superior, o ladrilho inferior, o ladrilho superior......

Um exemplo básico do formato intercaladoLadrilhos 8x8 (ladrilhos maiores


seguem praticamente o mesmo padrão, mas para evitar confusão, não serão
abordados aqui).
Paleta conforme definido na imagem. Lembre-se de que os petiscos foram realmente
cortados, mas ignore isso no momento

O primeiro par de peças é um totalmente verde (01 binário na paleta) e um


totalmente preto (00 binário)

70
O segundo par de blocos é totalmente verde (01 binário na paleta). Dito isso,
são 4 bits entre o início de um pixel em um determinado bloco e o início do
próximo pixel no bloco que dá origem aos números visto
1 hexadecimal é 0001 binário, portanto, 00 vai para o segundo bloco (inferior) e 01
vai para o primeiro bloco (superior).
O segundo par é verde e é representado por 5 hex 5 hex
corresponde a 0101 binário
O padrão ainda é válido para o ladrilho único azul e preto. Os
ladrilhos azuis duplos
Um hexadecimal corresponde a 1010 binários.

Um exemplo mais complexoA maior parte disso será deixada como um exercício para
o leitor, mas como mencionado, os nibbles são ipados de maneira semelhante a 4bpp
e isso não é imediatamente aparente no exemplo acima.

O bloco mais à esquerda (superior) fica em branco por 4 pixels verticais, mas o bloco inferior contém
dados.
00 08 08 00 hexadecimal

00000000000010000000100000000000 binário 80 88 88
00 hexadecimal
10000000100010001000100000000000 binário
O primeiro pixel está em branco em ambas as contagens, assim como o segundo, portanto o
00 é válido. O terceiro não está em branco, mas ainda é 00, o quarto está em branco, mas é
10 (10 binário = 3, lembre-se). Como mencionado, os nibbles são cortados em relação aos pixels
que representam.
O quinto pixel é azul, mas é 00 e o sexto pixel é 10 (novamente ipped). Indo
para a próxima linha
Em branco e depois azul. Invertido novamente (10 e 00 sendo vistos no binário).

2.2.5 GBA2 4BPP


Para fins de integridade, o Crystaltile2 possui outro formato conhecido como GBA2 4bpp
que é, em alguns aspectos, um pouco mais complexo que o GBA3 XBPP. Muito poucos
jogos foram observados usando-o também.
É um formato 4bpp e tecnicamente não é nibble ipped como os outros formatos
sub 8 bits, mas na prática é uma espécie de formato interpolado (cada pixel
tecnicamente tem uma escolha de quatro cores) e adicionalmente o primeiro pixel no
par deles define a gama de cores para o segundo.

71
A faixa em questão é o valor 0-3, 4-7, 8-B e CF. Eles poderiam aumentar de 0 a 3 para
permitir os primeiros quatro pixels (seleção 0), de 4 a 7 para permitir os segundos quatro
pixels (seleção 1) e assim por diante, mas é necessário um pouco mais de fundo antes que
isso faça sentido.
O primeiro nibble seleciona entre as primeiras quatro cores usando o intervalo (0 a 3
pixel 0, 4 a 7 pixel 1 e assim por diante)
O segundo nibble seleciona uma das quatro cores também em uma linha, mas as
quatro que ele pode selecionar são determinadas pelo valor do primeiro nibble. Dentro dos
valores, embora possa não importar para o primeiro pixel, o segundo tem os quatro pixels
também em um intervalo de quatro e estes são selecionados pelo valor real dentro do
primeiro pixel.
Exemplos
A seleção 0 valor 2 (na prática seria 2 hexadecimais para o primeiro pixel)
permite o terceiro grupo de cores da paleta para o segundo pixel.
A seleção 3 valor 2 (na prática seria E hexadecimal para o primeiro pixel)
permite o terceiro grupo de cores da paleta para o segundo pixel.
A seleção 0 valor 0 (na prática seria 0 hexadecimal para o primeiro pixel)
permite o primeiro grupo de cores da paleta para o segundo pixel (0 a 3 na
numeração padrão).

72
2.2.6 Bitmap
Provavelmente será melhor servido após discussão sobre modos gráficos e hardware,
mas saiba que isso não se refere ao formato de imagem bitmap visto em todos os
editores de imagens básicos e mais avançados, embora alguns modos tenham muito
em comum com esse formato.
O GBA tem a capacidade de evitar blocos e apenas desenhar imagens
linha por linha em toda a tela, embora limite o que pode ser feito, pois ocupa
a maior parte da VRAM e não é viável alterar tudo a cada quadro, tão poucos
os jogos usam isso.
Nos gráficos é conhecido como modos 3, 4 e 5

3é um modo de 16 bits de 240x160 (também conhecido como resolução GBA) onde as cores são definidas
ali mesmo (mesmo estilo BGR do resto do hardware)

4é um modo 240x160 de 8 bits onde a paleta completa de 256 cores é usada (modos 3
e 5 não permitem cores transparentes ao contrário deste) e permite que 2 quadros sejam de
nidos na memória ao mesmo tempo.

5é um modo 160x128 (menos que resolução GBA) usando a mesma ideia do modo
3, mas o tamanho reduzido permite que dois quadros sejam armazenados na VRAM.

O DS tem um tipo de modo de bloco relacionado onde blocos grandes ainda compostos ou
referências de paleta como blocos normais podem ser usados e é bastante popular, mas o DS
tem um tamanho de VRAM ligeiramente aumentado para gerenciar melhor isso. Ele também tem
a capacidade de manter e manipular imagens maiores que a resolução em modos bitmap (é útil
para algumas representações finais de 3D), embora, novamente, isso seja melhor servido para
uma discussão sobre hardware.

2.2.7 Formatos conhecidos

Alguns jogos usam formatos conhecidos/comuns como GIF, PNG e JPEG, sendo o
mais prolífico o do navegador DS Opera. Ter que decodificá-los como parte da
operação geral (afinal, o que é a web sem imagens) significava que ele poderia
usar esses formatos internamente com bastante satisfação, mas certamente
outros jogos também fizeram isso. Isso se torna ainda mais comum em outros
consoles mais poderosos, mas o DS tem alguns formatos que a Nintendo fornece
no SDK que permitem algumas habilidades bastante extensas, mais sobre
aquelas na seção layout/OAM.

2.2.8 Exportação e importação do Crystaltile2.

Embora o uso do Crystaltile2 seja abordado em profundidade posteriormente, esta é uma


operação básica e deve ser abordada agora. A maioria dos editores de blocos são apenas isso e
permitem que você edite uma imagem, mas ocasionalmente você vai querer não ficar preso a um
editor pixel por pixel e vai querer usar um editor com mais recursos.
O ato de exportar e importar imagens é bastante fácil. Embora seja bem possível fazer
sem uma paleta definida corretamente, é melhor ter uma no lugar, caso contrário, você
terá que editar os pixels de acordo em seu editor de imagens adequado (vermelho significa
azul e tal) e, assim como a matemática hexadecimal, você pode cair em problemas isso
apenas ao fazer alterações rápidas.

73
Primeiro selecione os blocos/área que deseja editar. Clique com o botão direito ou clique no
menu suspenso de edição

Você pode copiar a imagem se tiver algumas pequenas edições, mas a maioria optará
por exportá-la. Crystaltile2 tem algumas opções básicas, mas o BMP funciona para a
maioria dos propósitos. Aqui você pode importá-lo para o editor escolhido
Há também a segunda opção de exportação 1:1 que divide as coisas ao longo das linhas dos
blocos e permite a formação de uma espécie de expressão regular.

74
Uma vez no editor, você pode editá-lo adequadamente

75
Clicar com o botão direito ou clicar no menu suspenso de edição e pressionar importar
importará a imagem recém-salva de volta para o editor, onde você poderá movê-la (ela se
ajustará às linhas de grade). Novamente, você pode usar copiar e colar se preferir, mas
lembre-se de mesclar camadas se o seu editor suportar.

76
Mova-o de acordo e clique duas vezes na imagem para defini-la

Em paletas Se a cor desejada estiver na imagem, o conta-gotas estará


geralmente suficiente, mas a maioria dos editores de blocos tem a opção de exportar paletas
para o formato de paleta do Windows comumente suportado; O Crystaltile2 tem isso ali mesmo
na janela da paleta e o BMP tem uma paleta embutida no formato do arquivo (tecnicamente
opcional, mas o Crystaltile2 a inclui).

2.2.9 Evitando gradientes, AA, compressão com perdas, ruído e coisas assim.

O nome disso já diz tudo e a maioria dos artistas de pixel já sabe disso, no entanto,
isso precisa ser mencionado para poupar você do incômodo de ter que refazer toda a
paleta, o que pode até não ser viável se a paleta for usada em outro lugar, não

77
mencionar que se você tiver apenas cores limitadas disponíveis, faz sentido não desperdiçá-las, a
menos que você realmente tenha a opção de fazê-lo. Para este fim, você deve evitar gradientes
(espero que já exista um, se você precisar), opções de anti-aliasing (muitas vezes adicionadas ao
adicionar texto), redimensionamento (o algoritmo do vizinho mais próximo é provavelmente o
pior método de escala de uso geral, mas tem o benefício Não é possível usar as cores com as
quais você realmente precisa, se você realmente precisar de uma), funções de ruído e outras
coisas que adicionarão cores extras aleatórias à sua imagem (como salvar como JPEG, mesmo em
100%). Isso significa que, diferentemente da maioria das edições de imagens que você pode ter
feito em outros momentos da vida, você está limitado aqui.
Em uma nota diferente, assim como mudar as paletas pode mudar coisas em outras
partes da ROM que você também tem que enfrentar, ou pior, você enfrenta memória
limitada, o que pode limitar os blocos que você pode editar, mas isso é o assunto da
próxima seção.

2.3 Layout, temporização, OAM e efeitos especiais


Os consoles não sabem como organizar os blocos magicamente e, de fato, muitas das imagens
3D e 2D, bem como a codificação em geral, giram em torno da reutilização de coisas para
diminuir o consumo de recursos; você certamente já viu RPGs antigos onde veria
lute contra um rato gigante, um rato da peste que se parece exatamente com um rato gigante,
mas com uma pintura verde e azul escuro / roxo e, mais tarde, um rato que tem uma pintura
vermelha, laranja e amarela, mas se parece exatamente com os ratos anteriores. Para fazer isso,
o GBA e o DS possuem hardware que podem empregar para alterar coisas além da paleta,
embora esse hardware também possa controlar qual paleta é usada. A maioria das imagens
usadas até agora foram simplesmente um ladrilho após o outro e alinhadas manualmente para
fins de clareza, mas surge o conceito de reutilização de ladrilhos que quebra o padrão um após o
outro e a composição (colar uma imagem sobre a outra) para problemas isso, ambas são técnicas
muito comuns em imagens 2D.

2.3.1 Introdução aos modos OAM e BG.


O GBA e o DS têm dois tipos gráficos principais conhecidos como BG, também conhecido como
plano de fundo, e OAM, também conhecido como memória de área de objeto, também conhecido
como sprites, que funcionam juntos para exibir jogos. Embora você possa usar um para fazer o
outro, e os jogos fizeram isso, na maioria das vezes a distinção é observada e os planos de fundo
serão deixados para fazer os planos de fundo (uma grande exceção no DS é o 3d que é
renderizado no hardware 3d e movido para o fundo para exibição) e OAM que é deixado para
lidar com os sprites e sobreposições de imagens (mais ou menos janelas). O texto pode estar em
BG ou OAM dependendo do jogo, embora BG seja muito mais comum e geralmente o método
sugerido para uso pelos desenvolvedores. Descobrir qual método algo usa geralmente é melhor
feito chegando ao ponto do jogo em que ele é usado e visualizando o OAM, sprite e BG em um
determinado emulador (VBA para GBA e desmume ambos apresentam tais habilidades). Esses
visualizadores também são um método de extração bastante bom.

O GBA e o DS são praticamente iguais, embora o DS tenha dois motores conhecidos como A e
B, que são ostensivamente um para cada tela, embora não estejam vinculados a uma
determinada tela e possam ser facilmente trocados em tempo de execução. O mecanismo A tem
mais memória, a capacidade de fazer bitmaps VRAM completos, bem como o que abriga
principalmente os resultados do 3d (o mecanismo B pode usar os resultados do 3d, mas requer
um pouco de reflexão) e usa o hardware de captura que pode ser usado para criar

78
efeitos, embora os efeitos/funções gerais mais gerais ainda funcionem no motor B.

Tal como acontece com a maioria das outras coisas nos dispositivos portáteis, o próprio hardware
possui seções dedicadas à execução de vários aspectos do hardware, com gráficos formando uma
grande parte dele. Deixando o DS 3d de lado, existem dois componentes principais que entram no vídeo
ˆO manipulador principal conhecido como DISPCNT é encontrado em 4000000 hexadecimais
no GBA e no DS (embora o DS o tenha apenas nos mapeamentos de memória ARM9 e tenha um
segundo para o mecanismo B em 4001000 hexadecimal).
ˆO BG real (4 seções de 16 bits) e o material OAM que lida com todas as coisas de nível
inferior para cada um dos vários modos.

2.3.2 Tempo
O hardware gráfico tende a atuar como um temporizador para grande parte do resto do sistema,
no que diz respeito ao software, com um componente muito significativo das verificações,
atualizações e coisas semelhantes sendo iniciadas quando ocorre um vblank (branco vertical).

A idéia geral é que a tela seja redesenhada em uma linha de varredura (uma linha
horizontal na tela) de cada vez. No entanto, após cada scanline ser desenhada, há uma
pausa conhecida como hblank (equivalente ao tempo necessário para desenhar 68 pixels
no GBA) e depois de todas as scanlines serem desenhadas, há outra pausa conhecida como
vblank (no GBA, parece ser cerca de o tempo para desenhar 68 linhas ou apenas 84.000
ciclos e as 71 linhas para o DS significa que há mais ou menos a mesma taxa de atualização
lá). Como a atualização da localização das coisas poderia causar rasgos na tela se fosse feita
no meio da atualização, quaisquer atualizações na tela e outras coisas intimamente
relacionadas a ela são acionadas nesses momentos (na verdade, o próprio hardware dedica
os primeiros bits nas interrupções apenas para vblank e co). De qualquer forma, a taxa de
atualização é ligeiramente inferior a 60 Hz, e é por isso que a maioria dos jogos busca uma
taxa de quadros logo abaixo de 60 FPS ou metade disso em 30 FPS.
Embora definitivamente valha a pena conhecer como o hardware funciona nesse
aspecto, deve-se dizer que, a menos que você esteja fazendo programação de baixo nível
ou se conectando ao código usando temporizadores baseados nele, a maior parte do
hacking de ROM não está muito preocupada com isso. e mais foco é colocado no OAM, nos
registros de exibição e no manuseio de memória. A seção de montagem cobrirá mais sobre
interrupções, mas enquanto isso, se você quiser ler mais, a seção de vídeo do Tonc tem um
bom exemplo trabalhado e o GBAtek tem muitos números.
Além disso, como mencionado, as interrupções são importantes, então GBAtek nas interrupções.

2.3.3 GBA e DS OAM (sprites)


Sprites (ocasionalmente conhecidos como OBJs) são provavelmente o carro-chefe dos jogos
(normalmente são as coisas que você move, o jogo se move e nas quais você passa a maior
parte do jogo se concentrando) e ser capaz de manipulá-los é um recurso útil. O GBA
suporta até 128 deles ao mesmo tempo e cada um recebe uma seção de memória.

07000000 hex é a localização do OAM no GBA com obj 0 em 07000000 hex, obj1
em 07000008 hex, obj2 em 07000010 hex, obj3 em 07000018 hex e assim por diante.

O DS é praticamente o mesmo, mas possui um segundo banco de 7000400 hexadecimais que também tem 1 Kbyte
de comprimento para o mecanismo B.

79
Fica bastante complexo e não é necessário muito além de uma apreciação básica dos
conceitos para a maioria dos trabalhos de hacking (se você entende como funciona, pode
pesquisar e com a ajuda dos documentos decodificar os valores encontrados que são bons
suficiente para a maioria das coisas), ainda assim você será encaminhado ao GBAtek, que
possui uma lista completa, se desejar.
Três valores de 16 bits constituem a maior parte das coisas úteis e agrupados em cada um
desses 16 bits
Atributo 0 - Primeiros 16 bits - Coordenadas Y (bits 0 a 7 levando a 256
opções) Atributo 0 - Segundos 16 bits - Coordenadas X (bits 0 a 8 levando a
512 opções)
Atributo 0 - Terceiros 16 bits - nome, prioridade e seleção de paleta de 4 bpp A prioridade é
para cada objeto em relação aos planos de fundo e os valores mais baixos dos objetos têm
uma prioridade mais alta em relação uns aos outros.
Os outros bits são usados para opções de rotação, ip, tamanho e escala, com os
16 bits restantes no intervalo usado para a carga útil das funções de rotação e escala
quando são empregadas.
Na maioria das vezes, as edições neles são feitas manualmente com apenas alguns ajustes ou
tratadas no nível da função ao lidar com a montagem, mas se você precisar editá-los, existem
ferramentas. Da mesma forma, existem formatos no caso do DS que lidam com valores/
configuração iniciais dele para vários arquivos, portanto editá-los geralmente é mais útil.

Calculadora OAM para o DSDownload de viagem de arquivo


Se você precisar editar o OAM no DS (também pode funcionar para o GBA, mas tenha
cuidado, pois algumas coisas no lado prioritário são alteradas) ou decodificar um valor da mesma
forma, você não precisa fazer isso manualmente, graças a esta ferramenta . O uso é bastante
simples

Visualização básica do emuladorEste é apenas um exemplo rápido de visualização da


memória (às vezes a edição é possível aqui, mas geralmente é atualizada a cada
vblank). A partir daqui, você rastrearia o que originalmente mudou o OAM e alteraria
as coisas no binário original (o DS geralmente tem formatos auxiliares para os
gráficos e o GBA foi bastante bom em manter o código binário real e os valores do
OAM separados). É também uma prévia da animação por meio do OAM.

GBAVBA. O sprite aqui é na verdade composto de vários blocos.

80
DSDesmume.

81
2.3.4 Modos GBA e DS BG
Os modos BG tendem a ser para planos de fundo, texto e alguns menus, além de
fornecer o resultado final da renderização 3D no DS. Tanto no GBA quanto no DS
há 4 fundos com nomes de 0 a 3 (novamente o DS tem um segundo conjunto de
modos BG para o motor B).
No GBA existem 4 camadas BG (0 a 3) e 7 modos, embora diferentes camadas sejam
restritas no que podem executar. As camadas BG podem ter uma resolução mais alta do
que a tela se forem fornecidas as opções/condições corretas e essas coisas podem ser
usadas para animação e uso geral do jogo para evitar a necessidade de transmitir

82
contente.

Como funcionaExistem duas opções principais aqui para os desenvolvedores usarem em jogos.

1. Use uma imagem bitmap

2. Gere um plano de fundo a partir de blocos

O segundo é superior na maioria dos casos devido à capacidade de fazer animações com
mais facilidade (como mencionado anteriormente o hardware é incapaz de atualizar um
bitmap inteiro a cada atualização de tela) e como tal é usado pela maioria dos jogos.

Fotos do emulador

A maioria dos emuladores de depuração apresenta a capacidade de ver as várias camadas


que constituem um plano de fundo. Normalmente isso é chamado de algo como view map .
Exemplos de VBA estão presentes nos próximos exemplos de outros métodos e é
praticamente o mesmo para qualquer emulador, com as únicas diferenças no quanto o
hardware suporta.

RolagemO BG pode ser colocado atrás de algo e rolado como um tipo de


animação (muitas vezes combinado com outros tipos de animação) ou apenas ter
uma seção maior do BG para focar o resto da janela (existem outros métodos
para ter salas maiores do que tela, então não presuma que é assim que um jogo
faz).
Visível em muitos jogos, mas existe um exemplo especialmente interessante nos mundos de
Tetris para o GBA. A partir da mesma imagem BG, a impressão de estrelas aleatórias é dada como
pano de fundo.

Outro bom exemplo existe nas primeiras guerras avançadas que realmente fazem uso da
habilidade de embrulhar (veja a falta de uma imagem/logotipo completo do Cometa Amarelo)

83
Efeitos de camadasO exemplo clássico desse recurso utilizado são as camas em jogos
de RPG onde o personagem terá a cabeça visível acima do travesseiro, mas o resto
fica coberto. Para fazer isso, haverá pelo menos duas camadas, sendo uma atribuída
uma prioridade mais alta do que o sprite e a segunda uma prioridade inferior.

84
Depois de desativar o BG1

O segundo exemplo clássico, um pouco menos complicado, é onde árvores ou vigas


estruturais serão colocadas sobre o mapa do jogo, permitindo que os sprites se movam por
baixo delas. Aqui, muitos emuladores permitirão que você desabilite camadas que podem
ser úteis ao copiar mapas para gerar um passo a passo do jogo.

85
Exemplo de feixes de Phantasy Star 2

2.3.5 Animação básica


Como o OAM pode controlar o que está na tela e onde as coisas estão, ele é o responsável
pela maior parte da animação. Existem habilidades adicionais de rotação,
dimensionamento e outras, mas elas serão abordadas mais tarde. Embora seja bastante
óbvio quando visto em imagens estáticas, deve-se notar que vê-lo em tempo real é melhor,
então se você tiver a chance, faça-o.
Existem conceitos a serem considerados.

1. Movimento da tela

2. Troca de Sprites

Como você verá mais adiante no vídeo, se você trocar as imagens exibidas em uma
tela com rapidez suficiente, o olho humano parecerá que elas estão se movendo. Isso
significa que você pode trocar sprites para os locais relevantes após um determinado
número de quadros (a tela é atualizada a cada vblank, que é o ponto convencional e
sugerido em que isso é feito). Combine isso com o movimento da tela ou do fundo e
você terá a impressão de movimento. Agora, como você deve ter visto na seção de
representação de imagens, as imagens tendem a ser compostas de vários blocos,
então você não precisa trocar um conjunto inteiro de sprites se puder trocar a metade
superior de um corpo e fazer com que o personagem jogue seu Como resultado,
levante os braços, embora essa técnica possa ir muito além.
Os formatos serão abordados em algumas seções daqui, mas o SDK do DS fornece aos
desenvolvedores um formato de animação raramente usado, conhecido como NANR, mas

86
voltando ao hardware, há vários bons exemplos disso na série Ace Attorney
(Phoenix Wright).

Dragon Quest Foguete SlimeO jogo fornece um ótimo exemplo de animação


OAM na sequência da tela pré-título. Novamente, se você puder ver em tempo
real, será muito mais claro.

87
Animação original de Phoenix WrightO texto acima foi uma animação simples via OAM,
mas os jogos ocasionalmente ficam mais interessantes.
O primeiro jogo Phoenix Wright tinha algumas animações de personagens bastante notáveis,
mas em vez de redesenhar cada quadro da animação, os próprios personagens foram divididos
em componentes (geralmente rosto e mãos) e esses foram trocados conforme necessário para
criar a animação. A visualização lado a lado não é exatamente como os formatos internos
funcionam (aqueles que geralmente são configurados para aproveitar as mãos e o rosto são um
conceito visual).

88
Animação de fundoO efeito de rolagem já foi mencionado, mas se você estiver
usando um fundo lado a lado, você pode alterar os blocos que compõem o fundo
e criar animação nele. Animações com imagens bitmap costumam ser feitas com
base em programação, mas muito disso é muito óbvio ou bastante misterioso e
impregnado de métodos de programação.
Outro uso do efeito de rolagem é mais comumente usado como animação de câmera
em imagens 3D, mas aqui, se você se mover rapidamente pelo mapa BG, um efeito de
vibração da câmera é criado e está bem documentado/enraizado na cinematografia como
algo visto quando um personagem ou local é assustado ou atingido.

Animação de paletaIsso foi mencionado brevemente no passado, mas há também a


questão da animação da paleta, também conhecida como paletas dinâmicas, a ser
considerada. Aqui o jogo mudará uma cor ou um punhado de cores na paleta e isso terá
uma mudança correspondente no jogo principal.
De Summon Night Swordcraft Story 2, uma amostra rápida de três estágios de uma
animação. As partes variáveis da paleta têm um quadrado preto adicionado ao seu redor.

89
O jogo, ao contrário da maioria do GBA, também apresenta alguns modos de cores
diferentes para o GBA original, GBA-SP, TV e a opção de alterar o brilho em um controle
deslizante.

Truques do desenvolvedorHá mais sobre isso na parte III, mas alguns em 2D por enquanto.
A ideia aqui é que o desenvolvedor fará coisas para diminuir a demanda pelos recursos do
sistema e, ao fazê-lo, permitir-lhes o potencial para uma quantidade maior de outras coisas
a serem feitas, o que é sempre bom.
Por exemplo, um personagem andando para a esquerda é praticamente o mesmo que
um personagem andando para a direita, então você só precisa animar uma direção e virar
os sprites. Isso também pode atingir o próprio sprite, que não será visto segurando uma
arma ou algo que o marque como um sprite ipped.
Se uma área de um nível não estiver sendo vista no momento, não há necessidade
de animá-la. O porão/forja do Summon Night Swordcraft Story 2 usado no

90
a seção de animação da paleta fornece um ótimo exemplo. O equivalente 3D disso é a seleção do
backface e a renderização do ponto de vista.
Outro efeito comumente visto em animação 3D, mas ainda útil em 2D, e visto
em vários jogos, é a adição de um único círculo escuro como sombra.

2.3.6 Recurso de janela


Embora você possa preencher a tela inteira, o GBA e o DS têm a capacidade de
escolher coisas para mostrar e a técnica é conhecida como janelamento. A idéia básica
é que o modo seja acionado e selecione uma região (você tem duas janelas
permitindo uma divisão em quatro direções, se preferir) e você pode alterar a exibição
de BG e OBJs dentro dela. Várias coisas e jogos podem empregá-lo no jogo real, mas
os menus são de uso comum.
Explicação/descrição do recurso de janelamento GBAtek. O recurso primeiro deve ser
habilitado no registro DISPCNT e depois ter as janelas definidas em outros registros que
podem então ter várias camadas BG ou OBJ desabilitadas conforme apropriado, mas
lembre-se de que a transparência pode ser feita para funcionar para o BG, então nem
sempre espere que as janelas sejam usadas.
Uma técnica de animação pode ser feita aqui e henke37 observou que as coisas podem ser
ajustadas no hblank para criar certos efeitos além das janelas clássicas óbvias ou do conjunto
com truque de fantasma (veja por volta de 5:20), fornecendo um bom exemplo.

2.3.7 Recursos especiais (ipping, transformação ane, alfa e outros)


Apesar de toda a memória limitada e peculiaridades, o GBA e o DS, ou talvez por causa dele,
apresentam todos os tipos de métodos que os desenvolvedores podem empregar para realizar
diversas alterações nas imagens vistas.

Na transformação OAMMencionado brevemente alguns parágrafos atrás, o OAM tem


opções para ip sprites e blocos individuais. e é frequentemente usado para fazer os
personagens caminharem para a esquerda ou para a direita, apesar de usarem um único
conjunto de sprites (você pode ver um exemplo disso na seção de visualização do GBA
OAM). O tamanho duplo também está disponível, embora o uso pretendido pareça ser para
solucionar problemas induzidos por uma nova transformação (evitando que as peças sejam
cortadas quando giradas na maioria dos casos) em vez do imediatamente óbvio (embora
isso também funcione).

Um nãoMuitos guias e documentos se referirão a isso pelas duas coisas mais comuns
que ele faz, que são as outras duas grandes transformações feitas na geometria,
conhecidas pela maioria como rotação e escala (a terceira, translação, sendo bastante
bem cuidada por todo o resto ). Estritamente falando, porém, permite a
transformação de cisalhamento e algumas outras coisas e, portanto, o termo
transformação fina é mais adequado.
No caso de sprites/objs ele é dividido entre os dois primeiros atributos e os quartos ocultos.
O s em uns não é um erro de digitação, pois o quarto atributo normalmente incomum é na
verdade um bom dado de transformação, mas permite 32 atributos (um pouco menos do que os
128 objetos possíveis, mas isso não é tão ruim, pois não há nada que impeça as coisas de
compartilhar um conjunto de atributos) ao todo, pois os primeiros quatro atributos ocultos são
usados para um único valor de transformação e isso é repetido.
O atributo 0 ativa o modo

91
O atributo 1 seleciona o agrupamento da transformação nos bits 9 a 13.
O atributo oculto 3 é de fato dividido em quatro atributos ocultos conforme
mencionado e cada um carrega um valor de 16 bits (sinal de 1 bit com sinal, número inteiro
de 7 bits, formato de fração de 8 bits) correspondente ao que é conhecido como PA, PB, PC
e PD que pode ser usado para efetuar rotação, escala e transformação de cisalhamento e
tudo ao mesmo tempo, se necessário (não funciona bem assim, mas se você imaginar ter
controle de cada canto e como você pode usar isso para dimensionar coisas, distorcer
coisas e girar coisas ao mesmo tempo).
Tonc tem um exemplo prático de muitas matemáticas envolvidas (em muitos aspectos,
é tão complexo quanto a matemática no hacking de ROM fica fora de alguns hacks de
montagem muito aprofundados), ele também retorna de uma forma para o sistema 3D. Ele
será devolvido para lá com seriedade, pois sustenta todo o sistema 3D.
Para aqueles acostumados com a matemática, o ponto de referência é o canto superior
esquerdo do objeto, e não a tela, e o centro de rotação é definido como o meio do sprite.
De certa forma, isto é bastante limitante, pois algumas coisas interessantes podem ser
realizadas com diferentes origens e centros de rotação, mas serve para simplificar as coisas
para transformações básicas.
GBAtek tem listagens básicas e tonc tem exemplos mais trabalhados.
A transformação BG a ne é um pouco mais envolvente, mas segue a mesma
lógica, GBAtek tem mais.

MosaicoGeralmente visto como o pixel de canto único se repete para cada pixel não definido no
resto da tela, mas está disponível para valores menores. Deve ser habilitado no registro de
controle individual e então definido de acordo em 400004C hexadecimal, mas está disponível
para todas as camadas BG, bem como equivalentes para sprites. A seção de mosaico GBAtek e
Tonc têm alguns bons exemplos trabalhados.

Alfa e brilhoA mistura alfa é um método pelo qual duas imagens podem ser mescladas,
sendo o termo não totalmente preciso, mas equivalente para leigos, chamado de
transparência, e pode ser usado para obter uma variedade de efeitos. Observe que o
sistema DS 3d possui uma configuração alfa um pouco mais complexa, dependendo das
texturas usadas e muito mais.
Na maior parte, alfa é uma ag e variável que quer dizer se ele quer ag dizer
mistura alfa, haverá um isso e em algum outro lugar uma variável para
diga quanto (é também aqui que o 3D difere ligeiramente em alguns modos).
O ajuste de brilho, para o qual o DS possui um modo especial na unidade de captura,
também é possível estando disponível em vez de alfa, se você desejar. Observe que muitos
desenvolvedores optaram por alterar o brilho no nível da paleta para o modelo GBA
original, daí os hacks para restaurar cores que pareciam um tanto desbotadas em modelos
GBA posteriores.
Três registros são usados aqui com 04000050 hex, também conhecido como BLDCNT, sendo o
principal, selecione este modo, 4000052 hex, também conhecido como BLDALPHA, sendo os modos alfa
e 4000054 hex, também conhecido como BLDY, fazendo para o brilho. Observe que embora os sprites
possam ser mesclados aqui, a configuração pode ser substituída para sempre mesclar no OAM.
GBAtek tem listagens mais detalhadas e completas.

Modo 7O SNES (ao qual o GBA deve muito em termos de habilidades e design de hardware)
foi um dos primeiros a permitir a transformação de perspectiva de uma imagem. Embora
agora pareça bastante ruim para aqueles acostumados com imagens 3D modernas

92
foi revolucionário na época, tanto que o termo hardware do SNES tornou-se
uma abreviação para a técnica. Tonc tem mais.

2.3.8 Formatos básicos de layout e mapeamento do DS

Embora os jogos e, de fato, muitos jogos usem formatos brutos e declarem como devem ser
renderizados/mapeados em outro lugar (ou apenas tenham um bloco para cada bloco na tela), o
nitroSDK fornece vários formatos para os desenvolvedores usarem. Eles variam de simples
wrappers para um layout até formatos completos de animação. Também vale a pena notar que se
uma imagem for composta por peças, algumas dessas peças podem ser reutilizadas como uma
espécie de compressão, então você pode ter que editá-las (este é frequentemente o caso em
jogos de quebra-cabeça japoneses onde o texto faz parte da imagem e os dois kanji podem ter
um bloco em branco no meio).

93
Uma demonstração básica do conceito de compressão/reutilização de blocos

Alguns cliques depois

94
Formatos de paleta

NCLROcasionalmente visto como RLCN, é um formato de paleta. A maior parte do tempo


um wrapper bastante inútil para a paleta, mas outras vezes atua como um formato
de arquivo.

PFNMTecnicamente parte do formato NCLR, mas visto com frequência sozinho e


especialmente em jogos anteriores.

. AMIGONem sempre uma paleta (ainda sendo a abreviatura para os padrões de TV


europeus e australianos e, portanto, as versões de jogos destinadas a lá ostentarão
essa extensão), mas muitas vezes as paletas são vistas com esta extensão.

Armazenamento de azulejosOs próprios blocos precisam ser armazenados e vários formatos de arquivo
foram criados para eles

NCGRUm formato que inclui todos os dados relevantes sobre os dados armazenados
(larguras, alturas, profundidades de cores, sejam ladrilhos ou não e muito mais). Voltado mais
para sprites/objs, mas lembre-se de que imagens em tela cheia são possíveis e ainda são usadas
para imagens do tipo BG.

NTFTOutro formato bruto que tecnicamente faz parte de outro (neste caso
NCGR), mas visto por si só ocasionalmente.

RSNVoltado para imagens de fundo (BG) e contém informações sobre como


para decodificar e configurar as coisas.

NTFSMais uma vez parte de um formato maior (NSCR neste caso)

MapeamentoO mapeamento envolve apenas organizar o OAM ou BG na ordem


correta. Isso pode ser feito de várias maneiras, mas o nitroSDK fornece vários
métodos, embora muitos sejam abrangidos pela animação ou pelos próprios métodos
de armazenamento.

NCERVoltado para sprites e fornece dados iniciais de OAM, entre outras coisas.

Animação

NANRUm formato de animação raramente usado.

NMCRUm formato visto no Pokémon para fornecer animações. De certa forma


pode ser considerado um wrapper para NANR.

FontesIsso será abordado posteriormente na seção de hacking de texto, mas há um formato de fonte
bastante complexo que muitos jogos de DS usam. Muitos outros jogos usam formatos igualmente
complexos, enquanto outros podem usar peças simples (talvez em um tamanho um pouco estranho).

NFTRUm formato de fonte que inclui larguras/dimensões de caracteres, localizações de linhas


e vários tipos de mapeamento disponíveis.

95
Observações geraisA maioria dos programas de edição de DS contará com recursos de
edição para esses formatos e outros relacionados, e exportar e importar não deve ser um
problema. No entanto, se você procura um editor de imagens mais geral e possui um que
suporte o formato de plug-in Susie (um formato de plug-in bastante popular visto em
muitos editores de imagens japoneses), o nitroscrap do loveemu segue esse caminho.
Embora possam ser encontrados sozinhos e frequentemente sejam encontrados, eles podem
ser colocados em formatos de contêineres básicos como narc, formatos personalizados, como
será abordado várias vezes ao longo deste guia, ocasionalmente despojados de componentes de
(mapas sendo ignorados e outros), ser reduzido a seus componentes básicos (basicamente um
arquivo sem cabeçalho), tem uma única paleta para uma gama completa de imagens (muitas
vezes isso será nomeado de acordo, mas nem sempre e de qualquer forma pode confundir
programas que esperam o mesmo nome, o que é mais deles). Isto é especialmente verdadeiro
para animações que raramente usam o formato NANR.
Os formatos permaneceram praticamente estáticos ao longo das coisas, embora Pokémon tenha o
hábito de mudar algumas coisas, usar recursos raramente usados e retrabalhar alguns outros, de
modo que ferramentas construídas de acordo com padrões anteriores possam não funcionar
corretamente com essa franquia.
Os nomes acima são as extensões que os arquivos que os carregam geralmente
possuem, mas ocasionalmente são conhecidos pelo carimbo mágico que geralmente é uma
versão invertida da extensão (NCLR=RLCN e outros).
Na ausência dos formatos no final do documento
Lowlines especificações atuais
Lowlines especificações mais antigas
Código fonte do Tinke (trunk/ Tinke/ Imagen e trunk/ Plugins) Código
fonte do Nintendo Viewer (python)
Eles são amplamente voltados para a programação, sendo os dois últimos códigos-
fonte para vários programas.

2.3.9 Manipulação e alinhamento da memória de vídeo

Os sistemas de vídeo GBA e DS são bastante aprofundados, o que serve tanto para solucionar
problemas de baixo consumo de energia quanto para fornecer aos desenvolvedores as opções de
fazer coisas que, de outra forma, teriam que gastar muito tempo programando. Um dos aspectos
mais interessantes disso é o manuseio da memória, pois é bem possível esgotar e há outras
peculiaridades, como o alinhamento.

Gerenciamento de memória 2DOs jogos, especialmente no GBA, mas no DS não são uma
rua fácil, frequentemente ultrapassam os limites da memória e isso significa que
certamente não há tanta memória que você nunca possa acabar e com certos modos
gráficos é muito fácil de fazer . Como o hacking de ROM muitas vezes deseja adicionar
coisas, você provavelmente encontrará isso eventualmente. Os cenários mais comuns são:
você tem uma sobreposição 2D em um plano de fundo e os blocos repetidos desejam ser
editados ou você deseja estender um pouco a sobreposição e ficar sem memória dessa
forma.
pineight.com detalha um método de streaming que os programadores homebrew podem
usar para nunca ficar sem memória RAM. Os programadores de DS não têm tanta sorte e tendem
a ter que mexer com mapas e blocos ou aceitar uma imagem um pouco menor.

AlinhamentoResumindo, o GBA VRAM só aceitará gravações em valores alinhados a 16


bits e isso geralmente ocorre quando a compactação está sendo tratada

96
com. Teve um efeito tão grande que levou toda uma classe de métodos a ser descritos
como seguros para VRAM ou seguros para WRAM se não funcionarem em VRAM. A menos
que você esteja gerenciando fisicamente a VRAM como parte de um hack (e não dizendo
que depende de uma função para ler tanto do carrinho para ela), geralmente é apenas uma
questão de selecionar a função de compactação segura da VRAM de qualquer programa
que você estão usando.

2.4 3d
Embora alguns jogos em consoles estejam experimentando imagens vetoriais entre blocos
e 2D acima e 3D abordados nesta seção, a grande maioria do uso de imagens em jogos é
abordada. Observe que está longe de ser inédito jogos usarem seu hardware 3D para exibir
imagens e animações 2D (várias telas de título de jogos foram vistas fazendo isso em vários
níveis e até mesmo trocando 3D por 2D convencional em alguns pontos), já era mencionou
como vários jogos aparentemente 2D usaram modelos 3D no lugar de sprites (New Super
Mario Brothers sendo conhecido por isso) e outros aumentaram as imagens 2D fazendo
coisas como ter planos de fundo renderizados no hardware 3D (vários motivos, mas
principalmente porque isso realmente incomodava a cena nascente da emulação de DS faz
com que o primeiro jogo Castlevania seja conhecido por isso).

Na maior parte, esta seção conterá conceitos gerais muito básicos e especificações do
DS, já que o GBA não possui hardware 3D adequado e qualquer coisa que possa ser pré-
renderizada e dada ao 2D, um truque como imagens isométricas ou técnicas de estilo modo
7. Esta seção também pressupõe um conhecimento do hardware GBA/DS 2d e pode ser
considerada uma continuação direta dele.
Em computadores e, em menor medida, em consoles também (embora eles usem o
hardware projetado para isso, os desenvolvedores do kit de desenvolvimento de software muitas
vezes ainda criarão seus próprios métodos de programação para isso), os dois métodos
dominantes para renderizar 3D no momento da escrita, e para algum tempo antes, são
conhecidos como DirectX (uma tecnologia 3D da Microsoft e usada no Windows e na linha de
consoles Xbox) e OpenGL (uma tecnologia 3D de poder e escopo semelhantes, mas como é
relativamente aberta, é usada na maioria dos outros lugares como além de estar disponível para
uso no Windows).
Os limites são confusos entre o hardware que executa as coisas e os padrões
construídos sobre eles; DirectX e OpenGL lançarão padrões para os quais os fabricantes de
hardware irão construir e os fabricantes de hardware (e desenvolvedores de motores)
também terão uma palavra a dizer sobre o que deve acontecer nas próximas versões dos
padrões DirectX e OpenGL, ficando cada vez mais confuso à medida que aqueles as
tecnologias também começam a abranger tarefas gerais de computação (física e outras
para jogos, mas devido à forma como são construídas, também são muito boas para
aspectos de computação de alto desempenho), sendo GPGPU o termo de escolha a ser
pesquisado. Também no caso do DirectX o padrão também define métodos de entrada e
ajuda com o som.
Na maior parte, embora o GBA e o DS tenham todos os recursos de animação 2D que
os consoles ou a animação 2D em geral sempre desejaram (naturalmente, suporte para
maiores quantidades de sprites e outros, sendo mais rápidos e operando em resoluções
mais altas são desejáveis), os sistemas 3D do DS são não muito parecido com os sistemas
3D atuais ou mesmo com os anteriores. Basicamente, se você soubesse tudo o que há para
saber sobre o GBA 2d e os métodos subjacentes, você poderia fazer qualquer coisa em 2d,
exceto saber tudo o que há para saber sobre o DS 3d e os métodos subjacentes.

97
métodos deixarão uma grande lacuna em seu conhecimento (a ideia de shaders, muito do
reflexo de luz e algumas das ideias que levaram a atalhos/aproximações serão, na melhor
das hipóteses, abordadas), embora não devam prestar um desserviço a qualquer intenções
futuras de aprender imagens 3D. Aprender imagens 3D é perfeitamente possível graças à
internet e o The Guerrilla CG Project lançou uma bela série que cobre muitos dos conceitos
básicos.

2.4.1 3D básico (ossos, coordenadas, quadros-chave)

Você pode criar imagens em 3D de muitas maneiras diferentes e, na maior parte, o 3D e a


forma como o 3D é animado não são realmente possíveis de separar. Na prática, tudo se
resume a quadros-chave que têm muito em comum com suas contrapartes 2D, morphing
que é um híbrido de quadros-chave e os seguintes e ossos que, como o nome indica, um
monte de linhas articuladas (muitas vezes imaginárias) que percorrem um caractere que
pode ser movido para fornecer animação (sistemas menores usam menos ossos e
articulações e acabam com coisas como mãos sempre em punho de pistola).

Coordenadas. Na maior parte, o sistema de coordenadas X, Y, Z (cartesiano)


aparece mais uma vez, embora com dois refinamentos principais, seja no hardware ou
ao fazer matemática neles.
1. A capacidade de definir uma linha com um ângulo e um comprimento

2. A capacidade de ter um sistema de coordenadas dentro de um sistema de


coordenadas (ajuda quando você tem uma forma complexa e não quer se preocupar
em recalcular muitos pontos, apesar de eles não mudarem um em relação ao outro).

Ângulos e comprimentos são bastante úteis, pois podem ser manipulados um pouco mais
facilmente de algumas maneiras (a ideia geral é que uma linha é definida na origem com um
ângulo em relação aos eixos dados e um comprimento e então talvez traduzida, o que fornece a
mesma informação que um conjunto de coordenadas, mas permite uma rotação mais fácil e
muito mais). Estritamente falando, não é usado no hardware, mas muitas vezes alimenta vários
sistemas de coordenadas.
Vários sistemas de coordenadas são extremamente úteis quando você ultrapassa o 3D
básico, pois, como mencionado, eles permitem que você gire uma forma inteira e não
precise se preocupar em recalcular todos os componentes dentro dela e lidar com ângulos
estranhos, sem mencionar que permite animação independente. Por exemplo, considere
sua mão ao enrolar o braço, ela está no final do pulso, mas se você enrolar o braço
deixando a mão na posição inicial e depois tentar mapear as coordenadas pelas quais sua
mão acabou de passar, fica terrivelmente complexo, apesar de sua mão não mudando de
posição em relação ao seu pulso.
Na maioria dos jogos são definidos pontos que se tornam os cantos, ou mais
precisamente vértices, de um modelo e linhas desenhadas entre eles para fazer a imagem e
esses pontos serem movidos de acordo (geralmente através da técnica de ossos), embora
as técnicas mais recentes na época de Writing estão experimentando uma tecnologia
conhecida como shaders de geometria, onde novas linhas podem ser geradas após uma
explosão ou algo assim. Voltando ao tópico, na maioria das vezes esta linha é reta, embora
alguns sistemas mais avançados possam definir um tipo de linha para criar uma imagem
curva (outras vezes você vê isso, podem ser texturas), que geralmente cai sob a
responsabilidade da subdivisão, embora existe um truque de iluminação conhecido como
sombreamento Gouraud que atinge um efeito semelhante.

98
Outro tipo de imagem visto principalmente na digitalização 3D (medicina e partes de
dispositivos de engenharia reversa) e certos tipos de modelagem computacional (geralmente de
natureza científica) é conhecido como dados de nuvem de pontos, onde pontos individuais são
usados e expandidos a partir daí. Como você pode imaginar isso pode ser muito caro em termos
de recursos que para um uso mais em tempo real leva a voxels onde a imagem é composta por
pequenas caixas ou se preferir os próprios pontos expandidos de forma a encontrarem seus
vizinhos e podem ser vistos em voxelstein3d entre outras coisas.

Aula opcional de matemática sobre arrays/matrizesArrays são um conceito que surge cedo
nas discussões sobre 3D e programação em geral e como possuem algumas funções muito
úteis, elas nunca desaparecem. Com um deles você pode efetivamente definir em poucos
números uma coisa realmente primitiva; um array 3 x 3 armazena 9 valores que funcionam
muito bem quando você tem um valor X, Y e Z e três conjuntos deles podem definir um
triângulo (o bloco de construção da maioria das imagens 3D) e muito mais, embora o DS
favoreça 4x4 para um muitas coisas (mesmo que transforme esses 4x4 em 3x3 definindo
todas as coordenadas, exceto a inferior direita como 0 e a inferior direita como 1,0) e não as
use para definir vértices em si, mas o formato do modelo pode muito bem armazenar
coisas em um. A matemática subjacente não é difícil, apenas não é como a maioria das
pessoas que já passaram algum tempo fazendo álgebra espera imediatamente. Para
algumas das transformações 2D mais profundas, surgirão a mesma matemática e muitos
dos mesmos conceitos.
Tanto GBAtek quanto Tonc têm mais sobre isso, com este último voltado para o GBA
2d.
Ainda existem alguns conceitos selecionados que vale a pena conhecer

ˆProduto escalar

ˆProduto cruzado

ˆMultiplicação escalar

Dependendo do seu ponto de vista, os escalares são números regulares ou uma


matriz 1x1.
[Para terminar]

O ponto decimalO ponto flutuante foi abordado na introdução e certamente não é


difícil ver como a capacidade de representar números após o ponto decimal é útil na
modelagem 3D. Combinado com a necessidade de realizar operações em muitos
dados de uma só vez (um problema resolvido pela introdução deSsolteiro EUinstrução
MmúltiplosDinstruções ata/ SIMD) é por isso que o 3d tende a ter uma peça de
hardware dedicada dentro do sistema e os sistemas terão seu desempenho medido
em FLOPS (operações de ponto flutuante por segundo). O DS tende especificamente a
evitar ponto flutuante em favor do ponto fixo usando
variedade de formatos diferentes para um ponto fixo dependendo da operação.
Alguns métodos de ponto fixo diferentes são usados dependendo de onde você está: sinal
de 1 bit, número inteiro de 3 bits, fração de 12 bits para muitos vetores (geralmente
envolvendo luz e visão).
Sinal de 1 bit + inteiro de 3 bits + fracionário de 6 bits para o comando de conjunto de vértices
de 32 bits (X, Y e Z no mesmo comando, cada um com 10 bits)
Sinal de 1 bit + parte fracionária de 9 bits para o comando de conjunto de vértices de 64 bits
(X e Y em um comando de 32 bits, Z e espaço desperdiçado no próximo) e os comandos

99
que podem ser usados ao reutilizar uma coordenada anterior (defina X e Y, mas use o
mesmo Z ou as outras permutações desse conceito).

2.4.2 Pontos de vista

Assim como a iluminação (abordada em outra parte desta seção), a ideia do ponto de
vista/câmera é importante onde em 2D ambos são, na melhor das hipóteses, um
conceito abstrato. Como o nome indica, é o que decide o que é renderizado (3D
aprendeu desde o início, você só precisa renderizar o que a(s) câmera(s) pode(m) ver)
e, mais importante, pode ser usado para animação (embora na prática haja bugs no
hardware do DS às vezes significa que a câmera não está animada, mas sim o mundo).

Além disso, o DS suporta um valor cuto para que itens além de uma certa distância não
sejam renderizados (isso ajuda o hardware por ter menos tarefas e provavelmente a
imagem resultante por ter coisas que só são visíveis quando pixels únicos não são
renderizados.
É aqui que as matrizes são mais prevalentes, sendo o exemplo principal o de
obter uma visão em perspectiva. O hardware DS suporta renderização ortogonal
que é útil para jogos 2D como New Super Mario Brothers ou jogos que o utilizam
para animações básicas (certas sequências de batalha de RPG) ou renderização
com perspectiva que é útil para jogos do tipo primeira e terceira pessoa onde a
câmera está atrás do jogador.

2.4.3 Texturas e cores dos materiais


O 3D mais antigo apenas definia os pontos nos cantos (vértices) e linhas (muitas vezes
verdes ou cinzas) em um processo conhecido como wireframe; isso não é mais usado,
tendendo a ser reservado para modos de cheat/conteúdo bônus, testando o jogo em
si e aqueles que criam o conteúdo 3D em primeiro lugar, então no lugar disso há
cores e texturas materiais. Dito isto, muitos sistemas, incluindo o DS, ainda permitirão
que o wireframe seja colorido de forma diferente.
Mais adiante, também existem conceitos como mapeamento de relevo, onde a
ilusão de rugosidade da superfície pode ser criada assumindo outra fonte de luz no
objeto, alguns sistemas terão suporte de hardware para isso, mas o DS não e
qualquer um que você ver será o resultado dos responsáveis por modelos e
texturas 3D calculando essas coisas com antecedência (se você planeja fazer algum
trabalho com o DS 3d, a ideia de pré-cálculo aparecerá repetidamente).
As cores dos materiais são exatamente o que parecem e o objeto 3D será colorido
de acordo com um determinado valor em algum lugar, com iluminação e sombras
pode parecer diferente e com cada vértice no caso do DS podendo ser atribuída uma
cor básica modelos coloridos podem ser feitos, porém tende a ficar um pouco liso o
que trouxe a ideia de texturas.
As texturas são mais ou menos imagens 2D colocadas sobre os modelos 3D ou partes deles, o
que é mais exigente do que as simples cores dos materiais. Ao contrário das paletas em 2D, você
pode mapear uma textura para uma parte de um modelo e, em seguida, entre luz/sombras,
certos modos gráficos, ângulos para a câmera e neblina, uma imagem final pode ser gerada que
não se parece em nada com as cores da textura. Para isso, como os pixels que compõem uma
textura não são exatamente o que serão na imagem final, eles são conhecidos como texels.
Também está disponível a mistura alfa com as cores do material para que a textura e as cores do
material se combinem para criar uma imagem.

100
w8_bridge.nsbmd é um bom exemplo aqui.
A primeira imagem é o que parece, a segunda é sem textura.

Também digno de nota é que o 3D viu vários títulos permitirem ao jogador criar
suas próprias texturas, sendo Mario Kart o mais notável e outros comuns incluem
jogos de roupas e jogos como The Sims. Houve um pouco disso em 2D também, mas
não a metade, embora na maioria das vezes as texturas tendam a se manifestar como
imagens 2D de qualquer maneira (certamente algumas edições foram feitas com
editores de blocos 2D quando necessário).
Isso traz à tona um problema secundário que desenvolvedores e hackers há muito
precisam pensar ao tentar mapear uma imagem 2D para um objeto 3D. Fazer isso tende a
causar alguma distorção, então os modelos tendem a ser pintados em 3D com um
programa e depois convertidos em uma textura 2D para armazenamento; para saber mais
sobre esse assunto Desembrulhar textura e Mapeamento UV são bons termos de pesquisa.

Texturas DSAo editar, muitos se parecerão com formatos 2D de tamanho personalizado.


Assim como o 2D, existem opções adicionais e texturas que podem ser repetidas,
icado e muito mais.
GBAtek tem mais sobre os vários métodos e embora às vezes eles se assemelhem a
coisas vistas no mundo da paleta/ladrilho 2D, outras vezes vemos algo bastante
personalizado em comparação.

2.4.4 Modelos
Construções básicas
Existe a ideia de um primitivo 3D, embora isso assuma duas formas como
o DS e hardware de baixo nível e modelagem 3D mais geral.
O hardware DS usa quatro conceitos

ˆTriângulo (três pontos definidos no sentido anti-horário)

ˆQuadrilátero (quatro pontos definidos no sentido anti-horário)

ˆTiras triangulares (três pontos definidos no sentido anti-horário para começar e depois
de cima para baixo ou se preferir no sentido horário no sentido anti-horário)

ˆFaixas quadriláteras (quatro pontos definidos para cima e depois para baixo)

Linhas retas (segmentos de linha) geralmente são feitas definindo dois dos
pontos em um triângulo com o mesmo valor. Da mesma forma, embora haja
pouco suporte ou necessidade de subdivisão no DS, alguns modelos evitaram o

101
dependência de triângulos que diferencia a maioria dos consoles de jogos da modelagem
3D convencional, que opta por quadriláteros.
Embora a modelagem 3D mais convencional reconheça esses tipos como
primitivos (e se não forem primitivos, certamente são fundamentais), além disso,
e ao lidar com ideias de nível um pouco mais alto, existem três outros primitivos

ˆEsferas

ˆCilindros

ˆCubóides

De qualquer forma, quando se faz engenharia reversa de um modelo, os desenvolvedores devem ter
sido gentis o suficiente para deixar uma seleção dessas primitivas e quando se faz engenharia reversa
de um formato, buscá-los e/ou criá-los é uma etapa útil, mas falaremos mais sobre isso mais tarde.

Pai e filhoMuitas vezes é aqui que entra em jogo a ideia de múltiplos sistemas de
coordenadas.
A ideia básica é que existe um conjunto primário de coordenadas conhecido como
mundo (embora observe que alguns chamam o nível inteiro de mundo e é um conceito
separado) e a partir daqui vários sistemas de coordenadas extras podem ser definidos e
conhecidos como filhos; os filhos podem ter mais filhos, mas cada um está vinculado ao pai,
voltando diretamente para o mundo.
Torna-se útil porque ter um nível grande e defini-lo apenas para querer mover um item
dentro dele ou pior em relação a outro item que toca pode se tornar um pesadelo muito rápido e
ainda mais quando há, digamos, 300 pontos definindo aquele item que todos devem ser
contabilizados, possivelmente usando um sistema de coordenadas com uma origem de várias
centenas de uma determinada unidade a partir da localização do modelo no momento.

2.4.5 Iluminação/sombras
Onde 2d é inerentemente considerado iluminado, na verdade todo o esquema de cores é
projetado em torno das diferenças no brilho das cores componentes, iluminação e sombras
como um conceito extra não existem realmente, mas a maioria dos sistemas 3D permitirá
que o fenômeno seja modelado e assim iluminação e sombras precisam ser discutidas.

TeoriaExistem três tipos de reflexão de luz conhecidos como especular, di uso e


emissivo e o DS suporta todos os três em hardware. Onde a luz é bloqueada cria
sombras e onde está parcialmente bloqueada muda a cor da luz que entra, mas o
DS tem suporte muito limitado para ambos os conceitos.

LuzExistem três fontes e todas elas se combinam para criar imagens que os humanos
estão acostumados a ver. Embora o DS os suporte, a maior parte é uma aproximação pré-
calculada/boa. A aproximação, entretanto, é comum em grande parte do 3D,
independentemente de onde ela esteja.

EspecularEste é o conceito tradicional de reflexão onde um único feixe,


desde que esteja abaixo do ângulo crítico para um material, será refletido.

102
Di usoEsta é a luz espalhada frequentemente vista em estruturas cristalinas, mas
muitos materiais terão uma medida de reflexão difusa.

EmissivoComo o nome indica, esta é a luz gerada por um objeto.

Existem também três tipos de fonte de luz e, embora seja a chave para a maioria das
modelagens de luz, são uma fonte esférica (luz em todas as direções e diminuindo de
intensidade com a distância), uma fonte cônica (luz se expandindo como um cone com a
distância e também caindo com a distância). intensidade) e um tubo/fonte paralela (pense
no feixe de laser onde um único conjunto de feixes de luz paralelos e sem diminuir a
intensidade com a distância). Eles não são tão importantes aqui, pois apenas as fontes
paralelas estão disponíveis para o DS, embora possa haver múltiplas fontes provenientes
de vários locais e são refletidas de acordo. GBAtek também observa que o mecanismo de
luz di use do DS está bugado e não reflete corretamente se a câmera for girada, então
nesses casos o di use não é usado ou o mundo inteiro é girado.

SombrasSe há luz, deve haver sombras para acompanhá-la. O mecanismo de


iluminação do DS fornece apenas luz para a câmera, mas também tem a capacidade de
gerar sombras como entidades separadas. Como mencionado em 2d, a falta de sombras é
bastante notável ao olho humano, mas pode ser aplacada adicionando uma simples
sombra circular na maior parte do tempo.

Noções básicas do DSO DS suporta luz nas três formas, embora seja apenas re-
diretamente para a câmera e não para outros objetos. Como mencionado, no entanto, fornece a opção
de criar sombras usando um polígono para que os desenvolvedores possam pré-calcular as sombras e
adicioná-las às imagens e muitas vezes optam por adicionar também uma sombra básica (nenhuma
sombra é bastante perceptível, mas mesmo uma sombra básica de bolha/círculo ajudará credibilidade).

2.4.6 Fumaça e neblina 3D


Embora na vida real a névoa e a fumaça sejam tratadas como conceitos semelhantes no que diz
respeito à modelagem física em jogos, as diferenças são bastante extremas, embora os
desenvolvedores sejam frequentemente conhecidos por fazerem um substituir o outro.
O nevoeiro é mais comumente associado à distância de visão e, na verdade, geralmente
existe para compensar o hardware ser incapaz de avançar o suficiente em tempo real, embora
jogos como Silent Hill o usassem como parte do jogo. Deve-se notar, porém, que os
desenvolvedores também farão coisas como criar corredores sinuosos, usar um camarote, fazer
com que as coisas tenham árvores/edifícios em ambos os lados do próprio nível e usar condições
de pouca luz para mascarar a incapacidade de desenhar em longas distâncias, para não falar de
coisas como mapeamento mip e sobreposições 2D, mas mais sobre isso em animações e truques
de desenvolvedor na parte 3.
Voltando ao tópico, o hardware DS tem uma opção de neblina, assim como a maioria dos outros
hardwares/motores 3D que aspiram ser úteis; ele fornece a capacidade de definir a cor da neblina
(incluindo alfa), localização e densidade (normalmente para permitir que as coisas desapareçam, mas
não se restrinja a isso).

Fumaça Supondo que não seja o resultado do motor de neblina ser usado com mais fumaça
é uma animação 2D simples, talvez como uma textura para um item com uma textura
animada ou como imagens 2D convencionais. Em outros computadores houve

103
vários algoritmos de geração de fumaça que são consideravelmente menos exigentes, mas
geralmente estão fora do alcance do DS e certamente não são suportados em hardware.

2.4.7 Animações
A animação básica foi mencionada em outro lugar, mas assume três formas principais.

Animação de ossosOs tipos tradicionais de transformação de rotação, escala e


translação retornam e fornecem a maioria das ideias aqui.

Animação de texturaAs texturas podem ser adicionadas, removidas, ter seu nível de alfa
alterado, combinadas com outras texturas (digamos, o resultado de uma explosão), ter o
espelhamento e a expansão/escala desativados e em sistemas mais avançados que incluem
o DS, a origem da textura pode ser mudou criando um efeito semelhante ao BG de rolagem
da animação 2D. Além disso, por que se esforçar para desacoplar o volante de um carro e
fazê-lo se mover quando você pode simplesmente girar a textura do volante (ou mesmo
fazer com que uma linha branca brilhante se mova para cima e para baixo ou trema).

Animação de câmeraMuito parecido com a vida real, embora você possa girar o
mundo inteiro para que algo apareça de cabeça para baixo, geralmente é mais fácil
mudar, virar a coisa vendo-a de cabeça para baixo e da mesma forma para os outros
tipos de transformações. Eles se lembram do bug com a rotação no DS e a reflexão
difusa (se uma câmera faz um ângulo holandês, provavelmente é o mundo que girou).

RecorteMais uma área digna de uma seção própria. O 3D por si só é apenas um


método de imagem e a própria câmera pode ir a qualquer lugar dentro do espaço
fornecido sem restrições. Naturalmente, isso não é desejável para jogos, então o
recorte entra em ação e pode assumir várias formas com alguns hardwares e
mecanismos de jogo, fornecendo até mesmo uma medida de suporte para ele. Às
vezes, o recorte pode ser detectado usando o próprio hardware 3D, semelhante a
alguns sistemas de nível que usam OAM para 2D, mas no DS na maioria das vezes é
outro arquivo que espelhará o nível (como desenvolvedor, não é terrivelmente difícil
gerar um se você tiver o nível à sua frente) será feito com um bom exemplo sendo o
formato KCL usado em muitos jogos originais da Nintendo, como a série Mario Kart.

Sobreposições 2DEmbora as coisas possam ser feitas em 3D, todos os sistemas 3D


adequados funcionarão também com o hardware 2D, variando de coisas tão simples
como camarotes onde o horizonte é visível, mas em vez de ser uma única cor, haverá
uma imagem 2D colocada nele do que o seria o horizonte (ou o céu acima dele) e
como está incrivelmente distante neste ponto. Alguns motores 2D vão um passo além
disso e substituirão objetos reais à distância por representações 2D e os trocarão por
3D à medida que a distância até eles se torna menor.
Outros, em vez de criar um modelo completo de uma planta (tradicionalmente
algo bastante difícil de fazer e exigente depois de feito), farão uma caixa muito fina,
torná-la-á transparente, guardando a planta e exibindo-a. Um exemplo do

104
a ideia pode ser vista em map_point.nsbmd de New Super Mario Brothers no
DS.
Na verdade é o pequeno marcador para os níveis que foram feitos a partir do
mapa mundial mostrar como está no jogo, como wireframe e como está sem textura.
Observe também o potencial para um destaque especular que neste caso é feito em
texturas.

Animações também podem acontecer aqui e fumaça ou faíscas podem ser simples animações 2D
definidas em um determinado ponto.
Basicamente, independentemente do que é feito, as imagens 2D desempenham um papel
importante na criação de mundos 3D. Falando nisso acaba ficando 2d no caso do DS.

2.4.8 Hardware DS 3D
GBAteka tem muitos detalhes sobre o assunto, mas vale a pena conhecer o básico por trás
do hardware 3D.
A ideia geral é que exista um mecanismo de geometria e um mecanismo de
renderização. O mecanismo de geometria é com o qual o DS se comunica e calcula as
alterações necessárias antes de passá-las para o mecanismo de renderização (um processo
acionado por um comando Swap Bu ers) que reúne tudo e cria uma imagem do resultado
ou seria, mas em vez de Em um quadro inteiro renderizado (também conhecido como uso
de framebu er), apenas 48 linhas são renderizadas por vez e colocadas em um cache.

A comunicação normalmente é feita por meio de registros somente de gravação começando


em 4000330 hex e terminando em 40006A4 hex. O registro de controle de exibição para 3d
(DISP3DCNT) é encontrado em 4000060 hex e controla quais modos são selecionados. Enterrado
no intervalo 3d IO está o intervalo de comandos de geometria que pode ser acessado diretamente
ou enviar uma série de comandos por meio do arranjo GXFIFO, onde os comandos de geometria
podem ser chamados por tipo.
Embora algumas contas possam ser feitas, é um arranjo de nível bastante baixo e há
poucas construções de alto nível em comparação com a programação para um PC moderno
ou mecanismo de jogo 3D direcionado a console, onde os próprios modelos são
essencialmente tipos de dados.

MatrizesOs emuladores DS desmume e no$gba dev version permitirão que você


visualize as matrizes.

105
Embora exista uma pilha de matrizes que permite que as coisas sejam trocadas em um
curto espaço de tempo, existem quatro pilhas principais que são úteis em qualquer
momento. Uma vez que você sabe que a matriz de direção se refere à direção da luz, a
maioria é bastante autoexplicativa e se você se lembrar de uma nova transformação e
modo7 do lado 2D das coisas, a maior parte delas se encaixa.
Ainda

Projeçãolida com a mudança entre vista ortogonal e em perspectiva e


embora esses sejam os dois principais, ele pode lidar com tudo o que está entre eles.

Posiçãolida com as localizações finais dos vértices

Direçãousado para luz e os vetores de teste (a luz é o mais comumente


manipulado).

106
Texturalida com o mapeamento de textura usando os modos de textura que o hardware
apoia.

Eles são definidos selecionando o modo escrevendo em 4000440 hex, também conhecido como registro MTX_MODE,
também conhecido como comando 10h, após o qual existem comandos de gravação de matriz, comandos de leitura
(para recorte), vários comandos de multiplicação e leitura, bem como comandos de manipulação de pilha.

GBAtek cobre o básico aqui.

2.4.9 A mudança do 3D para DS 2d


Como mencionado, o hardware 3D não é endereçável diretamente na memória e não está
realmente vinculado à renderização da tela, portanto, os quadros resultantes da
renderização 3D são transferidos para a camada BG0 do mecanismo A, onde pode ser feita
a seleção normal de sobreposições e sprites. (muitos jogos também renderizam um fundo
3D para colocar atrás do jogo). Dito isto, o BG0 pode ser posteriormente transferido (com
uma penalidade de velocidade) e usado em outro lugar, com o destino típico sendo o motor
B ou o hardware de captura. Ao mudar as prioridades das camadas, é assim que muitos
jogos aparentemente 2D (como Castlevania) poderiam usar o hardware 3D para renderizar
um fundo 3D e ter um jogo 2D convencional rodando em cima disso.

2.4.10 NSBMD
NSBMD é o formato SDK 3D padrão usado por muitos jogos, o que significa que alguns
apareceram antes do NSBMD ser finalizado e outros, como alguns jogos de Yu Gi Oh, têm
seu próprio formato personalizado. Também foi visto algumas vezes com as texturas
mapeadas para um quadrado simples nas telas de título e, como mencionado em outro
lugar, alguns jogos de plataforma ostensivamente 2D, como New Super Mario Brothers,
usaram os sistemas 3D no lugar de sprites 2D; observe que esta não é a pré-renderização
do estilo SNES Donkey Kong ou Resident Evil da Rare, mas o movimento 3D real restrito a
um mundo 2D. Também levou à introdução do 2.5D, mas essa é uma discussão diferente.

A idéia básica é que NSBMD seja um formato baseado em coordenadas 3D com


suporte para cores de materiais, texturas, pontos para conectar em animações e nada
mais. Às vezes é marcado pelos formatos NSBTX (texturas opcionais) e NSBCA
(animações) quando necessário e você provavelmente também deve se lembrar que
BMD ou BMD0 é o modelo real contido nele (ele compartilha um selo com formatos
3D para o gamecube e wii neste respeito). Assim como a maioria das coisas no DS, ele
é bastante próximo do hardware em que termina de várias maneiras.

Ferramentas e especificações

ˆferramenta nsbmd

ˆEspecificações do kiwi.DS NSBMD

ˆespecificações lowlines (também NSBTX e NSBCA)

ˆlowlines é a ferramenta de console

ˆmexer

ˆmodificador de curso mkds

107
ˆExtrator NSBTX
Nsbmdtool é a ferramenta criada a partir das primeiras tentativas de engenharia reversa do
formato NSBMD e embora não tenha a capacidade de renderizar muitas imagens desde que foi
descoberto, ele tem a capacidade de analisar modelos 3D e fornecer localizações dos modelos,
texturas e ideias semelhantes contidas dentro do formato, o que significa que ainda é inestimável
para editar modelos, sejam eles de títulos novos ou antigos.
A ferramenta de console do lowlines é uma tentativa mais recente de engenharia reversa das
especificações e se saiu melhor que o nsbmdtool em muitos casos.
Tinke inclui um visualizador de textura e versões posteriores incluem um visualizador de
modelo, bem como uma excelente versão legível dos eventos.
O extrator de curso MKDS inclui recursos de visualização NSMBD e alguma capacidade de
manipulação.
O NSBTXExtractor visa principalmente a extração de texturas, mas funciona em
muitas coisas e simplesmente ser capaz de extrair texturas ajuda em muitos casos.
Existem ferramentas adicionais, mas geralmente são editores de salvamento específicos do jogo e
similares (editores de emblemas de Mario Kart, editores de textura de Animal Crossing em salvamentos
e outros).

Hacks básicos de NSBMD

Existem quatro hacks principais feitos aqui, embora muitos deles também sejam traduzidos
para outros formatos 3D.

ˆHacks de sistema de arquivos

ˆHacks de modificação de textura

ˆEscala e pequenos ajustes

ˆHacks completos de injeção/modding

Os hacks do sistema de arquivos são muitos e variados, mas foram vistos no início, como os hacks
do curso Mario Kart (foi mencionado em outro lugar, mas Mario Kart usou um formato KCL para o
layout da pista, portanto, ao contrário de muitos jogos em máquinas mais poderosas,
simplesmente editar o modelo não fazer muito) e vários hacks desde então. Observe que
animações e texturas muitas vezes podem ser vinculadas a um determinado modelo e coisas
estranhas podem acontecer se forem alteradas, com alguns bons exemplos sendo vistos em
alguns dos hacks do Super Smash Brothers para Wii. Ocasionalmente, foi tentada injeção de
outros jogos, embora geralmente funcione melhor quando se trata de uma franquia semelhante.

Hacks de modificação de textura não são tão comuns, mas também não são tão difíceis.
Geralmente, uma combinação de algo como nsbmdtool, tinke e olhar as especificações
permitirá que você direcione um editor de blocos para o local apropriado, obtenha as
dimensões necessárias (geralmente são um múltiplo simples de 8 para cada dimensão, mas
nem sempre) e obtenha a paleta apropriada classificada que permite a edição 2D
convencional. Por meio de paletas lógicas semelhantes e quaisquer ajustes para as texturas
também podem ser editados.
Escala e pequenos hacks. Com os modelos 3D sendo vinculados diretamente
aos pontos que os criaram, pequenos hacks são bem possíveis se o possível
hacker conseguir controlar o layout do modelo no arquivo.
A injeção completa usa várias técnicas que vão desde o uso de partes vazadas do
nitroSDK (partes vazaram e incluíam plug-ins para versões mais antigas do

108
vários programas de modelagem 3D padrão da indústria, como 3ds max, maya e Softimage 3D/XSI, que
exportavam arquivos para um formato intermediário e software de conversão para esse intermediário),
onde outros fizeram coisas como exportar imagens para um formato legível por humanos e entre
visualizadores e edição hexadecimal conseguiu mudar os modelos o suficiente para contar como um
hack de injeção completa. No momento em que este artigo foi escrito, não havia nada que se parecesse
com um editor de alto nível dos próprios modelos, seja autônomo ou por meio de plug-ins.

Exemplo de hack menor


A seguir está um exemplo rápido de um pequeno ajuste no modelo.
map_point.nsbmd de New Super Mario Brothers será retornado, pois ter apenas
quatro vértices significa menos chance de ficar atolado em um modelo complexo. O
modelo pode ser elaborado a partir da especificação, mas Tinke fornece uma boa
saída legível por humanos

polygon0 é o item de escolha e depois dele devem estar os comandos. Observe que,
como é um quadrado e, portanto, compartilha algumas coordenadas de ponto a ponto, os
comandos de hardware 3D menores podem ser usados para gerá-lo; caso os pontos sejam
diferentes em todas as três coordenadas, serão necessários comandos mais longos.

109
É melhor mudar um único vértice para começar, então 01D9 foi alterado para
80
Wireframe da versão modificada e da versão original

110
Com texturas

Hack básico de visualização de texturas

As texturas geralmente são armazenadas apenas como imagens 2D de algum formato,


embora lembre-se de que pode não ser um formato de cor comumente visto na edição 2D
normal (veja as notas de hardware para texturas 3D do DS). Isso geralmente não é tão ruim
como editar sem a paleta adequada usando um método um tanto abstrato (se você sabe
que este verde corresponde ao vermelho na imagem ainda é possível editar) um editor de
blocos é pouco mais que um editor hexadecimal que mostra pixels coloridos em vez de
letras e pode organizá-los em mais algumas ordens, apenas certifique-se de ter todas as
cores exclusivas se fizer isso ou corre o risco de ficar bastante confuso. Você poderia tentar
exportar a textura em algo para um formato bitmap e importar a paleta dele também.

O jogo é Fire Emblem – Shin Monshou no Nazo Hikari to Kage no Eiyuu. Ele usou (como
a maioria dos títulos de emblemas do DS) texturas 3D para ajudar com imagens 2D.
O arquivo é title_logo.md (a série tem o curioso hábito de usar apenas as duas
últimas letras das extensões do SDK) do diretório title12.

111
Saída da ferramenta NSBMD
Nsbmdtool, apesar de ser antigo e não funcionar em muitos NSBMD, eles, podem

fornece alguns resultados úteis.

112
Saída Tinke
Tinke fornece duas janelas com informações úteis de saída.

113
Localização da paletaMuitas informações foram fornecidas, mas nenhum endereço direto da
paleta em questão.
A paleta definida é fornecida em 38 hexadecimais na seção TEX0.

TEX0 começa às 1E30


Paleta definida como 0001 AA68 (dentro da seção tex0)
Isto dá 0001 C898 como o início da seção da paleta. Não é contudo
o primeira paleta na seção de paletas (é a terceira embora a numeração comece
em 0, então 2 é o número real se estiver usando lógica interna)
Tinke diz 13E0 que precisa ser deslocado/dividido por 2 para obter 09F0. Adicionando
isso dá
0001D288 hexadecimal

Filtragem Crystaltile2Definir os locais apropriados conforme fornecido em tinke e


na saída nsbmdtool.
A compensação foi dada por nsbmdtool e tinke. 16 cores também conhecidas como 4bpp.

114
Configurando a paleta.

A partir daqui é necessária a edição básica de imagens, embora observe o


gradiente. Parece que há uma periodicidade na direção X de certa forma (há um
sombreamento estranho nos caracteres nas larguras mais curtas), mas larguras
verticais mais ou menos mais curtas que perturbam a direção X e as marcas acima da
segunda e terceira da direita poderia ser feito para ter uma constante. Certamente
seria bem possível fazer uma máscara de camada depois de recriar uma versão mais
básica do gradiente.

Decodificação de comandos à parte

Voltando ao map_point.nsbmd de New Super Mario Brothers e alguns dos comandos


decodificados como um exemplo rápido. Mais uma vez, Tinke fornece uma boa saída
legível por humanos

115
Sendo um quadrilátero único é definido no sentido anti-horário sendo o primeiro comando o
ponto 0.

Ponto 0Cmd 24 hex, também conhecido como VTX_10, define a coordenada do vértice com 3 dez
bits (bit assinado, 3 bits, fração de 6 bits) com os 2 bits superiores ignorados.
19028270 hexadecimal

0001 1001 0000 0010 1000 0010 0111 0000 binário


Dividindo
(os dois bits ignorados)
0 110 010000 = + 6,25 0
010 100000 = + 2,5 1 001
110000 = - 1,75 Z

S
X

Ponto 1O comando 25 hex, também conhecido como VTX_XY, tem apenas dois pontos com
o ponto Z considerado igual ao anterior.
Bits completos usados (0 a 15 sendo X, 16 a 32 sendo Y)
assinados, 12 bits atribuídos à parte fracionária 28006400
hexadecimal
Dividindo
0010 1000 0000 0000 0110 0100 0000 0000 binário 0
010 1000 0000 0000 = + 2,5
0 110 0100 0000 0000 = + 6,25 E

Ponto 2O comando 26 hex, também conhecido como VTX_XZ, assume que o ponto Y é
igual ao anterior e define X e Z. Mesma divisão de bits dos outros dois comandos de
ponto.
9C006400 hexadecimal

1001 1100 0000 0000 0110 0100 0000 0000 binário


Dividindo
1 001 1100 0000 0000 = - 1,75

116
0 110 0100 0000 0000 = + 6,25 Z

Ponto 3Comando 25 hexadecimal, também conhecido como VTX_XY retorna


28009c00 hexadecimal

0010 1000 0000 0000 1001 1100 0000 0000


hexadecimal Dividindo
0 010 1000 0000 0000 = + 2,5 1
001 1100 0000 0000 = - 1,75 Y

2.4.11 Não NSBMD


Embora o NSBMD seja um formato muito bom, os desenvolvedores tentaram criar o seu
próprio por vários motivos, incluindo recursos adicionais que o formato NSBMD pode não
ter, o que foi visto diz que a maior parte do SDK para ele requer o uso de certas
modelagens caras (embora padrão da indústria). pacotes, portes de outras plataformas
(embora nenhum formato convencional de alto nível de qualquer forma tenha sido visto até
agora e qualquer um que seja visto é mais provável que seja um desenvolvedor deixado
extra) ou que o NSBMD não tenha sido finalizado neste ponto (Metriod Prime Hunters
sendo um bom exemplo disso e também uma das primeiras ferramentas para isso no
DSGraph).
Como foi mencionado algumas vezes e será mencionado mais algumas vezes
antes de isso ser feito, os formatos que o produto final usará em sistemas
embarcados tentarão ficar razoavelmente próximos do hardware que eventualmente
os utilizará (veja coisas como formatos de áudio personalizados no DS tende a ser
wrappers para áudio PCM ou ADPCM, que é o que o hardware DS suporta), e é por
isso que o hardware em si foi coberto e o NSBMD recebeu uma seção em vez de ser o
foco principal do hacking 3D. Ele não usava formatos 3D padrão, mas a troca de
modelos ainda era possível.

Yu Gi Oh WC 2011Uma tentativa de extrair os modelos do Campeonato Mundial de Yu-


Gi-Oh de 2011 logo revelou que o jogo não usava os formatos NSBMD e o que estava
lá não parecia especialmente com o tipo de coisa que o NSBMD normalmente é
chamado para lidar.
Depois de quebrar os formatos do wrapper para revelar o NARC e depois de
extrair muitos arquivos foram obtidos com um exemplo sendo
m8970_matanm.bin
m8970_mdl.bin
m8970_mdlanm.bin
m8970_texanm.bin
A maioria dos grupos eram apenas arquivos mdl e mdlanm, com os extras de ocasião
tendo texanm e matanm, o que faz sentido uma rápida execução do jogo, pois nem todas
as criaturas têm animações complexas. mdl presumivelmente expandido para modelo e os
outros provavelmente eram animação de modelo, animação de textura e animação de
material. Havia também um único visanm le. Uma pesquisa de strings no menor
le e outros arquivos mdl produziram alguns resultados interessantes

117
m7091_mdl.bin era o menor arquivo e tinha strings como pSphere e pCylinder
dentro dele, onde outros eram nomeados como braço e asa, bem como muitos
nomes japoneses romanizados para coisas semelhantes e conceitos 3D (Blinn
(phong) e Lambert entre outros coisas).
Os menores arquivos e nomes apontados diretamente para extras deixados pelo
desenvolvedor (círculo e primitivos) e onde tentar descobrir mapeamentos que podem ser
girados, dimensionados e atribuídos a diversos relacionamentos e coordenadas pai/filho pode ser
complicado saber como um conjunto básico de primitivos funciona poderia ser útil para posterior
engenharia reversa.
O cabeçalho do formato passou por engenharia reversa adicional. [Para
terminar]

2.5 Notas e leituras adicionais


Os jogos geralmente levam em conta isso, mas para poder lidar com isso caso surja
necessidade, o painel entre as telas superior e inferior do DS é considerado de 90
pixels.
Diagrama de blocos de vídeo GBAtek DS
Vale a pena estudar um pouco, embora possa tornar as coisas mais lentas, usar
qualquer coisa diferente do método mais curto para enviar a captura uma ou duas
vezes pode criar alguns efeitos interessantes.
Uma coleção de alguns links de codificação de hardware e software
Vídeo de mordida de vaca GBA. Cowbite já foi um documento vinculado ao GBAtek
para discussão de hardware GBA.
Vídeo GBatek DS. Na maior parte, é semelhante ao GBA, mas cobre as
diferenças que existem.
TONC no vídeo GBA. Um bom exemplo prático de como grande parte do hardware
de vídeo GBA funciona e não é tão diferente para o DS.
TONC. Um tutorial de programação GBA, mas cobre muitos dos conceitos
subjacentes às coisas.
pineight.com Técnica de streaming VRAM. Abrange métodos pelos quais as
limitações no tamanho do GBA VRAM podem ser superadas.
Programação gráfica geral
gamedev.net tem um bom guia para muitas edições gráficas, embora às vezes
fique um pouco baixo.
O Guerrilla CG Project possui uma série de vídeos bastante curtos que cobrem o
básico do 3D. Há também outro vídeo cobrindo mapeamento UV para texturas.

118
3 Texto
Os jogos podem e têm armazenado seu texto como gráficos simples, mas os desenvolvedores
aprenderam rapidamente que, para jogos mais longos, isso não é muito útil em vários níveis, de modo
que os jogos há muito apresentam decodificação de texto e mecanismos de exibição. Esses mecanismos
são muitas vezes itens altamente personalizados, com várias habilidades e restrições que as pessoas que
os hackeam precisam descobrir e perdem apenas para os arquivos e montagem do nível do jogo em
termos de como as coisas podem ser personalizadas. Os jogos ainda têm texto nas imagens que podem
exibir, muitas vezes para jogos com pouco texto, como jogos de quebra-cabeça, mas nem sempre, e
qualquer coisa altamente estilizada provavelmente são gráficos e, inversamente, alguns dos primeiros
hackers alteraram a codificação dos caracteres para que eles aparecessem como outros em
determinados lugares (muitas vezes bagunçando o texto no resto do jogo).
Mesmo assim, os mecanismos de texto fazem parte dos jogos agora e, como tal,
os aspirantes a hackers de ROM precisam saber como lidar com eles. Saiba que os
jogos podem, e muitas vezes usam, múltiplas versões dos conceitos a seguir no
mesmo jogo e até mesmo na mesma tela ao mesmo tempo.

3.1 Tabelas
Mais recentemente, tem havido esforços para transformar as tabelas em um conceito de nível
superior (proposta de formato de arquivo de tabela), o que é bom, pois permite hacks mais fáceis
no final, mas classicamente falando, as tabelas são apenas arquivos de texto simples contendo
uma longa lista de números hexadecimais de vários comprimentos e o que eles representam em
texto legível. Uma das outras razões para o padrão proposto acima é que existem vários tipos de
formato de arquivo de tabela com capacidades variadas.
Não há nada que impeça que um caractere seja codificado várias vezes (na verdade, isso geralmente
é feito como uma forma barata de escrever texto em negrito, pequeno, itálico ou de outra forma
estilizado), codificando vários caracteres em uma única entrada (um processo conhecido como duplo ou
múltiplo). codificação de blocos) e ou até mesmo misturar codificações/conjuntos de caracteres de 8 e 16
bits (isso incomoda muitos leitores/decodificadores de texto mais simples, pois eles esperam que tudo
tenha o mesmo comprimento e talvez até alinhamento).
Normalmente eles estariam todos em linhas separadas mas por uma questão de legibilidade
aqui está um exemplo de codificação usada pela fonte kiaro1212 do Golden Sun Dark Dawn

A maioria dos editores hexadecimais convencionais não suportam tabelas/codificações


personalizadas de uma maneira útil para hackear ROM (isto é, fácil de carregar um único
arquivo com uma codificação personalizada completa, vários suportarão a alteração de caracteres
estranhos), então temos editores hexadecimais específicos para hackear ROM com os principais

119
sendo Transhlextion e WindHex32, embora faltem alguns dos recursos de um editor
hexadecimal mais geral como o Hex Workshop. Crystaltile2 e algumas das ferramentas
relacionadas também possuem uma medida de suporte de mesa.

Criação de tabelas e descoberta de codificações personalizadas

Existem vários métodos usados para descobrir a codificação de texto de um jogo. O


O primeiro passo para algo assim é verificar se ele usa ou usa uma codificação
conhecida o suficiente para começar a fazer as coisas.
No que diz respeito aos hackers de ROM, isso se divide em três tipos

1. Codificações convencionais conhecidas - coisas como ASCII, shiftJIS, euc-JP, UTF


16 unicode e UTF-8

2. Codificações conhecidas de jogos e empresas de jogos - A Capcom possui uma tabela usada
em vários de seus jogos e jogos com tabelas japonesas muitas vezes usando fragmentos
de codificações existentes (sejam de outros jogos ou codificações convencionais).

3. No caso do DS, a fonte NFTR carrega as informações de codificação da fonte dentro


dela e outros formatos que fazem coisas semelhantes também foram vistos. Em
muitos casos você pode extrair uma tabela dela, mas outras vezes você terá que criar
uma manualmente usando as codificações (ou usar OCR)

Embora raramente seja visto, mais jogos podem fazer um tipo de compactação onde se o
primeiro caractere/byte hexadecimal for repetido em um valor de 16 bits, o jogo pode assumir
um valor de 16 bits e assumir que todos os seguintes também devem ser decodificados com o
primeiro caracter/byte hexadecimal até que seja informado o contrário (por exemplo, em shiftJIS
todo o alfabeto romano, Hiragana e katakana terão o primeiro byte como 82 ou 83, embora
permita uma codificação de 16 bits). Um segundo conceito interessante que também raramente é
visto hoje em dia é que os jogos podem trocar codificações à vontade, sinalizando como tal, mas
não se preocupe com isso, pois é realmente muito raro (é muito mais provável que seja outra
coisa).
Uma nota sobre Unicode.A postagem unicode de Joel on Software detalha muitas coisas que é bom
saber sobre o padrão de codificação conhecido como Unicode. Agora, ao contrário da codificação
bastante simplista que a maioria dos jogos usa, o Unicode é na verdade bastante abrangente e não
necessariamente difícil de implementar, mas não é uma simples tradução de um comprimento definido
de hexadecimal para um caractere conhecido com o qual a maioria dos hackers de ROM se preocupa
(quaisquer extras sofisticados geralmente são uma opção definida com a qual a equipe de codificação
recebe a chamada). No entanto, existe uma versão simplificada do Unicode que forma a base de
algumas codificações no hacking de ROM, conhecida como UTF16 Unicode (às vezes u16 Unicode), que é
sempre de 16 bits (sem ags ou outras coisas semelhantes), que definitivamente vale a pena conhecer
como os jogos tendem a usá-lo; em suma, ele evita habilidades como texto da direita para a esquerda e
caracteres de comprimento variável em favor de comprimentos definidos de 16 bits e, no que diz
respeito à maioria dos jogos, não há extras. Ainda assim, se você quiser uma boa ferramenta para ajudá-
lo, dê uma olhada no The unisearcher.
Supondo que não seja uma codificação conhecida ou que uma codificação conhecida represente apenas
parte dela, depois disso, você terá que realmente descobrir o que está acontecendo.
Existem várias maneiras de fazer isso, desde simples e não confiáveis, mas não
universais (especialmente no que diz respeito ao japonês), até complexas, mas que
resolverão qualquer coisa. Combinar métodos aqui não é apenas uma boa ideia, é sugerido

120
Traduzido do Inglês para o Português - www.onlinedoctranslator.com

e encorajado. Há uma certa sobreposição entre encontrar o texto na própria ROM e


descobrir como ele é codificado com vários métodos, se não fazer as duas coisas ao mesmo
tempo e então ajudar seriamente o outro.

3.1.1 Pesquisa relativa


Voltando à mesa do Sol Dourado e olhando para o lado do caráter romano das
coisas
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=Eu
4A=J
A palavra BAD seria codificada como 424144
Se você então procurou na ROM de um arquivo que você suspeita ser texto (assumindo que
você não teve nenhuma compactação ou já lidou com isso) por quaisquer strings com um valor e
o próximo menor e os novos dois maiores que o original você irá bastante muitas vezes obtém o
texto que deseja. A maioria das ferramentas de pesquisa relativa são de 8 bits, mas você pode
obter ferramentas de pesquisa relativa de 16, 24 e até 32 bits.
Existem vários truques e coisas que você pode fazer para aumentar a probabilidade de
conseguir o que precisa.

ˆSe você suspeitar de uma variável (valor de algo em uma loja, nome do personagem se
você tem permissão para personalizá-lo, quantidade de HP e assim por diante) ou você vê algum
efeito sendo aplicado ao texto (mesmo que seja apenas texto em negrito ou itálico, pois os jogos
não renderizam fontes como os computadores padrão, mas têm vários caracteres) tente em
outro lugar, pois provavelmente será algo totalmente diferente no texto (consulte marcação e
espaços reservados algumas seções mais adiante para obter mais informações).

ˆSe você vir algo que possa ter codificação dupla (nomes de caracteres
muitas vezes são mesmo que você não possa alterá-los) ou é um símbolo (-por
exemplo, e os jogos muitas vezes codificam sua seleção sim/não como um único
bloco) tente outra coisa.

ˆQuanto mais longo (até certo ponto) é melhor, três caracteres como no exemplo acima são
pressioná-lo e encontrar dois personagens vai, na melhor das hipóteses, deixar você com um
monte de coisas para percorrer até encontrar as coisas boas.

ˆSe o texto parecer dividido em duas seções, evite-o ou reduza o


procurar.

ˆNuma frente mais positiva, você pode viver perigosamente e procurar um ponto comum.
frase (a palavra the com um espaço de cada lado provavelmente aparecerá no
texto em inglês) ou uma frase específica do jogo (moogle em Final Fantasy, por
exemplo).

121
ˆO japonês não apresenta ordenação em Kanji e o kana possui apenas uma ordem fraca
ordem (para não falar das coisas estranhas que os jogos fazem para Handakuten e
Dakuten), mas você pode fazer algumas coisas se suspeitar de uma ordem (a ordem das
fontes e a ordem da codificação geralmente são as mesmas).

Muitas ferramentas de editores hexadecimais de grau de texto para hackear ROM apresentam pesquisa relativa,
mas para os fins deste guia, existem duas ferramentas principais que você desejará examinar

Macaco Moore Downloads letrip da página do


Macaco Moore github de Monkey Moore
Uma ferramenta de pesquisa relativa autônoma e voltada para esse tipo de coisa
(onde outras geralmente são implementações muito simples da teoria/técnica de
pesquisa, ela tem mais algumas opções e funciona melhor com a linguagem).

Cristaltile2Download de viagem de arquivo


Em alguns aspectos, não tão polido quanto Monkey Moore (você pode ter uma tabela
bastante bem realizada de Monkey Moore em 30 segundos, onde você teria dificuldade para fazer
isso com isso), mas apresenta uma bela pesquisa relativa de 16 e 32 bits que você pode usar.

Exemplos de pesquisa relativaO jogo escolhido aqui é Megaman ZX, embora a mesa já
tenha sido vista em vários jogos da Capcom. Por acaso, as letras minúsculas na tabela
se alinham com os equivalentes maiúsculos ASCII, o que significa que a pesquisa
relativa provavelmente não é tão útil, mais ou menos um pequeno atalho na criação
de tabelas. No entanto, é um pouco menos abstrato do que algumas outras tabelas,
por isso é um bom exemplo disso.

122
Em macaco moore

Uma pesquisa usando um curinga em uma versão mais antiga

123
Versões posteriores incluíam suporte para kana usando a ordem Gojuon (embora você
provavelmente queira usar curingas entre os caracteres para permitir entradas de 16 bits).
Nem sempre é viável graças ao Handakuten e ao Dakuten (marcas extras adicionadas ao
Kana para indicar a pronúncia), mas é uma das poucas ocasiões em que pesquisas relativas
podem funcionar de maneira razoável/não esotérica com o japonês.

Pesquisa relativa Crystaltile2


Disponível na janela do editor hexadecimal no menu suspenso de ferramentas.

O uso é bastante autoexplicativo e você pode clicar duas vezes nos resultados para definir a localização
na janela hexadecimal. Irá salvar esses resultados em um arquivo de texto semelhante aos resultados
página que permite direcionar um criador de tabelas mais convencional. Você
também pode inserir caracteres japoneses, embora unicode, em vez de
shiftJIS é o método padrão
Ele também possui uma pesquisa de valor um pouco mais funcional do que as versões posteriores

124
do macaco moore. O uso é definir as opções conforme necessário em termos de comprimento e
tipo de entrada e adicionar caracteres um de cada vez antes de pressionar pesquisar.

Observe também o penúltimo resultado visível e considere-o um motivo para querer termos de
pesquisa mais longos.

125
A pesquisa Monkey Moore foi usada para criar uma tabela e depois foi importada para
o Crystaltile2

Ainda não está completo devido à pontuação ausente, mas é aí que entram
os outros métodos. Aqui é bastante óbvio que 07 hex representa o caractere
apóstrofo e 00 representa o espaço que leva a

126
Dando uma olhada na fonte do jogo, há muito mais do que isso, então outros
métodos terão que ser empregados

Em relação aos botões vistos na fonte a fonte Japonesa é uma matriz de 16 x 16 então o
jogo provavelmente leva isso em algum lugar (formatos de fonte complexos com caracteres
individuais sendo atribuídos a um tamanho5são bem possíveis no DS), mas houve casos de
metade de um caractere sendo codificado em dois caracteres separados para serem
montados em tempo de execução. Observe que isso não é o mesmo que codificação de
blocos duplos/múltiplos (abordada posteriormente), onde vários caracteres ou mesmo uma
série deles são codificados no mesmo espaço que um caractere normal.

3.1.2 Corrupção e alteração


A corrupção é uma técnica de uso geral em que você corrompe seções da ROM
antes de executá-la e vê o que quebra. Se você encontrar um arquivo de texto por
este ou algum outro método, você poderá mudar as coisas e, ao ver o texto ao
redor, poderá ver como o texto de cada lado dele está codificado.
No lado menos grosseiro das coisas, vem a alteração onde você pode fazer coisas como
colocar uma série de um único personagem no arquivo e então, quando você encontrar
uma longa série deles, você saberá qual é esse personagem (o que pode muito bem deixá-
lo na posição para ter o resto da codificação) ou você pode colocar uma seção contando,
então se você encontrar um texto que agora diz fghijklm você pode muito bem saber
algumas coisas (isso pode ser ainda mais refinado colocando as coisas em um padrão não
repetitivo de alguns formulário para permitir que você alinhe coisas facilmente, algo como
ABBCCCDDDDEEEEEE...... por exemplo).

5Na prática, é mais fácil ter blocos de tamanhos idênticos e depois incluir um tamanho em outro lugar para o
jogo considerar em tempo de execução, pois o jogo provavelmente já estaria fazendo cálculos de largura, mas
houve casos de jogos fazendo blocos de tamanhos exclusivos para cada personagem.

127
Este processo pode ser problemático, pois os motores de texto podem ser bastante exigentes
quanto ao seu conteúdo e se você bagunçar os marcadores de seção e outras formatações, as
coisas podem começar a dar muito errado, mas se você não corromper o suficiente do jogo
Descobrir o que deu errado é mais difícil.
Depois de ter alguns caracteres, você pode começar a mudar as coisas e observar o que
mudou antes de combiná-los e obter a codificação completa. Na verdade, esta é muitas vezes
uma das melhores maneiras de descobrir como os diferentes símbolos e tipos de pontuação são
codificados. Em ataques de criptografia como esse, muitas vezes ficam sob a responsabilidade do
texto simples conhecido e do texto simples escolhido, mas falaremos mais sobre isso
posteriormente.
Megaman ZX novamente
Este jogo foi carregado e o texto que carrega alguns segundos após o carregamento do
jogo foi obtido. Também é um bom estudo de caso sobre por que fontes de largura variável
e manipulação de linhas são boas, mas fontes em algumas seções.
O texto em um editor hexadecimal

128
Digamos que o interesse seja descobrir o que passa por z (5A=z da tabela anterior)

Original e modificado

z foi iniciado para fornecer um ponto de referência, o que significa que {|} são 5B, 5C e 5D.
O 01 foi deixado porque poderia ser algo em que o jogo se baseia, aparentemente era um
ponto de exclamação, então adicione-o à lista.
Depois foi deixado um espaço e começou novamente com til, ponto do meio ou talvez um
símbolo de bala, símbolo do Euro e continua.
De qualquer forma, isso representa mais informações do que jamais poderiam ter sido coletadas
com análise estática básica; poucas ocasiões no texto usam um líder de dois pontos e o que
poderia muito bem ser um triplo primo / aspas triplas (se o jogo usaria o triplo no lugar de aspas
duplas e uma aspa simples para uma cotação dentro de uma cotação como uma solução
alternativa para o xed largura da fonte é deixada para outros debaterem).

129
3.1.3 Visualização e corrupção de memória
No momento em que você vê o texto na tela, ele provavelmente já está na memória
há vários segundos e tenderá a não ser atualizado da memória quando estiver lá
(VRAM sim, memória real nem tanto), então editá-lo geralmente é necessário. pouco
uso, com a possível pequena exceção de um jogo que permite rolar para trás nas
últimas linhas do texto. A grande exceção a isso são as telas de entrada de nomes,
que geralmente são atualizadas em tempo real. Igualmente as defesas
Os arquivos que eles fazem também podem produzir informações, pois tenderão a ser
codificados da mesma maneira que permite coisas semelhantes às técnicas de corrupção e
alteração acima.
Se você conseguir capturar os dados na memória antes que eles sejam transformados
em gráficos, você poderá fazer alguma coisa. Da mesma forma, a visualização/edição de
memória pode ser bastante útil se você tiver que lidar com um tipo de compactação
personalizado que ainda não conseguiu descobrir (ou escreveu uma ferramenta de
compactação para recompactar), aqui você pegaria o texto descompactado/não
criptografado do RAM (lembre-se, ao trabalhar em grupo, que uma vez que o lado da
tradução/editor de texto tenha o texto, eles podem começar e as especificações de hack da
ROM podem ser resolvidas mais tarde).
Exemplo do Sr. Driller 2 no GBA. Métodos de localização de cheats foram usados para
restringir quais locais de memória mudavam conforme um caractere era inserido e
aumentando o caractere em um valor cada vez que era notado que um valor específico
aumentava em 1 a cada vez.
Apontando a janela de memória para ele.Houve muitas mudanças observadas aqui,
mas 02001CDC exibiu mudanças interessantes e talvez o mais interessante é que o
caractere em branco no canto inferior direito tinha um valor muito diferente do rosto
sorridente anterior. Neste caso, a pesquisa relativa realmente funcionou na ROM e
descobriu-se que era bem diferente (maiúsculas e minúsculas disponíveis e decodificadas
como um conjunto diferente de valores - 0A = A e 24 = a), mas o potencial do método é
bastante claro de ver.

130
3.1.4 Análise de frequência
O caractere mais comum em uma seção de texto é geralmente o caractere de espaço e na
maioria dos idiomas as palavras raramente ultrapassam a marca de 12 letras, portanto, se
o caractere mais comum tiver, em média, menos de 12 caracteres de distância e raramente
tiver dois juntos, você provavelmente terá o caractere de espaço; a partir daqui você pode
usar outros métodos ou tentar preencher os espaços em branco se tiver algum texto da
tela à sua frente. O espaço pode não ser tão útil para pesquisar, então considere que e é o
caractere mais comum em inglês.

131
Lembre-se de restringir qualquer análise de frequência apenas à seção de texto ou
você poderá acabar com 00 se for usado para preencher partes do cabeçalho.
Lembre-se também de que não precisa ser exato, pois há coisas que o jogo pode
perder ou incluir que não fazem parte estritamente do script, mas estão contidas na
seção do script, mesmo assim.
Exemplo usando o arquivo MegamanZX anterior (limitado a uma parte do texto)

00, que é conhecido como espaço, é o mais comum


69 que traduz um e minúsculo (lembre-se do ASCII maiúsculo alinhado com o
minúsculo nesta codificação personalizada).
Os próximos caracteres são em grande parte compostos pelas letras de pontuação mais
baixa no scrabble (caracteres de 1 ponto sendo E, A, I, O, N, R, T, L, S, U).
O valor FC provavelmente desejará ser investigado mais detalhadamente.

132
Fazer uma pesquisa por 00 dá uma boa indicação de que é realmente o caractere de espaço.

3.1.5 Análise de linguagem


Nem tudo precisa estar relacionado à programação e o conhecimento de como as palavras
são construídas em uma linguagem e como a pontuação é usada pode ser tão poderoso
quanto qualquer técnica originada do ponto de vista da programação. Por exemplo, em
inglês, a letra u quase sempre segue um caractere q e cada palavra tem uma vogal, exceto
algumas palavras que tendem a ter ay (tente, y, ritmo, por, céu....). Como mencionado
antes, muitas frases e quase certamente seções maiores de texto apresentarão a palavra
the. As letras maiúsculas iniciam a primeira letra de cada frase, as frases terminam com um
ponto final ou alguma pequena seleção de pontuação (normalmente ! ou ?), e os caracteres
repetidos tenderão a ser uma de poucas seleções, em oposição a qualquer caractere com
qualquer frequência. . Essas são apenas algumas coisas que funcionam para o inglês e a
maioria dos idiomas tem características que podem ser vistas assim; na verdade, um
idioma verdadeiramente aleatório no que diz respeito à criação de palavras e à gramática
provavelmente não funcionaria.
Da mesma forma, no exemplo do Megaman ZX mencionado na pesquisa relativa, havia
pedaços de pontuação que eram óbvios, bem como letras maiúsculas, muitas vezes sendo
óbvias também pelo conhecimento básico do idioma e se você estiver editando um jogo em
francês e vir coisas como Français você pode ter certeza de que a palavra é Français.

133
3.1.6 Ponteiro e codificação/análise hexadecimal

Você tem alguns truques de linguagem, alguns truques de codificação, alguns truques
de computação, mas também pode combiná-los e fazer coisas com o hexadecimal
bruto e os ponteiros que ele usa.
A análise do ponteiro é dupla, dependendo do que você está fazendo. No GBA, se você
fizer uma pesquisa por 08 (o início do tipo de endereço mais comumente usado), seus
resultados poderão ser grandes em número e, na maior parte, 8 bytes ou um pouco mais
distantes, mas de preferência ainda com uma distância definida (você não tem que colocar
ponteiros de ponta a ponta e 08080808 é um endereço válido e alinhado também) você
provavelmente encontrou um monte de ponteiros. Agora pode ser para som ou gráficos,
mas geralmente vale a pena seguir muitos deles para ver o que acontece. Da mesma forma
(e esta seria a segunda parte da dupla coisa), se você tiver uma lista do que provavelmente
são ponteiros e suspeitar que a operação está no nível da frase ou do parágrafo, eles
provavelmente não estarão separados por várias centenas de bytes.

Furigana, marcação, links e afins. Como mencionado em outro lugar, coisas como
vírgulas, espaços, pontos finais e muito mais podem fornecer muitas informações, mas isso
não é tudo, já que o japonês tem um conceito chamado Furigana (na prática, criadores de
jogos e outros costumam usá-lo para conter pequenas dicas, notas e outras coisas), a
maioria dos idiomas permitirá que o texto seja alterado para enfatizar algo (tornando-o em
negrito, itálico e tal), você pode ter uma mini enciclopédia com links para outras entradas
no texto e muito mais. Ao contrário da pesquisa relativa, se você suspeitar de uma dessas
ações, isso pode revelar grande parte da codificação e até mesmo parte do próprio
mecanismo de texto.

Pesquisa de compressãoJuntamente com a análise hexadecimal convencional, existem várias


ferramentas de busca de compressão (alguns exemplos trabalhados de compressão podem ser
vistos mais tarde, mas os métodos de compressão padrão têm impressões digitais bastante
distintas que podem ser pesquisadas) e a compressão convencional tende a não ser usada em
som e vídeo, portanto, procurando por arquivos compactados itens e combiná-los com outros
métodos, muitas vezes você pode localizar e decodificar texto rapidamente.

3.1.7 Rastreamento de montagem

Muito parecido com rastrear Isso envolve encontrá-lo na memória e trabalhar de trás para frente,
um, isso envolve encontrar o texto na memória e observar como ele o decodifica para encontrar
personagens ou os caracteres e trabalhar de trás para frente a partir daí. Segundo
Para isso, se você tiver um mecanismo de script adequado, poderá observar como ele funciona
no nível do assembly.

3.1.8 Visualização de fontes

Um jogo geralmente terá a codificação na mesma ordem da fonte (certamente aparece


assim no exemplo do Megaman ZX). Feito corretamente, isso pode até permitir que uma
pesquisa relativa aconteça quando não há codificação relativa no jogo (as ferramentas de
pesquisa relativa suportam pesquisas baseadas em números ou você pode usar o abstrato)
ou você pode usá-lo para formar a base de uma tentativa de alteração para decodificar a
codificação. Observe que, embora eles possam estar seguindo um ao outro na fonte, os
valores hexadecimais reais que os representam podem ter grandes lacunas entre

134
por vários motivos, pois mesmo em ASCII as letras maiúsculas e minúsculas estão separadas por
20 hexadecimais, apesar de não serem necessárias (permite uma conversão simples, o que é
outro tipo de coisa a ser observada).

3.1.9 Comparação de idiomas


Se você tiver um jogo ou versões dele com cerca de seis idiomas incorporados, poderá
comparar as coisas entre eles e descobrir as coisas dessa maneira. Observe, porém, que os
jogos frequentemente usam fontes diferentes entre os idiomas e, no caso dos idiomas
japonês para romano, podem até ter mudado de uma codificação de 16 bits para uma de 8
bits. Embora existam algumas coisas no nível da linguagem que podem ser feitas, a ideia
principal aqui é descobrir formatos de arquivo e ideias aproximadas de intervalos de
codificação, em vez de qualquer coisa específica, mas conhecer dicas e coisas básicas sobre
as codificações pode revelar bastante, como demonstrado em outro lugar em esta seção.

3.1.10 Ferramentas de criação de tabelas

Então, depois de empregar técnicas que deixariam os primeiros decifradores orgulhosos, você
descobriu como o jogo codificou o texto, no entanto, você não tem paciência para sentar lá e
fazer a mesa à mão, especialmente para os japoneses, se você tiver que inserir várias centenas de
Kanji, você pode não reconhecer/saber digitar. Isto é aceitável, pois embora as tabelas sejam em
grande parte apenas arquivos de texto, pode ser útil adicionar grandes extensões de dados de
uma só vez. Várias ferramentas estão disponíveis para uso aqui, mas o padrão de fato para
aqueles que precisam é o TaBuLar, embora outros gostem do gerenciador de tabelas e do
tblmaker. Crystaltile2 tem algumas habilidades aqui, embora as tabelas que ele cria às vezes se
desviem do formato de tabela padrão se você não tomar cuidado, ele felizmente usa seu próprio
formato e geralmente as diferenças estão na codificação ou em quantos espaços o arquivo
termina.
Aqui estava a tabela vista no final do exercício de pesquisa relativa. Muito parecido com
uma planilha, ela é lida em colunas de linha com os números sendo o hexadecimal que
representam.

Se você segurar a parte que deseja editar, receberá uma dica com a decodificação
hexadecimal e a decimal.

135
Até agora, um editor de texto apenas um pouco melhor para fazer isso, mas as habilidades reais
estão nas opções

As operações de bloco permitem copiar e colar blocos, o que é bom quando sua
tabela tem versões repetidas do mesmo valor (às vezes é usado para fontes
diferentes e algumas coisas parecem estranhas, mas acontece mesmo assim).
Bloquear e desbloquear (causa coisas acinzentadas) evita a edição, mas o mais
importante é permitir a inserção de seções maiores sem ter que sobrescrever
coisas.
A opção de entradas de 16 bits no menu suspenso de edição

Importar do arquivo e adicionar séries são bastante úteis.

OritonPagina inicial
Download de viagem de arquivo

Com o espírito de fornecer programas alternativos sempre que possível, temos a Oriton. A Oriton
teve muito desenvolvimento feito nele mais recentemente do que a maioria das alternativas. Ele não tem
a capacidade de adicionar longos comprimentos de pedidos conhecidos além daqueles de uma página
de código básica (clique com o botão direito na célula inicial para adicioná-la), mas as opções de adição
de estilo de expressão regular e suporte de 16 bits (e maior, se necessário) mais do que compensam isto.
Ele também funciona razoavelmente bem com o programa de inserção de texto Kruptar 7, que será
abordado posteriormente.

136
137
3.2 Ponteiros
É verdade que estes não são apenas um recurso de mecanismo de texto (se você está
lendo, provavelmente já viu vários até agora) e são essenciais para empacotar formatos de
arquivos, mas a edição de texto é onde as pessoas primeiro tendem a encontrar
dicas a sério, então eles estão aqui.
Três tipos principais

1. Padrão. Comece a contar desde o início do eu. Às vezes conhecido como


ponteiros lineares, embora o termo abranja tecnicamente o segundo
tipo.

2. Ó conjunto. Comece a contar a partir de algum ponto do arquivo (muitas vezes no


início dos dados/fim do cabeçalho).

3. Relativo. Comece a contar a partir de onde o ponteiro real está (se o ponteiro indicar 30h e
estiver localizado às 20h, os dados em questão provavelmente serão 50h).

Os jogos podem usar misturas destes e até mesmo no mesmo arquivo e você pode obter um híbrido de
relativo e conjunto, embora seja mais provável que você tenha um wrapper em torno de seu texto se
isso acontecer ou você estiver fazendo engenharia reversa de um formato de compactação na família LZ.
Os ponteiros também podem ser aplicados a várias seções e ter coisas como ponteiros de deslocamento
com um valor de deslocamento lidando com a seção, mas a próxima seção pode usar um conjunto
diferente.
Também digno de nota é que em formatos maiores que normalmente não são vistos
no DS você pode usar endereçamento baseado em setor ou bloco onde em vez de apontar
para o endereço do byte você chama um determinado número de bytes de setor ou bloco
(estritamente falando, um setor é um ponto em um disco e um bloco é o termo adequado,
mas a maioria das pessoas entenderá quando você falar de endereçamento baseado em
setor) e apontará para isso. Isso geralmente é feito para compensar uma limitação no
número de bits disponíveis para o seu endereço. Por exemplo, 32 bits permitem 4
gigabytes ou mais, mas se você disser para atribuir 8 bytes por endereço de 32 bits, de
repente você pode lidar com 32 gigabytes ao custo de ter um sistema de endereçamento
complexo (setor 37, bytes 2 a 66) ou ter que perder tantos bytes se você não usar todos eles
em um setor (se você tiver uma versão moderna do Windows, a opção de propriedades ao
clicar com o botão direito geralmente terá tamanho e tamanho no disco e esta é a razão
por trás disso ). Os endereços, neste caso, normalmente aparecerão como um múltiplo do
valor do ponteiro, mas ocasionalmente foram vistos formatos que usam ponteiros que são
cálculos adequados com base nos dados mantidos na tabela de ponteiros.
Um conceito relacionado que pode ser melhor para a seção abaixo é que, às vezes,
comprimentos podem ser usados em vez de endereços, para que você possa calcular a
localização somando os comprimentos (e talvez contabilizando um pouco de alinhamento/limites)
dos arquivos anteriores.
Falando em alinhamento e limites, normalmente será bastante óbvio, mas nem
sempre, e isso significa simplesmente somar os os comprimentos dos arquivos serão tão bons para os

fazer ao recalcular as localizações dos novos arquivos (lembre-se, a menos que você possa

demonstre o contrário e corresponda ao formato da ROM original) ou apenas use os valores de


comprimento para calcular coisas se você estiver construindo uma ferramenta.

6As imagens gráficas usadas por sistemas que usam paletas usam um conceito semelhante, onde cada valor
de pixel se refere a uma tabela que contém muitos outros valores (que podem ser alterados) ou, se preferir, cada
valor de pixel de 4 bits aborda um setor de 16 bits.

138
Os próprios ponteiros podem ser encontrados em qualquer lugar de um arquivo, mas
geralmente no início do arquivo, um arquivo com um nome semelhante (é mais fácil abrir/
armazenar um arquivo pequeno na memória e consultá-lo em vez de abrir um arquivo
grande) ou no final do arquivo são os locais onde os ponteiros podem ser encontrados.
Menos comumente, ponteiros podem ser vistos entre cada seção ou mesmo no início de
cada seção (o exemplo de script na seção de script que trata de O Mágico de Oz - Além da
Estrada de Tijolos Amarelos fornece um bom exemplo disso).

3.2.1 Casos especiais e conceitos não ponteiros


Os ponteiros são muito úteis no longo prazo, mas existem alternativas. O método
óbvio usado em sistemas mais poderosos e em alguns jogos é simplesmente ter um
ag/valor que significa o final de uma seção e é calculado em tempo de execução. Duplamente
bom é que a maioria dos jogos que usam essas técnicas geralmente usam texto simples ou
les muito próximos disso como seu texto (Zombie daisuki visto mais tarde tem um bom exemplo).
Você também pode eliminar totalmente os ponteiros e usar apenas um comprimento fixo de
texto e muitas vezes você vê isso em menus, entradas de comprimento fixo para dicionários de
jogos, bestiários, listas de itens e assim como em sistemas mais antigos. É uma das razões pelas
quais RPGs mais antigos originários do Japão, como Final Fantasy e Phantasy Star, têm nomes
estranhos/abreviados para seus feitiços em comparação com entradas posteriores em suas
franquias ou suas contrapartes japonesas. Você pode tentar hackear o jogo para suportar um
valor mais longo, mas isso pode ser complicado (no mínimo, você pode ter uma caixa delimitando
o texto e terá que editá-la) e também pode enfrentar problemas de memória, então outra solução
alternativa está relacionada ao edição inicial de fontes e codificação de bloco duplo, onde você
pode combinar alguns caracteres (ou fragmentos deles) em um único bloco.

A maioria dos ponteiros são mantidos separados do resto dos dados a que se referem (seja
por estarem no início ou no final de uma seção de um arquivo totalmente diferente), mas às vezes
os jogos terão cada seção com um comprimento e houve um caso verdadeiramente especial em
Riz-Zoawd/O Mágico de Oz - Além da Estrada de Tijolos Amarelos onde o texto em alguns pontos
era uma espécie de linguagem de script e cada seção tinha um tipo, um comprimento de toda a
seção e os dados/carga real, se houver, que continha . Além disso, dependendo de como você
deseja vê-lo, muitos formatos DS podem ser vistos como um ninho de ponteiros (no caso do
formato de som SDAT, o arquivo inteiro tem um comprimento, a subseção tem um comprimento,
o arquivo de som pode ter um comprimento e então a seção de geração de som real terá um
comprimento).
Os ponteiros que fazem parte do cabeçalho também podem abrigar dados extras; o formato
DS NARC, por exemplo, usa o bit mais alto em um ponteiro para indicar um subdiretório.

Compressão de ponteiro re mega re ultramega re


Talvez um mau exemplo de progressão de nome de feitiço, mas a última versão contém
os dois nomes de feitiços anteriores. Mesmo em sistemas mais antigos, isso era incomum,
mas viu-se que os jogos apenas codificavam ultramega re e apontavam para os fragmentos
apropriados quando necessário.

Ponteiros e marcadores de formato de arquivoOs formatos de arquivo podem ver vários


tipos de ponteiros em sua tabela principal (que geralmente é encontrada no início do
arquivo e geralmente considerada como parte do cabeçalho), embora os três mais comuns
sejam localização e comprimento do arquivo (às vezes todos os três, dois deles ou às vezes
apenas um) com outros incluindo o número de arquivos contidos, cabeçalho

139
comprimento, ags para compactação, tamanhos compactados e descompactados, locais
pretendidos na memória, arquivos vinculados ao arquivo em questão (SDAT SBNK e SSEQ).
Um bom exemplo pode ser encontrado em El Tigre – faça minha mula. Um exemplo básico do
sistema, conforme mostrado na seção de introdução, mas será retornado em breve com o
objetivo de fazer a engenharia reversa do mesmo de maneira adequada.

3.2.2 Exemplo de engenharia reversa de ponteiros


Voltando ao talk_gd1_en1.bin do megaman ZX. O início do é algo que não ele
é texto pela aparência das coisas

140
Colando isso em um novo arquivo, obviamente ele precisa ser removido

Ainda não é imediatamente óbvio, pois o texto não começa até o final do intervalo
hexadecimal 0110. Da mesma forma, os dois primeiros valores são ímpares até que você
considere que o comprimento do arquivo é 54C6 e se você ignorar os dois primeiros valores (o
conjunto de ponteiros), o restante dos ponteiros parece terminar com alguns valores ímpares
onde (aumentando constantemente e então algo totalmente diferente)
Leitura de localização (hex) (hex) e decodificação em ASCII da exportação
0100 4E16 N.
0102 4E6A Nj
0104 4EDB N.
0106 4F9D O.
0108 5096P.
010A 5118Q.
010C 5258RX
010E 529F R.
0110 52BE R.
0112 532B S+
0114 01F2..
0116 02F2..
0118 26F3&.
011A1AF8..
Portanto, 0110 seção de ponteiro longo hexadecimal seguida por outra coisa e depois pelo
texto.
Ainda existe o problema dos primeiros ponteiros serem 0000 e 0093, mas olhando
novamente para o texto, parece que FE aparece no final da maioria das seções
(FEF2 na maioria delas, mas a última é FEFF) e há seções repetidas depois aqueles,
mas isso é deixado para a marcação abordada a seguir.
Ainda assim, não significa muito tempo na planilha. É melhor rotular suas colunas,
embora você provavelmente consiga resolver isso em cerca de 3 segundos de leitura

141
nomes versus meia hora apenas para voltar à forma, se você voltar a eles no final de
um período de tradução de três meses é muito melhor.

A coluna A é o endereço na seção do ponteiro e B é o valor dele A coluna C é


a localização dos valores FE e seus equivalentes decimais A seguir (coluna D)
vêm as partes interessantes onde os valores decimais mostram o quanto eles
diferem do valor anterior (E)
Próximo (F) é o decimal da coluna de valor do ponteiro e a diferença que cada um tem
do anterior
Observe um padrão entre aquele e o três acima? A última coluna foi apenas um teste
para garantir que o padrão se mantivesse (funcionou neste caso, mas houve
jogos que definem ponteiros em cada seção).
A melhor parte é que agora você conhece o truque para encerrar uma linha no jogo se
não quiser codificar algo para fazer isso você pode usar a mesma planilha com alguns
pequenos ajustes para recalcular seus ponteiros, pois você só precisa encontrar os
novos locais de FE e inseri-los (refazer os ponteiros manualmente é muito tedioso e
muito sujeito a erros, portanto, automatize-o definitivamente, se puder).

Ainda só para verificar aqui, cortando o le o no final dos ponteiros apropriados, mas
ainda deixando as coisas estranhas

142
Parece que os ponteiros estão 1 depois do FE, mas isso é bom e realmente esperado. As
principais coisas que faltam determinar agora são o que significa o stu após FE, um bom
palpite seriam os nomes dos personagens.

143
3.3 Marcação, códigos de controle e espaços reservados
Mesmo que você não seja um desenvolvedor ou programador web, provavelmente terá um
conhecimento aproximado de variáveis e marcação (provavelmente você já postou em um
fórum antes, se nada mais). Os mecanismos de texto raramente estão no nível de uma linguagem
de script modesta e quase nunca são concluídos pelo Turing, mas podem e têm opções de
marcação e espaços reservados. Isso foi observado no passado, mas se ao olhar o texto do jogo
você suspeitar de alguma forma de marcação ou espaço reservado, é melhor não usá-lo como
base para uma pesquisa relativa.
Voltando ao tópico, a marcação e os espaços reservados podem assumir muitas
formas, desde texto simples entre colchetes, sinais hexadecimais no texto (vemos seções
numeradas fazerem isso com frequência e hexadecimal simples usado para indicar uma
nova linha ou final de seção o tempo todo) , marcação de estilo XML até os itens contidos
nos ponteiros (pense nos vários formatos de empacotamento de arquivos que podem ter
um ag para indicar compactação para um exemplo de ideia semelhante).
Os códigos de controle são um conceito semelhante, embora geralmente sejam tratados
como parte da codificação e façam coisas como indicar uma nova linha, uma guia ou algo assim.
Em que ponto da engenharia reversa de um mecanismo de texto você deseja tentar descobri-los
depende de você.

3.3.1 Exemplo resolvido


Continuando com o jogo Megaman ZX no DS. O arquivo foi alterado para
talk_m01_en1.bin simplesmente como aparece no início do jogo. No entanto,
parece que o exemplo FE pode não ser totalmente verdadeiro (há alguns que se
alinham com FE, mas agora há outros com FD em alguns casos sendo um
potencial), mas esse tipo de coisa é o que torna o hacking não trivial.
Olhando para o texto, ocasionalmente há um valor FC no texto. Ao executar o
jogo, parece que estas correspondem a quebras de linha; às vezes os ponteiros
fazem isso, às vezes é automático e às vezes está no texto.
Mais interessante do que isso é o F202 F9E9 03F3 0DF8 03 com o qual o
texto começa.
Na próxima seção
FD F202 F9EA 03F3 0DF8 03
FD é uma coisa e pode ser ignorado por enquanto (o fato de não aparecer no
primeiro valor parece significar que não faz parte estritamente dele), deixando

F202 F9EA 03F3 0DF8 03 O


original
F202 F9E9 03F3 0DF8 03
E9 = 11101001
EA = 11101010
Provavelmente não é um pouco nivelado, o que é bom. Da mesma forma, provavelmente não é um valor de
comprimento, pois a primeira seção tem 38 hexadecimais e a segunda tem 20 hexadecimais.7.
O que há de igual nessas duas primeiras seções é que elas são faladas pela mesma
pessoa (Giro). No entanto, é improvável que sejam necessários 72 bits apenas para
representar o nome de um caractere, portanto, provavelmente há mais do que isso.

7Lembre-se apenas porque isso pode ser feito de uma maneira que um jogo não precisa (calcular coisas em
tempo de execução é menos que ideal) e existe igualmente redundância, portanto, se algo estiver lá, poderá ser
ignorado no produto final.

144
F202 F9EB 03F3 02F8 00 é o próximo e é falado por alguém diferente (????
e sem imagem/som apenas neste momento)
Isso vai e volta por um tempo com o próximo personagem (Vent) tendo
uma imagem aparecendo no lado direito da tela
F203 F9F4 03F3 05F8 01
A próxima tela tem o personagem Giro na parte inferior da tela.
Preocupantemente, parece haver dois bytes extras.
F201 F202 F9F5 03F3 0DF8 03
Ventilação na parte inferior da
tela F201 F203 F9F7 03F3 07F8 01
Antes de lidar com isso, coloque o primeiro grupo em uma linha
F202 F9E9 03F3 0DF8 03
F202 F9EA 03F3 0DF8 03
F202 F9EB 03F3 02F8 00
F202 F9EC 03F3 0DF8 03
F202 F9ED 03F3 02F8 00
O terceiro byte parece estar contando para cima, o que é bastante comum em
sistemas de texto (é efetivamente parágrafos numerados). Você provavelmente
desejará mantê-lo intacto, pois o jogo pode acionar animações de um contador que o
utiliza (no mínimo, é uma boa ideia alterar o mínimo necessário), embora você possa
testar se desejar.
Falar em testar a análise estática pode chegar a algum lugar e está se mostrando
bastante útil até agora, mas por que analisar algo estaticamente quando você tem uma
máquina capaz de executar o exemplo e fornecer resultados.
Existem três escolas de pensamento neste momento

1. Copie e cole outra string

2. Pequena edição no valor

3. Montagem

A montagem é sempre uma opção, independentemente do que você esteja fazendo, pois é
o nível mais baixo que é manipulado e pode ser combinado com os outros dois métodos.
Poderia ser um valor simples que carrega diretamente (ou através de uma instrução
simples como uma multiplicação) para o OAM, poderia ser o valor de entrada para uma
função de pesadelo ou mesmo algo intermediário. No entanto, embora seja um método
altamente respeitável, a maior parte do hacking de ROM e da computação em geral
consiste em fugir da montagem, se possível, para que os outros dois sejam empregados.
Presumivelmente, existem alguns valores funcionais, então uma escola de pensamento seria
substituir um valor funcional por outro funcional e ver o que acontece. O outro é menor de idade,
esperançosamente educado, adivinha e depois vê o que acontece. Qualquer um deles pode
causar um travamento, mas leva apenas alguns segundos para verificar.
Pela primeira vez, dê a volta inteira ???? A seção de pré-texto foi usada para
substituir aquela da seção de texto de abertura que leva ao seguinte (jogo hackeado e Lá eram
jogo original) dois
na verdade
cópias de
o ele em
a ROM então
ambos eram
para
substituído
o bem de
este exemplo
145
Apenas a primeira seção foi feita e logo em seguida ele voltou ao personagem
original, mas talvez o mais interessante seja a pequena animação deslizante que
ele faz entre os personagens foi feita entre os hackeados ???? e o personagem
Giro.
Em seguida foi editar um único valor, o substituto original foi deixado para
isso e continuou exibindo a imagem.
O valor escolhido foi o último (os últimos 8 bits antes do texto real, valores em
hexadecimal)
04 apareceu para colocar Prairie 09
apareceu para colocar Modelo L 10
apareceu para colocar Hivalt
O FF causou corrupção de tela que permaneceu por um bom tempo (o plano de
fundo quebrado acabou sendo substituído após a troca de uma cena, mas as imagens
de texto permaneceram quebradas e houve corrupção de texto adicional em várias
telas depois).
Se não estivesse na marcação, isso provavelmente contaria como codificação de
múltiplos blocos e certamente aparecerá da mesma forma quando acontece em texto
normal (um único byte/caractere ou dois sendo usados e o jogo gerando um nome
inteiro).
No entanto, isso deixa outros 64 bits (exceto a seção de contagem) fazendo
alguma coisa.
F202 F9E9 03F3 0DF8 03 = origem
F202 F9EA 03F3 0DF8 03 = segundo
F202 F9EB 03F3 02F8 00 = ???? e imagem correspondente
Substituir o 0DF8 por 0AF8 deu

146
Substituindo o F8 por F9 corta a primeira letra. Substituir por FA avançou o
texto uma linha antes de voltar e colou as coisas em linhas ímpares e mudou o
nome para ???? onde F7 parecia não fazer nada além de mudar o nome. Relegado
ao número mágico/constante/descoberto mais tarde.
Vent tem uma caixa com o nome do lado direito, embora ainda no
principal

F203 F9F4 03F3 05F8 01


F203 em oposição a F202
Colocar 03 ali realmente colocou o retrato à direita no topo e também o
espelhou.

147
Não muito depois do início da conversa, há um curta com o retrato à esquerda,
mas na parte inferior da tela superior. Extraindo o comando dele
F201 F202 F9F5 03F3 0DF8 03 = canto inferior esquerdo
xxxx F202 F9E9 03F3 0DF8 03 = primeiro comando do jogo.
xxxx foi adicionado para alinhar as coisas, mas poderia ser um sistema de comando de comprimento
variável?
Antes de debater isso, porém, 01 foi tentado e colou no fundo com o
retrato à esquerda. 04 e FF pareciam não fazer nada.
Mais algumas experiências poderiam ser feitas, mas o resto é apenas preencher
as lacunas e a maioria das coisas interessantes parece já ter acontecido.

148
3.4 Fontes
Se você não leu a seção de gráficos, talvez seja melhor abordar alguns dos
princípios básicos ou poder consultá-los.
Quando se trata de computadores, o manuseio de fontes é um jogo completo e requer um
conhecimento bastante extenso para implementar um sistema de manuseio de fontes. Apesar de
algumas exceções nos consoles mais novos/mais poderosos, os consoles mais antigos são todos
fontes bitmap e não possuem gráficos vetoriais para permitir caracteres de qualquer tamanho. Se
um jogo tiver vários tamanhos de fonte, provavelmente é outra fonte no jogo, outras codificações
no jogo ou alguma combinação das duas. As fontes, mais do que qualquer outro tipo de formato
gráfico, gostam de se desviar do poder do tamanho de 2 blocos, mesmo que tenham largura
amplamente fixa, e não apresentam extras sofisticados, como caudas ou simples. Ele também
corta no sentido inverso e quaisquer caracteres com ditongos, sinais diacríticos e outros
dispositivos semelhantes tenderão a ser caracteres extras dentro de uma fonte, em oposição aos
extras gerados. Na maioria das vezes, eles são em grande parte de cores únicas ou apresentam
apenas pequenos sombreados e quaisquer animações/efeitos em tempo real que você vê
geralmente sendo feitos em nível gráfico com marcação para acioná-los. Isso não quer dizer que
as fontes sejam formatos simples, já que o DS apresenta um formato de fonte bastante complexo
conhecido como NFTR, que muitos jogos usam. NFTR tem largura variável por natureza, mas em
geral, se parecer arte de palavras ou em algum momento você teria que usar um editor de
imagens (especialmente telas de título e introdução), provavelmente você está olhando para uma
imagem. Embora o NFTR seja popular, talvez muitos usem gráficos 2D simples ou algo
verdadeiramente personalizado.
Além disso, assim como a música, há uma série de termos e conceitos específicos de
campo que entram em jogo e, como tal, o design/construção de fontes tem sido um
campo/habilidade altamente especializado. Da mesma forma, os conceitos caíram em
desuso nos últimos anos, mas códigos de 16 bits semelhantes aos scripts foram vistos em
jogos. Essas coisas foram usadas para permitir que um determinado número de comandos
de 8 bits fossem seguidos (se você observar a codificação shiftJIS, cada entrada do Hiragana
começará com 82 e cada katakana começará com 83, isso significa que 8 bits são bastante
viáveis se você fizer o script em ), o jogo entrará no modo de decodificação de 8 bits, e
alguns jogos terão um comando para alternar a troca de tabela/fonte para usar Dakuten e
Handakuten ou pontuação ou caracteres personalizados (isso não deve ser confundido com
jogos que têm apenas várias fontes e tabelas correspondentes, pois isso é irritante, mas
nada incomum).

Codificação dupla/multi-tileTalvez mais comumente conhecido pelos inicialismos DTE ou


MTE, a ideia é que as seleções de vários blocos/caracteres sejam codificados no
comprimento do espaço que um caracter normalmente ocuparia (nenhuma razão técnica
além da economia de espaço para usar o comprimento de um único espaço de caractere,
mas geralmente é o caso). Falando estritamente, DTE, que é um caso especial de MTE,
refere-se a quando um único valor tem um resultado codificado em blocos duplos (dois) ou
múltiplos (o M em MTE, você não sabe), porém hoje em dia muitos o usam como um pegar
todos os termos para lidar com valores que veem algo diferente de um único caractere
codificado em um único bloco (dois caracteres em um bloco, um caractere dividido
horizontalmente em vários blocos, uma frase inteira dividida em blocos, uma codificação
que gera uma frase a partir de um único valor, mas usa as peças normalmente....).
Naturalmente, isso pode realmente frustrar uma sessão de pesquisa relativa.
Se seus caracteres/glifos estiverem divididos verticalmente em blocos, você provavelmente só
precisará definir o valor da altura, com as três principais exceções a esta regra sendo

149
1. GBA3 XBpp, que conforme discutido nos gráficos é um formato de compactação
de 4 bpp que intercala os blocos entre os valores

2. Compressão de fonte em nível de gráfico, onde a metade de um caractere (pense na


metade inferior d e b, metade superior j e i, metade superior R e B e assim por diante) é
usada para gerar coisas

3. Se as próprias peças estiverem espalhadas pelo arquivo/seção (geralmente


é apenas uma questão de alinhar uma linha com a próxima). O GBA viu
alguns exemplos disso.

3.4.1 NFTR
O formato de fonte NFTR foi mencionado anteriormente e é um formato de fonte bastante
completo com capacidades de largura variável e, em alguns casos, com versões posteriores você
também possui habilidades de manipulação de linha. Ele carrega a codificação da fonte, portanto,
se você encontrar uma fonte NFTR, você tem a codificação/mapeamento ali, observe que ainda
pode ser personalizado ou apresentar caracteres personalizados, então você pode ter que
combinar as coisas manualmente ou usar OCR . Houve uma revisão mais tarde na vida do DS para
o formato, então algumas ferramentas mais antigas podem ficar aquém aqui, mas por outro
lado, há uma variedade de ferramentas que podem fazer coisas com o formato (embora muitas
não estejam em inglês, pois o formato era o inverso projetado em círculos de hackers chineses).

Três ferramentas serão focadas aqui.

Cristaltile2Download de viagem de arquivo


Crystaltile2 oferece suporte para análise e decodificação NFTR, incluindo a capacidade
de executar um OCR (reconhecimento óptico de caracteres) básico na fonte para ajudar a
decifrar a codificação.
Ele tem uma capacidade limitada de gerar novas fontes NFTR a partir de codificações
personalizadas (ou uma seleção de codificações padrão) usando também fontes do seu
computador. Na maior parte, isso não deveria importar, mas os arquivos que ele gera não
são estritamente compatíveis e ele se esforça para criar fontes de tamanho menor, embora
isso geralmente seja mais um fator das fontes do seu computador, sendo a regra geral o
tamanho da fonte. adicione dois são as dimensões mínimas de pixel.

150
Igualmente útil é quando você pode visualizar a fonte, você pode digitar diretamente e a fonte
escolhida substituirá os caracteres digitados (isso vale para qualquer ponto no visualizador/editor
de blocos)

Editando a fonte apenas digitando. Clicar com o botão direito também permite a inserção completa de uma
fonte usando um arquivo de tabela.

151
A caixa de diálogo principal do NFTR que está disponível no menu suspenso de ferramentas em
cada seção do Crystaltile2.
Ele funciona em dobro como janela de informações (depois de clicar no triângulo para expandir
as opções, clique no botão Nftr para abrir uma fonte), embora a maior parte seja bastante
autoexplicativa.

A outra ferramenta interessante é o OCR que está disponível no menu de ferramentas da


janela de edição de gráficos. Observe que ele não precisa ser restrito apenas às fontes NFTR e
funcionará em qualquer texto que você fornecer.
Não é uma boa ferramenta de OCR por nenhum esforço de imaginação e qualquer uma
que você tenha usado para extrair legendas de DVDs é provavelmente muito melhor, no
entanto, acerta algumas coisas e até faz alguns japoneses, o que é bastante raro. Se você
conseguir se livrar de quaisquer sombras que provavelmente ajudarão e se a fonte for
complexa, tente, mas não espere muito.
O uso é
ˆConfigure a fonte para que fique visível em blocos únicos

ˆAbra a ferramenta (menu suspenso de ferramentas na janela de edição de gráficos).

ˆSelecione o tamanho aproximado (infelizmente só tem opções shiftJIS) de


sua fonte e pressione Reconhecer para que ele adivinhe o que é.

ˆVocê também pode tentar Reconhecer página inteira, que tentará decodificar
cada caractere na janela visível.
ˆNo caso provável de estar errado, insira o caractere correto (tenha muito cuidado, pois
você pode estar olhando para ele adivinhando um caractere grego, japonês ou
cirílico) no espaço próximo ao botão aprender e pressione o botão aprender.

Quando estiver satisfeito com os resultados, pressione salvar e ele os transferirá para a
caixa esquerda de acordo, as seleções permitem apenas a lista de caracteres, para
combiná-los com suas codificações para a página de código atualmente selecionada, para
iniciar a numeração em ordem a partir do caixa fornecida (números em hexadecimal) ou no
caso do índice dois salve-o como 16 bits (little endian) começando no número fornecido.
Copie e cole isso como seu arquivo de tabela.

152
TinkePágina do Github
Embora as ferramentas independentes focadas até agora tenham sido mais ou menos
limitadas ao Crystaltile2 com algumas menções aos outros, o Tinke apresenta uma boa
quantidade de suporte para ele e é uma das poucas ferramentas que tentará adicionar um
personagem ao NFTR o que muitas vezes não é uma tarefa tão fácil devido à natureza mais
complexa do formato.

153
Edição NFTRDownload de viagem de arquivo
Embora o Crystaltile2 tenha algumas habilidades muito interessantes, esta é a ferramenta
ideal para quem precisa fazer algo com o formato de fonte NFTR.

154
Adicionando caracteres ao NFTR

A edição simples pode ser feita na maioria dos programas, mas adicionar coisas, supondo que
você não queira apenas gerar uma nova fonte, é uma perspectiva um pouco mais complicada.
O formato NFTR é bastante complexo, mesmo antes do aparecimento da segunda
versão conhecida, pois existem três classes de método de codificação.
Tinke é o método sugerido para isso.
O botão adicionar caractere é seu primeiro porto de escala. Fazer isso adicionará um
caractere ao final da leitura do bitmap, mas ele não será mapeado para nada inicialmente.
Adicione seu personagem agora e pressione aplicar alterações para vê-lo adicionado.

O botão Alterar caractere do mapa é o próximo

É aqui que reside o verdadeiro truque, pois a fonte NFTR permite uma variedade de métodos
de codificação, desde a definição bastante simples de um ponto inicial até código por código. Ele
também permite múltiplas seções de código (cada seção sendo conhecida como CMAP
dependendo dos documentos que você lê) que podem ser de nidas ou restritas conforme
desejado. Número da imagem, também conhecido como número Char à esquerda e códigos de
caracteres em decimal aqui à direita.

155
Pressione aceitar (e salve a nova fonte)

Testando em outro editor

3.4.2 Hacks comuns


Afastando-se do NFTR, há um grupo de coisas bastante comuns a serem feitas ao hackear
fontes de jogos. A facilidade com que qualquer um pode ser varia de jogo para jogo.

156
Hack de fonte de largura variável (VFW)Junto com a conversão de fontes de 16 bits para 8 bits
mencionada posteriormente, esta é considerada uma das coisas mais difíceis de fazer no que diz
respeito às fontes. As fontes japonesas têm largura fixa, enquanto o conjunto de caracteres
romanos usando idiomas não o é quando se trata de caracteres e especialmente de pontuação.
Infelizmente adicionar 16 pixels à localização horizontal é consideravelmente
programar do que mais fácil ler o valor da tabela e posicionar o item de acordo, repita
para cada caractere, talvez também lidando com quebras de linha e como seria desnecessário
ensaio para jogos japoneses, os programadores tenderão a não adicioná-lo ao jogo,
embora esteja melhorando com o passar do tempo, o desenvolvimento é forçado a
considerar as versões internacionais e as pessoas começam a usar bibliotecas/mecanismos
de manipulação de texto padrão.
Como a frase anterior sugeriu, o objetivo aqui é encontrar a rotina de desenho de texto e
fazer com que ela determine um valor para a largura do texto (uma tabela pré-fabricada
geralmente é a melhor escolha de método) antes de usar esse valor para definir locais
adequadamente e lidar com quaisquer problemas com quebra de linha; pode ser configurado
para quebrar e pular quando algo for igual a algum valor definido, o que é bem possível com um
tamanho de caractere fixo (16 + 16 + 16 sempre passará por 160), com variável, embora
esteja longe de ser uma certeza. Quase invariavelmente, precisar fazer tudo isso significa
hackear em nível de montagem, criar novas funções e subverter as antigas, por isso é
considerado um dos hacks mais difíceis de fazer. A principal exceção a isso seria NFTR e
formatos semelhantes que podem muito bem ter um conjunto de caracteres de largura fixa
vindo do Japão, mas o formato em si (e presumivelmente as bibliotecas usadas para
decodificá-lo) suporta VFW, o que reduz o hack para edição de imagens e ajuste de valores .

Um bom exemplo prático do lado da montagem para o GBA existe graças ao


KaioShin, que pode ser acessado no Romhacking.net.

Hack de manipulação de fontesIsso vem em duas formas

1. Manuseio de linha

2. Alteração estreita da fonte/tamanho da fonte

O manuseio de linhas (para caracteres como pqfgjy que não ficam dentro das linhas, ao contrário
do japonês que sempre fica) é bastante semelhante ao hack de fonte de largura variável, embora
com a diversão adicional de ter que lidar com o espaçamento vertical também.
A mudança pequena de fonte/tamanho é talvez o hack mais comum relacionado à fonte que não é
simplesmente mudança de cor, modificação de caracteres/glifos ou adição de caracteres. Os caracteres
japoneses tendem a estar contidos em uma caixa quadrada onde os caracteres romanos podem estar
contidos e, na verdade, mais frequentemente estão contidos, em um retângulo com o lado mais longo
sendo a vertical. Para esse fim, fazer com que o jogo coloque os personagens mais próximos uns dos
outros pode não apenas permitir que você se destaque mais na tela, mas também fazer com que pareça
melhor se for feito corretamente.
Isso é um pouco mais simples do que uma fonte de largura variável verdadeira, pois tudo o
que você precisa fazer é encontrar o valor que adiciona uma determinada quantia para cada
caractere e alterar a carga útil para algo menor (ou talvez algo mais amplo se você estiver
melhorando uma fonte já estreita) .
Além disso, você pode querer usar uma espécie de codificação de bloco duplo e dividir
caracteres largos como w e m em dois caracteres se seguir esse caminho e codificar
metade de cada um em um bloco para si mesmo. Falando em peças contendo algo
diferente de apenas um único caractere

157
Hack de fonte de largura pseudo variávelNa prática, isso adiciona uma espécie de
codificação de bloco duplo a uma fonte e todo tipo de coisa pode ser feita com ela. Um
exemplo básico seria adicionar dois l minúsculos (como no lêmure) a um único bloco.
Voltando ao megaman ZX, o arquivo font_bin.pal foi decodificado (é uma decodificação
direta NDS 1BPP de 8 por 16 pixels) e alterado de acordo para mudar o jogo do original
para o próximo a ele, que deve parecer um pouco melhor.

Aqui, o caractere 5B anterior foi substituído por dois caracteres l e as ocasiões em que o
l duplo aconteceu tiveram os dois caracteres l únicos substituídos por um único valor
hexadecimal 5B (para fins de exemplo, o espaçamento também foi levado em
consideração). Na prática, a maioria dos jogos com uma fonte de largura fixa adicionará
serifas e outros caracteres finos para tentar eliminá-los um pouco, o que funciona para
algumas fontes menores, mas não é bem dimensionado.
Para um exemplo da ideia de serifas, o ll foi deixado, mas a fonte foi substituída por
uma fonte da família Courier (lembre-se que o Crystaltile2 permite adicionar caracteres
diretamente às imagens apenas digitando), observe os caracteres i (como na Índia).

158
Tornar as fontes mais agradáveis é certamente um truque de melhoria comum e alterar
uma fonte ao traduzir um jogo também é, no entanto, uma das coisas mais úteis que você pode
fazer com este conceito de fonte de largura pseudo variável é se você encontrar um menu de
largura fixa/comprimento fixo (mais antigo Os RPGs japoneses gostam especialmente disso e o
problema é ampliado pelo fato de os japoneses terem Kanji, que pode dizer muito em alguns
caracteres) e se deparam com a escolha de massacrar o idioma/nome, possivelmente fazendo
uma conversão de 16 para 8 bits ( embora isso possa não ajudar na tela de problemas
imobiliários) ou hackear o jogo para suportar seções mais longas (tanto no código quanto no
departamento imobiliário da tela). Como os menus são compostos de texto definido e
comumente usado, muitas vezes é benéfico codificar vários caracteres em blocos (não há
necessidade de colocar apenas caracteres inteiros em blocos, a menos que o jogo espace as
coisas), permitindo assim mais alguns caracteres se você fizer isso. está certo.

Mudança de codificaçãoA substituição de um único caractere por outro já foi amplamente


abordada, portanto será deixada de fora desta discussão.
Você pode querer mudar a forma como o jogo codifica os personagens em algum momento,
com o hack clássico sendo a conversão de 16 bits para 8 bits. Isso não costuma acontecer muito
hoje em dia, exceto onde há restrições de memória, mas é definitivamente uma habilidade que
vale a pena ter. Você também pode querer mudar o jogo para que ele possa ter decodificado 33
hexadecimais como o caractere 3, agora decodificará 23 hexadecimais como o caractere 3.

Voltando ao tópico, a conversão de 16 para 8 bits e o ajuste de codificação padrão


derivam do mesmo conceito e é assim que as codificações são determinadas em primeiro
lugar. Os métodos são muitos e variados, então alguns exemplos

1. Uma variação dos arquivos de tabela onde a codificação e o bloco são combinados, isso
pode ser um tanto formal ou apenas ponteiros em uma tabela binária que fazem o

159
mesmo trabalho. Geralmente, ele ainda estará em ordem, em vez de uma pesquisa completa no estilo
de banco de dados.

2. Um ponto inicial é definido nos blocos e a codificação conta a partir daí. Pode haver
vários e o mesmo conjunto pode ser repetido várias vezes, sem mencionar que pode
haver algumas contas feitas nele (pense em ponteiros de conjunto).

3. Um ponto inicial é definido em uma codificação (neste ponto, uma lista de números
aleatórios) e os blocos são combinados com eles.

O formato NFTR tem três variações principais semelhantes às incorporadas que os


desenvolvedores podem escolher.

3.5 Script e layout


O conceito já foi mencionado algumas vezes neste momento, porém ainda não foi
visto tanto nos portáteis e nos consoles anteriores. Como existem alguns exemplos
notáveis, isso será abordado aqui. A ideia aqui vai além da exibição básica do texto, o
resto do jogo gira em torno de um mecanismo/interpretador complexo.
A principal escolha aqui é Riz-Zoawd/The Wizard of Oz – Beyond the
Yellow Brick Road no DS.
Na verdade, o jogo exibe todas as três formas principais de métodos de texto e, para
garantir, também alguns XML (consulte op.dat).

1. Seções de comprimento fixo

2. Técnicas convencionais de ponteiro

3. Scripts

Os dois primeiros foram abordados, mas vale a pena ver o mecanismo de script e
pode ser visto em event.dat no diretório de dados
As coisas iniciais são a configuração dos mapas e cenas, mas são um bom
exemplo

160
161
A análise inicial do mecanismo de script durante a engenharia reversa imitou as
técnicas de engenharia reversa de marcação, ou seja, uma combinação de análise estática e
testes para ver o que acontece. Também de possível interesse são as poucas linhas iniciais
que parecem estar configurando uma cena de depuração, pois como mencionado em outro
lugar, as coisas que os desenvolvedores deixam para depuração são frequentemente
exemplos simples do mecanismo/conceito em questão e podem demonstrar conceitos que
de outra forma teriam que ser necessários. ser extrapolados dos complexos do próprio
jogo.

Zumbi DaisukiÉ claro que o script visto nem sempre é tão complexo quanto o exemplo
acima e um belo exemplo pode ser visto no jogo Zombie Daisuki que possui script
como visto na imagem a seguir. Se você quiser dar uma olhada no diretório de dados
do próprio jogo existem alguns arquivos com a extensão . ini que são compatíveis
com shiftJIS. Observe os nomes das variáveis, incluindo erros ortográficos que podem
fazer com que o hacker os corrija acidentalmente e cause muitos problemas, bem
como marcação e falta de ponteiros.

162
Lua A linguagem de programação lua foi vista algumas vezes no DS.
No entanto, ele foi convertido para um arranjo semelhante ao bytecode em comparação com o texto
simples que geralmente é deixado como no PC.

El Tigre- faça minha mulaO jogo apresenta um ótimo formato de arquivo que vale a pena
explorar um pouco, pois mostra muitas coisas vistas em formatos de arquivo.

Eliminando a primeira e definindo a largura da janela para um tamanho muito amplo, a primeira
parte que eram os nomes (embora não assuma que como os nomes muitas vezes se seguem

163
o resto das informações que cobrem o arquivo em questão) foram cortadas nesta
cena, mas o nome longo foi destacado para se ter uma ideia do que acontece.

Parece haver vários nomes ASCII simples (sublinhado permitido) em ordem alfabética
por extensão, embora as extensões não estejam em ordem alfabética. Olhando mais
adiante no arquivo parece dizer que letras maiúsculas ou minúsculas para os nomes não
importam (em alguns sistemas isso importa). Lembre-se de que quanto menos alterações
forem feitas em algo assim, melhor, para que a ordem provavelmente queira ser mantida
ao remontar o arquivo
Os números contados nos 8 bits após a seção de nome (na verdade, 16 bits como
você verá em breve) podem muito bem ser números (ordinais também podem ser
um termo aceitável) que são úteis para o sistema como se referindo a coisas por
nome é bastante problemático onde a matemática fornece números.
0100 desejará ser retornado mais tarde.
Três conjuntos de três números, se possível seria bom deixá-los como estão no
original, mas isso torna simplesmente olhar para os mais problemáticos do que
deveria ser, então um ip de 32 bits depois

164
O 0100 tornou-se 0001 no que hoje são os 16 bits superiores dos 32 bits. Três
números então. O primeiro parece maior que o segundo e o segundo mais o
terceiro é o próximo na sequência do terceiro número.
Tamanho e localização então. Por enquanto, nenhum preenchimento entre valores é

165
assumido, mas frequentemente há preenchimento para garantir que ele esteja alinhado com 32 bits ou
até mais, mas vê-los iniciar com valores ímpares torna bastante provável que não haja preenchimento
aqui.
Rolando um pouco mais para baixo

Os arquivos swav foram verificados (eles têm um início de arquivo bastante único, também
conhecido como carimbo mágico) e eles eram de fato o formato de áudio swav e como o áudio
geralmente não é compactado além de ser feito em primeiro lugar, termina o o
descansar.

O 0001 agora nos 16 bits superiores é de fato um valor compactado ág. (um pouco os
foram extraídos e, em seguida, tentaram aplicar a compactação sem nenhum sucesso
real - uma verificação rápida e fácil).
Nos exemplos swav, o primeiro e o segundo dos três números são os mesmos (e o
padrão para 3 é válido).
O primeiro dos três valores é o tamanho não compactado, o segundo o tamanho
compactado e o terceiro a localização.
tabela de dados do arquivo pkg
De nido como segue
32 bytes para o nome, presumivelmente terminando com o primeiro 00 no nome
e preenchido a partir daí (os últimos 4 bytes podem ser necessários)
2 bytes para o número do arquivo (ipped e contando a partir de 0)
2 bytes para um ag compactado ( ipped, 1= compactado, 0 = descompactado) 4 bytes
para tamanho descompactado ( ipped)
4 bytes para tamanho compactado (ipped)
4 bytes para localização do arquivo (ipped, ponteiros padrão (não relativos) e começando do
início do arquivo principal (não definido))
Preenchimento de 4 bytes (00 preenchido)

O formato do cabeçalho não está finalizado, pois ainda há a parte que foi excluída
inicialmente para deixar tudo alinhado (ipped para facilitar as coisas)

166
pkg é claramente o carimbo mágico para este formato.
301... o último número do arquivo é 300 hexadecimal e começa com 0000 para números
significa que essa é provavelmente a contagem de arquivos.

008C 9446 é o comprimento do arquivo (geralmente uma visão comum em cabeçalhos), mas está
ausente
008B F7E2 mais 9C64 (a localização do primeiro arquivo e final do cabeçalho) é 008C
9446 e ter comprimentos ignorando cabeçalhos é bastante comum.
Formato do cabeçalho
4 bytes 706B6700 hexadecimal (pacote[00]) 4
bytes 00 preenchidos.
4 bytes contagem de arquivo (ipped) 4 bytes 0000 0001
quando ipped 4 bytes desconhecidos (019F3323 quando
4 bytes tamanho do arquivo - cabeçalho (ipped) derrubado)
4 bytes
desconhecidos (0009 4584 quando 4 bytes
desconhecidos (0002 DDAA quando 4 bytes derrubado)

desconhecidos (0000 0003 quando ipped) 12 bytes 00


derrubado)

preenchidos (preenchimento?).

A compressãoO cabeçalho é um bom exemplo de um formato de arquivo


personalizado e na maioria das vezes é onde ele termina (mais ou menos
construindo algo para refazer o arquivo), mas a compactação foi detectada.
Infelizmente, é uma das poucas vezes que um formato personalizado de
compactação foi visto no DS. As extensões parecem ser confiáveis, por enquanto
eram. Esta seção pode ser mais útil quando a compressão (abordada na lógica do
jogo) for abordada.
Além dos arquivos swav, havia um punhado de arquivos não compactados, geralmente bem
menos, mas

nível
pequenos. O fato de isso ter acontecido é bom, pois aponta para a compactação, em vez da
compactação de toda a biblioteca do arquivo (formatos como o 7zip fazem isso para atingir taxas
de compactação muito altas para grupos de arquivos semelhantes, ao custo do tempo de
descompactação, recursos e potencial para o arquivo ser corrompido

167
além da recuperação de qualquer coisa por meios simples e não pode ser extraído sem um
conjunto completo de arquivos no caso de arquivos divididos).
tmpCopy.txt foi extraído. Parece um arquivo de texto de depuração, se é que alguma vez
existiu.
C86 é o comprimento do arquivo compactado. De acordo com o cabeçalho, deve ter comprimento
hexadecimal 2DAC.
entidades.xml foi extraído. xml deve ter muitos colchetes interessantes para serem observados.
16D8 é o comprimento do arquivo compactado. De acordo com o cabeçalho, deve ter 00010344
hexadecimal de comprimento
Nenhum dos dois parecia ter nenhuma sinalização para iniciar (a primeira pista de que pode
ser personalizado) e nenhum deles teve qualquer início óbvio OK e degradação à medida que
avançava (LZ geralmente começa bastante legível e se torna menos legível à medida que as coisas
se repetem e são retomadas e RLE é praticamente o mesmo) que aponta para algo como Hu man
(o DS BIOS suporta humanos, mas não era uma versão padrão compatível com BIOS pela
aparência das coisas)
[para terminar]

Engenharia reversa de montagem (montagem completa vista na função de


descompressão).
Engenharia reversa de visualização de memória (os arquivos precisam ser descompactados para serem executados) arquivos

de dados (alguns arquivos de dados naturalmente descompactados e compactados, análise parcial de texto simples

conhecido).

A luaO cabeçalho é um bom exemplo de um formato de arquivo personalizado, mas


posteriormente no arquivo existem alguns arquivos com a extensão lua que é a extensão
escolhida de uma linguagem de script bastante poderosa com o mesmo nome que foi vista no DS
(a missão do quebra-cabeça série e várias vezes em homebrew). Todos foram compactados
usando o formato de compactação personalizado.
[para terminar]

Puzzle Quest e Theta [adicionar]

Leitura adicionalUm mecanismo de script para o jogo Wii Tales of Symphonia:


Dawn of the New World teve engenharia reversa e, embora os jogos GBA e DS
raramente exijam algo tão extenso, vale a pena ler. Links para o assunto em
questão em blog.delroth.net parte 1 e blog.delroth.net parte 2.

3.5.1 Layout e limites


Coberto em parte anteriormente (a marcação megaman ZX), mas vale a pena uma
subseção rápida. Onde, na maioria das vezes, fora dos jogos, se o texto atingir a borda da
tela, ele retornará automaticamente aos jogos, e especialmente aos jogos anteriores e aos
dispositivos portáteis, certamente nunca se pode presumir que isso aconteça.
Os métodos que os jogos empregam para fazer as coisas aqui e o que você encontrará são
tão variados quanto qualquer outra área de hacking. A primeira coisa a notar é que podem não
ser as dimensões da tela que causam problemas, mas uma caixa de texto ou, pior, uma caixa de
texto imaginária/invisível, o que geralmente significa um hack ASM para alterar. Igualmente
importantes e um pouco mais preocupantes são os limites de memória, seja na memória do
console (o carrinho do DS não está disponível na memória normal, então tudo tem que ser
copiado), na memória do carrinho (raramente é um problema no GBA

168
ou DS) ou formato de memória (se o jogo usar apenas ponteiros de 16 bits, você poderá ter
limitações). Estritamente falando, isso também é um truque de montagem, mas você pode fazer
muitas coisas simplesmente visualizando a memória e ajustando seus hábitos de acordo.

Tela automática (pressione para continuar) fazendoNão está realmente na mesma classe
dos outros mencionados, exceto por alguns jogos bastante chatos de manusear, mas
definitivamente vale a pena conhecer, pois é algo que você provavelmente encontrará mais
cedo ou mais tarde. O jogo pode ter mais texto em uma determinada conversa do que
pode ser exibido na caixa de texto fornecida e, como tal, terá que mudar automaticamente
para a próxima ou permitir que o usuário controle o que acontece. Da mesma forma,
alguns jogos são bastante concisos e podem não haver disposições para isso ou exigirão a
edição do próprio mecanismo de texto do jogo.
As possibilidades aqui são extensas. Alguns terão um comando básico de fim de
seção que o jogo irá pausar na entrada pendente do usuário e outros irão rolar
automaticamente. O que eventualmente termina nos menus de escolhas dos jogos é
(o clássico sim/não a opção de um jogo, um conceito que muitas vezes vê dupla
codificação de blocos usada para isso), que pode ser uma espécie de abordagem de design de lista/nível
vinculada ou algo enterrado nas profundezas do jogo.

Envolvimento conduzido por OAM/tileIsso é mais reservado para texto em imagens/mapas de blocos,
como aqueles frequentemente vistos em quebra-cabeças; no entanto, aqueles que fazem um hack de
fonte de largura variável podem usar leituras do gerenciamento de blocos OAM ou BG para direcionar as
coisas. Houve jogos como Kenshuui Tendo Dokuta que usaram uma representação de fonte e um
formato gráfico nitroSDK para repetir blocos conforme necessário para exibir a cena.

Quebra de linhaAssim como os ponteiros usados para indicar a localização e o final


de uma seção de texto, um jogo pode não ter a capacidade de quebrar
automaticamente uma linha quando se trata da borda da tela/caixa limite. Às vezes é
automático, às vezes é acionado por ponteiro, às vezes tem um caractere único ou
conjunto de valores (Megaman ZX usou FC, se você se lembra) e às vezes usa o
mesmo caractere como outro valor final.

Envolvimento de seção Muito parecido com quebra de linha, mas observe que não é
sempre o mesmo que a quebra de linha usada no jogo com o qual você está lidando, pode até
não ser o mesmo conceito (ponteiros para finalizar uma seção e caracteres para quebrar uma
linha são na verdade uma boa maneira para os desenvolvedores fazerem muito disso ).

3.6 Extração e inserção de texto


Saber o que é o texto, como ele é codificado e como qualquer marcação acontece é muito
bom, mas para qualquer coisa além de uma substituição trivial de caracteres, pode ser
problemático editar coisas em seu editor hexadecimal, a menos que você tenha muita sorte
e tenha um mecanismo de script ou alguma coisa similar. Da mesma forma, sua equipe/
programas de tradução podem não gostar de ter que lidar com arranjos de estilo de
programação e preferirão ter algo que possa pelo menos ser editado em um editor de uso
geral.

169
3.6.1 Extração de texto
Mesmo com uma tabela um pouco mais completa, muitas imagens ROM podem não ter seu texto
facilmente extraído para um arquivo de texto simples, graças a coisas como marcação e espaços
reservados; mesmo coisas simples como a seção não tem novas linhas/marcador de fim de seção,
como a maioria dos editores de texto entende, podem atrapalhar as coisas. É por esta razão que
programas personalizados são frequentemente feitos para suportar um determinado jogo/série,
em vez de lidar com um simples despejo de script. No entanto, é muito bom ter um simples
despejo de script de vez em quando e com um pouco de reflexão pode ser feito para permitir que
as coisas sejam trazidas de volta ao texto posteriormente com um pouco de esforço, em vez de
exigir um manual completo retrabalho.
Tecnicamente, os arquivos de tabela suportam parâmetros de quebra de linha, string e seção (o
tabular tem a capacidade de adicioná-los), mas se sua ferramenta de extração os suporta é uma questão
diferente. Lembre-se também de que nem todos os jogos os utilizam e, em vez disso, podem usar
ponteiros ou seções de comprimento fixo.
Para este fim, pode ser bastante útil substituir tais conceitos por coisas que você pode
editar posteriormente. Embora haja exceções, a grande maioria das imagens ROM usará
um formato binário para coisas como quebras de linha.
As duas principais abordagens para isso são marcação de estilo XML e anúncios (massivos).
XML é uma linguagem de programação de certa forma e permite que você defina um
conjunto de dados simples, mas aqui a ideia de usar < e > em torno de strings personalizadas
para indicar conceitos de uma forma como <nova linha>, <fim do parágrafo> e mais tarde na
marcação adequada como <bold> tem um pouco de apelo e na maioria dos casos os jogos não
tendem a usar tais conceitos (embora verifique). Se você os tiver, eles permitirão uma pesquisa
simples e substituição para fazer o trabalho de uma ferramenta mais complexa. Sem mencionar
que você pode ir muito longe e realmente usar o XML adequado com um analisador criado para
ele.
Flag e massivo ag é como o XML acima, mas em vez disso, a representação hexadecimal
real das coisas será usada para que você possa substituir mais facilmente.
Um bom exemplo pode ser que em editores básicos no Windows, a nova linha no texto é
indicada por 0D0A hexadecimal (outros sistemas operacionais como Apple (0D) e sistemas Unix
(0A) são diferentes, mas tenderão a suportar a versão Windows também) , aqui você pode fazer
com que o final da linha original seja indicado com um símbolo como # ou @ (um que
provavelmente não será usado no jogo), tenha uma linha extra adicionada no hexadecimal real
(ou não, se você preferir) e então você pode substituir facilmente em um editor hexadecimal no
final. Massive ag apenas usa uma longa série de símbolos para que você possa ter certeza de que
não faz parte do jogo normal.

Janela de script Crystaltile2Um dos primeiros projetos do autor original do Crystaltile2


foi uma ferramenta conhecida como Crystalscript que visava unir suporte a tabelas,
abordagens de programação e algumas abordagens mais linguísticas/linguísticas
para extração de texto. Sua funcionalidade mais ou menos chegou ao crystaltile2 e
está disponível na pouco discutida janela de edição de texto.
É aqui que a natureza traduzida às pressas (com a ajuda de alguma tradução
automática) do crystaltile2 reduz um pouco o processo.
A ideia geral é depois de criar uma tabela e dizer para usá-la no menu suspenso
(se necessário - lembre-se que o Crystaltile2 suporta uma ampla gama de codificações
conhecidas) você abre o arquivo neste modo.
Depois disso, você pode clicar no menu suspenso de pesquisa e pressionar Ambassador
search, que funciona como uma pesquisa de strings de um editor hexadecimal padrão.

170
Depois disso, você pode restringir sua seleção com um ou mais métodos de pesquisa
especiais (coluna elástica significa alinhada aqui) e, uma vez selecionados os arquivos,
você pode pressionar Extract Retrieved Project ou usar comandos semelhantes no
menu de edição.

Extração de texto convencionalApesar dos problemas potenciais, muitos jogos fizeram


coisas de maneira semelhante a alguns programas que podem ajudar a facilitar a
extração de texto. As duas ferramentas mais populares são Cartographer e Kruptar 7,
embora romjuice (uma das ferramentas anteriores) também continue bastante
popular.

CartógrafoBaixar Romhacking.net
Uma ferramenta apenas de linha de comando que você alimenta um arquivo e uma
lista de comandos (que inclui uma tabela) antes de exibir um despejo de texto bem
formatado. O leia-me incluído contém o uso completo e alguns exemplos. A maior parte é
bastante simples, mas também suporta ponteiros de vários tipos (embora nenhum
comando explícito para suportar jogos GBA).
Se o seu jogo GBA ostenta alguns novos tokens de linha/fim de seção, pode valer a
pena usá-los, mas se você estiver usando ponteiros, a adição de um 08 ou similar no
início do valor (ele suporta uma troca de endianness) pode tornar as coisas
complicadas. Você pode tentar usar o comando #POINTER SPACE para pular bytes e
pode tentar usar a opção de ponteiros relativos, mas um valor negativo grande pode
não funcionar bem. Falhando nisso, pesquise e substitua ou melhor, 32 bits AND bit a
bit por 00FFFFFF (FFFFFF00 se você considerar o endianness) no ponteiro
campo permitirá que você faça as coisas; soluções alternativas como essa são comuns se você
tiver que usar ferramentas pré-fabricadas e ter a capacidade de fazê-las geralmente é um sinal de
um bom hacker.

Krutar 7Baixar Romhacking.net


Uma ferramenta gráfica mais recente (ou pelo menos a reescrita atual é relativamente nova)
e que interage bastante bem com a ferramenta de criação de tabelas Oriton (elas vêm do

171
mesmo grupo/site de hackers). Ele também possui algumas habilidades de edição e inserção,
bem como edição de tabelas.
As habilidades do ponteiro, como vistas na imagem, são algumas das melhores e
podem suportar plug-ins escritos em turbo pascal.

3.6.2 Inserção de texto


Depois de encontrar, decodificar, extrair e alterar/traduzir o texto, ele será inserido
novamente na ROM. Até mesmo a edição básica de texto pode exigir um pouco de reflexão
para colocá-lo de volta na ROM e se você tiver que mudar algumas coisas para torná-lo
mais acessível para um editor de texto geral ou sua equipe, isso pode piorar.
Depois disso, você também terá que recalcular os ponteiros, mas isso é um
assunto diferente. Você também pode ter a tarefa ainda mais chata de recalcular
ponteiros e editar o binário da ROM se o seu texto for eventualmente encontrado
entre as instruções no binário ou sobreposição do jogo, algo que vários projetos de
DS que inicialmente pareciam bastante fáceis encontraram.
Ainda mais do que o detalhamento de como encontrar arquivos/dados desejados
ou a criação de tabelas, a inserção de texto em muitos documentos tutoriais equivale
a uma reclamação, basta fazer e seguir em frente. Isso não é sem razão, pois há
muitas coisas que podem atrapalhar e, embora existam algumas ferramentas
ostensivamente de uso geral, elas são impossivelmente básicas e úteis apenas para
algumas coisas (ou farão isso, mas com um extenso estímulo manual de antemão),
quase uma linguagem de programação ou muito específico do jogo. Falando em jogo

172
específico, se possível, geralmente é melhor fazê-lo dessa maneira, pois há muitos métodos
que os jogos podem usar para texto.
Ainda assim você vai querer saber quatro coisas

1. Quais marcações e espaços reservados estão disponíveis, são usados, se houver, e como o
estágio de extração pode tê-los deixado.

2. Quais comandos/marcações de layout, final de seção e quebra de linha estão disponíveis, se


houver.

3. Quais restrições você tem, se houver, na largura da linha (observe que você também
pode ter restrições não imediatamente óbvias se o texto for usado em outro lugar
com coisas como sequências de ashback, seções de introdução de capítulos e
métodos de recontagem de conversas).

4. Quais são os limites de tamanho do texto, se houver, do ponto de vista dos limites de formato de
arquivo ou, muitas vezes mais preocupante, dos limites de espaço de memória.

Se você alterou a marcação de binária para outra mais parecida com HTML, XML ou
marcação de fórum (ou usou a técnica ag), será necessário alterá-la novamente. Você
também deve tomar nota das codificações dos seus personagens, pois os jogos e os
computadores podem fazer as coisas de maneira diferente. Isso pode ser coisas simples,
como o inglês britânico ainda usa diferentes tipos de aspas (aspas invertidas), que terão
codificações diferentes, e o inglês americano (também a configuração padrão para a
maioria dos jogos) tenderá a usar o estilo único de aspas (máquina de escrever). aspas) ou
mesmo evitar aspas duplas em favor de aspas simples (que parecem iguais aos apóstrofos
e um jogo pode usar o mesmo caractere para os diferentes tipos de pontuação). Além
disso, se você não tomar cuidado, uma determinada fonte em um computador confundirá
essas coisas no que diz respeito à representação no computador, mas as deixará
codificadas de maneira diferente, sem mencionar o problema relacionado de se um jogo
usa um ponto final como final de seção ( muitas vezes há um comando de final de seção
adequado, mas nem sempre) e aspas fora da pontuação (novamente, diferenças nos tipos
de gramática inglesa aparecem aqui).
No que diz respeito à codificação de caracteres, geralmente é melhor
combinar a codificação original com a saída; vários jogos usaram shiftJIS para
partes e ASCII regular para outras (mesmo mesclando-as dentro da mesma
string) e reclamarão muito se não for assim na hora de rodar, porém isso é uma
coisa que é definitivamente vale a pena conferir/experimentar, pois pode
economizar espaço.
Fora isso, deve ser bastante fácil determinar se você tem coisas de extensão legal
(embora na prática você provavelmente teria alguém atuando como editor de script
para isso em um grande projeto).

Inserção de texto convencionalMuito parecido com a extração de texto, houve tentativas de criar
ferramentas de uso geral. Muitas vezes eles são limitados em capacidade ou tão complexos que
chegam a ser quase uma linguagem de programação, mas vale a pena conhecer o Atlas. Atlas é
uma espécie de padrão na inserção de texto de hacking de ROM de uso geral e a maioria das
ferramentas de extração visa ter uma certa compatibilidade com ele, sem mencionar que a
maioria das outras ferramentas de inserção também copiará parte da funcionalidade. Da mesma
forma, mesmo que a codificação não tenha sido alterada, não é incomum que existam tabelas
para extração de texto e versões modificadas das mesmas para inserção de texto.

173
Atlas (romhacking.net)
É um insersor baseado em script onde o tipo de script é de nido. O download inclui o
código-fonte para permitir modificações (embora o programa em si tenha suporte limitado
a plugins) e um manual com vários exemplos trabalhados de uso. De muitas maneiras, ele é
direcionado/tem provisões para o SNES e consoles similares com mapeamento de
memória, mas pode ser útil para ponteiros de nível de arquivo, como visto em muitos
formatos de DS.

3.7 Detecção de idioma em jogos DS


O DS possui algum firmware no qual você pode selecionar entre seis idiomas8
(japonês, inglês, francês, espanhol, alemão e italiano) e os jogos têm a
capacidade de escolher automaticamente um idioma. Mais de uma vez vários
idiomas foram bloqueados apesar de estarem presentes na ROM (houve alguns
jogos GBA com recursos semelhantes, sendo um dos mais notáveis Magi
Nation, embora seja um pouco diferente), embora provavelmente o exemplo
mais conhecido seja Japoneses em Advance Wars Dark Con ict/Days of Ruin (o
(as primeiras guerras avançadas/famicom wars da linha principal nunca apareceriam no Japão)
que estava presente no jogo, mas mesmo com os japoneses selecionados, ele seria ignorado por
padrão. No entanto, foram feitas fraudes que forçaram o jogo a rodar em japonês. Mais serão
detalhados em cheats e hacking de lógica de jogo posteriormente, mas é importante notar que
eles existem aqui.
Outros jogos permitirão que o usuário final selecione durante a inicialização e talvez mais tarde
também.

3.8 Hacking de tradução


A primeira regra do hacking de tradução é em nenhuma circunstância você deve tocar em
um tradutor automático; eles são certamente peças fascinantes do kit e têm sua utilidade,
mas em um futuro próximo não terão lugar em um trabalho criativo como o hacking de
tradução9e especialmente não para línguas quase totalmente não relacionadas, como as
línguas japonesas e europeias.
10

Traduzir jogos é uma atividade muito popular entre hackers de ROM e se você sair
do hacking de ROM e da tradução de fãs / tradução de ROM de círculos de execução
de ROM, será quase sinônimo de hacking de ROM. A maior parte da tradução é

8Há também um modelo DS exclusivo da China, conhecido como iQue DS (ocasionalmente iDS), que
apresenta um modelo DS chinês, bem como um modelo coreano que é menos examinado. Houve
apenas alguns jogos chineses, também conhecidos como jogos iQue, que estão supostamente
bloqueados, mas na prática é uma verificação simples. Os hackers de ROM chineses, entretanto, são
alguns dos mais prolíficos que existem e traduziram bem mais de cem títulos para o chinês, sendo a
maioria de qualidade bastante boa, incluindo vários que não saíram do Japão.
9Alguns disseram que a invenção do sexo virtual realista significará o fim da raça humana, mas
outros argumentariam que a invenção de uma máquina que pode fazer humor seria mais contundente e
o primeiro passo para isso seria ser capaz de traduzir humor e/ou jogo de palavras de uma língua para
outra.
10O exemplo tradicional é fornecer uma tradução de um trecho de um texto e vice-versa, usando o
parágrafo que acabou de ser escrito do inglês para o japonês e vice-versa: A primeira regra para hackear
sua tradução deve ser tocar na localização da tradução automática em qualquer circunstância; eles são,
de fato, uma parte atraente do kit, embora tenham seus usos, por enquanto, eles estão hackeando
traduções para idiomas completamente não relacionados, quase tão bem quanto o idioma do Japão e da
Europa, não particularmente. Não há lugar para trabalho criativo como.

174
do japonês para o inglês, do japonês para o chinês ou do japonês para outra língua de
origem europeia (embora as traduções em árabe, russo, coreano e tailandês estejam
aumentando em número) e, ao contrário de quase todas as outras áreas de hacking de
ROM, isso não é simplesmente uma questão de habilidade técnica, pois também requer
habilidade linguística. Houve alguns tradutores hackers de ROM no passado, mas eles são
raros e geralmente eram mais um do que outro, então geralmente significa criar um grupo
de tradução para fazer as coisas. Isso certamente não significa que você, como hacker de
ROM, não faria bem em saber um pouco sobre o idioma do qual está traduzindo e isso
normalmente significa japonês.
Talvez acima de tudo você deva reconhecer e apreciar que, apesar das línguas
compartilharem muitas coisas em comum (verbos, adjetivos e substantivos por exemplo), elas
também podem carecer de coisas (o inglês não tem realmente gênero para as palavras, algumas
línguas têm dois e línguas como o russo têm três) e fazer coisas diferentes em coisas como
ordenação de adjetivos. No que diz respeito à ordenação de palavras, a maioria dos jogos
modernos que usam marcações/espaços reservados podem contornar isso ou até mesmo alterá-
lo sem quaisquer consequências negativas. Se o item a ser substituído por um valor estiver em
um ponto fixo em um script, você poderá ter que contornar isso, o que pode ser problemático ou
aceitar uma tradução um pouco desajeitada. Alguns jogos codificaram pedaços maiores de texto
como parte da variável/marcação e isso leva a coisas como os estalajadeiros dizendo que custa
600 ouro para passar a noite aqui.
Da mesma forma, as línguas são construídas sobre centenas de anos de história,
história que informa seriamente como funcionam; A cultura japonesa foi e, em muitos
aspectos, ainda é fortemente informada por noções de hierarquia social que
influenciam infinitamente a língua e podem ser bastante difíceis de traduzir/transmitir
de forma eficaz se a cultura da língua para a qual você está traduzindo, ou seja, mais
línguas europeias, não tem essa história. Da mesma forma, eles têm vários níveis de
influência sobre e a partir de outras línguas; O chinês formou uma grande parte da
língua escrita japonesa, por exemplo, mas hoje em dia eles estão longe de ser
totalmente inteligíveis entre si (veja kokuji e kokkun) e hoje em dia é muito mais
provável que você encontre pequenos ajustes nas palavras inglesas em japonês do
que seria há cem anos. anos atrás.
O estudo das diferenças entre idiomas é aparentemente algo bastante comum
para aqueles nos campos científico e tecnológico, no entanto, apesar de ser ótimo ter
uma apreciação disso, não está diretamente relacionado ao hacking de tradução,
então é hora de voltar ao assunto. tema.
O debate sobre se uma tradução deve ser mantida literal ou se pode ser um pouco
adaptada tem durado anos sem fim à vista; na verdade, vários projetos de retradução/
limpeza foram criados para resolver problemas com traduções oficiais e não oficiais
ao longo dos anos. . Cada lado tem argumentos válidos aqui, com o único consenso
real sendo mudar drasticamente uma obra e chamá-la de tradução é forçar um pouco
o limite (embora se o resultado final funcionar, pode ser bastante interessante) e ter
sua tradução legível é um coisa boa; observe que legível e compreensível apenas com
um quadro de referência para a franquia ou uma determinada cultura/história não é
necessariamente a mesma coisa, porém tal coisa pode informar como você procede
com uma tradução.
Coisas que devemos apreciar sobre a língua japonesa ao jogar ROM
hacker (lado hacker da cerca)

175
3.8.1 Os tipos de caracteres japoneses e como funcionam -
Hiragana, Katakana e Kanji formam a base da língua

Kana. Um termo coletivo para Hiragana e Katakana, eles são os princípios básicos
construções da língua com Katakana geralmente sendo usadas para empréstimos/palavras
estrangeiras, também onde os Hiragana são de forma bastante livre, os Katakana têm uma
aparência um tanto angular. Hiragana tende a ser reservado para palavras nativas e ambos são
fonéticos, o que significa que vários são combinados para fazer com que o word.rikai.com shiftJIS
tenha exemplos de ambos.
Existem alguns métodos de ordenação/classificação bastante aceitos, sendo o pedido
Gojuon o mais popular. Ferramentas comuns de criação de tabelas de hack de ROM, como
TaBuLar, devem adicioná-lo e poucos jogos se desviam aqui. No lado ip, esteja ciente de
que a ordem pode mudar, que as ferramentas padrão podem deixar de fora algumas
menos comuns e possivelmente obsoletas, aquelas que o escritor do script pode usar (ou a
fonte que foi emprestada incluiu) ou que o jogo pode adicionar inteiros caracteres para
caracteres com pontuação (veja Dakuten, Youon/Yoon e Handakuten, embora a maioria das
boas ferramentas de criação de tabelas devam ser capazes de adicioná-los), portanto,
esteja ciente disso ao construir tabelas. ShiftJIS e EUC-JP usam a ordem, mas também
incluirão Dakuten para os respectivos caracteres entre eles e muitos jogos usam ou
seguem sugestões das codificações ShiftJIS e EUC-JP.

KanjiKanji são os símbolos elaborados provenientes de caracteres chineses Hanzi (se


apresentados com uma escrita de idioma asiático desconhecido, tende-se a distinguir o
chinês do japonês procurando o Kana mais simples que falta ao chinês) e há um grande
número deles. Na verdade não há limite máximo, embora um livro conhecido como Dai
Kan-Wa Jiten seja considerado uma das listas mais completas e quase obrigatório para
qualquer tradutor. Mesmo entre os falantes nativos, eles são considerados a parte mais
difícil do idioma e muitos tradutores/graduações linguísticas farão referência a várias listas
deles; a maior parte da linguagem do dia a dia geralmente fica abaixo da marca de 2.000.
Ao contrário de Kana, eles são ideogramas e um símbolo tende a representar uma ideia,
embora ainda possam ser combinados para formar conceitos/palavras compostas
relacionadas.
É importante para o hacking de ROM que existem vários tipos de trabalhos e
campos (medicina por exemplo) que visam reduzir o número deles em seu texto.
Um dos exemplos mais notáveis seria que mangás e animes shounen tentam
reduzir a quantidade vista, uma prática bastante favorável para tradução de
ROM, pois tendem a produzir muitos jogos bastante interessantes que nem
sempre chegam fora do Japão.
Algumas pessoas tentaram fazer algo parecido com uma ordem para Kanji e há
algumas coisas que você pode aprender que podem ajudar, mas na prática não há
nenhuma e isso significa uma pesquisa relativa, que é muito útil ao fazer tabelas para jogos
de língua romana, é na melhor das hipóteses, muito complicado e, mais frequentemente,
bastante ineficaz.
Se você quiser tentar uma pesquisa relativa, você vai querer ter uma idéia da ordem
existente, como por exemplo, de uma fonte, por meio de manipulação da memória RAM, por
meio da tela de entrada de nome ou algo semelhante, antes de recorrer a uma pesquisa de valor
ou a uma pesquisa abstrata. . Deve-se notar também que, no que diz respeito às codificações
vistas em estado selvagem, existem métodos um tanto lógicos, incluindo ordem de aparecimento
no texto do jogo (ou texto de outro jogo, se a mesa for emprestada), caracteres

176
contagem no texto (o mais popular primeiro, por exemplo), ordenação emprestada de uma
codificação conhecida (mesmo que os valores de codificação sejam diferentes) e coisas
semelhantes, então considere isso também. Além disso, como as empresas de desenvolvimento/
publicação de jogos podem não querer se preocupar em definir uma nova codificação para cada
jogo que fazem, elas podem muito bem compartilhá-las entre jogos, no todo ou em parte, ou
usar codificações existentes para criar novas.
Como mencionado acima, existem listas de Kanji que você pode querer consultar para
ajudar a fazer tabelas, mas está longe de ser certo e pode ser mais útil para quem está
fazendo a tradução; afinal, os jogos modernos são geralmente escritos por escritores
modernos para públicos modernos, sendo que ambos tendem a ser produtos da educação
moderna e da reforma da linguagem moderna. Deve-se ter cuidado, pois os jogos gostam
de usar símbolos mais antigos como símbolos mágicos e decorações, sem falar que o jogo
de palavras e a apreciação da linguagem são algo bastante comum na cultura japonesa.

Historicamente, havia coisas conhecidas como moji (categorias) que também


presumivelmente levaram à gíria moji bake para quando a codificação usada pelo
decodificador está errada (não deve ser confundida com cavespeak, que é onde uma
codificação de 16 bits é trocada por uma codificação de 8 bits aquele que quebra o texto
não traduzido), pode ser útil conhecê-los, mas isso está entrando na história ortográfica
japonesa e mesmo com um conhecimento decente de japonês provavelmente não será tão
útil para aqueles encarregados de fazer engenharia reversa de arquivos de texto de jogos.
Por outro lado, você deve saber o que significam os termos ordenação radical e ordenação
de traços, pois são de uso muito comum. Para esse fim, radical refere-se ao traço/
componente base em que o Kanji em questão começou/como e o traço é literalmente
quantos traços de pincel/caneta são necessários para completar o Kanji em questão. Não é
um verdadeiro sistema de pedidos, mas ao pesquisar as coisas, será o que será usado na
grande maioria dos casos.
Ferramentas de hacking de ROM, ou mesmo ferramentas de uso geral, para adicionar vastas
listas de Kanji de maneira semelhante às habilidades do TaBuLar em Kana e idiomas romanos não
existem realmente, embora TaBuLar suporte a adição de listas de caracteres de 16 bits se você os
tiver pré-fabricados. Se você tiver uma ordem comum (ou alguns fragmentos dela, eles podem
organizar e adicionar de acordo) ou se for extraí-la diretamente do jogo; OCR (reconhecimento
óptico de caracteres) para japonês existe e está até mesmo em algumas ferramentas de hacking
de ROM como o Crystaltile2, embora funcione melhor em fontes góticas e seja incomodado por
algumas das fontes mais fantasiosas/de caligrafia, como as do Kaisho e Gyosho linhas e às vezes
até Mincho, também se você conseguir uma ferramenta que possa fazer isso Tensho e Reisho,
que parecem muito diferentes de outros Kanji, não são tão ruins para OCR. No final, você tem
algumas opções, mas espera uma grande quantidade de trabalho manual até prova em contrário.

No que diz respeito a pesquisas básicas de tipo de expressão regular, Kanji e kana
podem estar em qualquer lugar do texto e em nenhum lugar, naturalmente, se você
melhorar seu conhecimento de japonês, haverá situações que comumente exigem um ou
outro, ou uma coisa definida (acho que você sempre segue q em inglês) e você pode
conseguir fazer alguma coisa.
Tudo isso dito, se você precisar alterar uma fonte como parte do hack do jogo e manter
caracteres/idioma suficientes para que seus tradutores ainda façam alguns testes de jogo
contínuos, então os Kanji geralmente são a melhor escolha para algo a perder.

177
Ordenação de Kanji Embora tenha sido afirmado que não há ordem, existem agrupamentos
que você pode querer aprender a reconhecer ou pelo menos apreciar. As versões
mais notáveis disso são as

ˆ ?-moji. Embora agora seja considerada, se não obsoleta, então não é a melhor prática
Para muitos, tanto no Japão como fora dele, a ideia de categorizar os kanji em
grupos com o su x moji ainda é conhecida e influencia as coisas. Existem seis grupos,
quatro dos quais atendem pelo traço/estético básico e os dois últimos pelo seu
significado. As listas são difíceis de encontrar e não tão difundidas, mas então você
sabe que se o seu tradutor lhe disser que está agrupado mais ou menos assim, você
pelo menos já ouviu o termo antes.

ˆkyoiku. Uma lista de kanji conforme especificado pelo ministério da educação japonês
e discriminados por ano escolar/faixa etária. Dependendo da pessoa com
quem você está falando, a coleção/conceito completo da divisão nota por
série pode ser chamada de gakushu, embora isso não seja o ideal.

ˆalegria. Esta seria a lista completa (kyoiku mais os do secundário


faixas etárias escolares) de kanji de uso comum.

Mais uma vez, vários métodos específicos de jogos foram vistos e muitos métodos personalizados
compartilharão partes ou mesmo seções inteiras com shiftJIS, eucJP ou algo semelhante, pois é
tão estranho para os programadores originais definirem uma nova ordem quanto fazê-lo. você
mesmo. Da mesma forma, há exemplos de jogos que usam uma ordem baseada na ordem em
que os personagens aparecem pela primeira vez no roteiro e ordens baseadas na forma como os
personagens são comuns.

FuriganaFurigana deveria ajudar na pronúncia do Kanji (voltado principalmente para os


mais jovens e aqueles que estão aprendendo o idioma), mas foi visto que contém pequenas
piadas, explicações extras e muito mais, basicamente transformando-o no equivalente a
um asterisco ou uma nota de rodapé /referência. Não era tão comum em sistemas mais
antigos, principalmente por razões técnicas, mas o DS, com uma bela tela sensível ao toque
e recursos suficientes que nem sempre são necessários para otimizar fortemente as coisas,
foi amplamente utilizado. Geralmente vem como um tipo de marcação ou texto marcado,
mas nem sempre, ponteiros, por exemplo, podem lidar com isso, e você pode usar o
espaço que eles usaram para ajudá-lo a acessar mais o arquivo/memória se você estiver
limitado lá.

Outros (yakumono)Embora o japonês tenha muitos dos mesmos conceitos das línguas que
usam o conjunto de caracteres romanos em termos de pontuação, a taquigrafia e as
construções decorrentes deles, os caracteres que usam podem ser radicalmente diferentes.
sljfaq tem mais sobre isso. Isso pode permitir o retorno de algumas técnicas do tipo de
análise hexadecimal.

3.8.2 Glifos/caracteres japoneses e observações sobre o idioma


Houve alguma menção aos tipos de fontes vistos em japonês, mas em geral os
caracteres têm largura fixa e permanecem dentro das linhas. Isso contrasta com
o alfabeto romano que tem coisas como ijlt e no lado ip WQMK, bem como
pontuação que quase sempre fica ao lado do caractere anterior

178
sem muita lacuna e, em termos de linhas, caracteres como jypq e f em
algumas fontes/estilos de escrita.
Observe também que o japonês não possui caracteres de espaço em si, sendo que
qualquer um que você vê é amplamente estético ou para fins de quebra de linha; você
provavelmente encontrará isso ao traduzir um jogo do japonês que possui um mecanismo
de texto construído por um programador japonês para uso com o idioma japonês, mas o
mesmo pode ser dito da maioria dos aspectos da tradução.

TategakiResumindo, o japonês geralmente é escrito horizontalmente, assim como o inglês


e os idiomas europeus, e é até lido da esquerda para a direita. No entanto, pode ser escrito
verticalmente e lido de cima para baixo, sendo o nome do conceito tategaki. Geralmente é
reservado apenas para sequências de introdução e arte no que diz respeito aos jogos e à
maioria dos japoneses modernos, por isso não tende a causar problemas na tradução, no
entanto, foi visto em Sigma Harmonics no DS.
Da mesma forma, embora não seja estritamente legal na gramática inglesa o uso dele para
pequenas quantidades de texto (por exemplo, com que frequência você vê um hotel, cinema e
alguns outros usam-no em uma placa) ou simplesmente para causar uma associação mental com
o Japão; é um efeito visual bastante reconhecido e, como provavelmente também estará
flutuando sobre uma imagem no estilo anime ou uma pintura a tinta, também ajuda. Para esse
fim, você pode querer deixá-lo.

RomajiUma das principais razões pelas quais o japonês é considerado difícil de aprender é que,
ao contrário de aprender a maioria dos outros idiomas, você também precisa aprender um novo
conjunto de caracteres. Para diminuir isso e, em alguns casos, permitir que o japonês seja escrito
sem um editor de método de entrada (IME)/teclado japonês adequado (que lembre-se, pode ter
milhares de teclas de tamanho se você quiser incluir até mesmo um pequeno subconjunto de
kanji) maneiras de sobrepor o língua japonesa ao alfabeto romano foram inventados. Existem
vários dos quais o mais popular, embora não necessariamente o mais apreciado, é Hepburn.
Muito poucos jogos japoneses irão usá-lo e ocasiões em que ele pode optar por todos os
números ingleses e quase definitivamente árabes, mas é um conceito bastante importante e
duplamente importante quando se lida com vários idiomas ao mesmo tempo.

Comprimento da fraseSeja devido à existência de kanji ou talvez apenas em geral, a


versão escrita da língua japonesa é muitas vezes mais curta do que a tradução em
inglês que os hackers de ROM e as equipes oficiais de tradução enfrentam. A fala é um
assunto diferente e geralmente é aproximadamente equivalente em comprimento, o
que é bastante bom para a equipe de tradução, geralmente, pois será salpicada de
títulos honoríficos e coisas assim.

Jogo de palavrasTodas as línguas e o humor que os utilizam têm muitos exemplos de jogos
de palavras, mas o japonês é especialmente conhecido por isso e, de fato, muitos
tradutores perderam coisas como essa e entregaram uma tradução em tom muito
diferente do original ao longo dos anos por causa disso. Com algumas exceções muito
notáveis (Rudra no Hihou no SNES geralmente sendo o primeiro nessa lista), poucos
jogos usaram o jogo de linguagem como um conceito/mecânica central semelhante a como
o inglês é tratado quando a magia é trazida à tona.
É também mais uma razão pela qual a tradução automática não é confiável.

179
3.8.3 Sobre o idioma
Traduzir um jogo que já tem uma tradução já aconteceu várias vezes ao longo do
tempo e isso geralmente ocorre porque a tradução não combina com várias ideias;
poderia ser uma conversão horrível e cheia de gírias ruins, poderia ser que a equipe
de tradução não tivesse habilidades técnicas (mesmo com o código fonte alguns jogos
podem ser difíceis de traduzir11)ou pode ser que a equipe de tradução tenha sido
prejudicada pelo desenvolvedor/editor e tenha que mudar o tom do idioma ou a
escolha das palavras para atrair um público mais amplo ou atender aos requisitos de
censura. Embora este seja um campo muito interessante no hacking de ROM, e
dependendo do que você está fazendo, pode até ser um projeto solo, não é disso que
trata esta seção.
Várias discussões foram realizadas ao longo dos anos sobre como traduzir certos
conceitos. Também se aplica ao japonês, com um bom exemplo encontrado em
muitos Final Fantasy e outros títulos da Square Enix, onde o folclore e a literatura da
Europa e do Oriente Médio são frequentemente uma fonte de monstros e temas, sem
mencionar que outros jogos usam a história e o folclore chineses. como tema. Assim
como as traduções de jogos do japonês para o inglês, as traduções de itens e
conceitos para o japonês também podem fazer com que as pessoas destruam o
significado de algo.
Por outro lado, japonês, inglês e outras línguas são muitas vezes bastante diferentes;
também existem empréstimos que podem ter perdido o significado em alguns pontos. Por
exemplo, você pode saber que Sushi não é peixe cru, mas muitas pessoas ainda o
consideram como tal, sem mencionar que é um alimento bastante normal no Japão, ainda é
bastante exótico em outros lugares e, como tal, você pode considerar perder
completamente o sushi e substituindo-o por um alimento comum do local pretendido se o
cenário for uma cidade contemporânea ou algo assim.

3.8.4 Idiomas e tradução da direita para a esquerda.

Já foi mencionado algumas vezes, mas vale a pena ter uma seção rápida aqui também. Nem
todas as línguas favorecem a leitura da esquerda para a direita e isso pode dificultar a
pirataria de tradução, especialmente à medida que cada vez mais países que utilizam tais
sistemas de escrita começam a fazer jogos e procuram aqueles feitos antes. Há tategaki
mencionado em japonês, mas a maioria estará mais preocupada com o árabe e o hebraico,
bem como com os idiomas que tomaram um deles como base e o acompanharam.
Felizmente, linguagens que alternam direções, um conceito conhecido como
boustrophedon, embora estritamente que provavelmente também deveria refletir a linha,
não são de uso comum. Voltando ao tópico, aqueles que moram em locais, desejam
aprender idiomas nesses locais e estão interessados, são muitos e os jogos são apreciados
universalmente pelas pessoas. Normalmente parece haver três escolas de pensamento

1. Basta deixar da esquerda para a direita

2. Trapaça

3. Hacking completo

11Um tradutor de japonês para holandês da Loekalization detalha muitos dos problemas enfrentados
por quem traduz jogos reais. Algumas coisas são muito focadas na tradução profissional, mas muitas
delas também soam verdadeiras para hackear ROM e até mesmo o material profissional dá dicas sobre
os problemas que são vistos quando se trata de hackear ROM.

180
Traduzido do Inglês para o Português - www.onlinedoctranslator.com

Devido à maioria dos computadores e desenvolvimento de padrões que tendem a acontecer fora
dos locais que usam linguagens escritas RTL, a maior parte da computação que o suporta ainda
não foi totalmente filtrada para os consoles, para um conceito relacionado, consulte as
codificações de 8 e 16 bits e a diversão e jogos históricos lá. Mesmo em computadores, embora as
coisas não sejam boas, muitas pessoas se acostumam a ler coisas em uma tela de maneira
diferente de como leriam um pedaço de texto manuscrito ou impresso. Na verdade, a RTL e essa
programação de computadores são um conceito relativamente novo. Para esse fim, desde que os
glifos estejam lá e na ordem correta em que funcionem, você provavelmente fará algo
semelhante ao ler 2 ^ 4 como24em um computador. Não é ideal de forma alguma, mas talvez seja
melhor que nada.
Trapaceando então... se você já viu alguém novo na edição de texto usar um editor
de texto, então você deve tê-lo visto colocar texto no meio da tela usando espaço ou
tabulação e forçar novas páginas pressionando Enter várias vezes. Uma técnica
semelhante é usada aqui e para cada linha de texto serão adicionados espaços/abas
suficientes para que apareça no lado direito da tela. Normalmente aqui ROMs com os
maiores scripts serão escolhidos como ROM base, mesmo que não estejam alterando
esse idioma (aqueles que abordam os jogos N64 Zelda tendem a usar a ROM francesa,
mas o script em inglês por causa disso). Novamente, isso está longe de ser o ideal,
mas está melhorando.
Hacking completo então. Uma quantidade surpreendente do mecanismo de texto, e
possivelmente até mesmo do hardware subjacente no que diz respeito às referências para a
posição da tela, será baseada no texto que aparece da esquerda para a direita, no entanto, tal
coisa potencialmente não é tão ruim quanto hackear uma fonte de largura variável. A ideia é que
um mecanismo de texto possa fazer algo como desenhar um caractere, adicionar 16, desenhar
outro caractere, se for o fim da linha, então iniciar um novo... em vez disso, você diz para ele
começar no final, desenhar um caractere, pegar 16, desenhar um caractere e manipular novas
linhas de acordo. Você terá que ter cuidado com os negativos e como isso pode lidar com a
ultrapassagem (perder um espaço de caractere e dizer se está abaixo da largura do caractere
maior, então a nova linha é bastante segura aqui), mas no geral, provavelmente deveria ser mais
fácil do que um hack VFW completo, que você também pode precisar fazer.
Deve-se notar também que vários caracteres podem ser unidos em árabe
escrito, muitos levarão o é um computador, portanto, não importa,
abordagem, mas se você estiver sendo então talvez considere isso.

3.9 Editores de texto e ferramentas de tradução em japonês


A seção a seguir cobre principalmente várias ferramentas que podem ser úteis para
aqueles que precisam trabalhar com o idioma japonês. Pouco ou nenhum uso será
abordado em favor de alguns links e uma rápida visão geral.
A caixa de ferramentas de tradução do Densetsu mantém um bom conjunto de links para diversas
ferramentas e recursos úteis para quem faz a tradução.

3.9.1 Editores de texto com capacidade geral para japonês

Embora com um editor de método de entrada e um sistema operacional configurado


apropriadamente praticamente tudo sirva, há certos recursos que são úteis em um
editor de texto quando você está editando em japonês. Para este fim, um link para
alguns deles

NJStarNJStar

181
Este é o editor de texto mais comumente usado para o idioma japonês e foi
apreciado pelas equipes de tradução que trabalham no hacking de ROM. É em grande
parte shareware/avaliação, embora existam opções pagas.

JWPCEJWPCE
Um programa freeware mais antigo que, em muitos aspectos, acompanha o NJStar acima.

3.9.2 Ferramentas de hacking de ROM

Um editor hexadecimal capaz de ler tabelas é bastante útil, mas existem algumas outras
ferramentas que são úteis

Pegue meu feitiçoDownload de viagem de arquivo


Página inicial do autor

Faz o que foi nomeado e retornará o equivalente hexadecimal do texto de entrada


para vários métodos de codificação comuns.

3.9.3 Ferramentas CAT

Embora este não seja um documento de idioma, há coisas que você pode fazer como
hacker de ROM para ajudar nos projetos e uma delas é a tradução assistida por
computador (CAT). Isto não é o mesmo que tradução automática, mas uma espécie de
programa de pesquisa e base de dados para traduções anteriores e ajuda a garantir
consistência em termos e outras coisas semelhantes; por exemplo, se você estiver
traduzindo um RPG enorme e encontrar um conceito três vezes em um jogo, mas traduzi-lo
de três maneiras diferentes, isso não parecerá bom.

Ferramentas gratuitas e de código abertoEmbora o campo profissional seja dominado por um


punhado de ferramentas caras, existem algumas ferramentas freeware/open source

AnáfraseuPágina do projeto sourceforge

ÔmegaTPágina do projeto sourceforge


Uma ferramenta baseada em Java e um dos programas de código aberto mais populares.

Tradutor XLIFFPágina inicial do projeto


XLIFF é o mais próximo de um padrão de conversão entre softwares no mundo
das ferramentas CAT. O programa em si é um gancho licenciado pelo MIT para um
software profissional, mas mesmo assim funciona.

182
Ferramentas comerciaisNa frente paga/comercial existem outras opções. Sendo um
software industrial/profissional/específico da indústria, embora os preços tenham o hábito
de ficar bastante altos e haja um formato bastante reconhecido/suportado conhecido como
XLIFF (um formato baseado em XML voltado especificamente para tradução), muitas das
ferramentas de código aberto suportam bem como alguns dos comerciais.

Ainda

TradosPagina inicial
Indiscutivelmente o líder de mercado em ferramentas CAT profissionais.

memoQPagina inicial
Não é tão popular quanto os outros dois e tem preços semelhantes, mas está ganhando seguidores
rapidamente.

Word FastPagina inicial


Várias ferramentas foram lançadas sob esta marca e dependendo de onde você for, o termo
wordfast pode se referir a qualquer uma ou a todas elas. Ainda é uma série muito popular de
ferramentas CAT e tecnologias relacionadas.

183
4 Multimídia
Os humanos têm muitos sentidos que moldam a experiência do mundo que nos
rodeia e os contadores de histórias há muito reconhecem o poder e, talvez mais
importante, as limitações destes sentidos. Os jogos, sendo um ramo do
dispositivo de história narrativa, usam som e, devido às limitações de um
dispositivo ou para fins narrativos, um jogo pode optar por usar também um
vídeo, ambos os quais merecem a atenção dos hackers. De modo geral, as três
principais coisas a fazer aqui são
1. Ripar coisas - os jogos geralmente contêm faixas de áudio/vídeo que as pessoas
desejam ouvir fora do jogo

2. Ajustes simples no jogo - geralmente possíveis sem edição extensa


3. Substituição integral – quer para efeitos de conversão total, restauro ou
simplesmente para personalização

Falando em copiar coisas, mudanças simples no sistema de arquivos costumam ser muito poderosas
aqui.

4.1 Som
O som existe como uma onda e foi descoberto há muito tempo se você amostrasse a onda
sonora com o dobro da frequência mais alta que desejava capturar (o conceito ficou
conhecido como teorema de amostragem de Nyquist Shannon, embora existam outros,
embora seja bastante lógico quando você pensa em é como querer capturar a subida e a
descida do pulso) e dependendo do que você lê, o ouvido humano jovem e saudável
trabalha até 20KHz, portanto a faixa de 40KHz e acima é usada para captura de som de
maior qualidade12embora a voz humana seja geralmente muito inferior a esse limite, sem
mencionar que todos os sons não são iguais (frequências mais altas são mais difíceis de
ouvir), então muitas vezes você pode conseguir uma amostragem em uma taxa mais baixa.

Existem dois tipos de áudio comumente usados em jogos (e na maioria dos outros
lugares)

ˆReplicação de onda

Aqui você amostra a onda em uma determinada frequência (já coberta) e determinada
profundidade de amostragem (geralmente 16 bits para permitir 65.536 opções diferentes
para o volume da onda naquele ponto, embora 8 bits sejam usados em muitas ocasiões) e
através de uma série de várias técnicas matemáticas, dependendo do formato que você
está usando, você pode armazenar e reconstruir a onda para reproduzi-la mais tarde.
Podem durar horas ou algo menos de um segundo.

ˆGeração/rastreadores de som

Aqui você tem uma coleção de sons (notas/tons simples ou amostras mais longas, não
importa muito) de várias formas que geralmente são chamadas de instrumentos e
organizam sua reprodução (e velocidade de reprodução) em tempo de execução, criando
música.
Cada um tem suas vantagens tanto para criadores de áudio quanto para hackers.

12Alguns vão além por vários motivos, embora isso entre em um território interessante e menos útil
para os usuários finais do que para aqueles que trabalham com áudio em primeiro lugar.

184
ˆAs ondas são muito fáceis de rasgar e certifique-se de reproduzir exatamente como você deseja
e são capazes de recriar sons bem o suficiente para capturar voz e muito mais,
mas não são tão facilmente controlados no jogo e são muito grandes devido à
quantidade de dados que devem ser armazenados.

ˆA geração de som é fácil de controlar, pois você pode adicionar e remover coisas
facilmente, alterar a velocidade, alterar o volume da reprodução, repetir as coisas de
acordo com as ações do jogo (uma técnica muito potente) e geralmente são bem
pequenos, pois são apenas uma sequência de comandos com alguns bytes de
comprimento, na pior das hipóteses, porém texto deixando de lado a geração de áudio,
eles geralmente não são capazes de replicar uma voz humana sem que uma capacidade
de processamento séria seja dedicada a eles, o que raramente é feito.

Alguns termos são necessários para aproveitar ao máximo o áudio

ˆAmostragem - o processo de escolher pontos no tempo para obter instantâneos do


amplitude de uma onda com o objetivo de reproduzi-la posteriormente usando
apenas as informações das amostras.

ˆFrequência - a quantidade de amostras coletadas por segundo. Medido em


Hertz (Hz).

ˆProfundidade de bits - a quantidade de bits em que você armazena sua amostra.

ˆTaxa de bits - em áudio compactado com perdas, a quantidade de bits que você pretende usar
durante um determinado período de tempo para armazenar o áudio contido nele.

ˆAmplitude - a diferença entre 0/base e a posição atual.

ˆNormalização - o processo de aumentar a amplitude o máximo possível.


Muitas pistas modernas terão seções individuais normalizadas.

ˆRuído - sons que são captados em vários pontos do sistema que ficam
sobre o áudio e reduz a capacidade de ouvi-lo.

ˆRuído no chão - quão silencioso você consegue ficar antes do barulho captado pelo
o equipamento sobrecarrega o sinal real (geralmente acima do silêncio completo).

ˆHeadroom - certos processos e métodos de captura resultam em um inevitável


quantidade possível de amplificação de uma forma ou de outra. Headroom
é a diferença entre o áudio e o limite de recorte.

ˆDecibéis (Db) - uma escala logarítmica usada para medir a potência do som e
outras coisas, mas principalmente sólidas no que diz respeito a isto. Observe que há
uma diferença entre Db em áudio e Db em alguns aspectos da eletrônica.

O hardware de áudio GBA e DSNo que diz respeito à reprodução de alguns dos formatos de
áudio compactado comuns, o GBA e o DS apresentam hardware de áudio um tanto limitado
em comparação com consoles como o 360, que possuem suporte de nível de hardware
para isso. Dito isto, eles têm vários recursos interessantes que permitem que algumas
coisas interessantes sejam feitas tanto na geração de som quanto na replicação de ondas.
O BIOS GBA também possui algumas habilidades bastante extensas e o formato de áudio
DS padrão SDAT, que tem sua própria seção, também oferece muitas coisas interessantes.
Além disso, o GBA possui um formato Nintendo

185
fornecido, que geralmente é conhecido como Sappy e, embora não tenha sido
tão usado quanto o formato DS SDAT, também tem grandes possibilidades de
mudar as coisas e vale a pena conhecê-lo.
Na prática, a maioria dos formatos de áudio abstraem o manuseio do hardware de
áudio a tal nível que é melhor editar o formato de áudio diretamente (a maioria é
extensível o suficiente para que você possa fazer o que precisar, muitas vezes
incluindo a mudança da geração de onda para som) ou editar a ROM para alterar o
áudio reproduzido, se esse for seu objetivo.
Realisticamente, você provavelmente não gastará tanto tempo brincando com o hardware de
áudio em comparação com aqueles momentos em que você hackeia textos, níveis, estatísticas e
gráficos, o que faz com que você se saia muito melhor se você apreciar os conceitos de nível
inferior. No longo prazo, isso é uma coisa boa.

O GBA O GBA suportava estéreo em fones de ouvido, mas a unidade real


só tinha um alto-falante. O GBA possui seis canais de áudio embora seu uso
seja um tanto restrito.
Os quatro canais primários semelhantes aos vistos no gameboy original e no gameboy
color estão lá principalmente para ruído, amostras curtas e geração de tom, então
basicamente o suporte à geração de som e os dois últimos (geralmente chamados de A e B)
podem ser usados para direto leituras de áudio wave, geralmente acionadas por acesso
direto à memória (DMA), embora interrupções também possam ser usadas.

1. Tom com recursos de varredura (varredura é onde a frequência é alterada


de maneira contínua)

2. Tom (sem recursos de varredura)

3. Reprodução PCM para amostras ultracurtas.

4. Ruído

belogic.com abriga indiscutivelmente a melhor coleção pública de informações e exemplos


práticos sobre o hardware de áudio GBA (navegação no topo da página). Naturalmente, o
GBAtek também tem um pouco de controle de som do DS.
Normalmente 1 e 3 são usados e, de fato, é aí que a maioria das funções do BIOS
(das quais existem muitas) concentram seus esforços.

BIOSO BIOS do GBA possui diversas funções de manipulação do controlador de


som (que não estão presentes no DS). GBAtek tem mais, mas a maioria é para o
hardware funcionar corretamente e é o que é chamado para inicializar e manter o
sistema de som, exceto o SoundBias, que pode alterar a taxa de amostragem interna.

O DSNa verdade, o DS ganhou uma atualização bastante apreciável em termos de


recursos internos com suporte para 16 canais de áudio, suporte para PCM integrado (8 ou
16 bits) e decodificação de áudio ADPCM e um segundo alto-falante em hardware (o GBA
também suportava estéreo, mas apenas para fones de ouvido).
Cada um dos 16 canais/registros pode ser informado em que volume tocar e se deve
deslocar o áudio para um determinado alto-falante, bem como opções de espera e loop
para amostras curtas. Os canais 8 a 13 podem ser instruídos a gerar vários tipos de ruído
PSG (uma onda quadrada da qual você pode alterar o ciclo de trabalho) e 14

186
e 15 (os números começam em 0) podem ser usados para ruído branco. O ruído é
importante para vários efeitos no áudio (pois o silêncio absoluto não é algo que a maioria
dos humanos consegue suportar) e pode fazer as coisas parecerem mais complexas do que
realmente são, sem mencionar que o ruído é difícil de comprimir e, sendo ruído, não há
necessidade real para que seja repetido exatamente, gerá-lo é útil e bastante factível por
hardware burro.

Teoria musical básicaUma das muitas seções que contém guias mais longos do que este,
mas saber algumas coisas sobre como a música tem sido tradicionalmente formulada pode
ajudar e, assim como aprender um pouco sobre como vários trabalhos criativos são
frequentemente construídos, pode ajudá-lo a trabalhar com outras pessoas em uma
equipe, coloque em palavras por que você encontrou algo que não é do seu agrado ou
mesmo por que funciona e, mais importante, dê uma estimativa fundamentada sobre os
limites, design e capacidades de uma determinada configuração. Muito parecido com o
hacking de ROM, embora muitas dessas idéias e técnicas não sejam difíceis e rápidas e
aqueles que sabem o que estão fazendo podem abandoná-las com grande efeito, embora
também seja muito parecido com o hacking de ROM e outras atividades científicas, aqueles
que tentam pegar atalhos e distorcer técnicas sem uma compreensão um tanto profunda
de por que estão fazendo isso muitas vezes não terão chances de retroceder e fazer algo de
bom com seus esforços.
Na maioria das vezes, isso será mais útil quando você estiver lidando com formatos do tipo
rastreador, pois outras vezes você normalmente estará apenas injetando som do tipo wave de
alguma forma que, se você souber o cabeçalho e o formato de codificação, provavelmente será
apenas um longo e prolixo e tarefa tediosa na pior das hipóteses.
Embora a audição humana seja relativamente contínua, tornou-se útil
classificar certas frequências (e seus múltiplos) como notas. Normalmente, há
sete que na maior parte do mundo de língua inglesa e muitos fora dele recebem
as letras de A a G antes de se enrolarem e começarem a contar para cima
novamente na próxima oitava, que neste ponto é o dobro da frequência inicial.
Existem todos os tipos de relações e rupturas depois disso, sendo duas das mais
úteis os círculos de quintas e a ideia de escalas musicais.
Duas ou mais notas (geralmente três) que parecem ter sido tocadas juntas podem
formar um acorde. Na linguagem geral, um acorde deve ser um som que soe
agradável ao ouvido.
Dissonância é quando notas/acordes tocados juntos ou o intervalo em que as notas são
tocadas não soam tão agradáveis ou podem ser considerados ásperos. Muitas vezes, a
dissonância pode ser usada, mas precisará ser resolvida antes de passar para outra coisa.
Como mencionado, as regras musicais podem ser quebradas com grande efeito com um
caso especial de dissonância conhecido como trítono, também conhecido como acorde do
Diabo, formando a base para muito hard rock e heavy metal.
Tempo refere-se à velocidade com que as notas são tocadas e tem grandes implicações na
forma como uma peça musical é percebida, chegando ao ponto de ser a marca registrada de um
gênero; em jogos, um aumento na velocidade geralmente será usado em um cenário de pânico,
sendo o aviso de afogamento/ar baixo nos primeiros jogos de plataforma do Sonic ou o aumento
no ritmo quando você está perto do topo de um campo de jogo de Tetris, sendo ótimos
exemplos. A capacidade de alterar o andamento do y de maneira fácil e controlada é uma das
principais razões pelas quais a geração de som persistiu, em vez de simplesmente optar por
ondas o tempo todo.
A maior parte da música é baseada na repetição, antecipação e construção e, na verdade, a maior parte

187
Acho esses arranjos agradáveis de ouvir. Um exemplo popular de que isso é
parcialmente ignorado é o drop onde algo será tocado repetidamente, muitas vezes em um
ritmo mais rápido para cada repetição, na tentativa de construir um padrão antes de ser
interrompido intencionalmente (tecnicamente é apenas uma mudança no ritmo ou
ocasionalmente o instrumento tocando o baixo, pois eles tendem a fornecer ritmo para
uma música ou são percebidos) e movidos para outra coisa; às vezes a faixa de apoio de
Tetris e a canção folclórica russa Kalinka são bastante conhecidas por usar um drop.
Nem um conceito como uma técnica comumente usada é a estratificação, onde
vários instrumentos (ou mesmo ruído) são tocados uns sobre os outros, com o ajuste
dos níveis de volume para cada um e o tempo deles sendo conhecido como mixagem.
Embora esteja mais associado a vídeo e dublagem de áudio, caso haja um estalo
perceptível quando a gravação de som é iniciada ou o silêncio seja substituído por
algum ruído (geralmente chamado de ruído ambiente) e isso chegue ao corte final, as
pessoas têm uma tendência perceber. Isso não é tão comumente visto em
dispositivos portáteis e consoles mais antigos, mas como os jogos ganharam cada vez
mais dublagens, essa ideia não foi observada tão bem quanto poderia.

Hoje, os consoles de jogos são razoavelmente capazes de reproduzir sons que mesmo um ouvido
treinado não consegue distinguir uns dos outros e, portanto, muitas vezes são ordenadas composições
completas, não diferentes da música independente, mas cantos podem ser cortados.13e hackers de ROM
podem ser chamados para arrastá-lo de volta à forma.

4.1.1 SDAT (NDS)


Embora vários outros formatos tenham sido considerados bastante populares
(durante anos a lista de jogos não SDAT era inferior a dez), o formato dominante
para áudio no DS é conhecido como SDAT.

Visão geral do formatoO formato SDAT é um formato de áudio completo, embora não
muito extensível ou compressível, para o mecanismo de áudio fornecido com o DS SDK.
Ele apresenta a capacidade de fazer áudio estilo tracker/midi no formato conhecido
como SSEQ, amostras curtas como SWAV e faixas de áudio completas na forma de STRM e
qualquer outra coisa é um formato auxiliar para permitir que os formatos acima façam seus
trabalho.

Formato e formatos dentro

ˆSDAT - o formato principal que armazena o les e armazena as relações


um para o outro.

ˆSSEQ - o formato tipo tracker (midi) que toca instrumentos de acordo com
uma linguagem de script.

13Há também o caso de jogos que se saem melhor, com um caso notável sendo o guitar hero, onde
Death Magnetic do Metallica foi frequentemente considerado melhor dominado no jogo do que na
versão em CD. Isso é uma espécie de aparte e se move para um território conhecido como guerra de
volume, onde as faixas são amplificadas até o ponto de corte (o ponto em que a amplificação não pode
mais acontecer sem uma perda de informação, também conhecida como normalização) e então, muitas
vezes mais, se apenas alguns instrumentos forem cortados (normalmente bateria) e, muitas vezes, um
pouco mais para garantir que todas as partes da faixa estejam tão altas quanto possível. Bob Katz -
Loudness: War & Peace é um bom vídeo sobre o assunto e Metallica Death Magnetic - How to Lodness
War é um link para a música do Metallica em questão e uma comparação lado a lado das versões.

188
ˆSSAR - arquivos de pequenos sons SSEQ. Geralmente usado para efeitos sonoros
em vez de música.

ˆSBNK – a biblioteca de instrumentos para SSEQ. Os dados de articulação também podem ser
fornecido para determinar como uma amostra é lida (opções de ataque, decaimento, sustentação e
liberação disponíveis).

ˆSWAR - a biblioteca das representações de ondas reais dos instrumentos.


Cada SWAV é armazenado em um SWAR sem exceção.

ˆSWAV - as representações de ondas individuais dos instrumentos e ocasionais


efeitos sonoros profissionais.

ˆSTRM - arquivos de ondas mais longas (PCM ou ADPCM) que podem se estender por vários
minutos e inclui faixas completas de áudio vocal. Pode ser encontrado fora do
SDAT

Existem alguns outros formatos que às vezes são vistos junto com eles, incluindo SMAP e SADL,
mas geralmente são considerados sobras do processo de construção. Útil de se observar e, de
fato, a descoberta de um arquivo SMAP desempenhou um papel fundamental na engenharia
reversa inicial do formato, mas geralmente não é necessário fazer nada para fins de hacking. Os
arquivos SMAP podem ser gerados com ferramentas como vgmtoolbox e, embora outras
ferramentas de análise estejam disponíveis, elas geralmente estão em um formato muito legível.

Noções básicas de SSEQSSEQ é uma espécie de linguagem de script voltada para áudio no estilo
rastreador e coisas que as pessoas gostam de fazer lá. Provavelmente está mais próximo do midi
do que alguns dos formatos de tracker mais avançados como o XM, mas ao contrário do midi, em
vez de um instrumento ser ligado e então os instrumentos são chamados com um valor de
duração embutido na chamada.
Os comandos de script nem sempre têm o mesmo comprimento, às vezes contêm uma carga
útil e, portanto, decodificá-los a partir de um ponto arbitrário pode ser um pouco mais
complicado do que simplesmente ler coisas. No entanto, você pode obter uma decodificação de
texto completo do formato usando sseq2mid e a opção - l (você pode querer canalizá-lo para um
arquivo de texto com >>sometext le.txt) e o VGMtoolbox também fornecerá a mesma saída (tem
sseq2mid como parte do conjunto de ferramentas).
Isso produzirá algo como

SEQ_BGM_C_01.sseq:
00000000: 53 53 45 51 | Assinatura | SSEQ
00000004: FF FE | | Desconhecido
00000006:0001 | | Desconhecido
00000008: CE 0F 00 00 | Tamanho do arquivo SSEQ | | 4076
0000000C: 10 00 | Desconhecido
0000000E: 01 00 | | Desconhecido

00000010: 44 41 54 41 | Assinatura | DADOS


00000014: CC 0F 00 00 | Tamanho do bloco de DADOS | | 4060
00000018: 1C 00 00 00 Base de deslocamento | 0000001C

0000001C: FE 77 02 | Signify Multi Faixa | ***-***--*------


0000001F: 93 01 D4 02 00 | Abrir trilha | Faixa 02 às 000002F0h

189
00000024: 93 02 D7 05 00 | Faixa aberta | Faixa 03 às 000005F3h |
00000029: 93 04 EF 06 00 | Trilha aberta Faixa 05 em 0000070Bh |
0000002E: 93 05 23 0B 00 | Pista aberta Faixa 06 em 00000B3Fh |
00000033: 93 06 A8 0C 00 | Abrir trilha Faixa 07 às 00000CC4h |
00000038: 93 09 F9 0D 00 | Faixa aberta Faixa 10 às 00000E15h |
0000003D: C7 00 | Monopólio Poli (0)
0000003F: E1 69 00 | Tempo | 105
00000042: 81 2D | Mudança de programa | 45
00000044: C0 40 | Frigideira |0
00000046: C5 0C | Faixa de curvatura de | 12
00000048: C6 40 afinação | Prioridade | 64
0000004A: CA 00 | Profundidade de modulação |0
0000004C: CB 10 | Velocidade de modulação | 16
0000004E: CC 00 | Tipo de modulação | Tom
00000050: CD 01 | Faixa de modulação |1
00000052: E0 00 00 | Atraso de modulação |0
00000055: C1 7F | Volume | 127
00000057: D5 7F | Expressão | 127
00000059: C0 4D | Frigideira | 13
0000005B: 48 6E 0B | Nota com Duração | |C 5 [72] vel:110 durante:11
0000005E: 80 0C Descansar | 12
00000060: 47 6E 0B | Nota com Duração | |B 4 [71] vel:110 durante:11
00000063: 80 0C Descansar | 12
00000065: 48 6E 0B | Nota com Duração | |C 5 [72] vel:110 durante:11
00000068: 80 0C Descansar | 12
0000006A: 43 57 0B | Nota com Duração | |G 4 [67] nível:87 Duração: 11

0000006D: 80 0C Descansar | 12
0000006F: 45 62 0B | Nota com Duração | |A 4 [69] nível:98 Duração: 11

00000072: 80 0C Descansar | 12
00000074: 47 6E 0B | Nota com Duração | |B 4 [71] vel:110 durante:11
00000077: 80 0C Descansar | 12
00000079: 48 6E 0B | Nota com Duração |C 5 [72] vel:110 durante:11

Também está disponível uma decodificação gráfica no VGMtrans, mas a edição não é
realmente possível no VGMtrans.
Sendo uma linguagem de script bastante simples, você pode alterar o que
quiser da maneira que o mecanismo for capaz, com um dos hacks mais comuns:
o loop, que será abordado mais tarde. Opções de alto nível estão disponíveis
onde você converte coisas de midi para SSEQ e usa loopings ordenados por
vários programas, no entanto, é razoavelmente fácil de fazer manualmente e
permite uma maior variedade de métodos.

Comandos geraisA maioria das linguagens de programação, desde assembly até as


linguagens de programação de mais alto nível, terá uma grande seleção de comandos
embutidos, mas na maioria das vezes se resumirá a um punhado de comandos-chave ou
classes deles usados repetidamente. SSEQ não é diferente e as quatro principais classes
de itens são

ˆTons/instrumento

ˆSaltos, galhos e chamadas

190
ˆManipulação de volume e andamento.

ˆOperações matemáticas e de arquivos

Os tons/instrumentos fazem o que dizem e chamam um instrumento e a duração pela qual


ele deseja ser tocado. Na configuração padrão (se tal coisa puder ser considerada
existente), o dó central está localizado em 60 com o intervalo variando de 0 a 127 (00 a 7F),
mas os jogos podem e mudam os instrumentos, sem mencionar que têm a capacidade de
chamar amostras um pouco mais longas.
Saltos, ramificações e chamadas são um tanto limitados em comparação com a
programação geral, mas permitem a construção de loops e incluem contadores de loop e
outras coisas semelhantes.
O volume (incluindo pan) e a manipulação do andamento fazem o que dizem. O andamento
máximo é de 240 batidas por minuto (veja a seção de cronometragem em algumas linhas)
As operações matemáticas e de arquivos são normalmente projetadas para serem usadas para
ampliar outras áreas, em vez de qualquer coisa de propósito geral.
Multitrack é possível se for declarado no início da primeira trilha, até 16 trilhas
podem ser feitas em um SSEQ.

TempoO mecanismo de temporização que sustenta o mecanismo de som SSEQ deriva


do temporizador ARM7 e funciona de maneira excessiva, onde cada pulso (ciclo) o valor do
tempo (unidades conhecidas como ticks) é adicionado a um contador e se o valor exceder
240 o SDAT /SSEQ é processado para uma instrução e 240 é retirado do contador antes de
começar tudo novamente. Uma semínima, também conhecida como semínima, tem 48 ticks
e é fixa como tal.

Rasgando Os arquivos STRM e SWAR/SWAV podem ser facilmente convertidos/extraídos


e manipulados, visto que são pouco mais do que arquivos wave, mas ripar as faixas SSEQ
em si tem uma variedade de métodos que podem ser usados, convertê-los também exige
um pouco mais de reflexão e, esperançosamente, ficará aparente após a manipulação
básica do SSEQ ser abordada. Alguns dos primeiros métodos aqui, após o uso de cabos
loop back de portas de fones de ouvido e emuladores, eram ferramentas que apenas
tentavam traduzir os sons SSEQ padrão para uma interface midi e funcionava, embora
muitas vezes não fosse nada parecido com o original. Crystaltile2 tem a capacidade de
analisar SDAT e supostamente reproduzi-lo, mas na maior parte está quebrado, por isso
não é mencionado como uma ferramenta de extração.
Em mais de algumas ocasiões, trilhas ocultas e trilhas que não chegaram
ao jogo final foram recuperadas dos jogos.
Todas as ferramentas vinculadas também devem ser de código aberto.

Emuladores e loopbackO método mais fácil e muitas vezes o mais grosseiro; tem três
vantagens principais: você pode silenciar trilhas de áudio em emuladores (e se você for
criativo com hardware de cheats também), você pode editar a ROM para reproduzir o áudio
na ordem que desejar com hacks de nível de sistema de arquivos e também funciona no
Ocasionalmente, apareceu um formato personalizado que você não deseja fazer
engenharia reversa. Desmume já apresenta recursos de captura de áudio há muito tempo.

191
SSEQ2midiamo emu
O método mais antigo que tentou decodificar o formato SSEQ em outro
formato. Ele tentou aproximar os bancos/lógica padrão dos controladores
midi e funcionou bastante bem na maior parte, mas as coisas não soaram
exatamente como nos originais.
O uso é apenas linha de comando e aqui está a saída do uso:
sseq2mid (opções) [input-les]
opções:
ajude a mostrar esse uso
- 0 noreverb definir 0 para reverberação enviar
- 1 1loop converter para 1 loop (sem loop)
- 2 2loop converter para 2 loop
-d loopstyle1 Pontos de loop estilo Duke nukem (Evento 0x74/0x75) loopstyle2
- 7 FF7 Pontos de loop estilo PC (Meta texto "loop (início/fim)" log colocar log de
- euconversão
- m modificar-ch modifica o canal midi para evitar o canal de ritmo
____ sseq2mid [20070314] por loveemu
Existem também ferramentas de conversão STRM e SWAR disponíveis no mesmo
autor.

NDSSNDEXTBaixar espelho
Tecnicamente chamado de NDS Sound Extractor, ele geralmente é chamado pelo nome
do exe le (NDSSNDEXT) e é uma ferramenta independente para extrair arquivos de áudio
DS. Muito parecido com o SSEQ2midi e alguns aspectos do VGMtrans, ele tenta aproximar
os sons originais, mas de uma maneira diferente do SSEQ padrão, que frequentemente
teve melhores resultados do que o SSEQ2midi original e também converte arquivos SWAR
por padrão. É apenas linha de comando e o uso é bastante simples

<<NDS Sound Extractor v0.3 da TENDON>> Uso:


ndssndext.exe [opções] < le...> Opções: -x extrair
apenas arquivos (sem decodificação)
- mostrar status de processamento
ajuda a mostrar esse uso

VGMtrans (DLS)Baixar espelho


Chegou na mesma época que o extrator NDS Sound e eventualmente ficou mais
estável. Ainda usado hoje principalmente porque tem a capacidade de criar arquivos DLS,
embora certos programas possam ter problemas (o awave studio geralmente corta isso e
pode colocar coisas no formato rmi que carrega instrumentos) que alguns métodos de
reprodução midi podem usar para fazer os sons corresponderem mais próximo ao
hardware original; o ouvido treinado ainda pode dizer a diferença entre hardware e midi
DLS, mas não é a diferença entre noite e dia que outros métodos costumam exibir. Ele
também apresenta análise gráfica de SSEQ e arquivos semelhantes, o que é inestimável ao
editar trilhas SSEQ, mesmo se você tiver que editar algo em outro editor. O uso é arrastar e
soltar no arquivo (SDAT ou NDS) e clicar com o botão direito em várias seções para obter o
que é permitido. A GUI também é bastante personalizável, com caixas de ferramentas que
podem ser arrastadas à vontade.

192
caixa de ferramentas vgmPagina inicial
Você também precisará encontrar o kit decodificador relevante (testpack.nds do
Caitsith2) que não está incluído no download padrão.
CRC32
FB16DF0E
MD5
3D902DED2E237D9D0A329E3BC8C0A577
SHA1
7B23ABA82BA2957B3D5FC12B4FA99F02DA6FF766
Os arquivos DLS da VGMtrans são muito úteis, por isso permanecem até hoje, mas em muitos
aspectos o VGMtoolbox é o melhor método disponível para extração. Assim como os formatos de
áudio anteriores, os métodos de reprodução na verdade usam uma emulação do hardware de
som do DS (plugins compatíveis com foobar estão disponíveis no vio2sf), embora o lado da
reprodução tenha sido abandonado, portanto não está à altura da emulação do DS mais recente.

Também possui a capacidade de gerar arquivos SMAP e outras sutilezas (também


destacadas em verde na imagem abaixo).

193
NCSFEsta foi uma substituição feita em 2013 para atender a algumas das falhas do
antigo formato 2sf. Ainda voltado para o formato SDAT, adota uma abordagem de alto
nível que funciona melhor em alguns casos.

Outras ferramentasVárias ferramentas foram feitas para converter de e para


várias coisas e reproduzi-las e elas serão mencionadas rapidamente

MKDS_Course_modi erTópico GBAtemp. Ao longo do caminho curso MKDS


O modificador adquiriu várias habilidades muito boas na conversão de e para
estacas de áudio SDAT, incluindo a capacidade de gerar arquivos DLS.

Jogador_de KazowarTópico GBAtemp. Embora seja mais uma ferramenta de reprodução do que
qualquer outra coisa, Kazowar e alguns outros desenvolveram uma ferramenta que
poderia reproduzir o formato de áudio SDAT em hardware DS.

swavtoswarThread GBAtemp. Uma ferramenta simples que pode converter de swav para
swar e de onda em swav.

midi2sseqncs médio para SSEQ. Geralmente o assunto de um tutorial muito mais longo, o
A ideia era que se o SSEQ pudesse se transformar em midi, então o midi poderia se
transformar em SSEQ. Entre uma conversão um pouco problemática e diferentes
bancos de som, a reprodução nem sempre é 100% precisa, mas combinada com
outras técnicas e métodos de injeção, muito pode ser feito e pode ser usado como
um formato intermediário para aqueles que desejam opções de edição de nível
superior. Existem duas versões principais e, adicionalmente, hacks de looping são
comumente feitos em cima disso, embora a versão mais recente do midi2sseq
vinculada ali suporte muito mais nesse campo.

mexerPágina do Github. Mencionado em outra parte do guia, pois apresenta alguns problemas sérios
Definitivamente vale a pena ter habilidades em vários campos se você estiver realizando algum
trabalho de som no DS (SDAT ou outro). É também uma das poucas ferramentas capazes de
inserir arquivos em arquivos SDAT e reposicioná-los adequadamente.

194
ReconstruindoÉ possível reconstruir um arquivo SDAT após uma pequena edição (que alterou o comprimento do
arquivo) e o editor NDS do Kiwi.DS tem uma opção de reconstrução disponível, mas a confiabilidade é, na melhor
das hipóteses, suspeita, então a maioria opta por renomear o arquivo relevante
arquivo para o final do arquivo SDAT e altere vários comprimentos no le (o SDAT
comprimento, o tamanho do bloco de arquivo e a localização na seção FAT).
Mais recentemente, Tinke ganhou certa capacidade de injeção (com a capacidade de
reposicionar), então vale a pena dar uma olhada aqui. O uso é bastante semelhante ao resto do
programa, mas a ordem geral das operações é abrir o arquivo SDAT e visualizá-lo, pressionar
Alterar arquivo, encontrar o arquivo de substituição, repetir conforme necessário e finalmente
pressionar Salvar SDAT.

4.1.2 Outros
Embora SDAT seja muito comum, existem outros formatos usados por vários jogos e que
vale a pena conhecer. Houve algumas ocasiões em que alguns dos materiais SDAT foram
encontrados fora de um arquivo SDAT e se houver um formato de arquivo/empacotamento
no topo do sistema de arquivo nitro padrão, o componente SDAT geralmente será
encontrado separado dele, mas nem sempre (lembre-se do exemplo de embalagem de El
Tigre), mas não é disso que trata esta seção. Com exceção dos jogos musicais, a maioria
dos jogos que usam um formato personalizado será um formato conhecido ou, na melhor
das hipóteses, um simples wrapper para áudio PCM. Midi foi visto no Rhythm N Notes, mas
pode muito bem ter sido uma sobra do desenvolvedor.
http://gbatemp.net/threads/the-various-audio-formats-of-the-ds.305167/

Formato DATVisto em Disgaea parece ser um formato wrapper para o


arquivos geralmente contidos no SDAT. Composto principalmente por arquivos .dat que
são arquivos começando com o carimbo mágico DSARC FL e seguido pela quantidade de
arquivos que virão (em hexadecimal) e depois uma listagem dos nomes dos arquivos e
0000 0100 0000 antes de iniciar o nome, tamanho e localização do arquivo (cada sub
arquivo é preenchido/alinhado em 100 hexadecimais). Além disso, há um arquivo com a
extensão . tbl que parece conter várias informações sobre os arquivos.
O lado SSEQ está ainda envolvido em arquivos MSND que começam com uma
seção DSEQ e alguns dos outros arquivos parecem ser seguidos por outras
seções.

195
Áudio Procyon (formato de áudio DSE)Página de informações do desenvolvedor (japonês)
Algumas notas sobre o formato do projeto Pokémon
Geralmente mais conhecido pela extensão, comumente é conhecido como
SAD (SD e SADL também). Visto em vários jogos notáveis na biblioteca do DS,
incluindo Luminous Arc e Professor Layton. Na prática, é um formato wrapper
para alguns IMA-adpcm. Difere de sistema para sistema, dependendo da
implementação do ADPCM, mas na maior parte é válido. Algumas versões
(principalmente as semelhantes ao Professor Layton) são suportadas pela
biblioteca VGMstream que teve frontends feitos em diversos programas e
adicionalmente é utilizada pelo tinke.

SMD, SED e SWDOcasionalmente visto em formatos wrapper (SIR0 em Zombie daisuki


e várias versões de PH em Inazuma Eleven), este também é um formato sequenciado
e um dos poucos a usar um formato verdadeiramente personalizado para fazê-lo.

Áudio PCMN+ usou áudio PCM bruto (embora seja mínimo, o formato wave na
verdade fornece mais algumas informações). A importação e exportação com o
Audacity devem ser possíveis.

Onda convencional osObservou-se que o eletroplâncton usa winles padrão e pode


onda estilo dows ser editado como tal. Os irmãos de armas também usaram arquivos,
onda padrão mas todos os arquivos do jogo foram colocados na embalagem BAR
formato (um ponteiro de ajuste bastante básico no ar) primeiro. Arco luminoso apesar de usar
outros formatos também tinham um arquivo wave para a seção de abertura.

Arquivos OGGAlguns dos jogos de luta livre oficiais usavam o formato de áudio OGG e
ele é popular em outros sistemas; WWE SmackDown vs Raw 2010 foi a fonte original e,
olhando para algumas das outras informações, é provável que também seja válida
para outras entradas da série. OGG é um formato bastante complexo que surgiu na
tentativa de fornecer um formato de compressão de áudio (e posteriormente de
vídeo) livre de patentes e problemas associados (para uso comercial, você pode ter
que pagar aos criadores de codecs para usar seu formato). VGMtrans pode procurar e
extrair arquivos OGG de formatos de contêiner.

ADH/AHX/ADXO middleware Cri criou uma série de formatos de áudio e vídeo que
ganharam destaque pela primeira vez no Dreamcast, embora tenham sido vistos no DS e
realmente tenham ganhado destaque quando foram usados em The World Ends With
You (TWEWY), que permitiu remixes a serem feitos com algumas ferramentas simples.

DCDEV possui ferramentas ADX2WAV e WAV2ADX que fazem muito do que é desejado, mas
versões mais recentes do Tinke também o suportam, assim como VGMToolbox (Ferramentas
diversas -> Ferramentas de extração -> Streams) e como bibliotecas populares de formatos de
música de jogos já existem há muito tempo com suporte para isso, existem plug-ins e suporte
para ele em vários lugares.
O middleware Cri mantém uma lista de jogos que usam sua tecnologia (observe que nem
todos são de áudio, assim como de vídeo e também de formatos de gerenciamento de arquivos).
Se você quiser saber mais sobre como o formato é implementado e algumas das habilidades

196
dele há discussão sobre o formato multimídia.cx CRI ADX e discussão sobre
multimídia.cx CRI ADX ADPCM.
Deve-se notar que o middleware Cri criou um novo formato ADX visto em
alguns jogos PSP conhecido como ADX2.

Material personalizado adequado Isso geralmente é reservado para jogos musicais que precisam
formatos extras como parte de seu método de operação, embora isso se aproxime dos formatos
de nível. Taiko no Tatsujin utilizou SDAT e um formato customizado conhecido como DSB, os
irmãos Daigasso Band que utiliza um formato conhecido como BDX e outro chamado gak e
possui uma seleção de ferramentas no Yasu soft e informações em Auby.no.

4.1.3 Formatos de rastreador

Mais populares no final dos anos 1980 e início dos anos 1990 do que agora, eles estão
intimamente ligados aos jogos e à cultura de jogos/hacking (algumas pessoas chamam
erroneamente o tipo de som que produzem de música keygen, sendo um termo melhor
chiptunes). Existem muitos formatos, mas os grandes são XM, MOD (não confundir com o
formato de vídeo DS ou o formato de vídeo da câmera), IT e midi, embora midi não seja
exatamente a mesma coisa. Como você já viu, a Nintendo criou seu próprio formato de
rastreador chamado SSEQ, que é amplamente utilizado, embora se você abrir jogos GBA e
DS e encontrar outra coisa, é mais provável que você encontre XM ou MOD do que
qualquer outro (não que eles possam ser descartados levianamente). como s3m também
aparece no GBA).
Eles geralmente são editáveis diretamente e as opções variam tanto quanto a criação de
música, mas o Open MPT deve ajudar você a começar.

4.1.4 Regra geral para formatos de áudio personalizados


Já mencionado de passagem, mas digno de nota, é que, embora haja algumas exceções
(principalmente jogos musicais), na maioria das vezes, se você vir um formato de áudio que
não seja SDAT, é provável que seja uma das três coisas

1. Um formato de áudio complexo conhecido (ADX/AHX, MP3, OGG, um dos formatos de


rastreador e outros)

2. Um arquivo wave/PCM ou um wrapper para ele

3. Um formato personalizado conhecido que surgiu com o DS (principalmente jogos musicais).

Se não for um formato de áudio simples (lembre-se de combinar as coisas se você alterá-lo,
a menos que possa demonstrar que funciona melhor ou pior), então é provável que já
tenha sido visto em jogos antes. Da mesma forma, se não for um desses, provavelmente
corresponderá bastante ao hardware.
Além disso, e muito menos como uma regra rígida e rápida, geralmente é o formato SDAT ou
algo totalmente diferente, mas alguns ainda misturam SDAT e seus outros formatos.

4.1.5 Hacks comuns de áudio DS SDAT (retirada de dublagem, injeção, ajustes


e relinking)
Embora muito tenha sido abordado, há mais e a necessidade de alguns exemplos de
hacks. Hackear SDAT pode ser muito simples ou pode exigir muita reflexão e esforço,
embora isso geralmente seja apenas uma questão de pensar bem, já que o formato é
bastante lógico.

197
Desdublagem básica

O undub básico é um hack muito simples; você encontra o arquivo sdat ou equivalente no jogo
fonte (geralmente a versão japonesa) e substitui o arquivo SDAT europeu ou norte-americano
(renomeando se necessário) e reconstrui a ROM se você a descompactou para fazer isso. Se o
formato do som for alterado no caminho (improvável, mas abordado mais tarde), então, na
melhor das hipóteses, será necessário fazer uma nova vinculação e, na pior das hipóteses, uma
reconstrução ou injeção adequada do cabeçalho (ou o script será convertido para o jogo que
abriga a fonte de som).

Vinculando novamente

Ocasionalmente, as ROMs vêm com faixas legais para parte do jogo e algumas que alguém
pode não gostar de ouvir em outros momentos. Um dos primeiros exemplos disso com
uma ROM que foi hackeada para alterar as coisas aqui é o Tetris DS, que tinha uma versão
do Korobeiniki (mesmo que fosse internamente chamado de Karinka (Kalinka), que é outra
canção folclórica russa com som semelhante, às vezes vista em jogos de Tetris ) que só foi
reproduzido em fases posteriores do jogo e, por outro lado, reproduziu uma seleção de
faixas do título original dos irmãos Mario para NES. Saber como fazer isso também constitui
a base para vários outros tipos de hack do formato de áudio SDAT.
Embora você possa entrar no jogo e alterar as chamadas relevantes para as
faixas do jogo, existem duas idéias principais sobre como mudar isso

ˆA maneira grosseira que geralmente funciona

ˆA maneira um pouco mais complexa, mas adequada

O método bruto se baseia na ideia de que a maioria das trilhas não se desviará do banco
padrão do jogo, então tudo o que você precisa fazer é encontrar os marcadores de
localização e tamanho do arquivo que deseja alterar e daquele para o qual deseja alterá-los
e substituí-los. como apropriado. Depois de ter os dados relevantes, isso geralmente pode
ser feito com 20 segundos de copiar e colar.
Existem todos os tipos de métodos, mas o passo zero é descobrir quais faixas você
deseja editar e substituir, o que geralmente é feito copiando o áudio relevante,
embora, assim como os nomes de empréstimo normais, muitas vezes possam ajudá-
lo.
Você poderia gerar um arquivo SMAP se quisesse, mas uma saída de algo como
Crystaltile2 é frequentemente igualmente útil

198
O método bruto vê que os endereços relativos e os valores de tamanho contêm as
informações relevantes
Agora, ou porque você leu o valor do SMAP, leu-o do próprio arquivo (na
localização 20 hex para 4 bytes há um ponteiro para a seção FAT) ou
simplesmente procurou por FAT em ASCII (todo arquivo SDAT o terá).

199
Indo para um editor hexadecimal

007C
20A1
80 francos suíços

.....

Tudo apenas o números ipados.


Se você olhar para o SDAT le leitura do Crystaltile2 você verá que
é o endereço relativo. 9496 em hexadecimal é 2518, então você também tem o tamanho.
O método bruto que muitas vezes funciona bem simplesmente copia e cola os valores de
localização e tamanho sobre os arquivos a serem alterados.

200
O método mais complexo leva em conta a ideia de vários bancos e irá alterá-los
também, caso contrário o jogo pode tentar jogar com um banco diferente, o que poderia
muito bem ser uma cobertura muito interessante, por assim dizer, mas talvez não seja o
que você está procurando. aqui.
Na leitura do Crystaltile2, a coluna final possui alguns dados que correspondem à
informação relevante para o arquivo, aproximadamente da mesma maneira que um
arquivo SMAP.
Os significados reais para usar a mesma terminologia das especificações SDAT do
kiwi.DS estão em ordem: banco de números, volume, canal, pressão, pressão polifônica,
pressão polifônica. FileID que não é necessariamente o mesmo que o número do arquivo
(leID e número do arquivo podem diferir entre seções como você pode ver em um arquivo
SMAP). O que é um ag e o que é apenas informação é discutível, mas assim como os
tamanhos e localizações no método de religação bruto, isso realmente não importa, desde
que seja a versão correta.
No exemplo SEQ_SEN_P.SSEQ era o arquivo em questão. Ele contém
informações sobre isso na seção INFO, que você pode pesquisar ou ler em 18
hexadecimais.
Agora, INFO não é tão bom quanto FAT, mas ainda está dentro dos domínios de
copiar e colar leves e, assim como todo o resto, INFO tem uma seção de cabeçalho e
uma seção de ponteiro antes da seção de dados real.
A seção do ponteiro está em 40h (tecnicamente existe um ponteiro, mas deve
estar sempre em 40h, pois não há nada variável antes dele), a primeira entrada é o
número de arquivos e você pode multiplicar e calculá-lo (se você estiver fazendo um
programa que você provavelmente faria), mas o valor depois é o ponteiro para o

201
primeira entrada, então use-a.
Você terminará com algo parecido com a imagem a seguir (observe que, para
facilitar a leitura, o endereço foi alterado para o início do bloco INFO)

Extraindo algumas informações dele


0000 0000 3300 6440 4000 0000 0100
0000 0800 6440 4000 0000
Olhando para trás, para crystaltile2 e contabilizando as conversões hexadecimais para decimais,
tudo parece se manter
Agora você não deseja substituir o leID, pois o mecanismo SSEQ pode usá-lo para endereçar
o arquivo, mas o restante precisa ser classificado.

202
Neste caso, não importa, mas os arquivos SWAR contêm as representações em forma
de onda de instruções e efeitos sonoros; no entanto, eles estão um pouco separados do
resto do SDAT e precisarão ser tratados separadamente. Felizmente, além dos ponteiros
relativos, eles são arquivos bastante simples e todos os dados nos arquivos estão contidos
nos próprios arquivos, portanto não há necessidade de editar coisas além dos ponteiros.

Injeção
Com a remoção de dublagem, a substituição completa do SDAT, um pouco de fatiamento dos
arquivos (ao contrário da substituição completa, permitiu que pelo menos parte do áudio original
permanecesse) e a religação indicando que o SDAT era um formato bastante resiliente, o próximo
passo foi tentar a injeção de outros arquivos no o jogo. Muito disso é bastante óbvio se você tiver
uma apreciação básica do formato SDAT, mas mesmo assim é um exemplo.
Phoenix Wright 2 substituído por uma faixa Phoenix Wright 1 está na ordem do dia
aqui. O áudio do primeiro jogo é frequentemente considerado de primeira qualidade e o
segundo jogo deixou grande parte do áudio clássico para o desgosto de muitos, então aqui
a injeção será usada para transformar a faixa do segundo jogo em uma, como ouvida no
primeiro jogo.
Muito bem, o VGMtrans permite a reprodução no local, então
BGM070 no segundo jogo é usado como faixa de objeção (Phoenix Wright Justice
para todas as faixas 7/objeção se você for procurar)
BGM002 do jogo original usado (uma faixa também conhecida como Phoenix
Wright ~ Objection! 2001)
É claro que existem várias maneiras de abordar isso, mas como um arquivo está sendo
substituído por outro, a coisa óbvia a fazer é substituir um arquivo pelo outro.

203
A substituição básica do arquivo por tinke já foi abordada, mas aqui está
como será o Phoenix Wright Justice for All SDAT

Nome e localização da pista que deseja desaparecer e da pista que está sendo usada para
substituí-la. Com as coisas conhecidas, bastam alguns cliques básicos... provavelmente será
reproduzido, mas não soará nada parecido com o original. Isso ocorre porque o formato SSEQ
não é independente e, neste caso, possui três arquivos auxiliares (veja a caixa inferior esquerda).

Não há problema, basta substituir os outros arquivos da mesma maneira; o


problema é que SWAR wave_agb_bgm é comum a alguns arquivos em ambos os jogos
e fornece algumas amostras (as que correspondem aos nomes neste caso apenas
parecem conter algumas amostras mais longas). Substituir e dane-se as
consequências funciona bem o suficiente e de fato rende a mudança prometida e,
como parece, os jogos são bastante semelhantes, pelo menos na faixa de abertura,
que é uma versão da Tocata e Fuga de Bach e tem apenas alguns arquivos
amostras funcionam bem o suficiente com o substituído pequenos.
A maneira correta de resolver o problema, já que a substituição direta só funciona até certo
ponto, é um pouco mais próxima dos métodos mais antigos que envolvem uma reconstrução
manual (ou mesmo tentando evitar a necessidade de reconstruir). Aqui, em vez de renomear um
arquivo inteiro, os arquivos relevantes seriam adicionados ao final do SDAT e o
Os arquivos foram reposicionados de maneira semelhante ao reponto padrão, mas ao mesmo
tempo os comprimentos das seções também teriam que ser expandidos e, além disso, os dados
de agrupamento precisariam ser alterados para refletir o novo banco. O seguinte é puramente
para WAVE_AGB_BGM neste caso, já que a outra biblioteca de amostra é exclusiva do arquivo
SSEQ substituído; nem todos os jogos precisarão disso, pois alguns têm um banco e uma
biblioteca de samples para cada música e, da mesma forma, alguns jogos terão apenas um único
banco/biblioteca de samples usado para cada sequência. Adicionando um novo

204
arquivo é bastante tedioso e prolixo, então outra música será sacrificada e a biblioteca de
samples que ela usa será usada para armazenar o arquivo necessário; o bônus aqui é que
existem alguns exemplos de voz para idiomas diferentes do inglês que podem ser
observados.
Voltando ao assunto em questão, a faixa SE0B8 é o sacrifício hoje e a substituição é bastante
simples, mas agora vem o truque de reatribuir as bibliotecas de samples. Tal como acontece com
a maioria das coisas no hacking de ROM, existem algumas opções, mas a maneira mais fácil que
não danificará o resto do arquivo além do sacrifício que de outra forma não seria utilizado é a
escolhida. O próprio arquivo do banco controla quais notas se parecem com o SWAR, mas ele faz
referência à seção INFO do cabeçalho SDAT, então essa é provavelmente a melhor coisa a ser
editada.
Após a seção de informações do SSEQ vista anteriormente e uma para o SEQARC, vem a lista de
arquivos associados aos bancos

205
Amostra do arquivo SMAP (infelizmente, leID está em decimal aqui, mas 181 dez = B5 hexadecimal)

Amostra da listagem wavearc

O formato é o número do arquivo interno do banco (16 bits, ipped), 0000


(desconhecido) e depois os números do banco e FFFF se não houver necessidade de
vinculá-lo (muito poucos jogos têm mais de dois wavearcsmenos,
associados
mas pode ir para quatro).
observado antes de muitas faixas BGM serem vinculadas a Como le 0 (WAVE_AGB_BGM) e
eles geralmente também têm seu próprio wavearc para algumas amostras, mas retirando
os outros dados do smap para deixar o que é necessário para este hack

219 decimal = DB hexadecimal


163 decimal = A3 hexadecimal

206
Substituindo o segundo 0000 por A300 (ipa como de costume)

Criação e injeção musical fazendo Injeção de outra fonte significa apenas ferramentas
um SSEQ ou algum outro como midi2SSEQ que reconhecidamente
embora existam algumas das mesmas armadilhas das ferramentas SSEQ2midi originais
(instrumentos diferentes levando a um som diferente), no GBA algumas pessoas criaram
uma biblioteca de instrumentos a partir do controlador midi padrão e permitiram que onde
alguns no DS usam o O formato DLS que o VGMtrans (e o editor de curso MK DS) pode criar
para orientar o Anvil Studio a fazer as coisas (os arquivos DLS do VGMtrans e do MPT aberto
apresentam alguns problemas). Além disso, esse looping é algo comum para áudio
rastreador/sequenciado e até mesmo para alguns arquivos de onda que precisam ser
resolvidos. Existem várias maneiras de fazer o loop e algumas das versões posteriores do
midi2sseq suportavam looping ags de certa forma.
A substituição do áudio rastreado/sequenciado por áudio baseado em ondas não foi realmente
tentada, pode funcionar, pois o SDAT parece chamar com base nas listagens de arquivos mais do que
qualquer outra coisa, mas as informações que ele também carrega podem atrapalhar.

Desdublagem adequada/complexa

Observe que muitas vezes, se um undub falhar, é mais provável que seja culpa da ferramenta/
processo reconstruir a ROM depois de descompactada, mas ocasionalmente a ROM

207
as imagens mudam de layout entre regiões e geralmente não para melhor. Para
esses poucos, você pode ter que vincular novamente o arquivo de forma que ele
seja reproduzido de maneira aceitável no jogo localizado, mas há outras
ocasiões, como Spectral Force Genesis, que teve dublagem (nada menos no
formato AHX) no jogo japonês. mas perdeu-o ao sair do Japão; aqui seria ASM
adicioná-lo de volta ou, mais provavelmente, tentar traduzir o jogo obtendo a
tradução oficial e colocando-a no jogo japonês (Suikoden Tierkreis tinha um hack
que fazia exatamente isso como parte de uma dublagem). Megaman ZX é um dos
primeiros exemplos de jogo que ficou um tanto destruído ao ser localizado, então
pode ser interessante de se ver também.

Retrato da ruína de CastlevaniaNa verdade, o jogo apresenta a opção oculta de mudar as


vozes para japonês (segure L e pressione A para fazer uma seleção no menu com uma dica
de áudio para fazer isso com sucesso14), mas para fins deste exemplo, será assumido que a
configuração é abaixo do ideal, pois talvez apenas um pequeno remix seja desejado/apenas
algumas coisas selecionadas desejam ser desdubladas. Como são vozes bastante longas (às
vezes com vários segundos de duração), SSEQ e similares provavelmente não estão na
ordem do dia e, de fato, os arquivos STRM foram escolhidos. Uma amostra rápida do
Crystaltile2

14Apesar da combinação/opção dos botões L e A, o jogo dos EUA acabou retornando algum
tempo depois que esta seção foi escrita. Nesse ponto foi observado que 020e0200 na memória da
versão americana da ROM continha um valor/ag. Mantendo-o em 00 hex (o cheat básico do
formato Action Replay é 220e0200 00000000 ), ele sempre tocava japonês, 01 hex era o valor
usado para inglês e todo o resto ainda era inglês. O mais interessante é que se mudasse durante
o tempo de execução, as vozes também mudariam.

208
Um bom desenvolvedor deixou extras em 3710 (é a voz presumivelmente do vídeo da E3 que
dizia disponível no outono). De qualquer maneira, como arquivos STRM, eles são efetivamente
arquivos de onda completa e podem ser ajustados como um hack de religação convencional ou
injeção, se você realmente quiser. Para tornar a vida mais interessante, embora nem todo o áudio
dublado esteja lá e enterrados entre os quase 1600 efeitos sonoros estão algumas seções
sonoras (divididas muito bem em BGM e efeitos sonoros aqui). Eles se alinham principalmente
com o intervalo de 380 hexadecimais a 560 hexadecimais (conversão ndssndext) de
WAVE_SE_ALL.SWAR (3665 no arquivo SDAT principal), que também desejará ser remapeado de
acordo, o tipo de arquivo SWAR é bastante básico e todos os dados estão contidos dentro os
arquivos que ele abriga, em vez de qualquer cabeçalho, então o maior problema é descobrir o
que é o quê (infelizmente faltam nomes no SWAR).

Edição SSEQ
Comandos de edição são ocasionalmente úteis, então aqui algumas notas serão alteradas em um
arquivo, o cabeçalho será alterado para efetuar uma mudança de velocidade e então um loop será
adicionado em outro com representações de imagem das formas de onda resultantes para cada uma
sendo mostrada.

Sons de vitória de Tetris DS zeldaTetris DS apresentava vários minijogos baseados em


tetris e apresentando alguns personagens da Nintendo como arte em

209
o fundo e fornecendo algum áudio de apoio. Um desses minijogos apresentava
personagens Zelda em um modo de missão rápida com o clássico som de vitória de Zelda
quando você conseguia, no entanto, havia algumas notas que saíam como batidas de
bateria depois dele, como uma introdução para o jogo que tocava quando rasgado.
Foto VGMtrans (ignore o destaque posterior, pois ele quebra mais tarde, embora o
detalhamento real trabalhado à direita esteja OK).

Existem algumas escolas de pensamento aqui, sendo as duas principais: para que
servem essas outras faixas? e apenas edite as notas. Se fosse apenas para ripar, eles são
de fato mixados para pelo menos um hit, então um simples corte em um editor mais
convencional não funcionaria, remover faixas provavelmente ajudaria (na verdade,
convertê-lo para midi e remover alguns dos canais posteriores faz exatamente isso ), mas
isso é mais um exemplo de técnica do que os resultados finais neste ponto.
Há algumas coisas a serem observadas aqui, embora a principal seja que o som clássico de
sucesso de Zelda é bem conhecido e tem quatro notas, o que significa que tudo após as primeiras
quatro notas pode querer ser eliminado.
O comando C700 significa que é polifônico (as notas podem acontecer ao mesmo tempo,
C701 significa monofônico) e como os acordes podem ser construídos a partir de várias notas
tocadas ao mesmo tempo, simplesmente apagar tudo após quatro notas pode não funcionar.
Mesmo assim foi feito e tudo depois de quatro notas teve seus valores de duração substituídos
por 00 ou alterados para esperas com duração 0.
Na imagem acima, isso significa que tudo após 204B80 foi substituído de
acordo para dar

210
A boa notícia é que isso realmente removeu as batidas de bateria do final
do sample, mas mudou as coisas para pior e parte das cordas foi o que ficou
(versão editada na parte inferior)

211
Editando mais uma vez, mas sabendo que as batidas da bateria têm 5 batidas
e o som do zelda tem quatro batidas; isso levou à edição da faixa 5, que ficou
perfeita. O teste clássico para tais coisas é inverter o segundo sinal e reproduzi-
lo, o que destaca quaisquer diferenças ou, no caso de duas faixas idênticas,
cancela a faixa principal e deixa apenas as diferenças, deixando apenas as
batidas da bateria.

212
Mudança de velocidade do Tetris DS KorobeinikiUm bom ponto de partida para hackear
áudio são as informações do Crystaltile2 SDAT.

Como mencionado, por razões desconhecidas, Korobeiniki (antigo tetris no


próprio jogo) é chamado de Karinka (Kalinka), mas é isso que precisa ser editado.

Mesmo no visualizador SDAT, clicar duas vezes em um arquivo no Crystaltile2 define a janela
do editor hexadecimal para o local em questão, mas se não, existem várias outras ferramentas
que podem ajudar e se você decidir alterar o comprimento do arquivo (lembre-se que existem
saltos/ramos que podem ser quebrado) outras ferramentas já foram abordadas para ajudar aqui.
Alguns, no entanto, consideram-no um pouco rápido demais (e é um pouco mais rápido do que
muitas versões clássicas de tetris), portanto, alterar o andamento é adequado. E1BE é isso. E1 hex
é o comando para tempo e BE (190 decimal) é a carga útil, então foi alterado para algo um pouco
mais lento em 78 (120 decimal), o que pode ser um

213
um pouco lento, mas proporciona um resultado muito claro. Aqui nenhum dos outros tinha um
comando de andamento, mas a repetição é bastante fácil.

Os arquivos wave resultantes (versão modificada mais lenta claramente na parte inferior)

Embora seja perfeitamente possível fazer isso com um arquivo wave, fazê-lo em tempo real
no hardware do DS levaria isso ao limite, onde apenas modificar uma peça sequenciada de áudio
não é apenas fácil, mas também é atendido.

Tetris DS Korobeiniki em loopA certa altura, o loop era feito principalmente para aqueles que
injetavam arquivos personalizados que foram inicialmente convertidos para midi ou que nunca
começaram a vida como um SSEQ, no entanto, as versões mais recentes do midi2SSEQ suportam
múltiplos looping ags e adicionarão coisas ao SSEQ resultante de acordo. Isso significa que hoje
isso é feito em grande parte para hacks de estilo de melhoria ou para aqueles que portam

214
Arquivos SSEQ entre jogos. Os métodos aqui normalmente envolviam a adição de comandos
fictícios que poderiam ser substituídos por um loop ag.
Embora a música em si seja um clássico para este exemplo, os primeiros compassos
são tudo o que se deseja.

Existem vários comandos de loop disponíveis para o compositor SSEQ. O comprimento do


parâmetro precisa de um byte adicionado para obter o comprimento de todo o comando.

Comando Comprimento do parâmetro Descrição dos parâmetros Explicação


94 3 o definir endereço de salto O set = início dos ponteiros (normalmente 1C)
95 3 Localização dentro Chama outra pista para a posição
DF 0 - Retorna ao endereço de chamada mais 4 hexadecimais

D4 1 Contagem de loops Inicia um contador de loop


FC 0 - Marcador final para comando D4
Vários comandos são usados para várias coisas, dependendo do compositor,
embora o comando 94 seja aquele normalmente usado por hackers
4B= início da trilha propriamente dita (67-1C) para a trilha 1, pois o comando set mono/
poly não é necessário. Como este é apenas o início da trilha para este hack, os últimos
comandos na maioria das trilhas voltam para seus respectivos inícios de trilha e podem ser
copiados de lá (observe que VGMtrans tem o hábito de adicionar os marcadores de final de
trilha no arquivo) e onde diferentes comprimentos de comando foram inseridos em vez de
tentar reconfigura-los, FC foi usado como um tipo de NOP, pois não faria nada a menos que
houvesse um loop em execução.
Isso foi feito para diversas trilhas, pois há diversas trilhas que podem funcionar ao mesmo
tempo; isso pode ser bastante complicado se você estiver enfrentando vários caminhos, mas
perseverar e as coisas começarem a fazer sentido. Não é imediatamente óbvio na forma de onda,
mas algumas coisas interessantes aconteceram e em alguns pontos parece uma peça mal
conduzida enquanto outros tentam iniciar uma seção.

215
4.1.6 Áudio GBA
A Nintendo forneceu um formato para os desenvolvedores de GBA usarem, na verdade
muitos o fizeram (nos círculos de hacking de ROM é geralmente conhecido como Sappy) e
havia algum suporte para outros formatos de rastreador de uma seleção de empresas
(Krawall e Apex Audio System sendo dois notáveis exemplos de alternativas). Por causa de
alternativas e alguns outros motivos, ele não chegou tão perto de dominar a plataforma
GBA quando comparado ao formato SDAT para o DS. Dito isto, definitivamente vale a pena
dar uma olhada se você estiver tentando extrair sons de um jogo GBA. Sappy é um formato
de estilo sequenciado/rastreador e é o principal método de áudio para a maioria dos jogos
GBA, mas com um pouco de pensamento do tipo onda

216
arranjos de áudio podem aparecer (na verdade, Golden Sun acabou adicionando dublagem
como um hack).
Muitas das informações de hacking de áudio do GBA para jogos com formatos
sentimentais são específicas da ROM, mas essa lista inclui a maioria dos títulos populares
para hacking (pokemon, re emblem e golden sun sendo especialmente bem representados)
e muitas ferramentas tentarão escanear um jogo para o.

Viçoso
Download do Filetrip (ambos os garfos principais)
O nome da ferramenta básica de extração de áudio GBA. Existem três linhas
principais para ele, com 1.6 sendo o padrão e Sappy 2005/2006 sendo uma versão/
fork posterior que não é usada tanto quanto poderia ser, mas há um fork adicional na
linha de mod Sappy.
Os 200? line tecnicamente tem a capacidade de inserir áudio, mas muitos preferem a
edição e inserção manual. Ele possui algumas habilidades de mapeamento para que jogos
com mapeamentos de áudio personalizados soem melhor quando são reproduzidos (as
saídas de linha 1.6 para o formato midi). Embora o formato de áudio DS SSEQ tire uma boa
dose de inspiração do formato, ele não é semelhante o suficiente para fazer muitas
comparações amplas além de ambos terem comandos e conceitos comuns ao áudio
sequenciado/rastreado.
Capturas de tela dos mods 1.6, 2006 e 2006

217
Visão geral rápida do formatoCópia de Romhacking.net das notas de áudio sentimentais de
Bregalad
Bregalad (que fez os hacks de restauração de áudio do Final Fantasy, entre outras
coisas) escreveu uma boa visão geral do formato.

midi2GBA Ocasionalmente conhecido como mid2AGB ou midi2AGB, ele começou como SDK oficial do
parte do ó GBA e, portanto, não está vinculado aqui. Provavelmente as principais ferramentas
além do sappy, que é usado para hackear áudio GBA, pois é muito capaz de
transformar arquivos midi em áudio sappy. Deve-se notar que o kit de ferramentas
não parece lidar bem com metadados e observou-se que várias faixas midi usam
faixas fictícias como um tipo de metadados.

onda2gbaSeção Darkfader GBA


Darkfader fez uma ferramenta ostensivamente para homebrew, mas como parte da ideia
próxima do hardware, ele tornou-se capaz de ser usado para fazer samples personalizados.
Supostamente, a linha mod Sappy torna isso menos útil.

Editor de músicas de ZahlmanDownload de viagem de arquivo


Um script python também capaz de fazer muito com áudio Sappy. Embora tenha muitas
funções automatizadas, a maioria delas terá que ser guiada manualmente, então a maioria a
considera uma boa ferramenta para usar ferramentas como o Sappy.

ferramentas loveemuBaixar código do Google


O Github tem algumas outras coisas.
loveemu criou algumas ferramentas para o GBA conhecidas como gba2wav e gba2midi que
tentam escanear a ROM em busca de áudio Sappy e decodificá-lo.

Caitsith2 saptapperPágina inicial do projeto


Voltado mais para a extração de áudio do que para o hacking de áudio em si, ele ainda gera
algumas informações interessantes.

218
Ripper de áudio GBADownload de viagem de arquivo
A Atrius criou uma ferramenta simples, um tanto parecida com o saptapper acima, que
visa extrair áudio para reprodução 1:1 (neste caso, no programa GBAjukebox do autor.

VGMtransVGMtrans supostamente oferece suporte para o formato de áudio


Sappy.

OutrosExistem várias outras ferramentas que podem ser usadas, como o LoopMaker do
blackonix, bem como diversos plug-ins/wrappers para sappy e midi2agb, geralmente
voltados para jogos específicos.

Hack básico de injeção de áudio SappyXXXXXXXXXXXXXXXX


Existem três métodos comumente vistos

1. tr.exe tira e injeta

2. injeção sentimental

3. injeção manual

Existe um programa geralmente chamado de tr.exe que vem como parte do kit de
ferramentas Mid2Agb/midi2GBA que pode injetar áudio estilo sappy de arquivos midi e
retornar um arquivo ROM de reprodução básico (reproduzir áudio em hardware real é uma
coisa bastante popular para faça como geralmente é muito preciso). É provavelmente
também a melhor ferramenta de conversão de midi que o GBA possui (principalmente
porque faz parte do SDK). O método típico que você verá é resumido em converter com
tr.exe (geralmente depois de tornar o arquivo midi o mais básico possível), retirar o
cabeçalho do GBA e injetar em alinhamento equivalente na ROM do GBA antes de alterar
algumas dicas para prosseguir. onde as coisas precisam estar. Isso é prolixo, mas funciona
muito bem e é um dos métodos mais preferidos para jogos que são hackeados mais
extensivamente (se isso é bom ou não, depende da sua perspectiva).

O Sappy inject (geralmente com as versões posteriores do programa) funciona como parte do
mesmo kit de ferramentas que existe mid2agb.exe que cria arquivos .s que o sappy suporta para
fins de injeção. As versões anteriores do sappy 200X não eram tão estáveis, então o método tr.exe
foi desativado.
A injeção manual funciona da mesma forma que a injeção sappy, mas com elementos do
primeiro método (normalmente através do editor de músicas de Zahlman). Ele também pode ser
usado em jogos que o Sappy não suporta (supondo que você não queira adicionar suporte para
ele).
De qualquer forma, 10 faixas por midi é o limite sugerido e no caso do tr.exe ele não
aprecia a inclusão de faixas extras de tipo de metadados que alguns editores/ferramentas
de criação de midi gostam de adicionar.
XXXXXXXXXXXXXXXXX

219
Hacks de áudio GBA notáveis

Embora alguns hacks tenham sido observados em outros lugares, em sua maior parte, este
documento não é uma coleção de hacks, mas aqui há alguns hacks que valem a pena fazer
engenharia reversa se algum dos outros e os dois últimos títulos tiverem alguma
documentação específica do jogo bastante extensa incluída.

Fantasia finalOs últimos jogos finais de fantasia do SNES (usando os números


japoneses 5 e 6) foram portados mais tarde durante a vida do GBA para o GBA. Uma
das principais críticas foi que o conceituado áudio dos jogos SNES não fez a transição
(desde então vimos alguns outros hacks com o objetivo de melhorar outros aspectos
dos jogos), mas Bregalad fez uma série de hacks com o objetivo de melhorar o áudio e
de fato os hacks finais estão próximos de reproduções perfeitas do áudio do SNES. Se
você quiser um exemplo de hack de formato de áudio no estilo Sappy, vale a pena dar
uma olhada.

Guerras Avançadaswarsworldnews guia para isso

sol DouradoAtrius trabalhou muito com o formato de áudio sentimental e Golden Sun
foi a ROM base para grande parte dele, incluindo a adição de dublagem ao jogo. Dublagens
de voz lideradas por hackers aconteceram no passado, mas são muito raras e
excepcionalmente em sistemas de baixo consumo de energia que não possuem
sistema de arquivos para seu código.

Emblema de fogoO emblema de fogo no GBA viu vários hacks de áudio. Uma visão
geral de alguns dos trabalhos de hacking de áudio e um pouco de hacking geral de áudio
pode ser vista em feshrine.

4.2 Vídeo
O GBA e o DS são capazes de reproduzir vídeo e, como tal, vários jogos usam vídeo full
motion de várias formas em seus jogos. No DS, pelo menos uma empresa (agora
propriedade da Nintendo) chamada Mobiclip criou um formato usado em muitos
jogos.
Formatos de vídeo de engenharia reversa são, em muitos aspectos, uma das coisas mais
difíceis que você pode fazer no hacking de jogos. Felizmente, nos dispositivos portáteis você tem
muita sorte, pois eles geralmente não são poderosos o suficiente para permitir alguns dos
métodos complexos que compõem um formato de vídeo moderno como o H264, ou mesmo um
formato legado verdadeiro como o MPEG1. Lembre-se de que o reprodutor de mídia homebrew
do DS, conhecido como moonshell, usa MPEG1 para o vídeo como parte do formato DPG e havia
portas de MPEG4 ASP, também conhecido como xvid/divx, para o DS também. O GBA também viu
um codec das mesmas pessoas que criaram Caimans. Se você quiser um pouco de história então
este post tem um pouco mais.
O tradicional neste momento é apontar os métodos de codificação do MPEG1 e dizer que o MPEG1
teve um rascunho final há mais de 20 anos no momento em que este artigo foi escrito (final de 1992).
Agora, se você se lembra dos gráficos 2D simples e de como apenas alterar a largura de um único bloco
pode alterar drasticamente as coisas, considere tentar trabalhar de trás para frente por meio de
métodos de análise a partir daí para obter imagens e, em seguida, construir um codificador compatível;
algumas coisas do DS são um pouco mais simples que isso, mas não muito.

220
Como a maioria dos trabalhos de hacking em dispositivos portáteis não permite
codificação ou edição de vídeo, é necessário haver soluções alternativas para fazer as
coisas. Se apenas copiar o vídeo é o seu desejo, a maioria dos emuladores tem opções de
gravação e você pode aumentar as coisas aqui alterando os arquivos de vídeo, então se um
jogo tiver uma cena final ou algo assim, você pode reposicionar a sequência de introdução
para reproduzi-la e copiá-la de lá ou injete-o em um jogo mais adequado para ripar e, pela
mesma lógica, se você estiver removendo a dublagem / deslocalizando um jogo, muitas
vezes você pode simplesmente inserir o vídeo equivalente e encerrar o dia. Se você precisar
adicionar algo ao vídeo, o método tradicional usado em alguns hacks de DS funciona com o
fato de que o vídeo é apenas imagens 2D no final, então você pode adicionar imagens,
legendas e sprites ou sobrepor algo; este é um hack bastante complicado e provavelmente
exigirá algum conhecimento de montagem (é parte da razão pela qual o hardware foi
discutido na edição gráfica), a menos que o jogo em si já tenha imagens colocadas sobre o
vídeo que você possa subverter.
Assim como a engenharia reversa de um formato de vídeo é uma tarefa difícil, o ato de criar
um novo é igualmente ou até problemático (e isso antes de você entrar em patentes de software
que incomodam praticamente qualquer pessoa que queira entrar no mundo da codificação de
vídeo ) os desenvolvedores/empresas de jogos tenderão a comprar um disponível nas prateleiras
para usar em um jogo.
Observe que o vídeo visto no DS e nos jogos em geral frequentemente não tem
áudio embutido, então você pode ter que encontrar outro método para extrair o
áudio ou considerar isso se você fizer um hack básico de relink/repoint ou
undublagem o jogo (especialmente se a duração do vídeo mudar).

4.2.1 Teoria geral do vídeo


Seguindo os gráficos e o áudio, o vídeo pode funcionar enganando os sentidos, com a ideia
geral por trás do vídeo: você reproduz quadros suficientes com rapidez suficiente e pode
criar a ilusão de movimento; o número mágico parece estar em algum lugar em torno da
marca de 17 quadros por segundo, embora entre 20 e 20 seja onde fica melhor, embora
um valor mais baixo possa funcionar dependendo do que você está fazendo. Atualizar
imagens completas para uma tela 25 vezes por segundo exige muito dos recursos do
sistema (principalmente espaço de armazenamento e largura de banda) e quando você
pensa sobre isso, a maioria dos vídeos não muda muito quadro a quadro, então há coisas
que podem ser feitas. Mais do que outras áreas, a movimentação de vídeo ainda é o
domínio do codificador com perdas (existem várias opções excelentes sem perdas, mas são
principalmente para fins de armazenamento, edição e captura, em oposição à reprodução)
e, em muitos aspectos, o DS não é exceção. Os dois principais métodos/suposições são

1. Um quadro tende a não mudar de um para o outro.

2. Um pixel provavelmente não muda muito em relação ao próximo a ele.

Os codecs sem perdas tiram vantagem disso e os codecs com perdas vão um passo além e
optam por perder algumas informações com base nesses princípios. Há uma grande
variedade de métodos e níveis de uso desses métodos que só ficam mais complexos com o
passar do tempo, mas os vídeos são normalmente divididos em quadrados (quantização -
se você viu o que normalmente é uma cena de alta ação dividida em quadrados onde a
ação deveria estar, este é o motivo) ou tratada como uma forma de onda (codificação
wavelet usada em codificadores como Dirac e Snow, mas há

221
era um programa homebrew do DS chamado DSVideo que o usava). Além disso, embora
um quadro não mude muito de um para o próximo (em média), a codificação entre quadros
não é obrigatória e apresentações de slides gloriosas são bastante comuns em sistemas de
baixa potência (o Motion JPEG é normalmente dado como exemplo), mas alguns têm foi
visto no DS também.

4.2.2 Mods/VX/act imaginados por Mobiclip.


Primeiro, deve-se afirmar que o Mobiclip (também conhecido pelo antigo
nome de Act Imagine) criou um codec/padrão para telefones celulares e web
que teve certo sucesso lá, mas não tem nada a ver com o lado do console
( certamente, se você encontrar o codec para isso, nada resultará disso).

Embora agora uma subsidiária da Nintendo antes disso tenha vendido seu
software de codificação de vídeo para uso no gameboy advance e ele se tornou parte
do Nitro SDK, tornando-se o codificador de vídeo padrão para jogos de DS, seu uso
não é tão difundido quanto os gostos do formato de áudio SDAT, pois nem todo jogo
tem vídeo e nem todo jogo que usa vídeo o usa.
Alguns trabalhos provisórios de engenharia reversa foram conduzidos (thread
GBAtemp) e parece ser um formato bastante simples, sem muitas das armadilhas dos
formatos mais sofisticados. multimídia.cx tem mais alguns e notas que usouBtrancar T
runcaçãoCodiando.
Existem também algumas versões do padrão circulando em diferentes jogos (VX se
tornou mods), então isso precisará ser levado em consideração quando chegar a hora.

4.2.3 RAD/Bink
Geralmente visto com a extensão .bik, é provavelmente o formato de vídeo de jogo de
computador mais conhecido e é usado em todos os lugares no PC e em consoles
domésticos, bem como em consoles como PSP; você pode até baixar um codec de
reprodução simples do site do desenvolvedor. O DS tem suporte para isso, mas não
foi visto em muitos jogos, provavelmente porque o Mobiclip estava intimamente
ligado ao SDK e os jogos que o usaram eram em grande parte títulos multiplataforma.
Para este documento, alguns jogos da lista foram testados em decodificadores padrão
e funcionaram.
Olhando para os vários métodos de saída e informações de vendas, parece que eles
suportam uma decodificação bastante bruta de espaços de cores codificados em YV12;
YV12 é um subconjunto do método de codificação de cores YUV que, em vez de representar
todas as três cores componentes, como era comum até agora, optou por dividir as cores
resultantes em luminância e cromiância, o que permite alguma compactação em escala de
cinza.
Saída de atrai.bik (um vídeo completo tirado de uma câmera em oposição a uma
animação renderizada e armazenada como um arquivo de vídeo) do jogo Greg
Hastings Tournament Paintball Maxd tem informações de
Vídeo: YV12 512x192 12,00fps [Vídeo] Áudio:
PCM 22050Hz estéreo 705kbps [Áudio]
Ele também tem cerca de 8,36 megabytes e outros vídeos usam áudio com taxa de
bits mais baixa.
Após o upscaling, um bloqueio significativo pode ser visto, sugerindo uma medida
de quantização e, como a saída de áudio diz, há áudio no arquivo, embora

222
não se sabe se é intercalado ou deixado como blocos (em alguns casos, é mais fácil para
um sistema, mas leitura/busca não contígua não é algo em que o DS seja bom). O
cabeçalho parece começar com BIKi em ASCII e ser seguido imediatamente por um valor de
32 bits informando o comprimento menos 32 bits, que presumivelmente é o comprimento
do carimbo e o tamanho combinados (lembre-se de que muitos valores ignorarão o
cabeçalho ou partes dele).
?20 parece indicar presença de som (credits.bik não o possui no arquivo onde
outros o possuem) e pode haver um sinal mono/estéreo.
100 e C0 aparecem no formato e parecem indicar as dimensões 256 e 192 (o
decodificador informa altura dupla para todos os vídeos, incluindo aqueles de outros
consoles).
Bik também foi visto na missão Impossível com algumas taxas de quadros diferentes
(20fps para logo.bik, 10 para win.bik e 12 para loss.bik).
É provável que seja de especial interesse o beep.bik, que tem a seguinte saída como informações
sobre ele e estava em grande parte em branco.
Vídeo: YV12 512x32 1,00fps [Vídeo] Áudio: PCM 16384Hz mono 262kbps
[Áudio]

4.2.4 Criware
Mais comumente conhecidos como fornecedores do formato de áudio ADX e AHX,
discutidos há pouco, eles também têm formatos de vídeo que são em grande parte
wrappers para vídeo MPEG de vários formatos, com o áudio sendo obtido pelo
formato AD *.

4.3 Cenas cortadas


Além do uso de vídeo os jogos podem optar por fazer coisas em motor com texto, 3D e 2D sendo
todos empregados para diversos fins. Isso tem dois benefícios para os hackers, pois é pequeno,
facilmente compreendido e facilmente manipulado em comparação com o vídeo simples, onde a
substituição do conteúdo existente é complicada na melhor das hipóteses (se você tiver que
editar o vídeo novamente, considere que tudo acaba no mecanismo 2D e injetar coisas lá fora até
mesmo do código de manipulação de vídeo).
Como você realmente acaba hackeando tem elementos de imagens 2D no manuseio do
OAM (a animação básica do OAM já foi abordada), manipulação 3D incluindo distorção
(você pode mover ossos, mas também pode mover vértices) e aspectos de design de níveis
onde você deve descobrir definir o formato controlando os movimentos que serão
abordados a seguir.

223
5 Lógica do jogo
Texto, gráficos e som contam muito e muito pode ser feito apenas editando-os (na
verdade, jogos inteiramente novos/diferentes foram feitos usando apenas esses
recursos), mas eventualmente você vai querer mudar a forma como o jogo se
desenrola ou o opções do jogador dentro dele e para isso recorremos à edição da
lógica do jogo.

5.1 Níveis e Estatísticas


Os gráficos que você provavelmente já viu são compostos de pequenos blocos que são
montados para criar uma imagem maior. Os níveis são praticamente os mesmos, embora
tendam a vir em quatro categorias amplas, embora, ao contrário dos gráficos, não haja
hardware subjacente para moldar as coisas e isso significa que vale tudo. Os itens de
interesse são o nível em si, a colocação de objetos estáticos e a colocação de objetos
interativos (inimigos e outros que também incluem eventos com script) e de muitas
maneiras podem ser aplicados a jogos 2D, 3D, texto e dimensões superiores.

1. Tudo em um

2. Camadas dos itens de interesse

3. Geração processual e conteúdo dinâmico. Dependendo do nível que você está


editando, isso ainda pode se manifestar como um dos outros.

4. Listas vinculadas de itens (talvez com opções/ramos).

Primeiro, o All in one não precisa ser estático ou grande, pois você pode apenas precisar
fazer algo como definir o ponto de partida/entrada de seus inimigos e então o jogo
assumirá o controle a partir daí. Para todos os jogos, exceto os mais simples, ele
rapidamente se torna incontrolável, a menos que você crie um formato complexo, para
esse fim ele está caindo em desgraça com os outros assumindo o controle. Se você estiver
editando jogos antigos de estilo arcade ou retrocedendo a eles, ainda poderá encontrá-los
e o GBA/DS não tem falta de retrocessos e versões de jogos antigos.
Camadas de itens de interesse tenderão a ser divididas em categorias (o plano de
fundo, o nível em si, os inimigos, os extras...) e empilhadas pelo motor de jogo (na
verdade, este é um recurso que muitos truques de caminhada através de paredes
usaram e no verso quantas áreas ocultas são feitas). Um jogo pode dividi-lo ainda
mais e definir o nível usando um sistema de grade (cada peça recebendo coordenadas
ou mesmo definindo-o inteiramente bloco por bloco em um determinado padrão).
Deve-se notar também que os jogos 3D às vezes tentam detectar colisões pelos
próprios modelos 3D e suas localizações; você certamente teria visto ou
experimentado uma ocasião em que um personagem de um jogo caiu do chão ou de
uma parede. Porém outras vezes eles definem o que passa por outro arquivo,
geralmente gerado ao mesmo tempo que o modelo de nível é exportado, sendo os
arquivos .KCL vistos nas versões recentes do Mario Kart um ótimo exemplo disso, tais
coisas também podem ser usadas para permitir um nível de controle mais alto (na estrada Mario e
Exemplo de kart há estrada, completamente fora fora da estrada o suficiente para desacelerar
você está abatido), pois tentar calcular isso de acordo com onde as texturas são mapeadas seria
um pesadelo; determinados jogos ainda tendem a não quebrar automaticamente para uma nova
linha de texto, então imagine quanto mais seria necessário para calcular jogador/inimigo

224
locais relacionados às texturas. Deve-se notar que os jogos 2D costumam usar coisas
como o OAM para ajudar a controlar onde as coisas estão no nível.
A geração processual era originalmente um conceito bastante comum, com muitos
jogos notáveis como Elite usando-o com grande efeito. Ele caiu em desuso por um tempo,
com apenas alguns usos notáveis, como masmorras em jogos de rastreamento de
masmorras, como Diablo e Dungeon Siege. Agora está recebendo mais atenção à medida
que as pessoas estão aprendendo a restringi-lo (você tem alguns pontos separados por
uma determinada distância, alguns extras e então você gera tudo entre esses pontos,
certificando-se de ter uma rota entre eles no jogo) e usa isso para melhorar outros jogos (as
muitas armas da série Borderlands são um bom exemplo). No que diz respeito à
manifestação como os outros tipos de níveis mencionados nesta seção, então a geração
processual pode significar apenas que quando o jogo carrega, ele cria o arquivo e o
armazena na memória como um dos outros métodos para uso durante o jogo. Dinâmico é
reservado para coisas como GTA, que não modelam uma cidade inteira, mas apenas a área
a uma determinada distância do jogador, no entanto, isso se estende a coisas como
inimigos que só começam a se mover quando você está fora da tela, um truque que
remonta a os primeiros dispositivos.
As listas vinculadas são geralmente reservadas para jogos de aventura como myst, romances
visuais, jogos de quebra-cabeça/quiz e trabalhos semelhantes, mas aspectos delas podem
aparecer em qualquer coisa em pontos como jogos onde eventos posteriores dependem de suas
escolhas anteriores no jogo (uma história ramificada) ou você conversa com as escolhas em um
jogo, o sistema subjacente pode ser um pouco assim.
Deve ser mencionado neste ponto que listas vinculadas são na verdade um termo de
programação; cada evento é chamado de nó e contém os dados usados no evento e a
localização do próximo nó, que pode estar em qualquer lugar e pode ser alterado em tempo de
execução com bastante facilidade. Listas vinculadas e suas variantes (listas e árvores duplamente
vinculadas, para citar duas das mais comuns) certamente existem como níveis de jogo e
armazenamento que um jogo pode usar para lembrar escolhas, no entanto, muitos níveis que
usam esses tipos de técnicas estão, na prática, mais próximos para matrizes (itens decodificados
um após o outro) ou scripts semelhantes ao Mágico de Oz e áudio SSEQ.
Além de tudo isso, há eventos com script que são muito comuns e estão cada vez mais
comuns. Aqui os eventos acontecerão quando certas condições forem atendidas (certas
condições e locais/áreas em um nível).
Em comparação com muitas outras áreas de hacking, a prática de hackear níveis não recebe
tanta atenção até que um jogo tenha ferramentas feitas para analisar/visualizar níveis, neste
ponto a quantidade de edições disponíveis para um jogo muitas vezes explode. Naturalmente,
jogos de plataforma, RPGs com elementos de plataforma, jogos de estratégia e jogos de corrida
são os alvos principais para esse tipo de coisa (Pokémon, Zelda, Metroid, várias versões de jogos
de plataforma Mario, títulos de corrida Mario, Advance Wars, Fire Emblem e jogos de plataforma
Sonic são os alvos principais ao longo dos anos) com todos os tipos de hacks sendo feitos
(refazendo jogos antigos, criando modos de corrida contra chefes, ajustando níveis, modos
difíceis até conversões totais onde o jogo original está praticamente destruído, exceto pelo motor
e um novo jogo feito em cima de que). A maioria deles tem exemplos de coisas que você pode
estudar em profundidade e deve-se notar que a simples troca de arquivos pode ter efeitos
interessantes; na verdade, a troca de níveis pode facilitar a engenharia reversa, como será visto
no exemplo da engenharia reversa de um nível.

Uma técnica interessante que decolou no PC, mas já existe há algum tempo, é observar
a memória do jogo, pois os níveis podem ser transmitidos ou podem precisar ser
manipulados durante o jogo e o nevoeiro da guerra é especialmente bom para isso. Isto

225
funciona bem nele também, mas assim como alterar a largura do seu editor hexadecimal
para ver padrões em ponteiros, texto e muito mais, você pode alinhar despejos de memória
(novamente, eles podem mudar, o que traz arranjos de tipos para fazer truques) e se você
colori-los pode tornar as coisas ainda mais aparentes.

5.1.1 Exemplos de ferramentas

A seguir está uma lista de algumas ferramentas mais bem desenvolvidas para o DS e
algumas explicações de código-fonte/formato com um exemplo prático na próxima seção.
Existem muitos outros editores que você pode encontrar para vários jogos se
pesquisar.

Novos irmãos Super MarioDocumentação do novo Super Mario Bros de


Treeki
New Super Mario Brothers foi o retrocesso da Nintendo a alguns dos jogos
Mario 2D originais, mas como já abordado, optou por usar o hardware 3D. Isso
não impediu que os níveis fossem hackeados logo após o lançamento, embora
demorasse um pouco até que programas e listagens com mais recursos
aparecessem.

Guerras Avançadas Wars World News, que é provavelmente o maior avanço


O site relacionado ao wars hacking tem muitas informações sobre os vários jogos da
franquia advance wars.

Mário 64O DS recebeu uma versão aprimorada da versão N64 de Mario 64 e editores de
níveis eventualmente apareceram para ela.

Pagina inicialPágina de código do Google


Download do Filetrip (a versão XML do banco de dados de objetos também está
disponível lá). A imagem abaixo mostra um belo mapa de teste que é sempre bom de
pesquisar, pois geralmente é bastante simples e contém a maioria, senão todos, os itens
disponíveis para um jogo.

Mario KartModificador de curso MKDS


Mario Kart teve trocas de nível de sistema de arquivos bem no início (na verdade, foi provavelmente
um dos primeiros jogos a ver hacks de nível de DS) e, eventualmente, os formatos reais passaram por
engenharia reversa e editores de nível começaram a ser feitos.

226
5.1.2 Técnicas de edição de níveis
Com alguma teoria básica coberta, é hora de alguns estudos práticos. Existe uma seleção de
métodos para fazer engenharia reversa de níveis e a engenharia reversa compartilha muitos
conceitos entre ideias, mas os níveis têm alguns com probabilidade um pouco maior de serem
úteis. As técnicas incluem, mas não estão limitadas a

ˆVisualização de memória (de preferência em tempo real, mas savestates podem ajudar com isso)

ˆAnálise de bytes

ˆComparando níveis reversos/ligeiramente ajustados

ˆCorrupção e alteração

ˆNo jogo ou em outros editores de níveis (no PC, as ofertas para editores de níveis são
geralmente voltados para a usabilidade e longe da capacidade real por um bom
motivo, mas eles ainda podem editar coisas)

ˆComparando níveis no jogo

ˆAnálise de tamanho

ˆSubstituição/troca de arquivos

ˆAnálise de montagem (como sempre)

Exemplo trabalhado

N+ (N plus) é uma porta/remake para DS de um jogo ash popular e apresenta vários


níveis de natureza bastante simples, tornando-o um bom candidato para ver algumas
das técnicas em funcionamento. Ao contrário da seção de hacking de texto, as coisas
aqui provavelmente não serão divididas por exemplo e o que está aqui será mais uma
vitrine de técnicas do que seguir a técnica que levará à engenharia reversa total do
formato do nível; a maioria das técnicas aqui seriam capazes de reverter o formato do
nível em um período de tempo razoável por si mesmas e geralmente não há muitos
benefícios em trocar métodos com a frequência que será feita.

Capturas de tela dos níveis 0 e 1 (episódio 0 do jogo).

227
Muito bem, o jogo fornece arquivos chamados nds000.lvl e nds001.lvl no
diretório de níveis.

Ambos começam com algo semelhante, têm muitos petiscos de 0,4 e 1 (não faço
ideia se é um sistema de 4 bits) e depois terminam em algo totalmente diferente que
é realmente mais curto no caso de nds001.lvl, embora o nível seja um pouco mais
simples. A grande diferença entre os níveis é a adição do perigo em movimento (o
editor de níveis chama-o de drone de chão). Este pode ser o E que não está presente
no nível original.
Ainda um pouco de corrupção para ver se os níveis são realmente o que afirmam ser. Corrupção
guiada para este, em vez de simplesmente substituir coisas por dados aleatórios, então um monte do
que era principalmente 0 em 10 hexadecimais, embora 1F hexadecimal tenha sido substituído por 4
hexadecimal. Dando

Essa seria toda a linha inferior e outra na parte inferior esquerda do nível.
Voltar ao menu principal fornece

228
O fato de ser uma cópia do próximo nível e não haver ouro, informações sobre armadilhas,
informações sobre perigos, locais de portas ou interruptores nas imagens, parece indicar um design de
nível em camadas (analisar e remover dados é possível, mas não é ideal para níveis baixos). sistemas
alimentados), mas falaremos mais sobre isso mais tarde.
Substituir o hexadecimal 20 por hexadecimal 2F desta vez por uma sequência de 2
hexadecimais alterou a próxima linha e parece indicar um design de nível de baixo para
cima (primeiras linhas primeiro) e algo como uma abordagem de bitmap em vez de
coordenadas. A edição um tanto estática é boa e revelaria muito se fosse realizada, no
entanto, a visualização da memória provou ser demais para ficar longe.
Um despejo completo e uma busca pelo novo hexadecimal 44444422222222 (não garantido
que funcione de forma alguma, mas não compactado no jogo significa provavelmente também
não compactado na memória RAM) resultou em um único local em 37CFD0 ou na memória DS
0237CFD0.

Antes que a edição da memória RAM pudesse começar, a memória/nível foi


atualizada a partir da própria ROM entre essa visualização e o nível em si e o nível não
foi regenerado em tempo real. No entanto, a visão geral/layout do nível foi
regenerada da memória RAM se uma atualização foi forçada15e o nível não foi obtido
da própria ROM entre eles, uma atualização poderia ser forçada alterando a
visualização do mapa (botões L e R) ou permitindo que ele rolasse.

15Ter algo avaliado repetidamente sem a necessidade de uma reinicialização completa é muitas vezes
desejável para quebrar a criptografia e leva a algo chamado ataque de repetição. Deve-se notar que os
savestates não são muito úteis aqui, pois têm o hábito de sobrescrever a memória e, ao fazer isso, você perde
suas edições. Da mesma forma, desmume parece armazenar ROM suficiente na memória para que uma simples
reinicialização do sistema não seja suficiente e você terá que fechar e recarregar a imagem agora editada.

229
Algumas experiências disseram que cada linha no nível tinha cerca de 18
hexadecimais, embora pudesse variar entre os níveis. 00 parecia ser o estado em
branco/padrão e zerar tudo para o que seria 188 hexadecimal no nível original (onde o
E0 está localizado) deixou uma tela em branco. Outras experiências disseram que 4
bits não era o caminho a seguir (jogar com o editor de níveis fornece uma grade de 8
por 8, portanto 64 opções potenciais, embora algumas delas parecessem duplicadas e
talvez rotações) e talvez até 8 bits não fosse, ou pelo menos o nível pode mudar
dependendo do que está próximo a ele ou do alinhamento.
Antes de prosseguir com os itens, agora que estamos munidos do conhecimento de que as coisas
podem ter 18 hexágonos de comprimento. Observando nds001.lvl em um editor hexadecimal, excluindo
a lista de objetos presumidos, a seção de cabeçalho e colorindo alguns dos pixels diferentes de 0 antes
de exibir a imagem resultante.

Vale a pena tentar procurar essas coisas/padrões na memória, se puder.

UnidO editor de níveis também fez menção ao potencial dos itens e o trabalho
acima parece confirmar que eles estavam em outro lugar, mas verificando de
qualquer maneira a seção de nível totalmente zerada (aqui presume-se que seja onde
os itens 0,4 e 1 deixaram de ser a norma ) ainda tinha itens e continuou a zerar as
coisas após o final do nível, quebrou-o e removeu alguns dos itens.

230
Como tudo o que sobreviveu ainda estava no lugar, mas a localização mudou, isso diz
coisas
A mudança na cor é estranha, mas não totalmente inesperada, pois o editor de níveis
permite uma mudança na cor de fundo, no entanto, como há lixo na parte superior da tela
e não há barra de cronômetro, é mais provável que o jogo tenha detectado um tempo
limite que pode ser outra razão para a mudança de cor.
A falta do ninja pode ser explicada pela posição inicial provavelmente sendo
eliminada junto com os níveis mais baixos de peças de ouro.
A mudança de tudo provavelmente poderia ser explicada se a origem de um sistema de
coordenadas fosse alterada e, o mais interessante de tudo, a diagonal dourada do canto
inferior esquerdo, agora deslocada para o lado direito do nível, tornou-se uma plataforma
dourada e horizontal (chamada de Bata no editor).
Outra edição mais precisa causou um travamento (estranho, já que o estado
corrompido na imagem à direita acima pode ser encerrado por meio de comandos
normais do jogo e retornar ao menu) e outra edição deixando intactos os bytes iniciais
da seção de itens feita para um trabalho nível, mas com algumas alterações (3 bytes
em 1D4 alterados de 4947 1C para 0000 00 ou cerca de 4C na seção de localização de
itens) bagunçou tudo depois que a porta mudou de lugar e criou novos itens.
Suspeitando de um problema de alinhamento, o único 00 dos três bytes foi alterado
de volta, criando a imagem à direita.

231
Mesmo que a corrupção não tenha revelado a localização do layout do item, o material
de pré-nível não está nem perto o suficiente para armazenar a quantidade relevante, como
a localização do ouro que sai do final do arquivo de nível e os dados um tanto diferentes lá.
Da mesma forma, o próximo nível (nds001) possui poucos itens e é menor.

84 peças (em 24 grupos) foram contadas como uma porta e um interruptor, embora seja
notado que a porta no editor de níveis parece ter um interruptor como parte do acordo, portanto
podem não ser dois itens. Em algum lugar ao longo das linhas que definem o tempo para cada
nível, se de fato houver algum, também pode ser necessário encontrar.
A informação mínima necessária é provavelmente o próprio item, a coordenada x
e a coordenada y. Além disso, no editor de níveis, os comportamentos dos drones
podem ser especificados (4 drones e 4 comportamentos cada), mas um adicional
campo em uma matriz/matriz inteira que provavelmente contém centenas de itens em vez de
apenas definir outro item tende a significar que apenas definir outro item vence, a menos que ao
adicionar uma entrada à matriz/matriz o código seja alinhado a um determinado valor em caso
que geralmente vence. É claro que só porque é uma boa ideia não significa que o programador
realmente fez isso (novamente, mais do que um pouco de hacking de ROM é sobre corrigir bugs e
erros que os desenvolvedores originais cometeram).
O ouro é o item mais comum, então o passo lógico seria fazer uma distribuição do
arquivo, no entanto, nada apareceu aqui à primeira vista e considerando que os
grupos de ouro podem ser itens diferentes, você pode ter que considerar isso.

Com dois bytes só há espaço para 66 itens do primeiro nível e isso provavelmente
significa que clusters foram escolhidos se esse fosse o caso (estranho porque o editor de
níveis permite definir peças únicas como faz em outros lugares).
Corrupção, pequenas alterações e reflexão sobre como alguém deveria fazer isso estão se
tornando rapidamente problemáticos, mas o episódio 0, nível 4 (nds004.lvl) tem um padrão de
repetição simples

232
O nível em questão (seção destacada sendo os dados do item)

14 instâncias de minas de cada arranjo 12


instâncias de ouro
Uma troca
Uma porta

Um ponto de partida
Alterar alguns dos valores hexadecimais de 53 para 54 hexadecimais resultou em uma pequena alteração
(as minas cronometradas azuis no nível inferior; os conceitos vistos pela primeira vez na pesquisa relativa
também podem ser aplicados aqui), mas outras alterações nos mesmos valores fizeram tudo

233
desde quebrar o nível até travar completamente o jogo (instantaneamente ou rodar
por um segundo e depois parar). Isso provavelmente aponta para o formato feito com
bits por vez, em vez de bytes, ou talvez, em vez de coordenadas, era um parente
distante da lista vinculada, onde a entrada anterior define a próxima.
53 hexadecimal = 0101 0011 binário 54
hexadecimal = 0101 0100 binário

234
Alterando o início de C0 para E0 (1100 0000 a 1110 0000), ignore o temporizador.

A edição do início causa alterações estranhas no final da seção de itens e foi


analisada.
O FC final foi alterado para FD para produzir a imagem mais à esquerda e depois FB
que produziu a imagem mais à direita

235
O fato de alterar uma única peça não é bom para a teoria do agrupamento, embora seja
tecnicamente a peça superior mais à direita que foi alterada (não há nenhum item que esteja ao
mesmo tempo mais alto e mais à direita). Uma única alteração de valor (nota não binária) altera a
localização em 25 pixels, com a direita no nível sendo positiva. Isso se refere mais aos itens
definidos de baixo para cima, linha por linha (mas com a capacidade de pular linhas, ao contrário
dos obstáculos) e da esquerda para a direita. FE, no entanto, colocou-o acima das peças de ouro
mais à direita (uma mudança de 57 pixels), mas mudar para F simplesmente moveu mais 25
pixels de lá para a direita, então talvez um tipo diferente de agrupamento. Este padrão manteve-
se até que o 7 foi escolhido, altura em que aconteceu o seguinte

Deve-se notar que 7 não tem a parte superior como 1 onde os outros tinham
e olhando o que aconteceu com a imagem, a parte superior de ouro parece estar
na parte mais à direita do nível novamente (7 hex = 0111 binário, F= 1111
binário).
Mudar a parte F fez todo tipo de coisas malucas semelhantes às acima, incluindo
adicionar itens invisíveis, coisas ao mapa que não estavam no nível, mas é desejável
encontrar a peça de ouro anterior, pois isso daria uma pista sobre o comprimento de
valores. Também não é totalmente certo que os itens sejam agrupados por si próprios
(pode ser ouro em uma seção, minas em outra, outros itens em outra).

As coisas não ficaram imediatamente aparentes aqui, então voltando ao editor de níveis. A
pesquisa de cheats foi usada para ver o que mudou quando coisas foram adicionadas ou
removidas de um local (uma pesquisa básica de diferença neste caso).
020DFB00 parecia ser um limite de contador/ponteiro (alterá-lo para um valor mais baixo removeria
itens adicionados posteriormente)
020E0840 parecia ser o local da caixa de seleção [para
finalizar]

236
O início dos níveis3 hexadecimal a 9 hexadecimal sempre pareceu ser ??
306945EA1004 onde ?? poderia ser 00,01,02,03,05,07,08 e 09, sendo 03 o mais
comum de longe e 09 visto apenas em nds194, nds175 e nds165 e 08 uma vez em
nds182
00 a 02 hexadecimal parecia ser **$$ onde ** geralmente era 84 ou 04 e
foi alterado para 7C em nds052, nds026 e nds160
$$ costumava ser 7F ou 80.
Além disso, como os itens permaneceram no lugar, parecia que havia algo que
possivelmente indicava a seção do item, que geralmente é onde o cabeçalho entra.
Nenhuma indicação aparente, mas poderia muito bem ser um valor calculado.
[para terminar]

TemporizadoresOs cronômetros nos níveis eram de interesse, então uma seção de item
foi transplantada de outro nível e a diferença foi preenchida com zeros. Ele não criou uma
réplica perfeita dos itens, mas sim uma réplica aproximada, pois havia itens adicionais; o
cronômetro, entretanto, era o mesmo do nível original, implicando, portanto, que não foi
armazenado no arquivo de nível. Como um teste adicional, um nível foi totalmente
substituído por outro, mas o cronômetro do nível permaneceu o mesmo do nível original;
era diferente quando o nível de doador aumentava, mas certifique-se disso quando mudar
as coisas, pois há poucos sentimentos piores do que perceber que você perdeu muito
tempo por causa de uma coincidência.

5.1.3 Estatísticas

Embora os jogos possam ser construídos sem usar este conceito, é certamente bastante fácil ver como
as estatísticas/características de itens, inimigos e jogadores podem ser usadas para proporcionar uma
melhor experiência de jogo, se puderem ser usadas em um jogo ou adicionadas a um, então eles podem
querer ser editados. Os hackers de ROM ficam então preocupados com os métodos de armazenamento
e as limitações dessas estatísticas.
As limitações geralmente são coisas bastante óbvias, como se você achar que sua estatística
está definida como um valor de 8 bits, você terá 256 combinações possíveis no máximo, a menos
que você mude a forma como tudo funciona, o que pode ser bastante difícil. Na verdade, as
únicas vezes que isso é realmente tentado é para converter jogos de codificações de 16 bits para
codificações de 8 bits, ou se o jogo usar um formato de banco de dados mais convencional e uma
técnica de acesso para a informação em questão que permita tal nível de manipulação.

A forma como as estatísticas são armazenadas é tão grande e variada quanto qualquer
outra coisa que você viu neste documento; essas coisas podem ser tabelas binárias básicas
(extremamente comuns em jogos mais antigos, versões deles e não incomuns em títulos
mais recentes), algo parecido com um arquivo CSV (linhas de informações separadas por
vírgulas), páginas de linguagens do tipo XML ou mesmo o próprio XML, propriamente dito.
bancos de dados (não tanto em dispositivos portáteis, mas em consoles domésticos e jogos
de PC podem e usam arranjos do tipo SQLite o dia todo) ou em cenários menos divertidos
enterrados no próprio código do jogo (pode não ter sido assim na fonte código, mas
compiladores são coisas maravilhosas e às vezes otimizam o código para você).
Os bancos de dados podem ser independentes, podem ser tabelas de valores vinculadas,
podem usar ponteiros, podem assumir valores alinhados (semelhante a como você
provavelmente alinhou os nomes e ponteiros ao separar um formato de contêiner/arquivo),
podem ser dispersos através de um arquivo, pode ser calculado (8 bits significa 256 combinações
mas nada impede que você tenha um intervalo de 1000 a 1255 ou mais comumente

237
para coisas como saúde, onde você multiplicará um valor de constituição por uma determinada quantia
e adicionará um pouco para obter um valor de saúde) e muito mais.
Resumindo, eles são geralmente uma espécie de banco de dados, então a programação de
banco de dados entra em vigor, isso não será abordado aqui, pois é muito longo e provavelmente
não é tão útil, pois os jogos tendem a ser bastante simples (eles tendem a ser pequenos e
estáticos o que significa nenhum benefício e potencialmente até desvantagens no uso de
conceitos de banco de dados de alto nível), bastante lógico (embora não conte com a presença de
valores simples) e improvável de ser realmente ofuscado ou criptografado.
Antes de passar para o assembly hacking, experimente o método do tipo de
exercício de pensamento; você pode ir muito longe apenas trabalhando no que faria
(240 inimigos com um nome, 5 estatísticas por peça que não vão além de 255, cada
um desses inimigos está ligado a outro, dos cinco elementos do jogo é fraco para
quantos deles?). O que você faria e o que um programador acabaria fazendo pode não
ser tão diferente, ou pelo menos eles teriam o suficiente em comum para que você
pudesse começar a descobrir o resto de maneira semelhante a como preencheria as
partes que faltam. de uma codificação de texto.
Deve-se notar que muitas enciclopédias/bestiários do jogo terão sido feitos a
partir do banco de dados antes do jogo ser montado, então não espere que as
coisas mudem lá se você mudar o jogo, ou mesmo o contrário e esperar que as
coisas mudem lá para mudar o jogo .
Por outro lado, a IA do jogo pode muito bem estar sintonizada com as estatísticas
originais do jogo e alterá-las pode tornar a IA padrão muito pior do que no jogo
padrão, no entanto, abordaremos isso mais na seção IA e se você apenas quiser para
multijogador com humanos, então continue.
pipian.com ierukana tem um bom exemplo de estatísticas de Pokémon.

5.1.4 Randomizador de RPG

O conceito já existe há algum tempo, mas nos últimos anos parece realmente ter decolado.
Jogos como Pokémon, Medabots RPG, bem como RPGs mais convencionais, muitas vezes
têm zonas definidas para inimigos ou batalhas predefinidas, ou no caso de medabots você
estará lutando apenas contra medabots feitos das mesmas partes. Você então descobrirá
uma maneira de alterar isso. Observe que muitos jogos podem fornecer algo para você
observar para influenciar isso. Exemplos clássicos seriam uma área de conservação onde
você visita inimigos antigos, um bug como os blocos marinhos de Pokémon, uma arena de
alguma forma ou até mesmo certos tipos de multiplayer. Da mesma forma, um jogo pode
mudar os monstros em uma área para uma sequência ou algo assim e isso pode ser muito
valioso. Alternativamente, pode ser muito simples e você só precisa influenciar o resultado
do gerador de números aleatórios; se um jogo tiver um bestiário, então se os inimigos de
uma área semelhante tiverem números semelhantes, poderia muito bem ser um gerador
de números aleatórios contido (gere-me um número aleatório entre 4 e 6, ou mais
provavelmente gere-me um número aleatório normal e adicione ou multiplique para
chegar ao número deste mapa). Cabe a você decidir se deseja tentar impedir que chefes
finais de jogo possam aparecer em uma área inicial, embora essas coisas possam ser
divertidas.

5.2 Compressão
A compactação é vista em todas as áreas de hacking de ROM e continuará a ser vista à medida que os
desenvolvedores enfrentam limites de largura de banda e espaço de armazenamento ao mesmo tempo.

238
tendo mais ciclos de CPU à sua disposição. Existem inúmeras permutações e
implementações, mas em termos gerais, os dois tipos básicos serão sem perdas e com
perdas. Ambos os tipos são nomeados por suas características dominantes; sem perdas
capaz de compactar e reconstruir uma cópia exata do arquivo original e com perdas pegar
um original e perder algumas informações esperançosamente irrelevantes ou menos
perceptíveis na tentativa de tornar os dados menores (no som, por exemplo, o ouvido
humano certamente não será capaz de ouvir acima de 30KHz, então se você capturou tudo
até 50KHz e depois perdeu todo o som acima de 30KHz16você economizará algum espaço
ao custo da perda de dados). Existem coisas que visam a compressão em tempo real
(comunicações em tempo real de dados gerados no local, como uma chamada de voz) e
coisas que visam a compressão para armazenamento e posterior transferência e esta
última é o que o hacking de ROM tende a lidar mais.
A compressão não é perfeita, por isso, se você se deparar com uma compressão de
engenharia reversa, não se surpreenda ao ver uma seção comprimida com o mesmo
comprimento da peça que ela comprime (embora esta também possa ser uma técnica para
permitir um alcance maior por meio de uma referência dupla ) e também não se
surpreenda se você vir uma maneira de melhorar ainda mais a compactação dentro e fora
dos limites do formato.

5.2.1 Com perdas

Vários jogos de DS usam métodos com perdas para codificar áudio, gráficos e, às vezes,
vídeo. Na maior parte, esses serão métodos conhecidos como JPEG para imagens, vários
formatos de áudio e formatos de vídeo relacionados a jogos (embora uma descrição
completa dos formatos de vídeo VX e mods, também conhecidos como act imagine/
mobiclip, ainda esteja pendente) com a parte mais complexa disso sendo que o formato
existente está envolvido em alguma coisa. Provavelmente, isso é melhor, já que a
compactação com perdas se baseia em uma série de áreas, incluindo áreas tão distantes
quanto a psicologia e a biologia, e tende a gerar formatos complexos.

5.2.2 Sem perdas

A compactação sem perdas se manifestará de quatro maneiras básicas, embora primeiro

as três sejam as mais comuns.

Dicionário (às vezes chamada de referência) - aqui a compactação fará referência


uma parte anterior do arquivo (seja o arquivo inteiro ou uma janela deslizante). A
compactação LZ e seu caso especial conhecido como codificação de comprimento de
execução (RLE), que era popular em sistemas anteriores, são os dois tipos principais.
Aqui o arquivo fará referência a um dicionário pré-fabricado de termos (raro em
implementações modernas) ou usará o próprio arquivo para gerar um dicionário
que, dependendo do método, será o próprio arquivo ou enviado com o arquivo.

EstatísticaHuman é o principal tipo de compressão para usar este tipo de tecnologia


único. A idéia é que a compactação use valores de referência de vários comprimentos para
se referir a seções do arquivo original, com os tipos mais comuns obtendo valores mais
curtos e os tipos menos comuns obtendo valores mais longos.

16Lembre-se de que a teoria da amostragem significa que você amostra com o dobro da taxa que deseja representar,
portanto a taxa de amostragem para representar sons de 30KHz precisa ser 60KHz.

239
Filtragemdependendo de como você olha, isso não é realmente uma compressão
e mais uma codificação, mas o hardware GBA e DS tratam uma versão dela como
uma compactação (funções do BIOS para lidar com isso), então está aqui. O formato
gráfico conhecido como NDS 1bpp (1 bit por pixel) usa a ideia de que mesmo que
eventualmente mude para 4bpp se você tiver uma imagem de duas cores
(geralmente uma fonte), você pode ter certeza de que cada pixel terá um de dois
valores e como tal, pode ser transformado em um simples 1 ou 0.

PreditivoTecnicamente, outro método estatístico, mas baseia-se na ideia de que


certas partes do arquivo podem ser previsíveis e geralmente são muito específicas da
aplicação.

A introdução à compressão de Christina Zeeh contém uma boa quantidade de


informações básicas sobre a história e os antecedentes da família de compressão LZ e
outras.
Além disso, e como esperamos ter ficado claro neste ponto, os desenvolvedores de jogos e
programadores em geral são encorajados a reutilizar conceitos e valores existentes para que os
blocos possam ser usados repetidamente (metade de um corpo pode ter vinte versões da
metade superior para várias animações), 3d em geral é bem adequado para isso, a compactação
de texto em nível de ponteiro foi mencionada, a codificação de bloco duplo tem usos, as fontes
foram vistas reutilizando partes, toda a noção de troca de paleta/textura/material... portanto,
embora esses usos gerais métodos de compressão são um conceito-chave em hacking,
especialmente em jogos portáteis modernos, esteja preparado para encontrar métodos mais
úteis para jogos em geral.

5.2.3 Teoria básica das implementações reais


Esta seção detalhará os conceitos básicos por trás dos métodos de compactação mais
comuns vistos no GBA e no DS e algumas técnicas que podem ser usadas para lidar com
eles. A discussão do nível de programação real está reservada para a próxima seção.
Observe que a compactação personalizada foi vista diversas vezes, mas geralmente não é
tão diferente da compactação regular (é difícil definir um tipo útil de compactação que seja
realmente novo), isso significa que, embora a maioria das ferramentas existentes falharão
se eles estiverem configurados para compactação personalizada, pois como a maioria é de
código aberto, não deve ser tão difícil fazê-los funcionar novamente depois de descobrir as
pequenas diferenças entre os métodos.

Compressão GBAMais do que os consoles anteriores, que tendiam a ter um


pouco de RLE e mais tarde alguns LZ, o GBA levou a compressão em grande
escala e se tornou uma xtura do sistema. Várias coisas foram feitas para lidar
com isso no lado do hardware e na perspectiva do hacker. O guia do
headspin detalha muito sobre compactação e como ela pode ser usada no
GBA e isso também contribui bastante para o DS.

Chamadas SWI (compressão suportada pelo BIOS)O GBA (e o DS) apresentam alguns
algoritmos básicos de descompressão como parte do BIOS prontamente acessível, isso significa
que qualquer coisa pode chamar as funções do BIOS para descompactar os arquivos na memória.
Naturalmente, os emuladores de grau de depuração (e, nesse caso, de uso mais geral) podem
observar e listar quaisquer chamadas de BIOS e permitir que você tenha uma ideia aproximada
de onde os arquivos estão, como eles são compactados e até mesmo quando estão em

240
Traduzido do Inglês para o Português - www.onlinedoctranslator.com

dependendo do jogo para o qual foram acessadas, muitas ferramentas de compactação podem usar essas listas
para extrair arquivos.

VRAM e WRAM segurosA VRAM é a memória RAM de vídeo e a WRAM também é conhecida
como memória principal ou memória RAM de trabalho. Com o carrinho GBA sendo mapeado na
memória no GBA, as coisas poderiam ser copiadas diretamente para a VRAM por vários métodos,
mas a VRAM carregava uma restrição de que todos os endereços de destino tinham que ser
alinhados para 16 bits (WRAM poderia fazer 8 bits). Isso também significava que qualquer escrita,
digamos de descompressão, deveria ocorrer 16 bits por vez e exigia que métodos de
compactação seguros de VRAM fossem concebidos e implementados.

Pesquisando e lidando com compactaçãoExistem três métodos para lidar


com a compactação no GBA

1. Registros SWI

2. Montagem/locais conhecidos

3. Pesquisa de compressão

O GBA possui vários algoritmos de descompressão integrados ao BIOS e observando


quando eles são chamados (o registro de chamadas SWI está disponível no VBA, entre
outras coisas), os locais na ROM tenderão a ser incluídos. Nem toda compactação é
compatível com BIOS e nem toda compactação compatível com BIOS usa as funções do
BIOS para descompactá-la (sendo alojadas no BIOS, elas são uma espécie de troca entre
tamanho e velocidade, então os desenvolvedores às vezes escrevem suas próprias
funções). Se os logs SWI estiverem disponíveis, várias das ferramentas mencionadas na
seção de ferramentas de compactação serão capazes de analisá-los e extrair as coisas de
acordo (GBA Multi DeCompressor sendo um dos principais), ou você pode analisá-los
manualmente e direcionar uma ferramenta para fazer isto.
Locais conhecidos são bastante óbvios e a ideia funciona se alguém antes de você tiver
encontrado os locais, é bastante simples direcionar uma ferramenta para eles (ou no caso
de alguns jogos a ferramenta pode já ter sido criada). A montagem pode muito bem ter
sido usada para conhecer locais e geralmente é um pequeno ajuste na técnica de
rastreamento padrão (o rastreamento será abordado em breve) de encontrar algo na
memória RAM e trabalhar de trás para frente a partir daí para ver o que o colocou lá e se
teve parada ou fez descompressão no caminho. Dessa forma, se um método de
descompressão personalizado for usado, a ideia básica ficará aparente para a pessoa que
faz o rastreamento (customizado geralmente significa um ag ligeiramente diferente,
significados de ag e número de bits sobre os quais ele opera, em vez de um método
totalmente novo de compactação) .
A busca por compressão provavelmente se tornará mais óbvia após o exemplo
trabalhado e se baseia na ideia de que o arquivo compactado normalmente começará com
10 hexadecimais no caso de LZ compatível com BIOS GBA/DS e depois disso haverá ags e
mecanismos similares que o método de compressão usa para funcionar/permitir a
descompressão. Várias ferramentas foram feitas, mas no que diz respeito à maioria das
pessoas que trabalham na GBA

241
Avanço NLZ-GBA (que funciona como um editor gráfico)

unLZ-GBA

242
Cristaltile2
Crystaltile2 também oferece suporte para pesquisa de compactação e também pode fazer isso
para anúncios personalizados de vários formatos. Ele está disponível no menu suspenso de
ferramentas da janela do editor hexadecimal, mas esteja avisado que a descompressão em massa
tende a fazer o programa travar se encontrar muitos resultados falsos para compactação.

243
Lz77Restrutor 2
Uma ferramenta relativamente nova, mas agradável; você pode querer brincar com a opção lters,
pois ela pode restringir por ponteiros, larguras, tamanhos e também lidar com texto (usando
tabelas personalizadas, se necessário).

GBACrusherAs ferramentas de descompressão eram bastante comuns e também faziam


bastante compressão, mas para a maioria a ferramenta dominante para arquivos compactados
gerados era conhecida como GBA Crusher. Deve ser capaz de executar todos os métodos
compatíveis com BIOS.

Compressão DSA compactação decolou no DS, mas devido ao fato de ter sido
razoavelmente bem implementada, poucas empresas criaram seus próprios formatos de
compactação personalizados no sentido tradicional e apenas usaram os do SDK ou outros
formatos conhecidos, então deixou de ser a ruína dos hackers de ROM para apenas uma
pequena irritação.

SWI, também conhecido como chamadas de BIOSO BIOS do DS tem suporte para várias
formas de compactação e uma novidade no DS em comparação com o GBA foi a ideia de retorno
de chamada que ajudou a contornar o fato de a ROM do DS não ser mapeada para a memória (o
gbatek o chama de lento, mas permite que arquivos maiores sejam descompactados sem o
desenvolvedor deve fornecer uma função de verificação para ver quando as peças foram
descompactadas e a próxima pode ser inserida nela).

Compressão de firmware DSNão é realmente relevante para hackear ROM,


mas o firmware do DS tem todos os tipos de compactação empilhados e o
código-fonte é uma boa leitura.
Baixe do site da Chishm

TiposVocê verá frequentemente menções a tipos de compactação na discussão sobre hacking


de ROM do DS e isso se refere principalmente a várias implementações de compactação LZ vistas
no DS. Eles são assim chamados porque os arquivos que usam o tipo de compactação geralmente
começam com o número (em hexadecimal), mas também vale a pena notar que a compactação
também será frequentemente indicada pelo nome do arquivo (normalmente LZ no nome ou o
nome/extensão terminando com um sublinhado).

244
ˆLZSS - mais ou menos o que o BIOS GBA/DS usa e outros
métodos de compactação vistos no uso do GBA e do DS.

ˆTipo 10 - este é o clássico sistema de BIOS baseado em LZSS seguro para GBA WRAM.
pressão e apenas um suportado por chamadas SWI.

ˆTipo 11 - outra compactação baseada em LZSS que apareceu há alguns anos


na vida útil do DS e é capaz de obter melhor compactação do que o tipo 10
ao custo de alguma velocidade.

ˆTipo 40 – provavelmente o mais novo tipo de compressão LZSS visto no DS.


O primeiro uso notável foi em Golden Sun Dark Dawn, embora 11 ainda seja usado
extensivamente.

ˆTipo 30 – tende a indicar RLE

ˆLZE- visto principalmente em alguns jogos da série Luminous Arc.

ˆLZ77 - não se vê mais tanto (o 77 referente ao ano em que


foi preparado), mas algumas pessoas se referem erroneamente a todas as
compactações LZ ou LZSS como LZ77, mas é muito semelhante ao LZSS e ninguém
fica realmente confuso se você cometer os dois.

ˆCompressão binária/regressiva/inferior (às vezes chamada de BLZ e não


para ser confundido com LZB) - Os binários DS (principalmente apenas as sobreposições
ARM9 e ARM9, a menos que seja um componente de reprodução de download) usam uma
primeira compactação final de arquivo que ainda é LZ, mas feita ao contrário por vários
motivos. A descompressão é amplamente suportada hoje em dia e a compressão também
pode ser feita. Esta compactação é ampla, mas houve casos de compactação
arquivos incluídos nos binários do DS.

ˆHumano - (tende a ter 20 anos para começar) onde LZ e a maioria dos outros estão
preocupado com o valor imediato à sua frente e se estiver relacionado a uma
seção anterior, considera o arquivo como um todo e atribui às seções mais
comuns um valor de referência mais curto e às menos comuns um valor de
referência mais longo.

ˆRLE. Um caso especial/simples de LZ que funciona em uma determinada string ou seção


e apenas compacta valores repetidos enquanto eles são executados. Não tão eficaz
quanto o LZ e outros, mas muito rápido e bastante comum em sistemas mais
antigos.

ˆYaz0. Nomeado devido ao carimbo mágico ASCII com o qual começa e outro não
tendendo a ser visto no DS. Em muitos aspectos, é uma versão ligeiramente
aprimorada do RLE (não o suficiente para ser chamado de LZ adequado), mas é visto
bastante no Gamecube, no Wii e nos portáteis da Nintendo posteriores.
Frequentemente usado com o formato de arquivo u8 que o u8tool pode analisar.
Existe um formato relacionado para o BIOS chamado Yay0.

ˆEmbalagem e filtragem. Conforme mencionado nos gráficos, o BIOS GBA e DS


permite a filtragem de dados para fazer 1BPP e execuções onde há um único valor,
aumenta cada comprimento de uma execução do mesmo valor que comprime muito mais
com métodos de compressão convencionais.

245
Várias ferramentas foram feitas para lidar com a compactação, sendo duas das
maiores no que diz respeito ao DS, os compressores DSDecmp e Cues GBA/DS,
embora existam vários métodos para efetuar a descompressão em arquivos.

5.2.4 Compressão em nível hexadecimal


Esta seção se concentrará principalmente na compressão LZ, pois é a mais comum e sua
decodificação é bastante ilustrativa das técnicas e conceitos envolvidos. A compressão
muitas vezes altera radicalmente o arquivo no nível hexadecimal, mas geralmente será
implementada de uma determinada maneira.

ˆSelo mágico. Principalmente nos formatos DS ou consoles domésticos, em vez do


consoles mais antigos. Pode ser hexadecimal ou ASCII/unicode.

ˆBandeiras. Vistos principalmente no LZSS, estes são pequenos sinais inseridos na compressão
hora de informar à ferramenta de descompressão se uma seção está compactada ou não.

ˆInstrução de compressão (geralmente onde está o arquivo/como é chamado no


dicionário e por quanto tempo ler a referência anterior).

Algumas implementações colocam marcas aqui e ali no arquivo por vários motivos, embora
geralmente como uma mensagem para o decodificador pular esta seção ou anotá-la para mais
tarde.
O componente de instrução é geralmente uma operação de duas partes mescladas em
uma. Uma parte será o comprimento da string vista anteriormente e a próxima será a
localização dela (seja como endereço ou referência). Desvios comuns do método discutido
acima incluem a ordem de comprimento e localização que pode ser trocada, quantos bits
serão usados para cada um que pode ser alterado, que tipo de alinhamento é usado e
como as coisas são tratadas. Lembre-se de que LZ é muitas vezes apelidado de
compactação de janela deslizante, portanto, ao operar em um arquivo grande (ou quando
limitado a uma instrução de compactação com poucos bits para o componente de
localização), o endereço inicial pode variar durante a descompactação e nem sempre estará
no início do arquivo. .

Exemplo trabalhadoA seguir está a saída de texto da simples execução do


programa gbacrusher do WRAM LZ.

246
A primeira parte não é estritamente necessária para a descompressão manual, mas é
agradável de ter e bastante útil ao programar uma função de descompressão.
A parte 10 hexadecimal é um ag que indica compressão e a parte 4702 é uma
a versão ipped do comprimento do arquivo original (247 como você pode ver no
janela de cima).
Foi feita uma busca para cada valor 00, pois no LZSS eles (geralmente) correspondem aos ags
para informar à ferramenta de descompressão se ela precisa fazer algo ou não (não para 00). Eles
têm cada 8 bytes neste caso, embora algumas implementações possam usar 16 bytes ou algo
totalmente diferente. Fazer isso poderia muito bem tornar o processo mais longo, mas uma vezele
mais a compactação está longe de ser impecável e o tradeo é útil
para velocidade e facilidade de uso.
Voltando ao tópico as primeiras quatro seções não têm repetições (isso é bastante comum, pois os
o e dá origem ao arquivos ficam menos legíveis com o passar do tempo). Ao decodificar
exclua cada 00 ag ao copiá-lo.
O quinto (destacado), porém, tem ersão da versão repetida. LZSS
difere de algumas outras implementações de LZ por ter o valor pressionado primeiro não com-
(neste caso, um byte) codificado normalmente. O 40 é apenas um ág.
3009 - os primeiros 4 bits disso são quanto deve ser descompactado menos 3 Tornar o
número 3 menor significa que ele poderia teoricamente ter mais 3 bytes um dia e como
o número não será menor que 3 (2 bytes para a compactação ag significa um mínimo de 3
bytes valer a pena), faz sentido começar a contar a partir de 3.

Os segundos 4 bits são 0, tecnicamente estes são os bits mais significativos, mas como o
arquivo é pequeno eles ainda não estão presentes.
Os próximos 8 bits são um a menos que a distância para contagem regressiva (neste
caso, 9 significando A hex), que começa a partir do valor da instrução de compressão (ou,
se você preferir, o valor exato do próximo símbolo não decodificado.

Os próximos blocos são descompactados, mas outro pedaço compactado logo


aparece

A020
A bytes + 3 = D hexadecimal longo
20 = 21h de volta.
Repita conforme apropriado até le é decodificado.

247
Um aparte sobre edição e visualização de arquivos compactadosEditando um arquivo compactado
arquivo em nível hexadecimal é possível e algumas vezes é tentador fazê-lo, porém você nunca
sabe se um fragmento será usado posteriormente no arquivo, a menos que você verifique (o que
geralmente significa que você descompacta o arquivo inteiro de qualquer maneira) e embora seja
bastante óbvio com texto se você está lidando com gráficos ou uma função que opera em um
nível de bits desalinhado, é pior, então geralmente é melhor descompactar, editar e recompactar.

Da mesma forma, a compactação quando feita em texto geralmente significa que a maior parte dele
ainda é bastante legível (especialmente porque tende a ser alinhada a bytes ou superior) e, em uma
extensão um pouco menor, o mesmo ocorre com alguns níveis e partes iniciais de cabeçalhos (mais ou
menos ags) significado embora torne muitos gráficos quase ilegíveis, muita coisa pode ser vista e
adivinhada sem ter que lidar com a compactação.

Trabalhando em torno da compactaçãoSó porque um arquivo foi compactado no jogo


original não significa que ele tenha que ser compactado no hack final que você fizer.
Nem sempre é tão simples como encontrar um arquivo descompactado, embora isso
possa funcionar para funções adequadas que tentam detectar a compactação e agir
de acordo. Às vezes pode ser tão simples quanto mudar um ag em algum lugar
(lembre-se do exemplo de El Tigre), mas também pode ser um hack de assembly
bastante básico, falando de assembly e binários, a compressão binária do DS tende a
ser notada com um ag na tabela de sobreposição , para este fim você pode limpar
este ag (1 = compactado, 0 = descompactado http://gbatemp.net/threads/
recompressingan-overlay-le.329576/#post-4387691). No caso de um hack de
montagem, a idéia geral é que a compactação tenha uma origem e um destino com
operações além da cópia direta, mas se você substituí-la pela cópia normal, tudo
funcionará como estava. A solução alternativa um pouco mais grosseira é descobrir os
sinais não compactados (mais difícil, mas não impossível com RLE e Hu man) e inseri-
los em todo o arquivo e outra abordagem pode ser vista em alguns dos trabalhos do
Labmaster ao lidar com compressão no jogo GBA Golden Sol.
Da mesma forma, se você estiver lidando com uma compactação personalizada, os dados
geralmente serão descompactados para serem executados, então você pode frequentemente
pegar coisas da memória RAM e contornar a compactação mais tarde ou usá-los para ajudar a
contornar a compactação, se for apenas um pequeno ajuste. um método existente que você já
conhece pode praticamente entregar o jogo.

5.3 Trapaça
Isso não significa usar nenhuma combinação de botões ocultos/condições de ativação para
permitir um modo de operação diferente do jogo normal, mas sim editar como o jogo funciona.
De todas as áreas com maior probabilidade de ficar um pouco à parte do hacking de ROM, é
trapaça, mas uma apreciação de como os cheats funcionam é muito desejável quando se aprende
pela primeira vez sobre parte da lógica do jogo de hacking e certamente como uma pista para a
montagem.
Classicamente, havia dois tipos de códigos RAM (geralmente chamados de action replay ou
gameshark, dependendo de onde você está no mundo) e códigos ROM (geralmente chamados de
game genie).
Os códigos RAM atuavam na memória do jogo, onde os códigos ROM adaptavam as
solicitações de leitura da imagem ROM para o que o código desejasse.
Os códigos RAM eram frequentemente considerados de natureza mais simples, esta não é
realmente uma avaliação justa, mas devido à enorme quantidade de códigos simples que ele forma

248
de preso. Da mesma forma, os códigos ROM muitas vezes eram capazes de fazer algumas alterações de
grande alcance, alterações que seriam extremamente difíceis de fazer por meio da edição de RAM, e
eram um pouco mais difíceis de fazer, e também não são tão comuns.
Como os códigos ROM/game genie operam na ROM, eles podem ser corrigidos de maneira
muito simples na própria ROM, os códigos RAM precisam de um dispositivo/emulador com
suporte para eles ou um programa para editar o cheat ou conectar o código do jogo para
adicionar um pequeno mecanismo de trapaça. Ter o código executado sobre o código existente é
algo que não é realmente viável para sistemas mais antigos, especialmente de uma maneira
genérica/automatizada. O GBA e o DS apresentam essas coisas, embora o GBAATM e o DSATM
sejam os dois programas principais para o GBA e o DS, respectivamente, o GBA apresenta outras
ferramentas como o GABsharky, mas a maioria dos esforços anteriores foram ofuscados/
suplantados pelo GBAATM. As linhas clássicas foram confusas nos últimos anos, à medida que os
gênios dos jogos se voltaram para códigos de estilo de replay de ação e os dispositivos de replay
de ação também adotaram a edição e injeção de salvamento para vários consoles, além de que as
imagens DS ROM armazenam seu binário de jogo na RAM (eles como os cartões de jogo do DS
não são acessíveis na memória RAM), então alguns dos melhores criadores de cheats usaram
códigos de replay de ação para editar o binário na memória RAM com grande efeito.

Existem muitos tipos de códigos de trapaça e dispositivos com


implementações diferentes, este guia provavelmente evitará se aprofundar, mas
em geral ele é dividido em três componentes (e geralmente codificado na
seguinte ordem)
1) o tipo de código (gravações constantes, escritas condicionais, operação booleana
e alguns tipos mais exóticos).
2) o endereço da memória
3) a carga útil, se houver, for necessária
A principal razão para cobrir isso é entender como os cheats funcionam e como eles
funcionam com o sistema, muitas vezes leva a uma compreensão mais profunda de como o
sistema funciona em geral e fornece uma boa entrada para aqueles que desejam começar a
aprender como codificar em assembly (o tipo de operação, localização e conceito de carga
útil retornarão lá).

Links ÚteisEnciclopédia

5.3.1 Criação geral de cheats


Há muitas maneiras de fazer cheats, mas a primeira parada geralmente é algum tipo
de scanner de memória. Eles permitem que você escaneie a memória antes de voltar
ao jogo, alterando algo e escaneando novamente até chegar ao valor exato ou a uma
lista pequena o suficiente para que você possa experimentar todos manualmente.

Você tem várias opções de digitalização disponíveis, incluindo

ˆPesquisa de valor (igual ou diferente) - se você conhece o valor da sua saúde


ou algo que você pode pesquisar. Nem sempre funciona, mas vale a pena tentar como
primeira tentativa.

ˆMaior que/menor que a pesquisa. Aqui você pode procurar algo maior
ou menor que um valor ou encontrar todos os resultados diferentes de um determinado valor.

249
ˆPesquisa difusa. Aqui você pode anotar tudo pensando em voltar
mais tarde para ver o que mudou. Também pode ser combinado com maior ou
menor que na maioria das vezes. Isto é bastante útil quando você tem uma barra de
saúde ou de cronômetro sem uma exibição direta do valor a ser pesquisado.

ˆPesquisa de intervalo. Nem sempre disponível e factível se você pensar nisso com
maior que e menor que isso procura literalmente valores dentro de um determinado
intervalo.

Códigos e termos exóticosVários dispositivos de trapaça permitem que alguns códigos bastante
personalizados e de longo alcance sejam criados em dispositivos concorrentes. Algumas delas
visam alterar o tratamento interno dos cheats, mas muitas outras podem ter efeitos de longo
alcance. Primeiro, alguns termos que frequentemente surgem

ˆCódigos de slides. Uma técnica usada para gerar códigos para fazer a mesma alteração
para vários locais ao mesmo tempo, geralmente usado se você tiver algo como 30
soldados, cada um com seu próprio valor de saúde e valor de munição e você não
quiser usar 30 códigos.

ˆCódigo mestre. Mais associado a gênios de jogos, onde eles geralmente ignoram
proteção e para dispositivos fraudulentos que precisavam ser configurados para funcionar em determinadas
imagens ROM.

ˆDesacelerar. Coberto mais tarde, mas alguns dispositivos de trapaça permitem que você desacelere o jogo
inundando a CPU.

ˆCódigo do Coringa. Códigos usados ao usar botões para ativar cheats.

250
5.3.2 Criação de cheats GBA
O VBA tem uma opção básica de truques que deve estar disponível em quase todas as
versões (notavelmente a versão VBA-SDL-H não, embora se você realmente quisesse,
poderia usar suas habilidades de depuração para fazer algo) e a nova janela do VBA
básico opções de trapaça se parecem.

251
O VBA-H tem algumas opções ligeiramente expandidas em cheats e em outros lugares.

Independentemente da versão, a maior parte é bastante óbvia se você tiver um


conhecimento básico das idéias básicas de cheats e representação de valores com
hexadecimal.
Ainda

ˆTipo de pesquisa - O valor específico permite que você insira um número no valor antigo
seção. O valor antigo pesquisará os resultados anteriores.

ˆTamanho dos dados - serão analisados valores de 8 bits, 16 bits e 32 bits. Observe que
muitas vezes coisas que aparecem como 8 ou 16 bits no início do jogo (se você estiver
perdendo apenas um pouco de saúde por vez, isso pode aparecer como um valor de 8
bits), o valor pode muito bem usar os 32 bits completos no momento em que tudo é dito e
feito.

ˆCompare o tipo - bastante autoexplicativo. Diferente é útil se você for


procurando por algo que pode ter mudado, mas você não tem certeza de como e por
temporizadores que podem ser redefinidos.

ˆAssinado/Não assinado - faz exatamente o que diz e permite pesquisar


valores assinados ou não assinados.

ˆInsira o valor - disponível somente quando você tiver selecionado Pesquisa de valor específico.

ˆAtualizar valores - isso atualiza as pesquisas originais para seus novos valores a cada
procurar.

ˆComparação de sinalizadores - (somente VBA H)

ˆDi er By - (somente VBA H) faz exatamente o que diz e permite que você faça
selecione um intervalo de valores para limitar seus resultados (se você perdeu apenas 7 pontos
de vida, a alteração provavelmente não será um valor completo, apenas capaz de ser
representado por 32 bits)

252
ˆRange - (somente VBA H) novamente faz mais ou menos o que implica e permite
você pode restringir uma pesquisa para incluir ou não apenas um intervalo de valores.

Praticamente a única coisa que falta é uma pesquisa de ponto flutuante, mas esses são
complicados e os valores de aveia raramente são usados no GBA (sem mencionar que
provavelmente surgiriam em uma pesquisa diferente). Também faltam coisas como
funções bit a bit, booleanas e matemáticas, mas se você precisar delas, VBA-SDL-H é onde
você deve procurar.

5.3.3 Criação de cheats para DS

Isso varia um pouco dependendo da pessoa que está fazendo o cheat. Desmume tem algumas
habilidades de manipulação de trapaça/memória, mas muitos usarão ferramentas como HasteDS e
renegade64 ou ferramentas de uso mais geral para se conectar a emuladores e fornecer habilidades
semelhantes. Muitos outros usarão ferramentas como o kit de ferramentas de treinamento da Datel,
que possui habilidades de depuração bastante extensas e até mesmo carrinhos de cinzas como o
Supercard DSTWO e o iSmart MM terão pequenas opções de criação de truques, embora sua pesquisa e
funcionalidade sejam um pouco inferiores a uma ferramenta adequada para a qual ainda podem ser
usados. truques básicos.

DesmumeDeve estar disponível em todas as versões do programa (não há necessidade da versão


dev), para Linux pode ser necessária uma determinada versão.
[nota atualização de 2014] Esta é uma versão um pouco mais antiga, as versões mais recentes têm um
mecanismo de cheat significativamente melhorado.
Janela principal, pesquisa exata e comparativa

Ele está dividido em algumas telas, embora na maior parte seja bastante óbvio mais
uma vez.
Selecionar tamanho - seleciona valores espalhados por um determinado número de bytes. Observe mais
uma vez que valores baixos podem estar usando tamanhos maiores.
Assinar - não assinado ou assinado.
Selecione o tipo de pesquisa - pesquisas de valor exato para um determinado valor e a
pesquisa comparativa permite pesquisar qualquer coisa (barras de vida e outras coisas sem
valores exatos).
Na pesquisa comparativa > ,<, = e != têm suas médias usuais de maior
que, menor que, igual e diferente.
Talvez de forma contra-intuitiva você tenha que fechar a janela de truques para
que o jogo rode novamente antes de voltar para a pesquisa e refiná-la.

253
EmuhastePágina inicial do projeto Emuhaste
Download de viagem de arquivo

Realisticamente, você provavelmente só o usará com desmume, mas mesmo assim é


um poderoso mecanismo de busca de cheats e inclui a capacidade de despejar memória.

O uso básico é depois de configurar o arquivo inicial para executar o emulador, pressione
snap process. Você não precisa procurar um valor para começar.
Inc(rease) procura um valor que aumentou de tamanho
Dec(rease) procurou um valor que diminuiu de tamanho
Di (erence) procura um valor que mudou de tamanho (para cima ou para
baixo). Equ(als) procura um valor que permaneceu o mesmo.
O comprimento dos dados permite pesquisar por valores de um determinado comprimento.
A pesquisa flutuante não é muito útil no DS, mas está lá e funciona.
Definir intervalo de pesquisa diferente dos outros não é uma pesquisa que limita o valor, mas um intervalo
de endereços.
O menu suspenso de dump de arquivo permite que você despeje a memória RAM principal do DS, que pode ser
usada para ajudar a encontrar códigos de ponteiro.
Na caixa de pesquisa de parâmetros e strings, você pode digitar o valor para nd (até 255 de
comprimento, o que é mais que suficiente para a maioria dos usos). No entanto, isso tem uma série de
opções que você pode usar
S na frente dos números significa que eles são tratados como
decimais R no início da entrada troca o endianismo
$ permitirá que você pesquise uma string.
< permitirá que você restrinja uma pesquisa a um valor menor que o valor colocado no outro
lado (<S40 significará que apenas valores abaixo de 40 decimais serão considerados).

254
> permitirá restringir uma pesquisa a valores maiores que o valor (>S40
significará 39 casas decimais e não aparecerá)
Innnnnnnn-nnnnnnnn restringirá a um intervalo de endereços.
A pesquisa básica de diferenças está disponível usando sinais de mais e menos para especificar a
alteração.
A partir das 4h00, uma pesquisa de disparo automático está disponível. Aqui irá acionar a busca se
um determinado valor de memória for alterado de acordo com o comando
O formato é address:hex que você está procurando:command com vários
comandos disponíveis se você separar por vírgula. Comandos como segue
EQ - igual a
NE - diferente de
GT - maior que LE -
menor que
MS - pesquisa múltipla
Havia uma versão anterior da ferramenta conhecida como pressaDS que permaneceu
por um tempo, pois faltavam alguns recursos na reescrita para emuhaste, mas isso agora
deveria ser coisa do passado.

não$gbaComo a versão de desenvolvedor do no$gba possui um editor de memória completa, ele


também pode ser usado para fazer cheats. No entanto, faltam os recursos mais aprofundados de
criação de cheats vistos em outros lugares, mas isso é bom, pois várias versões são amplamente
suportadas por outros programas que também suportam a versão padrão.

OutrosA maioria das ferramentas de trapaça são mais ou menos uma classe especializada de
visualizadores de memória, dos quais existem muitos (vários dos editores hexadecimais sugeridos têm a
capacidade de ler a memória do processo)

Dinheiro ArtísticoPágina inicial do Artmoney


Um editor mais geral, mas que encontrou um público justo nos círculos de hackers de jogos
devido a mais alguns recursos específicos de criação de cheats.

RenegadeEXDownload de viagem de arquivo


Um programa geral também voltado para edição com suporte a vários emuladores,
mas apenas no$gba para DS (embora suporte vários emuladores de GBA). A encarnação
anterior conhecida como Renegade64 também era um programa específico no$gba, mas
por muito tempo muito mais estável que HasteDS e emuhaste.

255
EmuchheatPágina inicial do Emuchheat
Outro programa orientado para no$gba e por um tempo um pouco mais avançado que
as outras opções, por isso se tornou bastante popular entre aqueles que buscam fazer
cheats mais avançados ou reduzir o desnecessário

Cristaltile2Não tanto para cheats, mas pode interagir com no$gba para
recuperar dados VRAM e WRAM. Disponível na opção emulador DS no menu
suspenso do arquivo.

Kit de ferramentas do instrutor da DatelEste é na verdade algo mais do que um visualizador de


memória, aqui você tem que usar um kit de ferramentas de treinamento para conectar-se a um DS ao
vivo através de um slot GBA, momento em que você pode acessar a memória e editar a partir daí.

5.3.4 Criação básica de um cheat


Independentemente das ferramentas ou sistema a que se destina, a criação de cheats utiliza os
mesmos métodos. Para então terminar de fazer um cheat de vida infinita para Summon Night
Swordcraft Story 2 no GBA

256
Um pouco de saúde foi perdida e o botão de pesquisa foi pressionado

257
Mais alguns pontos de saúde foram perdidos, o que melhorou as coisas, mas ainda não chegou lá

258
O processo foi repetido mais algumas vezes

30608 decimal = 7790 hexadecimal, então 8 bits provavelmente foi uma má escolha, mas como a saúde
estava diminuindo apenas 1, funcionou hoje.

259
Isso levou a 0300060C, selecionando esse endereço e pressionando add cheat

Adicionar um valor FFFF e uma descrição para não esquecer quando outros cheats foram
feitos dá o resultado final como

5.3.5 Métodos de prevenção de trapaças e frustrações


Essas coisas muitas vezes também incomodam os hackers de ROM devido à maneira como
funcionam, mas seja pela maneira como são codificados ou porque os desenvolvedores queriam
diminuir os cheats, alguns jogos funcionam de tal maneira que o método básico de criação de
cheats fica aquém. Além disso, alguns jogos podem ser quebrados pelo uso de cheats de nível
menos técnico; muitas vezes em um jogo do tipo RPG você encontrará um
Você deve perder ou desbloquear opções que podem ser viáveis no que diz
respeito ao código do jogo, mas o jogo em si foi planejado de tal forma que o resto da
história não pode mais se desenrolar. Num nível mais técnico, os temporizadores
podem ser usados por muitas partes dos jogos para fazer coisas, pelo que nem
sempre é viável mantê-los.
Provavelmente a versão mais básica deste problema de cheat sempre ativo é se um
cheat estiver sempre ativado, mas por um tempo na sequência de inicialização o jogo usará
a memória para outra coisa (isso é mais preocupante no DS se você estiver fazendo algo em
as sobreposições que são projetadas para serem trocadas de memória muitas vezes
durante o jogo), mas isso geralmente é resolvido conectando o jogo para usar um ativador
de botão ou similar, alterando a natureza de um cheat (especialmente

260
ao lidar com temporizadores que o jogo pode usar em outro lugar) ou ter um
mecanismo de cheats que pode ativar cheats em um determinado momento. O
restante desta seção apresenta alguns exemplos de técnicas vistas ao longo dos anos
e nada impede os jogos de hibridizar métodos.

Valores espelhados, criptografados, verificados e calculadosEmbora todas as quatro sejam


técnicas diferentes, elas funcionam de acordo com princípios semelhantes.

ˆValores espelhados tendem a significar que o valor está escrito em vários locais (consulte
também dicas abaixo) e se um não corresponder você pode usar os outros ou
travar ou algo assim.

ˆCriptografado faça o que eles dizem e transforme um número simples em gib-


berish, a menos que você possa descriptografá-lo (geralmente este é um método muito simples
de criptografia, como um XOR simples ou um shift ou algo assim).

ˆValores verificados. Se você tiver quatro personagens, a saúde total deles pode ser 614
e você pode armazenar isso, o que significa que se a soma total da saúde do
personagem for diferente, algo deu errado.

ˆOs valores calculados são indiscutivelmente um subconjunto de valores criptografados, mas sim
em vez de armazenar uma saúde de 145, você a retira da saúde máxima de
255 e armazena 110. Isso também pode servir para ajudar nos cálculos.

A maioria deles é fácil de contornar, como se você estivesse procurando por saúde infinita,
não importa se você tem uma saúde infinita de 7 ou o valor máximo na maior parte17então,
se você tiver um conjunto funcional de valores, apenas force o jogo a usá-los sempre. Se
você quiser descobrir algo, você terá que observar os valores que mudam, em vez de
aumentar ou diminuir, e descobrir o método usado, que geralmente é facilmente
gerenciado, ou mergulhar na montagem, provavelmente guiado ou inicialmente
direcionado por uma pesquisa básica de truques .

PonteirosEm um jogo de DS, os ponteiros no cabeçalho que todo DS pode ler apontam para
o sistema de arquivos que aponta para um arquivo que aponta para partes do arquivo
o que pode apontar para outras partes do e possivelmente mais (raro, mas
bem possível). Não há nada que impeça as ROMs de usarem métodos semelhantes e, de
fato, vários jogos foram vistos usando-os ao longo dos anos, o que tem vários efeitos,
incluindo cheats que funcionam apenas algumas vezes, cheats que não funcionam
(geralmente graças a uma combinação dos métodos mencionados anteriormente), cheats
que são impossíveis de encontrar por métodos básicos (a maioria dos métodos de cheat
assumem que o valor permanece no mesmo local).

17Se você tiver uma saúde forçada de 7, pode haver um ataque que sempre causa dez danos e,
portanto, mataria seu personagem e talvez mais rápido do que o mecanismo de trapaça pode
acompanhar, esse valor de 7 pode ser menor ou maior que o valor máximo. o jogo normalmente
permite, o que pode significar que você sempre pode recarregar se for uma arma ou sempre usar magia
de cura ou, inversamente, se você tiver dinheiro infinito, mas parecer ter apenas 7 em sua carteira,
talvez não consiga comprar algo. Isso geralmente não é tão ruim quanto, ao fazer o cheat, você conhece
os locais em questão e pode simplesmente jogar/desligá-los e permitir que o jogo gere um conjunto
maior e melhor.
Um bom exemplo disso pode ser visto na versão N64 do Goldeneye, onde mesmo com saúde infinita você
pode morrer em uma explosão grande o suficiente e mesmo com munição infinita você provavelmente sempre
poderá recarregar sua arma.

261
As soluções alternativas incluem encontrar todos os locais que podem ser apontados
(mesmo com ponteiros, muitos jogos farão isso em um estilo round robin) e controlar o lote
(um pouco de força bruta, mas bastante aceitável), você pode tentar ler o ponteiro em um
determinado ponto e reagindo de acordo se o seu mecanismo de cheat for poderoso o
suficiente e você puder forçar o ponteiro a ficar em um local e certificar-se de que o local
fixo agora seja editado.
Ponteiros dentro de ponteiros não são apenas possíveis, mas vistos em diversas ocasiões e
ocasionalmente há jogos com gerenciamento/alocação de memória adequada, portanto, manter
valores antigos nem sempre é a melhor ideia.
Existem algumas ferramentas para lidar com ponteiros para cheats, sendo a mais notável no
DS a ferramenta de ponteiro de Kenobi, na qual você alimenta despejos de memória e os códigos
básicos para obter os códigos completos (ponteiros e os cheats iniciais usados para corrigir o
seu) .

262
Outra boa ferramenta está disponível no kit de ferramentas de hacking do Demonic722.

A ideia por trás disso, caso você precise usar o manual, é que em cada jogo haverá uma
instrução ou valor de memória abordando o local que você está procurando para seus
cheats, e este local referenciando o local variável e é bastante fácil partir daí. É mais fácil e
de fato a maioria das ferramentas deseja usar alguns dumps de jogadas do jogo que usam
locais diferentes (eles são em sua maior parte gerados em tempo de execução/inicialização/
inicialização, então deve ser apenas uma questão de recarregar o jogo salvo, mas é fácil de
testar) por razões semelhantes às de fazer várias rodadas de testes para restringir as
possibilidades ao fazer truques básicos. Na maioria das vezes, a localização do ponteiro é
fixa, portanto, encontrar o que aponta para o local que seria o cheat geralmente resolverá o
problema, embora, novamente, ponteiros apontando para outros ponteiros tenham sido
vistos várias vezes. Da mesma forma, não há nada que impeça um jogo de calcular um
ponteiro adicionando um número simples a um endereço de acordo com a aritmética de
ponteiro no estilo C; tecnicamente, isso é um ponteiro em um ponteiro, mas se o valor base
for usado em vários outros lugares, talvez você não consiga alterá-lo tão facilmente.

Valores duplosEmbora isso provavelmente seja coberto pelos métodos básicos de criação
de cheats e por outras coisas que tornam a vida mais difícil, deve-se notar que alguns jogos
podem manter alguns valores para o que aparentemente deveria ser um único dado. RPGs
são bons exemplos e algo semelhante pode ser visto em algumas versões do GBA Final
Fantasy onde os valores podem ser mantidos, digamos um para a barra de vida, um para o
valor na tela e outro para o valor real usado como base para formar todos os outros. Isso
fica especialmente divertido quando os valores não são apenas exibidos e podem afetar o
que acontece no jogo, pois se você tiver a saúde máxima de acordo com os números, talvez
não consiga usar uma poção, mas o valor interno da saúde significa que você acabará
morrendo. enquanto você está perdendo saúde. Aqueles que tentam segurar os
cronômetros muitas vezes são prejudicados por isso.

Valores de pilha/registroAs ideias por trás dos termos são abordadas em seções posteriores, mas
junto com a memória convencional existem duas outras áreas conhecidas como

263
a pilha (que pode muito bem fazer parte da memória, mas não deve ser considerada como
tal) e os registros que ficam dentro da CPU e, no caso do GBA/DS, é a única coisa que a CPU
pode ler diretamente dentro de uma instrução (naturalmente você pode use a CPU para
manipular a memória, mas é necessária uma instrução separada).
Aqui, os valores podem ser colocados em um registro e/ou na pilha conforme
apropriado e referidos/operados repetidamente antes de serem gravados de volta na
memória quando tudo estiver dito e feito. Existe a ideia relacionada de um ponteiro
específico de função onde toda a saúde, estatísticas e outros serão passados para uma
função por um determinado período (digamos, uma batalha) e operados lá, mas isso não
tende a acontecer no GBA/DS. mas em sistemas mais convencionais (e especialmentemais emsegura

linguagens de programação) isso acontece o tempo todo.


e o em
Para este fim, se você quiser editar coisas relacionadas a ele, você terá que resultar
ações ou ações que o editem e editá-las como mais do que registros de memória gerais e a
pilha raramente permanece constante por muito tempo. Como isso é bastante prolixo e
difícil de visualizar, considere, digamos, a saúde de um personagem em um RPG básico: No
mundo superior principal, a saúde do personagem importa relativamente pouco ou nada
(suponha um jogo sem mecânica de veneno para este exemplo) mas na batalha a
integridade pode estar mudando o tempo todo, então, em vez de gravar coisas na memória
e da memória (um processo relativamente lento comparado à própria CPU), ele manterá o
valor da integridade dentro da memória da CPU e o editará o tempo todo, fazendo suas
manipulações da memória normal eram praticamente inúteis se você quisesse ter saúde
infinita na batalha. Aqui, em vez disso, você encontraria instruções que retiravam o valor da
saúde e as alteravam para nada (ou até mesmo adicionavam saúde) ou encontrariam a
instrução que desencadeia o evento de morte se você ficar sem saúde e negar isso ali.

Da mesma forma, foi por um motivo um pouco diferente (certas ações só aconteceriam
quando a saúde do paciente estivesse baixa), os treinadores e cheats do jogo Trauma Center para
DS mudaram isso, então se você errasse com seu bisturi ou similar, a saúde seria redefinida para
total e você pode faça coisas semelhantes para contornar os valores mantidos nos registros. Isso
também funciona para partes da memória que podem mudar de localização e para coisas como
sobreposições (pequenas seções de código que você pode inserir em um jogo para serem
substituídas por outras, mas mantendo a maior parte do código do jogo) que podem nem sempre
estar presentes em tempo de execução.

5.3.6 Trapaça na edição de instruções


Embora a discussão sobre hacking de montagem não comece a sério até a próxima seção,
isso está diretamente relacionado à trapaça e é muito útil saber sobre isso, sem mencionar
o fornecimento de um link direto para hacking de montagem mais convencional. Alguns
dos primeiros treinadores18para o DS que não eram treinadores de cena, tentaram corrigir
códigos de repetição de ação de várias maneiras. Esse tipo de edição é uma habilidade útil
de se ter e geralmente gira em torno da edição da(s) instrução(ões) que servem para alterar
o valor e, um pouco mais adiante, aborda como conectar um binário para ativar um efeito
semelhante, mas que é mais diretamente útil para muitos hackers de montagem que
podem precisar mudar alguma coisa, mas

18As citações estão aí, pois dependendo da pessoa com quem você está falando, um treinador é
obrigado a ter um menu selecionável de algum formato disponível (geralmente no início do jogo), ao
contrário do método descrito a seguir. Em alguns casos, os combos de botões para ativar em um jogo
também permitem que ele conte como um treinador e não como um hack. A distinção tende a ser
menos observada em dispositivos onde é mais difícil criar um menu inicial.

264
requer uma instrução maior. Deve-se notar que para cheats do tipo vidas infinitas há muitas
maneiras de morrer (pense que mesmo em um jogo de plataforma básico como o NES Mario você
pode ficar sem tempo, cair em um buraco, ser atingido por um inimigo e quem sabe se os perigos
e inimigos são duas coisas diferentes) e há muito tempo se vê que os jogos têm muitas funções
que mudam o mesmo valor. É claro que isso pode cortar o outro lado e permitir que você tenha
um tempo infinito em um nível, mas o tempo restante do final do nível para a função de
pontuação ainda pode remover o valor de tempo que uma retenção básica neste local de
memória atrapalharia.
Ainda voltando para Summon Night 2 0300060C
manteve a localização do contador de vida. Existem
duas opções aqui
Desmonte a ROM e procure por quaisquer instruções que procurem lidar com o
valor.
Execute o jogo em um emulador de depuração e aguarde uma instrução para lidar
com o valor.
O primeiro é muito mais fácil de lidar (equivale a executar um programa e pressionar a
busca no texto simples resultante), mas nem sempre funciona por vários motivos, como
ponteiros (aqui sabemos que não é um ponteiro que o governa, mas os ponteiros se
estivessem lá, isso poderia quebrá-lo), valores/locais calculados e muito mais. O último não
é tão difícil para um hack básico, mas requer o uso de um emulador de depuração que
pode exigir alguma reflexão em comparação com algumas das técnicas em outras partes
do documento.
A última opção foi escolhida para isso. Pouco antes da primeira batalha, F11 (o
comando de salto para depuração do VBA-SDL-h) foi pressionado

Uma janela assustadora se você não souber o que é abordado nas seções a seguir, mas a
maior parte significa muito pouco para esse processo e, mesmo que isso acontecesse, não será
tão ruim se você tentar entender o que cada seção significa. 0300060C é o local do cheat e tem 32
bits ou 4 bytes, portanto, para esse fim, quando 0300060C ou qualquer um dos 4 bytes
subsequentes são gravados, ele precisa ser conhecido ou, de fato, um ponto de interrupção em
uma gravação precisa ser definido.
bpw {endereço} {contagem}
bpw 0300060C 4
Digitar c continua o programa depois que ele é interrompido e foram necessárias algumas
tentativas para chegar à batalha. Uma vez na batalha, deixando alguns golpes serem acertados e
continuando a cada vez

265
Aqui é possível observar a lógica do jogo
Os primeiros dois números são de onde a instrução está sendo executada e os
próximos 4 caracteres hexadecimais são como a instrução é codificada; se você notou
que o segundo tinha apenas 16 bits, apesar do GBA ser um console de 32 bits, é
porque o GBA (e o DS) têm um modo de 16 bits que costuma usar, chamado THUMB.
str r0, r4, #0x54
Isso significa carregar o conteúdo de no local em r4 mais 54 hexadecimais
(300060C é o que aparece) em r0
cmp r1, #0x0
Isso significa comparar R1 com 0 e um conjunto de ags de acordo (será abordado mais
tarde, mas nas comparações GBA e DS não estão todas em uma instrução por si só)
disponível $08036c5a

Isso significa que se a comparação fosseeumenos do que ouequalificado para entãobrancho (salto)
para $08036c5a e continue correndo.
Claramente, o valor de leitura da memória é o que deseja ser editado, embora cheats
mais avançados possam fazer todo tipo de coisas, como impedir que a verificação de morte
funcione (como acontece com tudo em hacking, há muitas opções ao mesmo tempo).

08036c4e é a localização da instrução que trata do valor da memória. Se fosse


injetar um valor, tudo ficaria bem. 08000000 também é o local da ROM GBA na
memória, portanto 00036c4e na ROM é onde a instrução será encontrada. Thumb
é um modo um tanto limitado, mas permite que 8 bits sejam colocados em um
registro. mov r0 , #0xFF é o que a instrução deseja ser (você provavelmente
também desejará forçar o modo polegar para o montador, o que é feito
colando .thumb no início)
FF20 é o que parece.

266
Uma edição depois

Pode ir muito além disso. Também como mencionado em outro lugar, se você quiser
especialmente, no caso do DS, o próprio binário geralmente é encontrado descompactado
na RAM, então você pode realmente fazer um hack binário por meio de um cheat
convencional, como de fato vários dos cheats mais detalhados fizeram no caso do DS, e
efetivamente transformar um replay de ação no DS em um gênio do jogo.

5.4 Conceitos de programação


Na preparação para a montagem, vale a pena conhecer alguns conceitos e técnicas de
programação. Ao aprender programação, muitos guias e escolas tentarão ensinar
alguns deles às escondidas ou introduzi-los gradualmente. Isso funciona bem para
muitos, mas aqui eles serão apresentados diretamente e explicados como tal.
Certamente não se destina a ser um tutorial de programação (vários guias estão
vinculados em outros lugares para isso), mas sim informações suficientes para serem
perigosas e, esperançosamente, não impedirem seus esforços no aprendizado de
programação.

5.4.1 Funções e programação processual. Também programação orientada a


retorno/ROP
Você pode tentar programar um programa para que ele seja executado do começo ao fim, mas
para qualquer coisa além de um programa muito trivial ou algo sem nenhuma entrada real do
usuário (praticamente o oposto de um jogo), ajuda ser capaz de fazer pequenas rotinas que você
pode alimente a entrada e obtenha um resultado (uma função, se preferir). A maioria dos
programas possui um componente principal que é executado e adia/ramifica para outros,
conforme apropriado. A programação processual (que segue a maioria dos tipos de programação
assembly, bem como linguagens como C) e a programação funcional (um pequeno ajuste na
programação processual), são ambas chamadas de paradigmas de programação.

Agora existem centenas de paradigmas e mais sendo feitos a cada ano, sendo
tantos que o conceito se tornou uma espécie de piada em vários círculos de
programação.
Existem dois outros dignos de nota no que diz respeito ao hacking. O outro o primeiro é
grande paradigma de programação normal que é chamado de Orientado a
programação Objetos (era provavelmente a principal diferença entre C e C++, ambos
que foram e ainda são muito usados em programação de jogos, programação de dispositivos

267
e os lados de baixo nível dos sistemas operacionais) que muda as coisas fazendo com que,
em vez de deixar as coisas para as funções, e mesmo ao criar funções, você possa mesclar
os dados que estão sendo manipulados e a função que deseja executar em uma linha, isso
geralmente torna o código um pouco menor e mais fácil de gerenciar. Tudo isso é
mencionado porque influencia a linguagem assembly resultante à medida que C e C++ são
convertidos em assembly do compilador.
A segunda é aquela que ganhou destaque nos últimos anos e é chamada de
programação orientada a retorno (muitas vezes abreviada para ROP). É muito popular entre
pessoas que invadem PCs e outros sistemas altamente seguros; na verdade, o 3ds viu
vários exploits baseados em ROP. A melhor explicação que ouvi era algo como uma nota de
resgate é composta de cartas que o autor original provavelmente não tinha intenção de
serem usadas como tal, aqui vários fragmentos de código parecem ser certas instruções
bastante válidas se você pular (ou mesmo retornar) para eles. A programação orientada a
retorno (ab) usa esse fato alterando para onde as coisas retornam e, no processo,
construindo um programa válido a partir dos bons dados que o dispositivo espera que
estejam na memória. Ele fica muito mais aprofundado, felizmente por ser uma técnica nova
(ish) e empolgante que não precisa de hardware sofisticado, ela vê muitas apresentações
em conferências de hackers e outros artigos que você pode procurar.

5.4.2 SE OUTRO
Em muitas linguagens de programação, embora normalmente vistas em C e naquelas
influenciadas por C, a construção IF ELSE é muito importante. A idéia geral é que você pode
dizer ao computador para fazer algo SE um determinado conjunto de condições for
atendido, mas caso não sejam, então faça algo ELSE com as duas formas principais
necessárias, sendo uma execução de instruções IF e um ELSE final (potencialmente mais
lento, mas tem usos) ou mais comumente uma sequência de IF seguido por ELSE e outro IF
seguido novamente por outro ELSE até o final ELSE. Qualquer uma das construções permite
verificar se uma de uma série de condições aconteceu e agir de acordo antes de terminar
ou retornar ao ponto de partida. Na montagem, isso é um pouco mais complexo e usa
instruções de ramificação (geralmente condicionais), mas como a família C é bastante
próxima da montagem, isso é apenas uma abstração bastante pequena.

5.4.3 Recursão
Um excelente exemplo do uso da recursão é encontrar o fatorial, tanto que
geralmente é o exemplo usado ao ensinar o conceito e provavelmente será feito
aqui também. Se você estiver com dificuldade para lembrá-lo, o fatorial de um
número é o número multiplicado por cada número anterior até atingir 1 e
normalmente é representado por um ponto de exclamação após o número.
Aqui você tem um valor inicial, faça uma operação e verifique se precisa fazer
outra antes de fazer a operação novamente e verificar mais uma vez e novamente e
novamente19até chegar ao valor que você precisa.
Se você se lembrar dos métodos OAM para mover um sprite (embora funcione quase
tão bem para dados de nível e posicionamento), você pode querer mover um sprite

19o ato de verificar e verificar é realmente considerado uma má prática, é melhor fazer um loop
que feche naturalmente, se puder. Se você não puder (uma ocorrência mais comum), você define
uma interrupção que efetivamente faz a verificação para você, sem muita penalidade de
velocidade e irá soar quando as condições forem atendidas.

268
4 pixels por vez até que a quantidade de pixels movidos totalize 20, de modo a criar uma ilusão de
movimento (em oposição a um teletransporte), então aqui você provavelmente veria o (s) valor
(es) OAM do sprite incrementado em 4 ou aquele usado para uma interrupção ou uma segunda
função atuando como contador.

5.4.4 Iteração
Relacionado à recursão está a iteração. Aqui você pode querer resolver um problema e escolher
um número aleatório antes de ajustar seu valor inicial e tentar novamente até chegar à resposta
(ou perto o suficiente). Isso geralmente é usado quando você tem um problema desconhecido ou
não possui um método simples para fazer o trabalho.

5.4.5 Laços
Escolher que tipo de método de loop você deseja usar às vezes é óbvio e às vezes complicado.
Agora, como mencionado várias vezes, C está muito próximo do assembly, então os
programadores de jogos são bastante livres para não terem escolhido o método mais ideal e, na
verdade, podem muito bem ter escolhido um abaixo da média. Não há tantos hackers
x isso, mas você pode, se quiser, pois o uso excessivo do tipo errado de loop pode fazer
com que o jogo trave sob certas condições ou pode ver coisas como a bateria descarregar
mais rápido do que deveria.
Talvez você precise escolher o seu próprio se precisar fazer algo como
implementar uma fonte de largura variável. Em um hack VFW, como você não tem
mais uma distância fixa para manter os glifos separados, você precisa descobrir a
largura e agir de acordo até chegar ao fim da linha. Esperançosamente, o mecanismo
de texto pelo menos forneceu a capacidade de quebrar as linhas, mas talvez não, ou
talvez tenha, mas ter caracteres com largura fixa pode ter ignorado o valor exato
esperado (um múltiplo de 8, por exemplo) e, em vez disso, faz não sabe o que fazer
(digamos que você tenha múltiplos de 7 que não se alinharão com múltiplos de 8 por
algum tempo).

5.4.6 Turing completo


Alan Turing é, em muitos aspectos, considerado o pai da computação moderna e isso tem uma
boa razão, pois ele descobriu muitos dos conceitos básicos da computação; um desses conceitos
centrais ao qual seu nome foi emprestado é a capacidade de categorizar linguagens de
computador como Turing completa, que em resumo se refere a uma linguagem/máquina capaz
de encontrar o resultado para qualquer problema de computação com tempo e espaço
suficientes. É mencionado principalmente porque alguns jogos apresentam uma medida de script
e computação feita em tempo de execução que pode ter habilidades razoáveis, mas pode não ter
recursos necessários para serem classificados como Turing completos, ou se o fizerem, é uma
espécie de conclusão esotérica onde certos recursos são abusado para gerar outros (uma
variação disso pode ser como você pode usar logaritmos para encontrar os resultados de uma
multiplicação ou divisão usando nada além de pesquisa e adição/subtração). Para este fim,
geralmente é melhor evitar tentar fazer cálculos em linguagens de script que possam estar
presentes em um jogo, a menos que sejam reconhecidas como Python ou Lua, linguagens que
alguns jogos usam.

269
5.4.7 Fundamentos de Montagem
Assembly recebe um artigo completo onde o GBA e o DS são abordados em grande
profundidade, mas para evitar que essa seção fique atolada em minúcias, alguns dos
conceitos fundamentais estão sendo abordados aqui. A linguagem assembly é geralmente
caracterizada pelo uso de mnemônicos pequenos, geralmente de três ou quatro letras,
para representar instruções, em oposição às instruções e funções mais elaboradas que as
linguagens de nível superior oferecem. Torna-se bem diferente à medida que você muda
arquiteturas e sistemas, mas saber o seguinte significa que você sabe muito do que
sustenta tudo isso, com muitas das grandes diferenças decorrentes do fato de que várias
instruções têm várias implementações nos processadores abordados aqui.

TempoMesmo no ARM, que evita instruções longas (é um dos conceitos centrais de uma
computação com conjunto de instruções reduzido que AavançadoRiscMmáquinas são
especializadas), algumas instruções levam vários ciclos de clock para serem executadas,
então você deve levar isso em consideração. Ao contrário do X86 dos PCs, não há muita
necessidade de considerar multithreading, previsão de instruções e outras coisas que
tornam os cálculos de tempo e a codificação para obter a melhor velocidade muito mais
complexa ao lidar com processadores X86/X64 (esses recursos são o motivo pelo qual você
está desencorajado de simplesmente comparar as velocidades da CPU para determinar o
melhor processador).
GBAtek tem mais informações sobre os tempos para instruções e se você se lembra da
seção de gráficos, muitas coisas no DS operam no tempo Vblank, no qual há apenas 80.000
ciclos para fazer as coisas antes do início do próximo desenho da tela. Para cronometrar as
coisas para tal ocasião são usadas interrupções e a interrupção vblank é uma das principais
usadas.

InterrupçõesIsso foi mencionado há pouco, mas a idéia geral é que você nem sempre
quer verificar se algo aconteceu, então, em vez disso, você usa interrupções. Existem
vários tipos com várias prioridades (as principais são Vblank (para atualização de tela),
baseado em temporizador, DMA (transferência de memória), pressionamento de
teclado e mais abaixo na lista e vindo de uma instrução é SWI (funções de BIOS para
coisas como descompressão e divisão no caso do GBA) e você pode habilitá-los e
configurá-los à vontade.

DMA DdiretoMEmoryAccess é uma técnica disponível para todos os sistemas modernos que
permite que uma transferência de uma parte da memória para outra seja realizada
independentemente da CPU. É essencial porque a CPU tem largura de banda muito
limitada, mesmo que você possa amarrar a CPU com uma simples transferência de dados (a
CPU é interrompida para o GBA e DS durante isso, mas evita ter que perder ou salvar e
restaurar informações de estado armazenadas na CPU). Dito isto, DS DMA e outros
benchmarks de transferência de memória para os curiosos.

RegistrosAs peças de memória mais rápidas em qualquer computador são quase sempre os
registradores. O problema é que eles são limitados em número, limitados em tamanho e
muitas vezes vêm com uma lista de ressalvas que não serão abordadas no momento (o
ARM é bastante racional, mas o X86 é menos à primeira vista e provavelmente também à
segunda vista). No caso do GBA e DS o modo ARM7 ARM possui 13

270
aqueles de finalidade que você pode usar para qualquer coisa chamada R0 a R12,
onde o modo THUMB é ainda mais restrito e cada modo também tem uma seleção de
finalidades específicas que são muito úteis e como o ARM7 é um processador de 32
bits, cada registro tem 32 bits, embora nem sempre acontece assim na computação.
No entanto, como nenhum processador convencional no momento em que este artigo foi escrito é
de 128 bits na maioria dos sentidos da definição e poucos têm uma ordem de magnitude a mais de
registros do que o humilde ARM7.20é bastante óbvio que você pode fazer muito com esses pequenos
registros e com o punhado relativo deles com os quais você precisa trabalhar.
O termo registradores também é usado para designar partes específicas da
memória GBA e DS que controlam diversas funções no hardware e não fazem parte da
CPU.

Tipos de instrução e como funcionamO texto a seguir detalha várias coisas boas que você
deve saber sobre as instruções em geral. Uma observação neste estágio é que a ideia de
uma instrução é apenas isso e as coisas podem ser organizadas em qualquer ordem;
geralmente será algo como instrução, registro de destino, registro de origem, valor
imediato, dar ou receber o registro de origem conforme apropriado, mas isso pode mudar
dependendo do seu montador (certos montadores voltados para uma determinada família
de processadores como um todo têm ordens favorecidas para coisas, mas novamente não
é definido em silício, por assim dizer).

BRAÇOO modo principal dos processadores DS e GBA, tem mais acesso a


todos os modos e as instruções mais poderosas em sua maior parte.

DedãoO modo de 16 bits (embora ainda possa acessar e processar registros e dados de 32
bits), tem acesso a menos registros e possui diversas restrições. Permite códigos menores e
menores penalidades de tempo de acesso em coisas como o barramento de leitura de carrinho
GBA de 16 bits e os jogos frequentemente passam grandes porções de seu tempo de execução
no modo THUMB.

Valores imediatosAs instruções podem transportar valores para usar na operação


como parte delas mesmas (MOV R1, #0x1F armazenaria o valor 1F no registro R1)

Registrar valoresComo visto acima, as instruções podem ler de e para registradores,


para que possam ser usadas para armazenar valores e usá-los como base para instruções
adicionais.

Valores de memóriaEventualmente, você desejará escrever algo na memória ou lê-


lo em um registro. Em processadores ARM isso requer uma instrução adicional, mas
alguns processadores permitirão que locais de memória sejam lidos diretamente da
instrução.
20Embora isso se concentre principalmente nos processadores ARM, como vistos no GBA e no DS, você pode
querer dar uma olhada nos extensos Manuais de Desenvolvedores de Software que a Intel publicou para seus
processadores. Os ARM serão vinculados quando forem discutidos.

271
SPSR e CPSROs registradores de status do programa são usados para armazenar itens
relacionados à assinatura de um valor, quaisquer valores de transporte e outras coisas,
além de serem capazes de desabilitar interrupções. CPSR é aquele atual onde o SPSR
mantém valores no caso de uma exceção.
GBAtek tem mais como de costume.

PC, LR e SPDependendo das suas ferramentas de montagem, elas serão


conhecidas como R13, R14 e R15.
PC é o contador do programa e armazena onde o código está sendo executado no momento.

LR (registro de link) é usado para definir para onde voltar se você se ramificar;
certifique-se de observar isso se você ramificar e ramificar novamente, o que é uma técnica
conhecida como funções de aninhamento.
SP é um registro opcional (mas bastante recomendado) para armazenar onde a pilha
(uma seção de memória usada pela CPU para armazenar stu quando os registros acabam) é
mantida e há uma para cada modo de CPU.

NÃOAbreviação de Sem Operação. Não é tão útil em operações gerais, embora


pudesse ser perdido se fosse, mas os hackers de ROM consideram-no imensamente
útil, pois literalmente não faz nada e a substituição de outra instrução por ela pode ser
feita sem a necessidade de se preocupar com algum outro código saltando de em
outro lugar e ficar confuso porque você simplesmente bagunçou as dicas. Por
exemplo, se você tivesse dito um arranjo IF ELSE de ramificação e não se importasse
com a parte IF, você poderia fazer com que o padrão fosse a instrução ELSE. Não há
NOP oficial nos processadores ARM, então a maioria lê de um registrador de volta
para o mesmo registrador.

Empurre e popEmbora você possa fazer as coisas com os 13 registros gerais, você
ficará sem e o PUSH simplesmente colocará o conteúdo em uma parte da memória
geral (ou às vezes cache, dependendo do processador) chamada pilha e anotará onde
está, enquanto o POP o restaura. Muitas vezes, se você tiver que escrever sua própria
nova função, você empurrará tudo para fora dos registros atuais, fará o que precisa
ser feito e colocará tudo de volta antes de voltar para onde estava antes.

MOVIMENTOSExistem algumas variações no conjunto de instruções ARM, mas em geral ele


copia o valor de um registrador para outro ou define um valor em um registrador. Deve-se
notar que, diferentemente do que o MOV implica, o registro original não é limpo nem nada
e isso se aplica à maioria dos processadores.

AdicionarFaz o que foi nomeado e adiciona dois registros, adiciona um valor a um


registro ou, em alguns casos/processadores, adiciona um valor mantido na memória
ao valor no registro.

SubtrairMuito parecido com adicionar, exceto que subtrai. Ele usa o Current Program
Status Register (CPSR) para ajudar com valores assinados e outros.

272
MultiplicarOutra instrução com um uso óbvio, embora existam diversas variações que
permitem fazer coisas como agregar valor e depois multiplicar e também funções um
pouco mais complexas. A multiplicação de ponto flutuante, se feita na CPU, exigirá
alguma reflexão e o ponto fixo não é muito melhor. Deve-se notar que os
processadores ARM usados não possuem uma instrução de divisão, embora o DS e o
GBA forneçam habilidades para fazer isso em outras partes do hardware e existam
outras maneiras, como tabelas de log.

Filial O uso é duplo no GBA e no DS. A instrução BX de


em si alterna entre os modos ARM e THUMB, mas em geral a instrução de
ramificação é usada para acionar um salto para outro trecho de código
(geralmente outra função) para fazer algo e depois voltar depois de ter feito o
que precisava. As instruções de ramificação mais úteis sãoserebomque são ramo
se for igual e ramo se não for igual.

Carregar/armazenar memóriaAlgo específico do ARM para processadores como os da


família x86 pode acessar diretamente a memória em quase qualquer instrução, mas
os processadores ARM precisam carregar e armazenar coisas manualmente usando
instruções separadas. Geralmente eles são chamados de LDR e STR com algumas
variações dependendo do que você deseja fazer.21

5.5 Montagem
Assembler, assembly, ASM e hacking binário são alguns dos sinônimos para isso e,
embora tecnicamente eles tenham significados ligeiramente diferentes na maior
parte, se você disser um e tiver contexto suficiente, ninguém dirá realmente nada,
embora o hacking binário talvez seja preciso, mas não realmente aconselhável.
Embora todas as outras técnicas mencionadas neste guia tenham exemplos de
conhecimento altamente especializado em seu cerne, em muitos aspectos, o hacking ASM
tem a maior barreira de entrada e, da mesma forma, é o de maior alcance, como usar um
editor hexadecimal para editar tudo o que pode não é aconselhável, mas qualquer coisa
pode ser editada usando técnicas ASM. Para não fazer rodeios, aprender ASM significará
que você está aprendendo um dos mais difíceis e específicos (escrever algo em Java em um
sistema e será necessário um mínimo ou nenhum trabalho real para executá-lo em outra
coisa que tenha Java mas escreva algo em ASM para o GBA e você provavelmente terá
muita dificuldade em fazê-lo rodar mesmo no DS) e nos tipos de codificação mais
envolvidos e se você ignorar algumas das linguagens de programação esotéricas,
provavelmente as mais difíceis. No entanto, isso não quer dizer que não valha a pena
aprender pelo menos alguns dos princípios básicos, pois isso ajudará em outras áreas
(como é um tema comum neste documento, saber como o hardware funciona permitirá
que você leve as coisas ao limite sem ultrapassar ou ser capaz de rastejar de volta se o fizer)
e, mais importante, algumas das técnicas podem ser executadas sem muita apreciação pelo
que estão realmente fazendo nos bastidores; você pode não ter um profundo apreço pelas
nuances da memória

21Existe uma medida de segurança presente nos sistemas Windows chamada ASLR (address space layout
randomisation), o que significa que muitos programas que usam assembly que naturalmente precisam lidar com
sua própria memória são, de certa forma, considerados inseguros, pois o recurso deve ser desativado para que
esses programas sejam executados. Na verdade, isso foi citado como uma das razões pelas quais a capacidade
de fazer montagem inline (ter pequenas seções de seu código em montagem ao usar uma linguagem como C)
foi eliminada de alguns ambientes de desenvolvimento mais recentes.

273
e sistemas de leitura de memória para um console, mas qualquer um pode definir um ponto de
interrupção e esperar que a instrução dada escreva em uma determinada área e ver de onde ela
lê.
Também deve ser dito que, embora a programação assembly seja extremamente poderosa, ela
ainda é uma linguagem de programação, portanto, apenas conhecê-la não o transformará em um
cientista da computação, mesmo que muitas vezes os torne mais fáceis de aprender no início, então
continue a aprender outros conceitos; se parece que aqueles que conhecem assembly sabem o resto,
provavelmente sabem, mas é quase certo que aprenderam ao longo do caminho.
A questão óbvia da razão pela qual nos importamos em fazer tudo isso é que tudo
é eventualmente renderizado em assembly (mesmo que seja em tempo de execução,
como é o caso de algumas linguagens de nível superior) e se tudo for renderizado
nele, tudo será compreensível através do filtro dele e tudo é editável com ele.
Embora esta seção pretenda ser uma introdução razoavelmente completa ao assembly,
você também é encorajado a ter uma especificação completa de hardware como gbatek
disponível, pois ela conterá coisas que serão omitidas e será mais útil como referência.

5.5.1 BRAÇO
O GBA usa um processador ARM7TDMI enquanto o DS possui um processador ARM9
(especificamente um ARM946E-S) e um ARM7 que na prática é uma versão com maior
freqüência do processador GBA22. O conjunto de instruções que eles executam é conhecido
de forma bastante confusa como ARMv5, mas poucas pessoas se referem a isso, sendo
ARM9 e ARM7 as coisas usuais às quais as pessoas se referem.
Ambos possuem dois modos de operação, sendo o principal ARM e o secundário
THUMB; embora o termo secundário seja usado e seja, em muitos aspectos, o mais
fraco dos dois modos, os jogos podem e frequentemente passam grandes períodos
ou mesmo a maior parte de seu tempo de execução no modo THUMB.
Não é ruim se você está acostumado com o X86 com registros aninhados e muitas
peculiaridades e muito menos ter que otimizar as coisas para ele, mas os
processadores em si são bastante básicos, como seria de esperar de uma arquitetura
RISC com o único real a omissão é a falta de uma instrução de divisão. O assunto da
divisão do BIOS será abordado posteriormente com mais profundidade, mas fornece
uma instrução de divisão, embora possa ser mais rápido e alguns jogos ainda
implementarão tabelas de log e métodos semelhantes (o BIOS do GBA vai um passo
além e fornece raiz quadrada e arco tangente) e o DS ARM9 também possui uma
espécie de coprocessador para matemática que usa IO para funcionar e suporta
divisão e raiz quadrada.
Uma seleção de links que tratam dos vários processadores
ARM7 o especificações especiais
ARM9 o especificações calicas
Arquitetura do braço (conceitos gerais)
Coisas peculiares que você nunca quis saber sobre assembly
imrannazar.com Mapa de opcode ARM7 e 9
Menor arquivo ds (não tanto assembly, mas vale a pena ler)
Referência de CPU GBAtek
crackerscrap.com (clique na documentação) (abrange vários exemplos de técnicas de
montagem).

22Algumas pessoas tentaram sincronizar os vários ARM7 no modo GBA em vários consoles
(GBA, SP, GBM, DS e DS lite) e eles geralmente estão a apenas alguns décimos de MHz entre si.

274
microcross.com Referência rápida do assembly GNU ARM Um pequeno documento de
referência para algumas das diretivas suportadas.

Errata de silícioOs programas podem ter bugs, os chips podem ter bugs e, como os
processadores são cada vez mais uma combinação dos dois, eles podem definitivamente ter
bugs, para não falar da arquitetura como um todo; já que vários pontos deste documento
dedicaram tempo cobrindo o GBA e o DS, aumentando seus processadores com
hardware integrado fixo também capaz de processar em algum nível. Agora, onde
certamente existem recursos não documentados no momento da escrita, não se sabe
muito sobre qualquer errata de silício para o GBA ou DS em comparação com
processadores como x86, embora o GBAtek cubra vários erros e escolhas de design
estranhas (lembre-se que o ARM tende a ser personalizado/ aplicação específica onde
processadores como x86/x64 são amplamente padrão e quase certamente o são até que
você chegue a níveis muito elevados de ciência, indústria ou empresa). Isso é ainda mais
abstraído dos programadores pela maioria dos compiladores, em alguns casos montadores
e conjuntos de ferramentas sendo atualizados para contorná-los, o que pode incomodar os
hackers de ROM, pois não tenderá a ser transmitido a eles. Na prática, é mais provável que
a culpa seja do hacker ou do emulador que não lida com uma condição específica (lembre-
se, na prática, a emulação geralmente é uma tentativa de fazer uma aproximação de um
sistema em código que roda a uma velocidade razoável). e talvez um problema do
montador; Costuma-se dizer que os consoles de jogos usam CPUs de prateleira, mas
ocasionalmente apresentam alguns ajustes, como de fato foi visto no Z80 que o GB/GBC
usou.
Em um nível um pouco mais alto, se você ler documentos de hardware para GBA e
DS, provavelmente encontrará modos proibidos e algumas menções a bugs de
hardware que geralmente estão relacionados entre si e são o mais próximo que você
conseguirá de ver algo como silício errata.

5.5.2 Especificações de montagem do GBA

A seção a seguir contém detalhes sobre o hardware do GBA em si, coisas importantes que você deve
saber e algumas técnicas básicas a serem empregadas que facilitam o hacking de montagem.

Memória GBAO GBA possui várias seções de memória, embora a maioria


geralmente se preocupe com a VRAM, o OAM, a WRAM, alguns IO e o próprio
carrinho.
O carrinho em si é geralmente lido na região 08000000-09FFFFFF (32 megabytes
completos), portanto, a maioria dos ponteiros no GBA são considerados para a região
WRAM ou 08XXXXXX (a maioria das imagens ROM tem 16 megabytes ou menos, então a
seção 09 e equivalentes raramente são vistos23). No entanto, existem dois outros locais de
estado de espera também em execução para 1FFFFFF, conhecidos como WS1 e WS2 em
0A000000 e 0C000000 e, por padrão, eles são mais lentos/têm prioridade mais baixa que o
local WS0. Por padrão, a palavra-chave na frase anterior era 4000204 hexadecimal, também
conhecido como registro WAITCNT, que pode alterar isso.

23É claro que sem nenhuma troca de banco, isso geralmente significa que há 16 megabytes ou espaço
livre que pode ser usado apenas apontando para lá, o que muitos hacks fizeram. Deve-se notar que
vários dos cartões Ash compatíveis com GBA dominantes e alguns dos emuladores incorporados não
gostam tanto de arquivos maiores que 16 megabytes, embora os primeiros ainda possam lidar com eles.
Para este fim, se você puder apontar novamente e mantê-lo abaixo de 16 megabytes, faça-o e se você
tiver uma ROM de 8 megabytes, use primeiro os 8 megabytes restantes.

275
Localização Tamanho Descrição

00000000 3FFF BIOS


02000000 3FFFF WRAM
03000000 7FFF WRAM (no chip)

04000000 3FE Locais/registros de E/S

05000000 3FF Paleta RAM

06000000 17FFF VRAM


07000000 3FF Seção OAM

08000000 1FFFFFF Localização do cartucho

0A e 0C 1FFFFFF Localização dos cartuchos WS1 e WS2

0E000000 Varia Localização SRAM

Visão geral básicaNa inicialização, o binário é carregado e executado (abordado abaixo) e


executado no próprio carrinho com tudo normalmente24sendo transmitidos para a memória
conforme necessário por meio de uma combinação de chamadas DMA e SWI que efetuam uma
transferência de memória pela maneira como funcionam. Devido aos recursos um tanto baixos,
as coisas são gerenciadas de maneira bastante rígida no GBA e as coisas na memória tendem a
estar lá por um motivo.

DMAGBAtek os cobre com grande detalhe, mas existem quatro canais numerados de 0 a 3
e têm prioridade crescente (os outros ficam pausados até que os canais de maior
prioridade sejam concluídos). Cada um tem um registro de controle independente (que
pode desabilitar o canal pelo qual é responsável) e três registros somente de gravação para
controlar a fonte (DMA0 pode fazer apenas memória interna e não lerá mais que 7FFFFFF,
mas os outros também podem fazer para carrinhos), comprimento da leitura (contagem de
palavras) e destino. O registrador de controle faz mais do que apenas controlá-lo e pode ser
configurado para iniciar imediatamente, em um vblank, em um hblank (destinado ao
DMA0) e em casos especiais que dependem do canal.

Binário GBAO protocolo GBA conhecido como inicialização múltipla não será abordado aqui, pois
a maioria dos hackers não tende a lidar com ele, principalmente porque a maioria das imagens
ROM comerciais não estão nele, sem mencionar que é abordado em documentos de hardware.

O binário GBA (como no código executável real) está misturado com a própria imagem ROM,
mas é facilmente encontrado na grande maioria dos jogos. Os treinadores para imagens ROM
(sejam aqueles que os grupos de cenas colocam nos jogos ou aqueles usados para os
treinadores) tenderão a subverter isso para serem executados antes do jogo.
Depois que o BIOS é carregado e o logotipo da Nintendo é verificado, a primeira
coisa que o jogo olha é o primeiro endereço na ROM (08000000), que é o início do
cabeçalho e normalmente contém uma instrução de salto.
24Vários programadores, tanto no lado comercial quanto no homebrew, tentaram fazer coisas
na memória usando funções padrão de gravação/leitura de memória da CPU e, embora não
sejam insuportavelmente lentos, estão longe da prática sugerida.

276
Esse salto geralmente vai para o final do cabeçalho, onde as coisas começam a ser
configuradas, o que é muito útil para o programa que está por vir, mas não é exatamente o
que você está procurando. Esta parte é encontrada algumas linhas abaixo quando a leitura
resultante é apontada em seguida para um valor no intervalo 08XXXXXX e esse é o início do
binário GBA que realmente faz o jogo fazer o que deseja.
Alguns jogos como Phantasy Star Collection terão vários executáveis no jogo (após um
menu de carregamento inicial), mas isso é raro e para estes você terá que usar um
emulador como VBA-SDL-h ou no$gba debug ou executar manualmente através do
assembly em formato longo para encontrá-lo. Embora tecnicamente não seja possível
nenhum jogo comercial completo, o homebrew é uma questão diferente, no momento em
que este artigo foi escrito, foi observado copiar código executável para WRAM e operar lá
como o DS faz com seus binários. Presumivelmente, isso se deve ao fato de o carrinho GBA
ser razoavelmente rápido, ter baixa latência, ter um comando de pré-busca, o WRAM não
ser tão grande (288 kilobytes ou 256 se você usar apenas o WRAM do sistema) e o carrinho
GBA ser mapeado para a memória. Na verdade, isso é esperado por muitas ROMs que
travarão se você usar memória mais lenta, e é por isso que os carrinhos GBA mais simples
(e geralmente melhores) usam PSRAM ou NOR, em oposição aos mais baratos e fáceis de
trabalhar com memória Ash NAND. Existem alguns jogos que podem executar a estranha
função descompactada do WRAM, a inicialização múltipla pode fazer uso dela e o GBAtek
observa que muitas funções de salvamento precisam ser executadas a partir de instruções
no WRAM.

Captura de tela do desmontador do VBA mostrando como encontrar o binário A


imagem exibida abaixo mostra como é a desmontagem básica com alguns extras
para ajudá-lo. Os dados delimitados pela caixa amarela (que foi reduzida para fins de
legibilidade) são o que o desmontador faz do cabeçalho e é um bom lembrete de que
os desmontadores, por mais que possam permitir, são como janelas ASCII de editor
hexadecimal, em que qualquer o bom que eles exibem é a sorte, os bons padrões
(que não se aplicam tanto aqui) ou o usuário final orientando-o a exibir algo útil. O
processo geral em palavras é o início da ROM que abriga um salto, geralmente para o
final do cabeçalho, mas um pouco mais tarde na ROM, que é o início do binário real,
mas a maior parte do que se segue imediatamente é a configuração básica, então o A
primeira coisa a lidar com algo na região binária do GBA (ou seja, não com a
configuração do ponteiro da pilha) é onde está a essência do binário.

277
RastreamentoRastreamento é o processo de descobrir onde algo começou na ROM e
como chegou onde está, o que geralmente é apenas uma leitura de alguma forma,
mas ocasionalmente há compactação no caminho, o que significa que você terá que
encontrar onde os dados compactados entrou na memória e repita o processo com
isso.
Localizar gráficos com VBA-SDL-Hby Labmaster fornece uma ótima
introdução ao assunto e há alguns exemplos trabalhados na parte III.

O site do VBA-SDL-h e os arquivos de ajuda também incluem uma listagem, mas um


detalhamento de comandos e opções ainda é útil. Algumas ferramentas de depuração
(especialmente aquelas no DS) têm menos recursos e alguns programas como o IDA têm mais
recursos em alguns casos, mas o conjunto padrão é

ˆPontos de interrupção

ˆCorra até

ˆLer memória e registros

ˆAlterar memória e registros

ˆMemória de pesquisa

ˆMatemática (VBA-SDL-h suporta lógica booleana e matemática convencional)

ˆVariáveis

278
ˆExploração madeireira

O lado de depuração do VBA-sdl-h é uma linha de comando no ar (pressione f11 quando o


jogo estiver em execução para acessar os recursos de depuração e quando terminar, digite
um comando c e ele continuará) e muito disso é bastante óbvio, mas uma discussão rápida
sobre o que acontece é útil.
Pontos de interrupção - eles vêm em vários tipos, com interrupção na leitura de um
endereço e interrupção na gravação no endereço (e uma janela com um determinado
comprimento posteriormente, se desejar) sendo os mais úteis ao rastrear arquivos e fazer
engenharia reversa básica. A instrução de quebrar o polegar ou o braço em um
determinado endereço também está disponível e é bastante útil.
Executar até - tecnicamente outro tipo de ponto de interrupção, mas aqui você pode definir
um ponto na ROM e quando esse endereço for lido como parte de uma instrução, o jogo irá
parar. Este é geralmente um dos primeiros comandos que um emulador de depuração obterá
(certamente o emulador DS iDeaS, que não possui algumas funções que o VBA-SDL-h possui,
pode fazer isso).
Memória - a gravação na memória já foi vista algumas vezes e, ao lidar
com coisas no nível de montagem, é ainda mais útil.
Ler memória e registros. Com memória e registros tendendo para o núcleo do (observe
que isso tende a significar registros de CPU em vez de registros de IO, mas esses são
avaliados com bastante facilidade). Da mesma forma, as opções de pesquisa estão
disponíveis para hexadecimal e ASCII
Avalie a memória com booleano/matemática feita. Como já foi visto várias vezes, os valores podem
significar muitas coisas e não ser imediatamente aparentes, mas um simples pouco de lógica booleana
ou matemática irá transformá-lo em texto simples (pense na compactação onde três foram adicionados
ao valor do comprimento) e VBA- O SDL-h tem então a capacidade de fazer algumas contas básicas sobre
os resultados de uma leitura.
Variáveis/expressões são suportadas em VBA-sdl-h e não são realmente typecast (o mais
próximo que chega é qualquer coisa com $, 0x ou 0 inicial é avaliada como hexadecimal e
qualquer outra coisa como decimal) para que você possa ter um número como uma variável para
uso em matemática ou você também pode fazer com que o número seja um endereço de
memória que você precisa memorizar ou para poder ser referido com um nome melhor do que
um monte de números. Os registros da CPU também possuem abreviações convencionais de R0 a
R15, embora PC, LR e SP também estejam disponíveis.
O registro já foi visto no passado (os registros SWI são usados para ajudar com imagens
ROM compactadas), mas a ideia aqui é, em vez de parar a cada poucos segundos (se você já usou
um programa de lista de permissões ou programas de sandboxing/con rm com grandes
mudanças, é um sensação semelhante após alguns pontos de interrupção terem sido definidos)
tudo é registrado para exame posterior.

5.5.3 Especificações da montagem do DS

Assim como a seção GBA acima, esta seção contém informações sobre o hardware do DS,
modos gerais de operação e algumas técnicas que você pode usar para ajudar a tirar o
máximo proveito da montagem.

Binários DSTipos de binário


Existem três locais principais onde você encontrará binários DS.

1. Os binários e sobreposições padrão (arm9.bin, arm7.bin e overlay_????.bin


onde? é um número decimal).

279
2. Binários e sobreposições contidos em arquivos de download (utility.bin,
especialmente se encontrados em diretórios dwc)

3. Arquivos SRL (geralmente sobras de desenvolvedor/depuração).

Os binários padrão são os arquivos arm9.bin e arm7.bin que você encontrará em cada
DS ROM. As sobreposições não estão restritas ao ARM9, mas na prática, como o ARM7
é uma espécie de binário estático para jogos comerciais usados para tarefas básicas,
o ARM9 tende a ser o único processador a tê-las; na prática, geralmente há menos de
dez, mas algumas imagens ROM chegam a cerca de cem, embora algumas vão além e
ultrapassem a marca de mil.
Quanto ao que realmente são as sobreposições, há ocasiões em que você pode querer
estender a funcionalidade do seu código, mas não quer ter que ocupar um pedaço de
memória valiosa o tempo todo, apesar do jogo só precisar dela a cada 3 horas ou mais. Esta
é uma ocorrência comum em toda a computação e a maneira como o DS escolheu lidar
com isso foi olhar para trás no tempo, para sobreposições que equivalem a ter pequenos
fragmentos de código que você pode carregar em um determinado local de memória e
depois executar antes de liberá-los e trocá-los por outro. fragmento. É bem possível ter
sobreposições com diferentes locais de execução pretendidos e ter múltiplas sobreposições
executadas ao mesmo tempo. A maioria dos visualizadores de cabeçalho, como o NDSTS,
dirão onde o ARM9 é encontrado na ROM, localizado na RAM (pode variar entre os jogos) e
tem o ponto inicial de execução e, embora você mesmo possa ler os dados, talvez seja
necessário ir para um programa como o Crystaltile2 para obter informações sobre as
sobreposições.

Memória DSO DS evita mapear algumas coisas para o barramento de memória principal com
acesso total de leitura/gravação (algumas partes do firmware, o próprio cartucho, a RAM 3D e
alguns aspectos da tela de toque, para citar alguns grandes), o que incomoda algumas coisas,
mas muito disso ainda está mapeado para o barramento de memória principal e definitivamente
ainda é um conceito útil. Da mesma forma, os dois processadores têm mapas ligeiramente
diferentes, embora haja muita sobreposição.

280
ARM9 (início-fim) tamanho Descrição

00000000-0AFFFFFF - Mapeamento total de memória*

* Além do BIOS ARM9 em FFFF0000 para 32 KB.


00000000 32 KB Instrução TCM
01?????? 32 KB TCM (memória fortemente acoplada)

GBAtek no TCM.

02000000-2400000 4 MB Seção principal do aríete

03000000 WRAM compartilhada

04000000 ARM9 IO

05000000 Paletas

06000000 RAM de vídeo (VRAM)

06000000h 512kb VRAM - BG para Motor A

06200000h 128kb VRAM - BG para Motor B

06400000h 256 KB VRAM - OBJ para Motor A

06600000h 128kb VRAM - OBJ para Motor B

07000000 OAM
GBAtek tem mais informações sobre algumas peculiaridades do VRAM (consulte LCDC)

08000000-09FFFFFF 32MB ROM GBA (sem espelhos no modo DS)

0A000000 GBA economiza RAM

ARM7 tamanho Descrição

00000000h ARM7-BIOS (16 KB)

02000000h 4 MB Memória principal (compartilhada com DS)

03000000h 0-32 KB WRAM compartilhada (0,16 ou 32)

03800000h ARM7-WRAM (64 KB)

04000000h E/S ARM7

06000000h 256 mil no máximo VRAM alocada como RAM de trabalho para ARM7()

08000000-09FFFFFF 32MB ROM de slot GBA

0A000000h 64 Memória RAM para GBA

Em WRAM compartilhadoO DS permite que uma pequena seção de memória RAM


seja compartilhada/dividida entre o ARM9 e o ARM7 e é espelhada repetidamente,
embora neste caso 37F8000 hex seja o interessante que permite (e alguns programas
foram vistos usando) um único Bloco de 96 kilobytes para o ARM7 como tem

281
WRAM logo depois. WRAMCNT controla a alocação, embora apenas o ARM9
possa fazer algo a respeito.

MTCÀ primeira vista, a maioria das pessoas presumiria que o TCM é um tipo de cache
de memória da CPU e, embora possa ser usado como tal na prática, é um pequeno bloco de
memória que pode continuar a operar durante a transferência DMA (assumindo que tudo o
que precisa é dentro dele) embora o DMA não possa acessá-lo. GBAtek tem mais.

Seção DS IO04000000 para o IO doméstico ARM9 e ARM7 para o DS, que inclui valores
de entrada do controlador, DMA, manipulação de tela, som, bem como os locais usados
para o coprocessador/funções matemáticas (uma função de divisão assinada de 32 ou 64
bits com clock de cerca de 18 clocks para todos os 32 bits ou 34 clocks, caso contrário,
embora tenha um ag finalizado e uma função de raiz quadrada de 64 bits com duração de
13 clocks com uma saída de 32 bits).
GBAtek naturalmente tem uma lista completa e cobre seu conteúdo e uso nas
seções relevantes e muito disso já foi abordado quando os gráficos e o som
foram abordados.

Sobre o uso de memória DSCom a maioria dos arquivos DS usando ponteiros de nível de
arquivo, pode haver a impressão de que você receberá tanta memória quanto os ponteiros
permitirem e, de fato, muitos jogos serão, dentro do razoável, capazes de gerenciá-la a ponto de
você ter mais probabilidade de ter problemas com a tela. posicionamento. Alguns jogos, no
entanto, carregam, digamos, todo o script ou arquivo na RAM e usam-no a partir daí, o que
significa que você pode limitar seu texto (ou, mais provavelmente, se for um jogo japonês, fazer
uma conversão de codificação de texto de 8 bits), codificar em uma capacidade de streaming ou
tente algo mais exótico como tentar guardar coisas no carrinho GBA ou abusar do
ponteiros de nível de arquivo para apontar para algum lugar na RAM e injetá-lo lá de alguma forma
(lembre-se que os valores são provavelmente calculados a partir de ponteiros no arquivo para orientar
as coisas quando for encontrado na RAM, para que você possa fazer algo funcionar lá usando um
número muito maior do que o esperado) .
VRAM, por outro lado, você frequentemente encontrará problemas ao manipular e
os desenvolvedores muitas vezes terão levado isso ao limite aqui.

No acesso ao carrinhoO acesso ao carrinho é controlado através de IO (geralmente o


comando B7 para 40001A8) e isso é bom de se observar, pois os jogos não são necessariamente
restritos a uma única função de leitura (na verdade, o formato de vídeo Bink das ferramentas de
jogo Rad possui a capacidade de lidar com arquivos lê na biblioteca no padrão de vendas do
formato de vídeo Bink), portanto, assistir a uma única função pode não render o que você deseja.
Dito isto, não é de forma alguma uma má ideia assistir a uma única função de leitura se você
encontrar um por um tempo para controlar as coisas e, devido ao sistema
a natureza das funções
de arquivos, muitas vezes pode se resumir a um pequeno grupo de
do DS que tentam descobrir dicas suficientes para encontrar a seção fornecida em
a própria ROM (pense no SDAT, pode haver uma trilha dentro de um SSEQ que está
dentro de uma seção que terá um ponto para essa seção como parte do SDAT
arquivo que terá um ponteiro na seção FAT da ROM do DS, que terá um
ponteiro listado no cabeçalho).

282
marcação ASM crystaltile2/no$gba, também conhecida como NEFA Nintendo desenvolveu uma
espécie de formato de marcação para seus depuradores usarem, para o qual no$gba (na época o
principal emulador de nível de depuração para o DS) e, eventualmente, crystaltile2 ganharam
suporte. no$gba também suporta um formato chamado sym que às vezes parece quase uma
extensão do nef.
O formato permite atribuir nomes a locais de memória (sejam variáveis, nomes
para IO ou locais de funções/loops), declarar seções como dados (8,16 ou 32 bits por
entrada para um determinado número de bytes), declarar seções ser apenas código
no modo THUMB ou ARM e escrever comentários e similares a um ambiente de
montagem de desenvolvimento, pois embora a montagem seja sobre ir direto ao
básico, é trivial e não se preocupa com a velocidade resultante de um programa para
ter um bom nome para um local de memória definido durante a programação,
utilizado na programação e substituído no momento da montagem.

SRL/baixar reproduçãoOs arquivos SRL são binários gerados por ferramentas de depuração. Na
maioria das vezes, se eles são vistos em imagens ROM, geralmente são deixados extras pelo
desenvolvedor, às vezes, embora estejam lá como ou em componentes de download como o
binário principal. ROMs de download podem usar, e frequentemente usam, um binário DS de
estilo regular (geralmente chamado de utility.bin), observe que eles geralmente usam muita
compactação e quase tudo em um arquivo utility.bin será compactado.

Compressão bináriaIsso foi mencionado quando a compactação foi abordada, mas deve-se notar
que os binários e sobreposições do DS podem ser compactados, alguns grupos de cenas até os
compactaram se a ROM original não os tivesse compactado. O método de compactação padrão
usado em binários DS é um tipo de compactação LZ, às vezes conhecido como BLZ (LZ invertido)
ou, mais frequentemente, compactação binária DS. Ferramentas como o crystaltile2 lidam com a
descompressão (embora com o crystaltile2 você seja aconselhado a copiar o arquivo
normalmente e descompactar com uma das seguintes ferramentas se você planeja reinserí-lo, o
crystaltile2 também foi visto dizendo que há compressão onde não há nenhuma) assim como
ferramentas como a compressão do Cue

283
ferramentas e DSdemp. Da mesma forma, o binário precisa ser descompactado para ser executado, para
que você possa sempre retirá-lo da RAM, o que na verdade era algo que muitos faziam antes do formato
ter ferramentas criadas para ele.
Nenhuma criptografia binária foi observada, embora alguns às vezes chamem a
compactação binária de um tipo de criptografia e a ofuscação seja vista em muitas
ocasiões. Da mesma forma, existem algumas linguagens de script disponíveis para
programadores de DS, portanto pode haver alguma compilação just in time e coisas
semelhantes.

5.5.4 O GBA e o DS comparados


A seção a seguir irá comparar e contrastar o GBA e o DS, bem como elaborar mais
detalhadamente as funções de cada um.
O GBA, ao contrário do antecessor GB/GBC, não possui tabelas de seno no nível do BIOS
(lembre-se que o seno pode ser usado para gerar valores de cosseno e tangente), mas o DS ARM7
possui, mesmo que os desenvolvedores ainda tendam a implementar tabelas ou coisas em nível
de recurso , como SWI 1A.
Além da velocidade, as diferenças entre os processadores também são mínimas, pois o
ARM9 (ARMv5) possui uma instrução para contar zeros à esquerda, outro código de
ramificação e a capacidade de definir um ponto de interrupção; os diferentes
processadores têm acesso a um BIOS diferente (e, portanto, a alguns comandos diferentes)
e a coisas diferentes (E/S e hardware) dentro do sistema. Dito isto, embora o DS tenha dois
processadores, como mencionado algumas vezes, o ARM9 é o que mais faz isso para fins de
jogos comerciais (homebrew é um assunto diferente e há vários exemplos de coisas que
usam extensivamente o ARM7) e o ARM7 pode, em sua maior parte, ser considerado um
sistema de IO e/ou funções pré-fabricadas com potência ligeiramente superior. O aumento
de velocidade resultou em um maior uso de compressão, mas a maior parte dela é
bastante padrão e com um sistema de arquivos não é difícil de trabalhar.

Em relação às funções SWI/BIOS, a maioria das funções de som do GBA


desapareceram no DS e algumas têm mapeamentos diferentes, mas de modo geral
são iguais.
IO é praticamente o mesmo, exceto pelos botões extras, tela sensível ao toque e relógio em
tempo real (que era um recurso opcional no carrinho no GBA), mas a mudança real é onde o BIOS
do GBA funciona para muitas matemáticas, o DS tem um coprocessador matemático de tipos.

Aparentemente, o DS tem muito mais memória principal do que o GBA (288 KBytes
para o GBA e pouco mais de 4 megabytes no momento em que tudo estiver dito e feito
para o DS), mas devido ao carrinho não estar mapeado na memória, isso é não é um salto
tão grande quanto pode parecer quando se trata de realmente executar as coisas, já que o
binário ARM9 precisa aparecer na memória e na maioria das vezes os arquivos terão que
ser copiados do carrinho em vez de acessados diretamente como era no GBA . O acesso ao
carrinho do DS também é um pouco mais lento do que o GBA e, embora alguns jogos
tenham piorado no que diz respeito ao uso diário, é mais do que viável.

As interrupções são basicamente as mesmas, exceto por alguns extras no DS para lidar
com o hardware mais recente, no entanto, elas são restritas pelo processador com o SPI
(usado para salvamentos do DS e funções de bônus no cartão, como o pokewalker para
alguns dos jogos Pokémon posteriores) e wi sendo cuidado pelo ARM7.

284
O DMA é praticamente o mesmo, embora ambos os processadores possam entrar
nele, duplicando efetivamente os canais DMA. O ARM7 é praticamente igual ao GBA,
mas o ARM9 é expandido e tem mais alguns modos para lidar com novas fontes de
dados e trabalhar com o 3D, além de perder algumas das restrições, agora tem acesso
total à memória para todos os canais .
VRAM e gráficos. Mesmo com duas telas levadas em consideração, o DS tem um
pouco mais de VRAM do que o GBA, embora ainda não seja suficiente para que você
nunca acabe / as seções serão redundantes, por mais que, assim como a RAM geral
do sistema, a diferença não seja aparente como streaming diretamente de outras
partes da memória é bem possível; melhor ainda, além da imagem final renderizada
do mecanismo 3D, nada realmente afeta a memória VRAM 2D que não esteja
relacionada aos gráficos. Os diferentes motores do DS não são iguais e pode levar um
pouco de tempo para descobrir, sem falar da interação entre eles, mas na maior parte
eles são bastante lógicos.
O mecanismo 3D que era novo no DS não é, em sua maior parte, mapeado/legível na
memória, embora os registros para controlar grande parte dele sejam visíveis na memória
RAM de um emulador, mesmo que sejam gravados apenas no hardware original; as
funções de renderização e geometria recebem efetivamente áreas de memória separadas
e, assim como outras partes do sistema, o 3d é um tanto orientado por IO. É bastante fraco
no que diz respeito ao hardware 3D (como uma prova de que, ao contrário da maioria dos
motores 3D, as operações de ponto fixo estão na ordem do dia), levando a algumas
contagens de pré-cálculos e truques por parte do desenvolvedor para obter o máximo que
possível, embora vários níveis de texturização, iluminação, neblina e sombras estejam
disponíveis.

5.5.5 Nos controles


Pode muito bem chegar um momento em que você deseja alterar os controles de um jogo e as
pessoas normalmente abordam isso a partir de três direções principais

1. Ativador de cheat/miss

2. Ajustes de memória

3. Edição do jogo

O ativador é o método preferido da maioria dos criadores de cheats (embora tome cuidado para não
confundi-lo com alguns ativadores de botão integrados que um mecanismo de cheat pode oferecer a
você), com um ótimo exemplo sendo a falha do Trauma Center para recuperar a saúde; aqui, certos
pontos do jogo exigiam que o paciente estivesse com a saúde mais baixa para desencadear um evento
adicional, de modo que o truque de saúde infinita tinha que se tornar uma saúde renovada quando uma
falha acontecia.
Os ajustes de memória são provavelmente os mais comuns e funcionam porque o
estado dos botões do GBA e do DS são mapeados para a memória e, portanto, podem ser
acessados; na prática, embora muitos jogos copiem esse valor e operem com base nele, o
que tem a vantagem adicional de diminuir os efeitos de um botão que sofre falha de salto
(a maioria dos botões são apenas interruptores e podem exibir abertura e fechamento
várias vezes ao longo de um toque; se você já teve um mouse começando a clicar duas
vezes depois de ser usado por um tempo, provavelmente foi um exemplo disso).
O GBA e o DS em 4000130 hexadecimais para 16 bits possuem os botões GBA padrão
(sem X e Y) para ambos os consoles.

285
O DS tem 16 bits adicionais em 4000136 hexadecimais para X, Y, tela fechada, depuração e se
a tela sensível ao toque está sendo pressionada (nenhum dado de posição para isso, pois isso é
abordado em outro lugar).
Fica um pouco mais complexo porque há interrupções lá) com um bit para
cada um dos vários botões.
A edição de jogos é o que a maioria pensa quando ouvem o termo pela primeira vez e
aqui haverá uma interrupção ou conjunto de verificação para ler a memória de controle
(seja a seção mapeada ou a versão copiada) e agir de acordo. Aqui a funcionalidade do jogo
que faz algo semelhante será reformulada. Deve-se notar que se um jogo tiver a opção de
remapear controles, mesmo entre uma pequena seleção de mapas pré-fabricados, então
talvez seja melhor observar o que acontece com essa abstração.

Tela sensível ao toque do DSO DS possui tela sensível ao toque além dos botões. Vários
hacks foram feitos, mas como a Nintendo pressionou bastante a tela sensível ao toque para
os desenvolvedores (suas ofertas originais ainda mais), alguns jogos acabaram com
controles de tela sensível ao toque, embora os próprios jogos fossem indiscutivelmente
mais adequados para controles de botão. Entre no hacking de ROM e um monte de jogos
tiveram seus controles de tela de toque remapeados para botões, sendo dois dos mais
notáveis os da série Zelda e Starfox, o guia Crackerscrap.com para tela de toque para
controles de hacking tem um bom exemplo trabalhado de vários métodos para isso. Deve-
se notar também que a tela sensível ao toque do DS tinha algo parecido com um botão
convencional para simplesmente dizer que a tela estava sendo pressionada, além de todas
as opções ordenadas pelo movimento real.
Olhando para trás, para o editor de nível na seção de edição de nível N +, onde
020E0840 era um local da caixa de seleção acionado pela tela de toque, poderia ter sido
feito para selecioná-lo como o destino pretendido de um hack do controlador.

Periféricos extrasOs carrinhos GBA e DS possuem opções GPIO (IO de uso geral)
integradas que foram usadas em vários pontos para fazer várias coisas. No DS, esse
era principalmente o slot GBA usado para rumble, o game pad taito e o guitar grip
para guitar hero. Na verdade, os cheats feitos para permitir o uso de botões em vez
do punho da guitarra viram a seção de memória onde os estados dos botões do pad
da guitarra foram copiados/debounceados para serem manipulados.
Outros hacks aqui incluíram suporte para o controlador de remo Taito
(originalmente planejado para a versão japonesa do Arkanoid) para outros jogos
como Mario Kart DS.

5.5.6 Enganchar
Algumas discussões adicionais estão disponíveis na seção a seguir (consulte edição de
montagem destrutiva versus não destrutiva). No entanto, mesmo que você consiga
entender o código desmontado bem o suficiente para recriar o código-fonte original, no
que diz respeito a muitos hackers, isso é apenas metade da batalha, pois você
provavelmente também desejará editar e executar o código. O processo de interromper a
ROM e alterar o que ela faz/executar seu próprio código exige que você primeiro chegue a
um ponto onde possa separá-la do código original ou, para usar o termo apropriado,
conectar o código. Existem três classes principais deste

1. Edição de instruções

2. Subvertendo funções

286
3. Engate externo

A edição de instruções foi mencionada na criação de cheats, onde se você encontrasse a


instrução que remove uma vida e fizesse um NOP ou alterasse para um acréscimo ou algo
assim, seria isso. Tende a ser muito complexo fazer isso para qualquer coisa que não seja
um hack básico, a menos que você vá para outro lugar, uma prática que geralmente é
reservada para subverter funções.
O caso clássico de subversão de funções seria no caso de adicionar uma fonte de
largura variável a um jogo e onde o jogo normalmente calcularia o que precisa fazer. Você
altera o código de manipulação de fonte padrão do jogo para sua função que você enterrou
em outro lugar.
Hooking externo é provavelmente o único método que realmente justifica o termo hooking e
tem mais em comum com coisas como dispositivos de trapaça. No DS, pelo menos, existe o
ARM7, que tem comparativamente pouca funcionalidade em jogos comerciais, mas acesso mais
ou menos total à memória, então aqui você pode definir uma interrupção para rodar em algum
momento arbitrário e fazer o que precisa ser feito. Coisas semelhantes foram feitas para os
patches genéricos de reinicialização suave e modo de suspensão no GBA, que definem
interrupções para execução se uma determinada combinação de botões for pressionada.
Tutorial sobre como conectar jogos de DS usando o ARM7

5.5.7 Carrinho GBA como memória extra para hacks de DS

No que diz respeito ao hacking geral de ROM, isso ainda é em grande parte teórico, mas
pergunte a qualquer hacker de ROM se ele gostaria que o sistema tivesse 32 megabytes
extras de memória com baixa latência, alta velocidade e endereçável diretamente na
memória, a resposta provavelmente será sim, mas isso nunca vai acontecer. O DS e DS lite,
entretanto, apresentam o slot GBA que tem 32 megabytes e todos os itens acima, embora
alguns jogos selecionados usem a seção de cabeçalho e talvez a seção de salvamento para
ganhar extras, o homebrew pode usá-lo e o navegador da web também tentará usá-lo
(nestes dois últimos casos, na verdade, é leitura/gravação), ainda deixa uma grande
quantidade de espaço disponível. Aqui, o ponteiro na RAM que inicia 02 poderia, em teoria,
ser alterado para iniciar 08 (ou 09 para os 16 megabytes superiores) e como as restrições
de DMA foram suspensas no DS, qualquer coisa que pudesse ter que ir da seção de
memória 02XXXXXX para outro lugar não deveria ficar perturbado.

5.6 Discussão em assembleia não específica.


A seção a seguir cobre vários assuntos que geralmente são de grande interesse para muitos
daqueles que trabalham com montagem de hackers, mas que não necessariamente se encaixam
em outras áreas, bem como alguns conceitos e técnicas.

5.6.1 Exemplo de mod de idioma


O jogo Advance Wars Days of Ruin/Dark Con ict teve o idioma japonês bloqueado
apesar de estar presente no jogo. Isso não seria tão ruim, mas nunca foi lançado no
Japão no DS (apareceu no 3ds em formato para download no final de 2013). No
entanto, descobriu-se que ao manter parte da RAM com um cheat, os arquivos em
japonês seriam usados. Os jogos podem usar uma variedade de métodos aqui, mas
neste caso ele refletiu um pouco o método de seleção de firmware e vale a pena
analisar mais detalhadamente. O seguinte é baseado neste thread GBAtemp, usa um
cheat do banco de dados de cheats GBAtemp e em

287
de muitas maneiras funciona mais como um tutorial sobre como portar um cheat do que
qualquer coisa relacionada ao idioma. Este conceito de espelho de firmware é visto muito em
jogos e é útil para aqueles jogos que são extraídos de firmware, mas você não pode alterar
(alguns emuladores) ou não deseja alterar o tempo todo, embora aqui ele realmente desbloqueie
funcionalidades ocultas.

22168F8C000000?? está o código da fraude onde está o ?? parte é de 00 a 05


para selecionar o idioma desejado. Neste caso corresponde à ordem do firmware
(japonês, inglês, francês, alemão, italiano e espanhol).
O 2 no início significa fazer uma gravação de 8 bits e 2168F8C é provavelmente melhor escrito como
02168F8C, o que significa 168F8C hexadecimal na seção principal da memória RAM.
Agora, o cheat provavelmente funciona escrevendo constantemente o valor naquele
ponto na memória RAM, algo que pode ser inútil após a inicialização do jogo.
Nenhuma das seções está no binário ou é uma sobreposição para este jogo (é um pouco
antes da sobreposição mais baixa na memória RAM) e definir o DS para japonês não resulta no
japonês como idioma do jogo (é necessário esse truque para obtê-lo). Isso significa que há algo
estranho acontecendo em algum lugar.
Na desmontagem a localização é mencionada diversas vezes por volta de 020E31E0,
sendo esta a primeira a mencioná-la. Executando o jogo no iDeaS e configurando uma
opção de execução, ele aparece pela primeira vez logo após a tela de abertura do título/
desenvolvedor.
Aqui a instrução ARM9 obtida de ndsdis
:020E31E0 E59F0004 ldr r0,[r15, #+0x4] ;r15+0x4=*(020e31ec)=#35032972(0x02168f8c)
Crystaltile2 também pode fazer isso

288
Despojado das partes mais relevantes
ldr r0, 0x02168f8c
Agora, existem algumas escolas de pensamento aqui
Volte e considere o que levou as coisas a este estágio (parece haver vários
ramos para 020E31E0)
Vá em frente e veja o que acontece.
Neste caso, avançar é provavelmente mais interessante e provavelmente necessário,
pois pode muito bem definir ponteiros para as seções de texto e o fato de ter que haver um
truque para selecionar o idioma em primeiro lugar significa que provavelmente é melhor
avançar neste caso. Aconteceu, como esperado, que o valor foi verificado logo no início,
então o jogo foi reiniciado e então executado por uma fração de segundo antes de ser
pausado. 020E31E0 foi selecionado (o comando go o levará até lá) e run to cursor foi usado
para chegar lá.

A partir daí, o rastreamento no comando (f8) foi usado para avançar as instruções, uma
de cada vez.
Resumindo, sem um cheat ele vê 01 lá e mais ou menos salta imediatamente
para outra área (ele verifica francês e espanhol também) e com um cheat 00
aparece antes de sair em uma tangente massiva terminando carregando a versão
em japonês .
A coisa óbvia a fazer é alterar a carga dessa seção de memória (que

289
contém 01 no caso do inglês) para retornar 00 em vez de 01. Como o valor é conhecido, significa
que ldr pode ser substituído por um mov ou pela instrução completa, conforme arm-eabi
desejará.
movimento r0, #0x00
Isso se reúne como
0000A0E3 (ele será responsável pelo endianness, mas muitos emuladores e leituras de
desmontagem o tornarão mais legível por humanos, como de fato você pode ver na imagem de
depuração do iDeaS
Pelos dados anteriores, sabemos que este é o ARM9 e que ele carrega 4000
hexadecimais na ROM e o Crystaltile2 diz que está descompactado.
0E31E0 era o local no binário, o que significa que 0E71E0 é o local na ROM. Se ele
estivesse compactado ou tivesse que ser feito muito trabalho então seria apenas uma
questão de extrair o arquivo (descompactá-lo se necessário) antes de injetá-lo de volta
como é feito com qualquer outro arquivo.

É claro que existem várias maneiras pelas quais o jogo poderia ter sido alterado
para alcançar o mesmo efeito e, mesmo que tenha sido uma única mudança de
instrução no final, pode ter havido métodos melhores no que diz respeito à otimização
do jogo.

5.6.2 Não código em ASM


Se você deseja pesquisar um termo, geralmente conhecido como incbin (Inc.entrarcaixa
ariano). Os binários e sobreposições do DS, especialmente em jogos sem muitos outros
arquivos, podem conter código que não é executável, incluindo gráficos, texto, fontes,
dados de nível e muito mais. Extrair esse código raramente é um problema; na verdade, se
ele for compactado, é quase certo que seja compactado com a compactação binária
específica, compactado como parte de todo o binário/sobreposição ou algo igualmente
óbvio. No entanto, recuperá-lo parcialmente pode ser mais desafiador. Existem várias
razões para isto, sendo a mais importante de todas o facto de o

290
O binário provavelmente foi montado até o nível de instrução para lidar com o layout tal
como existe na ROM original; mesmo que seja algo básico como texto, seus ponteiros para
cada linha provavelmente agora são endereços de memória, em oposição a alguns dos
métodos mais simples que o resto do DS utiliza.
Isso também não se limita a nenhum console e, embora os programadores sejam
incentivados a manter seus dados e código executável separados, como foi abordado em
outro lugar, e deve ser mantido em mente sempre que hackear, os programadores
também são pessoas e não são estranhos ao rápido e um método fácil quando isso
acontecer.

5.6.3 Edição de montagem destrutiva versus não destrutiva


No sentido mais simples, a maioria dos hacks de montagem são de alguma forma destrutivos,
pois editam a ROM original, mas essa não é uma distinção útil, por isso não é feita com
frequência e, se for, geralmente é usada quando se lida com sistemas seguros que verificam
binários durante o tempo de execução .
Em um mundo ideal, você seria capaz de adicionar sua função ao final do binário e fazê-
la funcionar após uma ramificação, mas o mundo não é ideal e mesmo que fosse, se você
estivesse substituindo uma função ou editando apenas alguns opcodes pode fazer menos
sentido fazer isso, então, para esse fim, temos edição destrutiva de montagem, onde as
coisas são substituídas da ROM original. O método bruto é sobrescrever e aceitar as
consequências que muitos fizeram para testar as coisas sem nenhum efeito prejudicial e
até mesmo usadas em hacks de produção, mas além disso, os binários do DS podem conter
todos os tipos de espaço potencialmente viável, como aqueles em wi e outras mensagens
de erro; supondo que você tenha a versão descompactada, faça uma pesquisa de string por
dados ASCII ou unicode e muitas vezes você acabará com um grande número de bytes
entregues às mensagens de erro que lembram que são carregadas o tempo todo e mesmo
se você não quiser apontar novamente os valores de texto com mensagens de erro
raramente aparecem, portanto pode ser um local seguro para ramificar e injetar algum
código ou usar para cálculos/valores.
Se você não estiver preparado para isso, embora exista a rota adequada de ramificação,
extensão binária e otimização, no entanto, no DS, uma vez que você adiciona sobreposições
binárias e outros aspectos do mapeamento de memória, isso pode ficar muito complicado, pois a
memória na maioria dos jogos de DS é gerenciado agressivamente tanto pelo design quanto
porque tem que ser (4 megabytes mais ou menos um pouco para TCM e extras para vídeo e
outros podem fazer coisas incríveis, mas não é suficiente para sustentar um estilo de codificação
um pouco mais desleixado que não se preocupa com a memória vazamentos e liberação de
informações não utilizadas).

Preenchimento DEADBEEF e localização de memória livre Uma técnica que


bastante comum fora do hacking do DS, a ideia é você sobrecarrega a RAM (ou salva
le em algumas ocasiões) com uma série de valores que provavelmente não aparecerão no
código cotidiano e DEADBEEF é hexadecimal bastante válido, por isso é frequentemente escolhido
(alguns computadores mais antigos até inicializaram sua RAM para ele e outras máquinas usam
jogos de palavras semelhantes para várias coisas) . Depois de executar a ROM pelo tempo que
precisar de algo com DEADBEEF na RAM, é possível que seja um jogo justo colocar algo nela.

Provavelmente não será tão difícil fazer o seu próprio (você está fazendo algo executar
uma tarefa simples uma vez no início da sequência de inicialização), mas o DSATM 4.3.4

291
deve ter a opção de adicioná-lo (ele foi retirado de versões posteriores do
programa, que você pode obter no mesmo link).
Esta técnica é mais útil para código que precisa ser executado uma vez e mais cedo,
pois há todos os tipos de condições de borda que podem ter que ser consideradas, mas
com a falta geral de gerenciamento de memória em tempo de execução fora do que foi
programado no jogo, espere coisas que causem problemas no longo prazo.
Há também uma versão modificada do desmume que tentará rastrear a memória à medida
que ela é usada e relatará quais áreas não foram usadas em determinados pontos.
Alguns jogos foram vistos inicializando/carregando a RAM e possivelmente
esperando que certas coisas sejam assim, o que pode ser quebrado se a RAM agora
indicar DEADBEEF. Problemas relacionados foram observados ao cortar ROMs GBA e
DS até os últimos 00, o que poderia muito bem ser esperado como o fim do token de
arquivo ou algo semelhante.
Nunca foi observado que nenhum jogo GBA ou DS faça isso, mas a leitura de RAM não inicializada é
considerada uma maneira de qualidade razoavelmente alta de obter números aleatórios para usar como
semente para alguma criptografia ou algo assim, no entanto, tal coisa é tecnicamente possível. Com o
hardware sendo consertado, provavelmente existem métodos melhores para usar o hardware de som,
sem mencionar que a maioria dos jogos provavelmente não precisará de números aleatórios de grau de
segurança, portanto, um algoritmo pseudo-aleatório ou mesmo uma tabela de pesquisa é bastante
adequado.

5.6.4 Código polimórfico e dinâmico


Existem vários métodos disponíveis para os programadores alterarem o código e usarem o código
existente para fazer coisas usando informações coletadas em tempo de execução e isso pode causar
problemas ao hacking de montagem.

PolimórficoNormalmente, um termo que surge na discussão da programação


moderna de vírus e análise de assinaturas vale a pena ser mencionado aqui.
A idéia é que se você puder ler e escrever a localização binária na memória, poderá
alterar a forma como ele é executado em tempo de execução, mas com algumas exceções,
isso raramente é visto em jogos comerciais como GBA e DS; na verdade, a proteção
antipirataria para jogos comerciais no DS geralmente gira em torno da verificação de que o
binário não foi alterado, o que impede que esse método seja tão útil (quaisquer possíveis
aumentos de velocidade e economia de memória geralmente são negados pelas
verificações ou a necessidade de contorná-las). No lado ip, embora se possa dizer que
algumas das linguagens interpretadas e emuladores que usam técnicas como compilação
just in time e recompilação dinâmica usam isso, embora isso geralmente se transforme em
um debate semântico.
Um exemplo básico disso sendo usado em um hack de ROM poderia ser algo como
fazer o hardpatch de um cheat na ROM e permitir que um treinador o altere antes de você
executar a ROM usando um menu. Digamos que você encontrou a localização na memória
das vidas e agora encontrou a instrução que as remove e, como foi visto, é possível que os
trapaceiros muitas vezes corrijam o binário ou as sobreposições na memória com a carga
útil sendo uma instrução alterada. O verdadeiro código polimórfico faria isso várias vezes
em tempo de execução e continuaria adaptando o código, provavelmente de acordo com
um grupo definido de padrões/técnicas, mas não necessariamente25.

25Outro item da lista de coisas consideradas fora do escopo deste documento seriam
algoritmos evolutivos e programação evolutiva, onde grupos de algoritmos são coletados e
ajustados ligeiramente de maneira aleatória antes de serem testados e o melhor deles sendo

292
No passado, alguns hackers trocaram partes do código do jogo real,
pularam para ele e executaram antes de trocar a parte alterada de volta pelo
código original e pular para onde as coisas precisam estar e outros
compactaram o código que vem depois seu código e o expandiu de volta
após a execução do código, excluindo o código no processo e permitindo que
o jogo funcionasse normalmente. Ambas são técnicas bastante avançadas e
não muito úteis se você puder encontrar alguma RAM ou alguma parte não
utilizada do binário para usar.
Embora o próprio binário possa estar protegido, outras partes da memória não
então têm sorte e coisas podem acontecer lá com um dos exemplos mais comuns
seria a paleta usada em imagens 2D; A animação 2D já foi abordada, mas surge
um método em que a paleta pode ser atualizada em tempo real para criar a
impressão de mudança de cores. Um ótimo exemplo disso são os blocos de arco-
íris em Mr Driller 2 no GBA e você pode ver a paleta sendo alterada em quase
todas as versões do VBA, desde que você esteja em um nível e se preferir um
exemplo de DS, há um pesadelo sequência bem no início do segundo jogo que
faz algo semelhante a um plano de fundo.
Indo para o futuro, embora seja uma técnica valiosa, alguns dos sistemas de proteção fazem
muito para evitar que ela funcione com consoles como o 360, até mesmo ganhando memória
criptografada, evitando assim a manipulação simples (alguns dos hacks na verdade adicionaram
uma área de memória não criptografada para permitir emuladores que usam técnicas
relacionadas para funcionar) e computadores domésticos muitas vezes agora uma técnica de
proteção de memória conhecida no Windows como ASLR (aleatorização de layout de espaço de
endereço) que randomiza o layout da memória na tentativa de evitar dados em um determinado
local; rapidamente, todos os programas do Windows são compilados para serem executados em
um determinado local de memória, mas o próprio Windows oculta e altera os comandos para o
que eles precisam ser, e é assim que vários programas funcionam ao mesmo tempo no Windows.
Por outro lado, há linguagens que são classificadas como linguagens reflexivas que possuem tais
habilidades como uma espécie de função central, mas isso novamente corre o risco de retornar
ao debate semântico.

Dinâmico (valores calculados)Pode-se dizer que a maioria dos ponteiros no DS são uma
variação deste e embora não seja estritamente um tipo de código polimórfico, está
relacionado a ele e é muito mais comum do que em virtude de ser usado em ponteiros
calculados e códigos semelhantes; é bastante comum em linguagens do tipo C, mas se você
se lembrar do cheat para portas de montagem e das instruções que adicionariam coisas a
valores posteriormente usados como locais de memória. Essas coisas também são a
razão pela qual nem sempre é aconselhável tentar alterar a localização de coisas na RAM ou
na ROM para coisas como o GBA, mesmo se você estiver disposto a realizar a tarefa quase
hercúlea de reposicionar tudo. É frequentemente visto em jogos programados
principalmente em assembly ou C simples, o que significa quase tudo mais antigo que um
PS1.
Aqui, se você souber a localização da memória de algo, a próxima coisa pode

selecionados e ajustados aleatoriamente repetidas vezes durante milhares de rodadas em um processo


que muitas vezes cria algoritmos muito mais rápidos do que os humanos podem criar. Esta área é um
tópico importante para pesquisa no momento e tem implicações generalizadas para todos os campos,
desde o design de processadores onde já está sendo usado e até mesmo o design de jogos (já temos
geração processual e um punhado de coisas usando isso de forma simbólica, mas esse é o próximo
passo). Um belo vídeo sobre o assunto pode ser visto na apresentação 28c3 intitulada Automatic
Algorithm Invention with a GPU.

293
estaremos a uma distância conhecida / fixa, então, em vez de buscar um novo
ponteiro na memória ou pior, no carrinho e incorrer em uma penalidade de
velocidade, você pode simplesmente adicionar essa distância fixa a um valor já na
memória e direcioná-lo para um novo local com este novo valor. Relacionado a isso
está a ideia de evitar ter que chamar uma função e passar vários ciclos configurando-a
(mesmo que seja uma função tão simples, tudo terá que ser empurrado, novos
valores escritos, a função saltada e concluída, valores retornados e tudo voltou antes
de retornar (embora as últimas coisas possam ser trocadas um pouco).
Os criadores de cheats muitas vezes enfrentam um problema semelhante com códigos de
ponteiro onde um jogo armazena um valor na memória, mas em vez de apenas ter um valor
simples em algum lugar escrito diretamente, ele tem um ponteiro que pode mudar e o jogo
calcula onde escrever o valor em um determinado ponto com base neste ponteiro que pode ou
não ser estático durante uma determinada execução do jogo. Se não for estático, isso impede o
método básico de alteração e verificação de cheats, bem como sempre escreve, a menos que o
ponteiro seja levado em consideração e tais coisas tenham sido vistas em áreas geralmente não
cobertas exclusivamente por cheats também.

5.6.5 Desaceleração e aceleração


Ocasionalmente, é útil desacelerar ou acelerar um jogo e há várias maneiras de fazer isso,
mas se você estiver em um emulador, basta usar os recursos integrados, pois eles serão
muito mais estáveis e fáceis de fazer do que esses hacks.

DesacelerarA desaceleração pode ser causada de várias maneiras


A forma como a maioria dos carrinhos DS e programas como o DSATM usam visa
interromper e então sobrecarregar a CPU com instruções inúteis (talvez uma quantidade
selecionável delas), o que significa que ele não pode fazer tudo o que normalmente faria e, como
resultado, tornará o jogo mais lento ( e pode muito bem travar um jogo não codificado para isso).
Comandos de parada da CPU também podem ser usados, embora isso seja ainda
mais difícil. Métodos semelhantes aos vistos para acelerar, mas feitos para
desacelerar as coisas.

AcelerandoNormalmente, isso é visto onde os jogos têm sequências de movimentos


elaboradas (ou apenas sequências de movimentos) que podem não agradar a alguém que
deseja uma repetição rápida do jogo com Pokémon e títulos semelhantes, sendo RPGs e
jogos táticos alvos comuns para tais hacks. Opções simples de velocidade no estilo
emulador não são viáveis em hardware, embora você possa tentar. Você normalmente
emprega um dos três métodos

1. Ajustes baseados em animação. Se um jogo esperar que uma animação aconteça, você o
força para o estado final mais rápido, se ele esperar que uma animação aconteça em dez
quadros, você faz com que ela aconteça em um, seja alterando a contagem de quadros ou
alterando-a para que atinja o final mais rápido (os animais vinham dois a dois, mas se
fossem quatro a quatro seria mais rápido). Funciona para animações 2D e 3D.
Esperançosamente, essas animações não são uma máscara de carregamento ou cálculo.
Você não precisa parar por aí; muitos anos atrás eu joguei Pokémon Blue, ele tinha um
pequeno dispositivo de compartilhamento de experiência que
Tirei no final porque aquilo me fazia apertar A várias vezes no final das
batalhas. Se você eliminar isso, ganhará mais velocidade/menos
aborrecimento.

294
(a) Aumente para 11. Se um jogo tiver uma configuração para velocidade de texto e tal,
então ele pode ter a opção de ir ainda mais rápido. Por exemplo, se um jogo tem
uma variável de velocidade de texto, ele pode usar essa variável para acelerar as
coisas e pode não ser um simples anúncio. Digamos então que se o valor for 90, mas
você tiver os 8 bits completos para brincar, poderá ganhar um pouco mais de
velocidade. Você também pode descobrir como isso altera a velocidade e alterá-la.

2. Loops Vblank. Provavelmente o mais fácil de atacar, mas é o que ganha mais
consequências. As atualizações de tela tendem a estar vinculadas a vblanks e isso também
é responsável por várias partes da lógica do jogo que podem acontecer. Você desativa
alguns dos loops vblank e faz com que eles aconteçam o tempo todo (ou algum evento
mais frequente) e provavelmente terá algum lixo na tela e alguns aumentos de velocidade
também. Tradicionalmente, tudo isso estava ligado à velocidade de clock de um dispositivo
que, por sua vez, ia para a tela em que ele estava, daí as conversões PAL ruins, velocidades
de clock diferentes entre regiões e até mesmo jogos antigos sendo extremamente rápidos
em máquinas modernas. Dispositivos mais novos geralmente têm um temporizador
separado, portanto, os jogos de PC funcionam tão bem em um P4 antigo quanto em um i7
com overclock, assumindo que o P4 pode produzir o número necessário de quadros para a
tela, ou mesmo o mesmo no PSP, seja ele estava com underclock ou cronometrado mais
rápido.

3. Hack completo. Se você não tem nada de bom para abusar como em 1) e 1a), você
analisa completamente o código do jogo e faz acontecer, o primeiro passo é ver se
você pode forçar algo como 1) ou 1a) a acontecer se houver é uma verificação de
limites ou limite superior estabelecido por qualquer motivo. Na verdade, a
otimização de jogos não será abordada, mas as pessoas fazem isso e isso aumenta a
velocidade, às vezes aumenta a estabilidade e aumenta a vida útil da bateria. À
medida que o tempo passa e linguagens de nível superior são usadas, há uma
quantidade cada vez maior de códigos realmente redundantes ou potencialmente
redundantes.

Alguns tentaram desabilitar o vblank/vsync ou evitar que ele esperasse para fazer
coisas lá, o que também acelera as coisas, mas muitas vezes ao custo de gráficos
corrompidos.

5.6.6 Criptografia (criptografia, somas de verificação e assinaturas)


Embora você já tenha sido avisado, este documento provavelmente arruinaria sua
capacidade de assistir filmes, programas de TV e outros que tentam retratar computadores,
esta seção traz outro aviso, pois é mais perigosa do que quase qualquer uma das outras
por isso.
Há muito tempo que não existem computadores ou mesmo a matemática para
descrevê-los, existem pessoas que desejam verificar as informações e/ou fazer com que
elas possam ser lidas apenas por aqueles a quem se destinam. Os consoles modernos que
foram projetados para serem uma espécie de dispositivo de propósito único, sem nenhuma
interação do usuário além dos parâmetros do jogo e de qualquer menu do console, fizeram
uso extensivo deles. Embora com exceção da edição salvada que é abordada na próxima
seção, isso geralmente é feito pelo próprio console (e mais tarde, esperançosamente, por
quaisquer ferramentas que você usou para desmontar e reconstruir o sistema de arquivos,
os hacks ou emuladores do sistema) .

295
Embora na prática a criptografia inclua aspectos de segurança como um todo e
também se preocupe com o tempo necessário para quebrá-los, bem como com as
implementações adequadas/eficazes dos sistemas criptográficos, ela deverá ser
considerada um tanto fora do escopo deste documento. Se você quiser ler mais, dois livros
de Bruce Schneier conhecidos como Applied Cryptography e um livro mais recente, Liars
and Outliers, são pontos de partida e materiais de referência para a maioria dos que usam
o campo.
Voltando ao tópico, existem três áreas principais de interesse.

1. Checksums/Hashes - pequenos números que são feitos usando funções matemáticas


para descrever o conteúdo de uma mensagem/arquivo.

2. Criptografia - usando funções matemáticas para evitar que aqueles que não possuem
as informações relevantes (chaves) leiam a mensagem/arquivo

3. Assinaturas - usando funções matemáticas para gerar uma soma de verificação, mas
usando uma chave para que apenas a pessoa que possui a chave possa gerar a assinatura.

Você acabou de ver alguns dos termos/jargões, mas mais devem ser descritos antes
de continuar
Mensagem - o termo usado para descrever os dados que estão sendo verificados, criptografados ou
assinados
Texto simples - um sinônimo para a mensagem Texto cifrado - um
sinônimo para a mensagem criptografada Hash - um sinônimo
para soma de verificação
Texto simples - a mensagem original não criptografada
Chave - simplesmente um número usado para fazer/como parte do processo de criptografia ou
assinatura
Chave simétrica - usando a mesma chave para codificar e decodificar. Chave assimétrica -
usar duas ou mais chaves para permitir que alguns grupos leiam e outros criptografem, mas
aquele que possui apenas uma chave não deve ser capaz de fazer as duas coisas.

Chave privada - dependendo do que você está fazendo, a chave você mantém
bloqueada
Chave pública - dependendo do que você está fazendo, a chave você dá a
quem quiser
Colisão - quando duas mensagens diferentes produzem um arquivo com a mesma assinatura/soma
de verificação
Tabela Rainbow - uma lista de todos os hashes para cada mensagem até um determinado
comprimento
Força bruta - tentar todas as chaves possíveis ou todas as alterações em um arquivo para que ele
corresponda ao original. Para um sistema moderno e bem implementado isto não é considerado viável

Buraco - o termo para quando um método de criptografia ou assinatura tem um aw que permite
que as pessoas o contornem (geralmente em um tempo menor que a força bruta)
Segurança por obscuridade - o processo de tentar garantir a segurança usando um processo
personalizado de criptografia/hashing/assinatura, que é um método que frequentemente falha
espetacularmente

296
Somas de verificação/hashesExistem dois exemplos simples disso que serão
abordados na tentativa de explicar isso.
Paridade - em suma, se você pegou o le como um todo ou uma coleção de partes é cada
número par ou ímpar.
Bytesums - se você somasse o conteúdo de cada byte, seria produzido um
número que variaria se um dos bytes que o compunha fosse alterado.
Aqui estão os requisitos para somas de verificação/hashes usados para segurança (se você
fizer hash para fins de pesquisa, alguns deles mudam de maneira bastante óbvia). Às vezes, eles
são combinados em requisitos mais amplos, mas as ideias permanecem as mesmas.

ˆCada mensagem deve produzir um hash exclusivo, ou seja, as mensagens não devem produzir
o mesmo hash

ˆCada hash deve ser igualmente provável, ou seja, cada bit deve ter uma chance de 50/50
de ser 1

ˆCada hash deve ser imprevisível, ou seja, cada pequena alteração em uma mensagem
deve produzir uma grande mudança no hash resultante

ˆCada função hash deve fazer o mesmo hash para a mesma mensagem (sem
aleatoriedade na saída)

SalgaEste é o ato de introduzir outro dado nos dados a serem hash. Nos melhores
casos, algo exclusivo para aquele dado, mas em casos menores, algo comum a todos os
hashes a serem feitos para um sistema. É usado principalmente onde bancos de dados de
senhas são mantidos; armazenar senhas brutas é arriscado, pois elas podem ser expostas
em um vazamento e se você receber uma senha, um hash dessa senha também poderá ser
usado para verificá-la (lembre-se de que cada mensagem deve produzir um hash único,
mas imprevisível). Surgiu como tabelas arco-íris, tabelas que listam hashes para cada
combinação de valores (ocasionalmente apenas palavras de dicionário ou um determinado
conjunto de caracteres) até um determinado comprimento, tornaram-se viáveis até
mesmo para uso geral no início dos anos 2000, como resultado do aumento do espaço em
disco . Ao alterar os dados que estão sendo hashados para outra coisa, você impede que as
tabelas básicas do arco-íris sejam úteis; no entanto, como elas são facilmente geradas, é
desejável um sal único/diferente para cada hash de uma senha.

CriptografiaConforme mencionado, este é o processo pelo qual os dados ou, para


usar a linguagem padrão, a mensagem são feitos de forma que não possam ser lidos
por alguém sem os valores-chave exigidos. No que diz respeito ao GBA e ao DS, a
criptografia não é de uso comum, mas outros consoles a utilizam e nos jogos de PC e
outros programas a utilizam extensivamente, por isso vale a pena conhecê-la.

Existem duas classes principais de criptografia conhecidas como

ˆChave Pública/Assimétrica - na forma básica uma chave é usada para criptografar e


outro que está matematicamente relacionado é usado para descriptografar.

ˆChave Privada/Simétrica - na forma básica a mesma chave é usada para codificar


e decodificar.

Existem maneiras de confundir os limites e os termos nem sempre coincidem com precisão
e também é possível combinar os dois; normalmente seu banco usará público

297
key para permitir que você envie uma chave para eles e, em seguida, faça a chave privada
para o restante da transação e você pode aninhar criptografias, se desejar. A chave privada/
simétrica é em muitos aspectos inferior, mas como é menos dispendiosa em termos
computacionais e, quando bem feita, funciona bem, ela permanece desde a invenção da
criptografia assimétrica.

SimétricoXOR
Voltando ao exemplo do XOR binário
Mensagem
0110 1100
Chave

1110 0001
XORing os dois
1000 1101

AssimétricoA base da criptografia assimétrica é a ideia de funções


unidirecionais/alçapão.
Normalmente, as funções empregadas para criptografia são que é difícil fatorar
números (como resultado, técnicas de criptografia estão disponíveis para números
primos) e um problema relacionado com elipses (levando à criptografia elíptica).
Exemplos de implementações são geralmente dados como parte de um curso de
programação e são bastante extensos e farão pouco aqui, portanto não serão abordados
além do mais básico
números primos
181733 - quais são os fatores?
A resposta é 691 multiplicado por 263, mas além de ser informado ou tentar todos os
números primos possíveis (lembre-se de que não há nenhum padrão conhecido), você não
pode fazer isso e também há a chance de o número não ser um número primo, mas para
verificações básicas. como um (somente verificando cada número viável você pode dizer,
mas existem testes fracos chamados testes de primalidade que podem indicar um número
primo).
RSA é um método popular de criptografia baseado em números primos que você
pode ler no site da Berkley

Ataques básicosAlguns dos métodos que você aprenderá para encontrar texto têm suas
raízes em ataques à criptografia e, de fato, tecnicamente falando, as codificações de texto
são um tipo de cifra de substituição que é uma técnica que tem sido usada há milhares de
anos. Sendo tão conhecidos por si mesmos, esses ataques normalmente não são de grande
utilidade, mas como muitos métodos derivam de princípios básicos, vale a pena conhecê-
los.

Texto simples conhecidoA forma mais simples disso é para XOR e foi vista na criptografia de
salvamento do 3ds. Aqui, os últimos bytes do chip de salvamento, que normalmente são maiores
do que o salvamento que eles contêm, foram preenchidos com 00 e o XOR da sua senha com 00
deixa a senha como texto simples. Mesmo que não fosse 00, apenas conhecendo o texto original
(ou o suficiente de it) permite que você obtenha a chave XOR simplesmente fazendo o XOR.

298
Texto simples escolhidoNovamente, se você voltar ao XOR, se puder escolher um arquivo
com todos os 00 (isso também funciona em muitos algoritmos mais avançados em vários níveis) e
fazer com que o programa o criptografe, você terá informações valiosas sobre a chave, se não
sobre a chave em si. Se você usar um cheat de replay de ação para alterar um valor na memória e
depois deixar o jogo salvar, sem ter que descobrir como um jogo faz o hash do salvamento, você
está fazendo uma variação disso.

Recuperação de chaveIsso é mais uma questão de nível de montagem, mas na maioria


das vezes os desenvolvedores não gerenciam bem a chave e a deixam na memória ou em
um local óbvio em um determinado momento, permitindo assim extraí-la. Da mesma
forma, se você estiver lidando com um PC ou um emulador, grande parte da criptografia é
projetada apenas para frustrar as habilidades básicas ou aquelas sem muita paciência, para
que você possa observar o que acontece e descobrir as coisas aqui, se quiser.

Abuso do OracleA ideia de um oráculo é na verdade uma coisa específica dentro da


criptografia, mas em termos gerais pode ser resumida como uma caixa preta de
mecanismo desconhecido que auxilia em problemas relacionados à criptografia e se você
tiver/obtiver acesso irrestrito ao oráculo, poderá fazer algumas coisas interessantes. coisas.
O PSP viu um ataque relacionado com o programa de descriptografia de jogos que permitiu
a descriptografia de arquivos de jogos para firmwares posteriores (o PSP permitiu a
introdução de novas chaves de criptografia de jogos), vários outros hacks de estágio final
em consoles usam-no como uma mecânica central em vez de hackear coisas de forma mais
extensiva (embora em alguns casos isso possa ser visto como exploração de um bug
diferente), soluções alternativas de compactação foram feitas onde, em vez de descobrir a
forma de compactação, se você apenas esperar que ela apareça na forma descompactada...
e se você já injetou conteúdo na memória RAM e criou o salvamento (e hash) usando o
conteúdo que acabou de injetar, isso seria outro exemplo ou, alternativamente, se você
desativou a verificação de hash em um salvamento, sabendo que eventualmente refazeria o
hash corretamente para você isso seria outro.

Exemplo de texto simples conhecido e escolhidoPara obter um exemplo de por que usar uma
execução longa de 0 com XOR é uma má ideia se você deseja segurança e mais um exemplo de texto
simples conhecido
Mensagem de todos 0
0000 0000
Chave

0110 1110
XOR
0110 1110
Mensagem maior que a tecla, mas preenchida com 0
Chave 1101 1111 0000 0000

0110 1110
XOR
1011 0001 0110 1110 Texto
simples conhecido/escolhido
Então você não preencheu com 0, mas preencheu com um valor repetido de
7h (0111)
Mensagem

299
0111 1111 1101 0111 0111 0111
Chave
0101
XOR
0010 0000 0000 0010 0010 0010
Mensagem desconhecida (mas com parte conhecida ou
suspeita) XXXX XXXX XXXX 0111 0111 0111
Invertendo o XOR
0111 dá 0010
Isso significa
Para obter 0 de 0 XOR tem que ser 0
Para obter 0 de 1 XOR tem que ser 1
Para obter 1 de 1 XOR tem que ser 0
Para obter 0 de 1 XOR tem que ser 1
0101 é a chave.

AssinaturasResumindo, uma assinatura é como um hash, pois produz um número que


representa os dados assinados, mas usa criptografia (normalmente assimétrica, mas nem
sempre) para significar que apenas alguém com as chaves pode criar e/ou verificar a
assinatura. Qualquer algoritmo de criptografia pode ser transformado em uma assinatura,
embora em muitos casos você queira ler e ter certeza de que é uma idéia sábia para não
acabar como o Xbox original (versão em PDF do artigo).
Muitas vezes, embora fazer uma assinatura para um arquivo grande não seja o ideal por vários
motivos, os dois principais são a velocidade e a possibilidade de vazamento de chave, então o
em vez disso, o arquivo será hash e a lista de hashes (que, lembre-se, deverá mudar se o
arquivo mudar) será então tratada como uma mensagem que pode ser assinada; alterando a
le altera o hash resultante que torna a assinatura, que é em essência um hash,
incorreta e, portanto, as coisas podem ser tratadas adequadamente.
Uma implementação popular da lista assinada de hashes/somas de verificação é
chamada de HMAC.

Verificações e soluções alternativasHashes e assinaturas são ótimos, mas se você não


conseguir verificá-los adequadamente, eles serão inúteis. Vários consoles não conseguiram
verificá-los adequadamente ao longo dos anos, principalmente no Wii, que usava uma
função de comparação de texto e, portanto, só precisava do primeiro byte para
corresponder (uma coisa trivial para a força bruta) e no PSP antigo, que verificava um. pasta
e lançou outra se você colocar $ na frente do nome. Uma falha relacionada pode ser vista
nos ataques de DVD do Xbox 360 (a base para nas unidades de DVD apagadas no 360)
onde o disco é verificado apenas pela unidade firmware, disse unidade firmware pode
ser sobrescrito (o que não é ruim em si, pois facilita a fabricação), mas o console original
também não consegue verificá-lo corretamente.
Relacionados a isso estão três conceitos que são frequentemente usados e até mesmo usados em
consoles, embora não tanto para qualquer coisa com a qual o hacking de ROM normalmente se preocupa.

ˆLista negra - se algo for detectado como estando em uma lista negra, será pré-
ventilado de ser executado ou algo semelhante.

ˆLista de permissões - a menos que algo esteja em uma lista de permissões, será impedido de
em execução ou, pelo menos, fortemente restrito, dependendo da sua configuração.

300
Traduzido do Inglês para o Português - www.onlinedoctranslator.com

ˆHeurística/lista cinza - Aqui determinada funcionalidade é testada e se for


avisos ou limites encontrados serão implementados. Greylist é mais
comumente usada ao discutir e-mail, onde se refere à técnica de enviar uma
resposta ao e-mail de origem perguntando se você realmente enviou isso.

Os consoles geralmente colocam versões anteriores do firmware na lista negra para


impedir que coisas sejam rebaixadas e o Wii viu alguns dispositivos/discos da Datel
direcionados ao Gamecube na lista negra, pois permitiam que várias coisas fossem feitas
para permitir o homebrew do gamecube no Wii.
Listas de permissões foram vistas em consoles quando as assinaturas são quebradas (como
no PS3) ou para suporte legado onde não há a opção de atualizar o código antigo (lembre-se de
que o termo é chamado de ROM por um motivo), mas o desejo de executar o código antigo ainda
é lá. O DSi e o 3DS viram isso: todos os jogos antigos do DS foram colocados em uma lista de
permissões, mas nenhum código não oficial e todos os jogos mais recentes do DS carregavam
assinaturas adicionais.26.

5.6.7 Multiplayer e a falha na segurança online do DS da Nintendo.


Networking e tudo o que acontece em um jogo multijogador moderno está um pouco fora
do escopo disso. No entanto, o fim dos serviços de jogos online do DS (e do Wii) forneceu
um exemplo interessante de algo que tecnicamente é a edição de um binário, mas na
prática envolve muito pouca montagem.
Como o DS pelo menos fingia ser um dispositivo de computação parcialmente moderno
e ostentava TCP-IP, ele também tentou segurança ao fazer coisas online. Parte disso foi um
aperto de mão seguro feito com os servidores da Nintendo. Teoricamente, havia maneiras
pelas quais isso poderia ter sido subvertido, porém, na prática, observou-se que, ao alterar
os endereços da web codificados em binários/sobreposições encontrados em jogos de DS
de https:// para http:// (preenchendo o final do endereço recuar para fazê-lo t) seria
felizmente transmitido em texto simples. A Nintendo também poderia ter feito algumas
verificações no servidor, mas não o fez.
Com ele, e no curto período antes do desligamento, o projeto save Nintendo wi foi
capaz de observar o protocolo e fazer engenharia reversa o suficiente para que muitos
jogos ainda possam ser reproduzidos em servidores personalizados. A maioria dos jogos
não era tão extensa quanto algo como World of Warcraft, que possui bancos de dados
completos e servidores que fazem muitos cálculos além disso, mas se um hacker for capaz
de replicar a funcionalidade de seus servidores ocultos, então será uma espécie de falha na
segurança da rede. .
Falhas anteriores na segurança online geralmente vinham de pessoas capazes de executar
seu próprio código em carrinhos e versões modificadas de jogos existentes, e com isso trapacear
a ponto de os jogos quebrarem. As medidas tradicionais anti-cheat podem ter ajudado, mas em
termos de segurança geral, você deve sempre assumir que aqueles que acessam seus serviços
estão comprometidos/hostis e fazer o que puder dentro de seus próprios servidores.

5.6.8 Salvar edição


Embora os jogos possam simplesmente tirar um instantâneo de sua memória naquele momento e restaurá-la
mais tarde (na verdade, isso é tudo que os estados de salvamento são), na maioria das vezes os valores-chave

26Embora essas assinaturas não tenham sido verificadas de maneira totalmente adequada com as sobreposições
(lembre-se de que são seções de código que podem ser colocadas no lugar bem após o tempo de inicialização para
fornecer funções adicionais). Hackmii tem um bom relato dos eventos aqui.

301
que compõem o jogo naquele ponto (personagens, nomes, níveis, experiência, estados,
inventário, localização, ponto da história....) são armazenados em uma seção gravável da
memória em algum lugar usando algum formato personalizado. Seja como um tipo de
trapaça ou para fins de hacking (hacking de ROM e hacking geral27) pode ser útil editar
esses arquivos.
Descobrir como esse formato funciona geralmente envolve uma combinação de
métodos como busca por cheats (mude uma pequena coisa e veja o que mudou no formato
do arquivo), cheats reais (torna a alteração dos valores resultantes muito mais fácil), análise
simples (é certamente não tenho certeza se você ganhará alguma coisa, mas não há nada
de ruim em olhar o arquivo em um editor hexadecimal e ver se você consegue
descobrir algo com base no que você espera que esteja lá), edição de nível/estatística
(corrupção e análise lógica) e montagem (ver como ele armazena e restaura os dados do
arquivo salvo na RAM e relacionando isso com o que você sabe). Normalmente, os formatos
são bastante lógicos e isso pode funcionar a seu favor, assim como a maioria dos sistemas
de texto relativos, simplesmente aumentar o valor de um item em 1 geralmente selecionará
o próximo na lista e permitirá que você preencha a lista inteira rapidamente, possivelmente
incluindo alguns itens, locais e outros que os desenvolvedores não pretendiam ter
disponíveis para uso geral.
Além disso, os jogos frequentemente fazem algumas verificações no arquivo, tanto na forma
de uma soma de verificação básica ou talvez de algum tipo de assinatura (raramente e
frequentemente algo relativamente personalizado/fora do padrão no caso do GBA e DS) e em um
maneira semelhante a truques complexos com valores espelhados para outros locais de várias
maneiras, ponteiros usados para alterar locais, valores manipulados antes do armazenamento e
assim por diante. Encontrar a seção de checksum geralmente virá como parte da edição inicial
(lembre-se de que os checksums devem mudar até mesmo para a menor alteração nos dados que
cobrem), embora descobrir o método possa ser problemático, então, alternativamente, você pode
hackear o jogo para ignorar o checksum, pois ele tende a ser verificado apenas uma vez, logo no
início do procedimento de carregamento ou em algum momento oportuno semelhante.

Sistemas mais modernos e especialmente aqueles com componentes online (a


Microsoft é bem conhecida por banir pessoas do Xbox Live e revogar suas chaves de
salvamento caso elas manipulem seus jogos salvos e o Wii viu medidas semelhantes
em alguns casos) e em alguns casos até coisas como Pokémon terá detecção baseada
não em métodos do tipo criptografia, mas na impossibilidade; um valor pode muito
bem ser de 16 bits, mas se o jogo, nas melhores circunstâncias possíveis, só conseguir
ver o valor de uma estatística atingir os milhares (em oposição aos 65535 que um
valor de 16 bits determina) e alguém excedeu isso pode ser detectou.
Deve-se notar que alguns consoles como o Wii e o 360 fazem com que os desenvolvedores armazenem
arquivos em um formato de contêiner universal para esse console e então permitem que os desenvolvedores
coloquem seu formato personalizado nele.

Economiza em diferentes regiõesOs salvamentos são em grande parte um formato personalizado


e, embora a maioria das equipes de localização não mexam muito no código-fonte no que diz
respeito aos jogos em execução, é muito bom ter salvamentos funcionando entre diferentes
regiões. Em muitos casos você pode usar os salvamentos diretamente com qualquer região ou
versão, mas ocasionalmente pode haver problemas com os mais comuns, embora não

27Mais do que alguns hacks para muitos consoles usaram erros no manuseio de salvamentos e no
manuseio de outro conteúdo ostensivamente editável pelo usuário para iniciar e/ou os próprios
salvamentos para conter a carga útil do hack.

302
O problema tão preocupante é que um jogo japonês pode ter usado uma codificação de 16 bits e
a localização europeia ou norte-americana provavelmente usará uma de 8 bits ou simplesmente
não incluirá todos os glifos da codificação original, fazendo com que os nomes dos personagens
sejam exibidos de maneira estranha.
Mais preocupante é que os jogos salvos geralmente são bastante específicos, com locais
codificados, portanto, se o comprimento de uma variável for alterado entre as versões, cada
variável subsequente será reduzida em uma determinada quantidade e as coisas irão para o lado
e se múltiplas variáveis forem alteradas em comprimento pode ficar ainda pior; aqui pode ser
até melhor construir um editor de salvamento completo ou uma coleção de cheats em vez de
fixando o salvamento.

5.6.9 Linguagens interpretadas


Antes exclusivamente domínio do homebrew, alguns jogos comerciais foram vistos usando
linguagens de programação interpretadas, das quais a mais notável foi a série de quebra-
cabeças (neste caso, uma versão de lua) e outras vezes os jogos usaram linguagens de
script de uma forma para seu texto e operações gerais (lembre-se do exemplo de script do
Wii e do jogo mágico de Oz mencionado na edição de texto), para não falar do formato de
som do DS SSEQ sendo um tipo limitado de linguagem de script. Tentar interpretá-los (ou
seja, o código real do jogo em oposição ao próprio intérprete) como ASM não acontecerá
facilmente e, assim como usar um editor hexadecimal para tudo, não é uma ideia muito
boa, mas o mais importante é que muitos deles linguagens interpretadas são construídas
de uma forma que permite a descompilação e/ou edição simples usando a própria
linguagem. Da mesma forma, poucos jogos são programados em ASM e a maioria não terá
nenhum ou, na pior das hipóteses, apenas uma pequena fração de ASM (é uma técnica
chamada montagem em linha), portanto, ser capaz de reconhecer uma determinada função
C padrão em montagem pode tornar a engenharia reversa muito mais fácil.

5.6.10 IA de jogos, lógica de jogos e teoria de jogos


A disciplina matemática conhecida como teoria dos jogos é um assunto fascinante e
vale a pena ler (alguma cobertura básica estará aqui, mas é muito mais aprofundada),
pois informa um pouco sobre hacking de ROM devido ao fato de falar sobre a
natureza de jogos. Como uma das coisas favoritas das pessoas no hacking de ROM é
transformar o conceito original em algo bem diferente, ou mesmo remover a
capacidade de explorar certas técnicas que podem ser vistas como quebra de jogo,
então pode valer a pena conhecer os termos. usado para descrever o que foi feito (ao
fazer isso, transformo o jogo novamente em um jogo de informação perfeito).
A IA do jogo, por outro lado, segue as estatísticas e a edição de níveis, mas em geral a
ideia por trás da IA do jogo é fornecer um oponente a um jogador humano que, pelo
menos nos limites do jogo, seja relativamente desafiador, apesar de nenhum computador
ser capaz pensar no nível (e, mais importante, de maneira semelhante) dos humanos. Os
jogos em geral existem quase exclusivamente no domínio da utilização de um conjunto
limitado de regras/configurações para tentar produzir uma experiência convincente para o
jogador e isto aplica-se ainda mais aos jogos baseados em computador; pense em quanto o
hacking de ROM e a criação de cheats visam mudar a forma como as regras funcionam. Em
camadas sobre isso estão várias quantidades de psicologia, mas mesmo pequenas facetas
disso são objeto de documentos muito mais longos do que este. Para esse fim e para
mantê-lo mais aplicável ao hacking de ROM, a discussão será limitada.

303
Muitas vezes, os hackers desejam alterar as estatísticas de um jogo de cartas
colecionáveis e, muitas vezes, fazer isso torna a IA do jogo quase inútil. Para
compreender porque é útil analisar os princípios de um jogo de cartas. Optando por
um dos jogos de cartas mais simples, conhecido como Top Trumps, onde cartas com
vários itens relacionados (personagens, veículos, animais, locais e muito mais) seriam
colocadas umas contra as outras com base em uma determinada estatística e
venceriam de acordo (embora aqui as regras padrão será ejetado para criar algum
espaço para exemplos) e compará-lo vagamente (uma espécie de versão de proto-
jogo em sua maior parte) com alguns dos tipos de jogos de cartas popularizados por
nomes como Wizards of the Coast. Falando em Wizards of the Coast, se a seção a
seguir e as relacionadas lhe interessam, então eles têm um bom artigo sobre sua IA
para a versão Xbox Live Arcade de seu jogo de cartas Magic the Gathering, você pode
lê-lo aqui.
Agora o custo para jogar é zero (sem mana ou sacrifício de monstros) Não
há opção de negar uma jogada (sem interrupções ou armadilhas)
Não há persistência de uma carta (uma vez jogado, um trunfo é removido do jogo
versus o potencial para uma ameaça persistente).
Para fins deste exemplo, turnos alternados acontecerão (nenhum movimento ignorado e nenhum
vencedor permanecerá ativo)
Um jogo bastante simples, mas é preciso pensar um pouco para fazer um bom
IA.
As perguntas que precisam ser respondidas são: a IA conhece todas as cartas do baralho e
calcula a partir daí ou usa uma estimativa de probabilidade? Como o jogo compra novas cartas (7
e um novo conjunto quando terminam ou 20 e 20 para cada uma estar disponível para jogar
desde o início?), As cartas são distribuídas igualmente (sendo baseadas em itens da vida real, não
é provável mas poderia ser assim), como o jogo é jogado rodada por rodada (colocar uma carta e
ter que vencê-la ou recusar e perder uma carta aleatória)? Apenas uma estatística é mencionada
para o jogo ou todas as estatísticas estão disponíveis para a chance de perder?

A condição de vitória de uma determinada rodada é provavelmente bastante óbvia, mas o


bom jogador não desperdiçará uma carta muito superior à outra e também não desejará
desperdiçar uma carta se as outras estatísticas forem boas. Na prática, ao projetar um jogo, tais
coisas podem não ser consideradas em favor de uma abordagem mais humana por parte do
programador ou mesmo de algo muito básico; se parece que inimigos em um título FPS ruim
apenas correm em sua direção e atiram é porque eles provavelmente fazem exatamente isso.
Comparando isso com o protojogo de cartas, há muito mais possibilidades de jogo
(sendo o termo matemático conhecido como espaço do problema) do que até mesmo o
maior supercomputador poderia imaginar.28,no entanto, há coisas que podem ser feitas
para aproximar um bom jogo que se resumirá a duas categorias principais.

1. Aproximação do jogo

2. Restrição de jogo
28Um termo secundário que surge ao discutir isso e o assunto adicional do design de mecanismos é a
jogabilidade emergente, onde alguns conceitos simples se combinam para criar um bom jogo que não precisa
de várias centenas de regras. Um grande espaço de problemas é relativamente fácil de criar, mas a jogabilidade
emergente está mais próxima de um assunto de tipo artístico, onde o objetivo é criar um bom jogo, do que da
teoria dos jogos, que geralmente é mais focada na matemática e na modelagem de uma situação. Para um
exemplo um pouco menos teórico, considere que os motores Metroid e Castlevania por si só não determinam
que o retrocesso para vários itens/vantagens seja necessário, mas os designers de níveis acrescentam tais ideias.

304
A aproximação diz coisas como na maioria das vezes o custo de lançamento é X e a
necessidade de fazer as coisas varia com o tempo de jogo de acordo com uma fórmula,
portanto, tente permitir isso.
A restrição do jogo depende da restrição da quantidade potencial de opções disponíveis
para reduzi-la a um nível mais calculável. Relacionado à aproximação, um desenvolvedor
também pode fornecer à IA do jogo uma vantagem razoavelmente frouxa sobre o jogador,
seja na IA real ou no design do oponente, coisas geralmente sendo cuidadas / ajustadas
nos testes de jogo. As restrições incluem personalização limitada de um baralho e
quantidades limitadas de cartas em relação ao mundo real, muitas vezes limitando as
opções para certas técnicas de jogo no processo. Relacionado a ambos, a IA pode receber
uma medida de habilidade sobre-humana (por exemplo, pode saber as cartas que você
possui ou pelo menos alguns dados sobre elas) o que quebraria o jogo se um humano
tivesse a habilidade, mas quando devidamente ajustado pode fazer o Trabalho de IA.

Tudo isso oferece a opção de projetar de forma um tanto intuitiva uma IA que faça
o trabalho. No entanto, com um pouco de análise usando as idéias apresentadas pela
teoria dos jogos e pelo design de mecanismos, você pode refinar consideravelmente
sua IA e sua mecânica de jogo; técnicas para certos jogos, principalmente gamão e
damas/damas, quase serviram para quebrar esses jogos também e criar IA que a
maioria dos humanos tem poucas chances de vencer.

Teoria do jogoEle foi mencionado e parcialmente coberto várias vezes, mas é necessário
um pouco mais de profundidade. A ideia básica é: e se ações e estratégias complexas
pudessem ser formuladas, compreendidas e previstas usando matemática bastante
simples (mais tarde fica complexa) como base? Acontece que isso realmente pode ser
representado como algumas equações matemáticas bastante básicas, no entanto, antes
disso, é necessário haver uma breve discussão de algumas idéias e termos, muitos deles
descrevem conceitos um tanto simplificados e em quais níveis eles se aplicam podem variar
de acordo com como você analisar as coisas e onde você começa a analisar as coisas

ˆInformação perfeita - tudo será conhecido sobre o que aconteceu antes

ˆInformação imperfeita – nem tudo o que aconteceu antes será conhecido


sobre. Os jogos de cartas que você pode desistir sem ter que mostrar as cartas são um exemplo,
assim como os jogos que usam nevoeiro de guerra.

ˆDilema do Prisioneiro – situação em que dois oponentes em potencial têm a


chance de ganhar às custas do outro ou cooperar para que ambos ganhem,
mas não ganhem tanto. Importante se é contínuo com chances de mais
rodadas ou distinto. Relacionado a isso está o jogo do frango, que tem o pior
cenário se ambos os jogadores que tentarem vencer causarem o pior resultado.

ˆEquilíbrio de Nash - combinações de estratégias por partes de múltiplos


os jogadores podem resultar em um determinado pagamento, mas qualquer mudança de estratégia de um
jogador causará uma perda líquida na capacidade de acumular pontos para ambos ou para aquele jogador.

ˆInformação completa - diferente do perfeito e imperfeito acima (é


é possível ter um jogo completo imperfeito e um jogo de informação
perfeito incompleto) refere-se à ideia de que os objetivos e estratégias são

305
capaz de ser conhecido por todos os jogadores. O risco quando os objetivos ocultos estão em
jogo é incompleto, mas o risco quando a dominação mundial é o objetivo está completo (embora
imperfeito se você levar em conta as cartas ocultas).

ˆMetagame – um jogo dentro de um jogo maior. Jogos de RPG onde o objetivo


é passar de uma cidade para outra para continuar a história, muitas vezes terá
batalhas que usam mecânicas totalmente diferentes da parte da cidade do jogo.
Continuando com os RPGs, há muito tempo eles têm minijogos que usam certas
ações que são radicalmente diferentes do jogo normal e talvez até mesmo em
desacordo com a mecânica de jogo previamente estabelecida que deve ser
executada para progredir.

ˆUtilidade – os pontos que um jogador busca em um jogo. É bem possível para


dois jogadores busquem utilidades diferentes no mesmo jogo, seja por escolha
(provavelmente é isso que o luto é) ou por design, e isso decorre de informações
completas com relação aos objetivos. Novamente, o risco baseado em missão é um
bom exemplo disso.

ˆSimétrico – as estratégias disponíveis para cada jogador são as mesmas. Avançar


Guerras sem bônus de CO (em um mapa igual) são simétricas, mas com bônus de CO
possibilitam um conjunto totalmente diferente de estratégias.

ˆAssimétrico – onde diferentes estratégias estão disponíveis para diferentes jogadores.

ˆEstratégia - um movimento possível (um entre muitos)

ˆJogo de soma zero - se uma pessoa ganhar a outra perderá a mesma quantia.

ˆJogo de soma diferente de zero - A situação em que ganhar ou perder não significa
os jogadores ganharão e perderão igualmente (as competições com vagas são
um bom exemplo). O monopólio onde existe um banco infinito não é soma
zero, o que também traz o conceito de jogadores com recursos infinitos,
nite para o jogador ou nite para o jogo.

ˆCooperativo – um jogo reforça acordos entre jogadores.

ˆSimultâneo – os jogadores agem ao mesmo tempo

ˆSequencial - os jogadores agem em turnos e possivelmente têm a chance de


analisar e reagir a movimentos anteriores.

ˆStateful – jogadas anteriores de um jogo afetam as jogadas posteriores. A


O RPG padrão tem estado em muitos aspectos em virtude da experiência/nivelamento.

ˆStateless - os jogos anteriores não têm efeito sobre os posteriores. Um padrão


O jogo de luta, por exemplo, não tem estado.

Quebrar um jogo ou seções dele usando este conceito pode ser usado para criar uma
boa IA ou uma boa mecânica de jogo e ser usado para obrigar certos tipos de jogo
que levam ao design do mecanismo.

306
Projeto do mecanismoAo combinar termos de teoria dos jogos e criar regras, você pode
criar certos estilos de jogo ou mesmo IA para se adequar a certos estilos de jogo. No Tetris,
por exemplo, você tem a opção de fazer um giro infinito, mas quando você está jogando
contra uma IA/jogador, você está permitindo que ele tenha liberdade de ação por vários
turnos, o que, por sua vez, significa que você provavelmente acabará com uma tela de lixo. ,
da mesma forma, o jogo diminui o lixo se você fizer linhas, mas você pode querer pegar
algumas e, assim, permitir-se dar mais linhas de lixo para o outro lado. Isso alimenta ainda
mais a IA, pois você pode construir uma série de estratégias para um jogo e desativar uma
ou mais delas para tornar o jogo mais fácil para os jogadores humanos, e voltando ao
Tetris, neste caso dê uma olhada no Tetris DS, então, se você jogar a IA em modos mais
fáceis, ela irá parar de fazer coisas como quedas fortes ou mesmo quedas suaves, poderá
parar de segurar peças para fazer um tetris um pouco mais tarde e coisas semelhantes.

Além disso, você tem coisas como sistemas de pontuação e taxas de experiência que também
trazem aspectos psicológicos em quantidades cada vez maiores; no entanto, como um hacker de
ROM, você pode estar interessado em diminuir ou aprimorar o mecanismo de jogo. Por exemplo,
em um RPG, você pode não querer ter que trabalhar para ganhar experiência por algumas horas
para continuar a história, mas o jogo mais ou menos exige isso (uma troca que os
desenvolvedores de RPGs quase invariavelmente têm que fazer) e você pode ignorar esse. Da
mesma forma, os minijogos foram extraídos de jogos maiores em diversas ocasiões e em outras a
jogabilidade foi radicalmente alterada, embora dentro do mesmo motor, para fazer algo como
um modo boss rush em um jogo como Castlevania ou Metroid (ambos títulos conhecidos por
seus elementos de exploração) ou até mesmo um beco de corrida / chefe em um jogo como
Pokémon por meio de um salvamento pré-fabricado e hack de nível que nega todo o elemento de
exploração, captura e treinamento (possivelmente / normalmente superpoderoso) em que os
jogos são baseados.
O principal problema do projetista do mecanismo é que a teoria dos jogos assume
em grande parte que os humanos são racionais e jogam por interesse próprio,
embora tenham sido feitas coisas para compensar a falta disso.

5.7 Flash cart e teoria do emulador


Embora muitos hackers de ROM nunca precisem se preocupar com isso, às vezes é bom
saber como os carrinhos e emuladores fazem as coisas funcionarem para poder contornar
qualquer proteção antipirataria (AP) ou permitir que os jogos sejam salvos em hardware
diferente do carrinho. /disc eles surgiram ou usam determinados recursos a seu favor; o
slot GBA está disponível no modo DS e quem não quer 32 megabytes extras de memória
mapeada de memória rápida, infelizmente somente leitura, para brincar quando o sistema
básico tem apenas cerca de 4 megabytes, nos quais você também precisa inserir algum tipo
de binário para o processador.
Além disso, provavelmente não será um problema tão grande no futuro, mas historicamente várias
ROMs foram hackeadas para funcionar melhor com algumas soluções alternativas ou simplificações que
os emuladores usam (nos dispositivos portáteis, isso geralmente significava ajustes gráficos para
contornar as limitações de tamanho da tela ou questões de camadas, mas pode ser mais aprofundado
do que isso). ROMs também podem ser hackeadas para funcionar no emulador se ele não tiver um
recurso (por exemplo, emulação de um chip extra ou, no caso do NES, um mapeador diferente), embora
o primeiro seja frequentemente um dos hacks mais difíceis de fazer. Outra pode ser permitir que os
recursos do carrinho de cinzas funcionem melhor; assim como você pode fazer um bug em um jogo, o
escopo limitado dos extras do carrinho de cinzas pode ser classificado de maneira muito simples,
permitindo que um jogo lide com mais elegância com um caso de erro ou não

307
faça algo que perturbe o recurso.
Se a seguir você notar um padrão da franquia Pokémon que freqüentemente causa
problemas para proprietários/fabricantes de carrinhos de cinzas, hackers de ROM e usuários de
emuladores, você não seria o primeiro. Na verdade, como resultado, uma vez que as ferramentas
são feitas (elas têm para todos os jogos Pokémon da linha principal até o momento), o Pokémon
tem um mecanismo bastante bom que permite que algumas pessoas façam alguns hacks legais
sem empregar muita habilidade técnica, mas a menos que você realmente queira aprender
alguns das técnicas mais avançadas de hacking de ROM como resultado de muitos desses extras,
então Pokémon é um jogo bastante ruim para aprender, e isso independentemente do que você
está tentando fazer, exceto talvez usar um emulador para capturar gráficos e bens musicais.

A teoria do emulador, ao contrário da codificação do emulador, é na verdade muito


simples, portanto, além deste parágrafo, ela não será abordada a sério. A teoria do
emulador então lê tudo o que o hardware/tempo de execução original fez (incluindo
recursos não documentados) e faz com que seu emulador funcione bem com os mesmos
tempos. Você pode ser capaz de usar atalhos e atalhos e, de fato, metade da programação
do emulador é sobre descobrir o que e quando você pode29pular algo sem efeito
prejudicial, sem muito efeito prejudicial (para um bem maior e tudo mais) ou mesmo o que
você pode pular/mudar/contornar para obter um efeito bom; não faz sentido emular 20
minutos de carregamento de uma fita quando tudo o que ela faz é copiar o conteúdo dela
para a memória e se o console original tivesse um pré-processador/modulador gráfico
barato e desagradável30, como muitos consoles antigos fizeram para fazê-lo funcionar em
entradas de RF para TVs, e você tem um RGB glorioso da renderização interna do seu
emulador, então você pode esquecer o lado RF das coisas. No entanto, se a ROM/ISO não
funcionar corretamente, sua emulação não será completa ou precisa o suficiente.

Uma disciplina relacionada à teoria do emulador são os extras no hardware. Carrinhos flash e
chips mod são frequentemente vendidos com base em suas habilidades para melhorar o jogo,
mas visto que rodam em hardware, eles estão sujeitos às restrições dele, ao contrário de um
emulador onde tudo é visível e pode ser manipulado (desde que você tenha opções de
desenvolvimento no emulador ou se dê ao trabalho de anexar uma ferramenta de
desenvolvimento/depuração ao seu emulador, como muitos criadores de cheats fazem com
ferramentas como emuhaste). As três grandes coisas no que diz respeito à maioria dos hackers
de ROM que leem este documento são

29Uma das coisas mais interessantes que surgiram da emulação do N64 e que já foi vista em outros
lugares foi o conceito de recompilação dinâmica. É aqui que o console em si não seria emulado, mas o
código do jogo escrito em C poderia ser convertido para a arquitetura em que o emulador estava sendo
executado e, como resultado, ganhando um enorme aumento de velocidade. Naturalmente não era
infalível e nem tudo funcionava com ele, mas quando funcionava era incrível e permitia que máquinas
que de outra forma não teriam chance de rodar algo rodassem os jogos a toda velocidade.

30Observe que muitas pessoas vão querer que as coisas pareçam exatamente como eram em tempos
melhores em sistemas antigos e muitos desenvolvedores empregariam soluções alternativas para deficiências
aqui e, nesse caso, continuariam a fazer coisas importantes até hoje; você pode ver o áudio sendo amplificado/
normalizado até o ponto de corte, os desenvolvedores de GBA aumentando o contraste para permitir que os
modelos originais de GBA sem luz de fundo tenham uma boa aparência, muitos jogos de console modernos
ainda são otimizados para TVs que raramente são calibradas adequadamente e mais avançadas muitos
desenvolvedores da web são incentivados a fazer com que suas coisas tenham uma boa aparência, não em suas
telas bem configuradas, mas no lixo que a maioria das pessoas tem. Da mesma forma, essas deficiências podem
ser usadas para cobrir coisas (um sinal de RF difuso permite um tipo muito grosseiro de anti-aliasing) e tais
melhorias são uma das principais críticas aos emuladores e razões dadas para a preferência pelo uso de
hardware real. bogost.com tem uma boa discussão sobre as questões do CRT e como alguns começaram a
emulá-lo.

308
1. Estados salvos do DS. Um estado de salvamento é simplesmente o conteúdo de cada
pedaço de memória, registro e conceito relacionado empacotado em um arquivo para ser
restaurado em uma data posterior. O DS não tem acesso total a toda a memória no
hardware (alguns são apenas de gravação, alguns não são mapeados e muito mais), então
os savestates são de muitas maneiras incompletos, o que é um dos principais motivos (o
outro é a terceira entrada nesta lista ) por que eles não funcionam muito bem. Você pode
tentar fornecer alguns dados de exemplo para a seção ou tentar conectá-los enquanto ela
é escrita e anotá-los para usar mais tarde, se desejar.

2. Injeção de truques de RAM. Um carrinho de cinzas ou um replay de ação podem usar algumas
técnicas aqui, mas eles geralmente têm hardware integrado para ajudar com isso, então isso se
refere principalmente a ferramentas como GABSharky, GBAATM e DSATM que geralmente
funcionavam adicionando mecanismos de cheat inteiros no próprio jogo e pelo A natureza de
como os cheats precisam funcionar (lembre-se de que um dos cheats principais é
constantemente escrever/manter um valor na memória RAM) seria executado sempre e
executado junto com o código do jogo (a maioria dos consoles não são feitos para multitarefa) de
alguma maneira.

3. Mudanças de tempo. Possivelmente o mais importante de todos e que se manifestou de várias


maneiras ao longo dos anos. Alguns exemplos são que a vinculação de GBA via cabo de link foi
considerada problemática, mudanças de tempo como resultado de novas interrupções para
reinicialização suave, cheats e, em alguns casos, manuseio de salvamento, estados de
salvamento no hardware foram considerados problemáticos por isso, se você também estiver
Podem ocorrer travamentos lentos na restauração ou salvamento de dados e, além disso, alguns
travamentos do jogo estão relacionados a isso; Castlevania Portrait of Ruin no DS foi mal
codificado e eventualmente corrigido pelas equipes do carrinho de cinzas (leia AKAIO), mas o
resultado foi que se os dados não fossem lidos rápido o suficiente, o jogo travaria, o que estava
principalmente relacionado à velocidade e, mais importante, à latência da leitura do carrinho de
cinzas. mas foi agravado por ter ganchos no jogo para fazer coisas como reinicialização suave,
Animal Crossing para DS também teve problemas semelhantes.

5.7.1 GBA
A seguir estão informações sobre itens personalizados e itens com os quais os carrinho de cinzas

designers tiveram que lidar

AP e salvaO pequeno AP que foi visto foram tipos de verificação de salvamento tradicionais
lançados fora da rotina de salvamento padrão ou coisas relacionadas e na maioria dos
casos apenas causaram falha na inicialização da ROM (geralmente com uma tela de erro),
falha ao salvar ou possivelmente no caso de Samurai Deeper Kyo pode ter tornado o jogo
imbatível após o primeiro chefe, embora isso não esteja confirmado no momento. O autor
do mgba tem uma boa análise das clássicas medidas antiemulação do NES.

A maioria dos problemas de execução de carrinhos GBA historicamente e até hoje vieram de
novos tipos de salvamento (há muito tempo classificados) ou hardware extra (sensores solares,
sensores de inclinação, suporte para adaptador sem fio GBA e jogos como Plaston Gate e
Legendz - Yomigaeru Shiren no Shima tem uma conexão periférico, você tinha que conectar um
dispositivo que parecia ter alguma capacidade de processamento integrada), embora existam
jogos não despejados, como o vídeo Shrek, supostamente usando comutação de banco, que
também precisaria ser classificado para jogar em cartões de memória.

309
Economiza no GBAO GBA não tem um valor no cabeçalho nem nada que indique o tipo
de salvamento, mas se você fizer uma pesquisa de texto ASCII por EEP-ROM, FLASH ou
SRAM e aparecer um (se não, você provavelmente tem uma ROM que usa senhas para
salvar ou talvez alguns tipos de homebrew) você tem a categoria ampla e emuladores como
o VBA costumava e talvez ainda pare aqui causando alguns problemas como ter que
selecionar manualmente o tipo de salvamento para coisas como pokemon, mas depois
disso haverá alguns números para indicar o subtipo dos quais existem alguns para cada
um. Esta pesquisa é muito difícil de fazer em hardware limitado e com a maioria dos
softwares de carrinho sendo derivados de dispositivos que usam memória NOR, o que é
muito difícil de alterar as coisas ou ferramentas de cinzas personalizadas para gerenciá-lo, é
por isso que a maioria dos carrinhos de cinzas GBA tendem a precisar de ROMs corrigidos
antes de ser colocado em dispositivos.
Depois disso, um punhado de patches (sem locais de memória ou locais relativos para
causar problemas aqui) que variam em distância do nome são usados para mudar o jogo
para diferentes tipos de salvamento.
Relacionado a isso e visto novamente no DS estava o link do gamecube para certos jogos que
também precisavam ler um determinado tipo de salvamento ou mesmo um determinado cabeçalho (os
carrinhos de cinza modernos carregam um carregador e depois carregam um jogo, tornando-os um
pouco mais difíceis de ter aparecem como carrinhos simples em alguns casos). No momento, nenhum
jogo foi consertado aqui e não se sabe se é algo que precisará ser consertado em inicialização múltipla
(código ARM), lado do gamecube (código variante powerPC) ou, em vez disso, está relacionado ao tempo
ou possivelmente uma combinação de todos os três.

Hardware extraO hardware extra era duplo ou talvez triplo, dependendo de


como você deseja vê-lo.

1. Visto apenas em cartões de cinza, especiais de Hong Kong / Lucky Lucky Man / Tourist Trap
(os dispositivos 30 em 1 que você comumente encontra (nd?) Em resorts de férias) e alguns
ROMs de vídeo GBA não descartados (alguns filmes de recursos como Shrek foram
lançados ) estava trocando de banco. O GBA só pode endereçar 32 megabytes de espaço,
mas nada impede você de enviar um sinal ao cartão para mudar para uma nova página/
banco/seção para ganhar um pouco mais de espaço para trabalhar. É uma técnica
amplamente utilizada em sistemas de cartuchos anteriores e em sistemas onde os
cartuchos eram usados para cartões de memória, mas não no GBA. No último ano de
2015 os jogos foram finalmente descartados e analisados.

2. GPIO e SRAM. O carrinho GBA possui alguns barramentos extras ou carrinhos


poderiam simplesmente usar o mapeamento SRAM para que o hardware extra
estivesse disponível para a CPU e memória do GBA em geral. RTC, sensores solares,
sensores de inclinação, o e-Reader (embora isso se torne um pouco mais complexo)
e variações mais utilizadas deste tema e também retornaria para o DS de várias
maneiras. Assim como o botão pressionado, grande parte disso foi copiado/
devolvido para outra área para ser usado e era aí que os hackers podiam entrar e
injetar dados em x coisas.

3. Stu como o rádio FM GBA e similares muitas vezes usavam apenas as linhas de
energia do slot GBA para se alimentarem, em vez de realmente interagirem com o
dispositivo de uma forma significativa.

310
5.7.2 DS
A seção a seguir contém informações sobre o DS AP, salvamentos e hardware extra. Os salvamentos do
DS não serão realmente cobertos, pois eram em grande parte domínio dos fabricantes de carrinhos de
cinzas que corrigiram o jogo ou emularam fisicamente até um nível de protocolo (originalmente em
carrinhos que usavam listas de salvamento para transformar o FPGA ou CPLD integrado em um pino
para a versão compatível com pinos do chip de salvamento original e posteriormente em carrinhos que
adicionaram o modo limpo/especial/fantasma em uma tentativa de permitir que os jogos fossem
jogados antes que os xes apropriados fossem feitos). Ainda assim, se você estiver interessado, o GBAtek
tem mais, mas a ideia geral é que o barramento SPI estava mais ou menos mapeado para a memória e
tinha recursos de acesso. As verificações de DSi e 3ds feitas para verificar carrinhos de cinzas estão um
pouco em outro lugar. Principalmente porque os próprios carrinhos fingiam ser um dos jogos na lista de
permissões de jogos mais antigos (os jogos mais recentes tiveram mais assinaturas e eram inadequados
para isso), era um exemplo bastante clássico de verificação para ver se era como o original, contrariar as
verificações, novos cheques, contador...

PATrês tipos principais de AP foram vistos no DS, embora realisticamente mais


pudessem ser gerados e os métodos existentes poderiam ser mais difíceis de
detectar e remover.

1. Salve a verificação de tempo. A EEPROM leva um tempo conhecido para ser salva e os tipos de
memória/emulação que a maioria dos carrinhos de cinzas usam em sua operação geral serão
salvos em um tempo diferente (geralmente muito mais rápido) que pode ser detectado.
Carrinhos com modo limpo, modo especial, modo fantasma... e antigos cartões de lista de
savetype são a principal exceção e a maioria deles só tem esses modos para permitir que as
coisas sejam jogadas enquanto se aguarda um x adequado.

2. Verificações binárias - aqui o binário ou uma seção dele seria hash e, se não
correspondesse, a ROM veria uma falha na verificação do AP e agiria de acordo.
Novamente, o modo limpo, o modo especial, o modo fantasma... e os antigos cartões
de lista de savetype muitas vezes evitavam isso.

3. Leituras abaixo de 8.000h. O protocolo padrão de leitura do cartão DS não lê abaixo


de 8000h na ROM (nem deveria ser necessário) e muitos carrinhos de cinzas não
lidariam com essas solicitações adequadamente, o que significa que eles retornariam
os dados reais em vez de seguir o que deveria acontecer. Desde então, a maioria das
boas placas corrigiu / implementou o tratamento abaixo de 8000h, mas você pode
remover as leituras e nenhuma foi observada tentando usar o resultado além da
verificação se você quiser tentar otimizar a ROM (a maior parte da lentidão
relacionada ao AP estará relacionada para as verificações binárias).

Uma análise histórica detalhada do desenvolvimento da antipirataria no DS está fora do


âmbito e do interesse deste documento, mas há coisas a aprender com ele. Inicialmente, as
rotinas AP fariam com que a ROM simplesmente não funcionasse/travasse logo após a
inicialização, mas mais tarde outras coisas aconteceriam (um dos primeiros exemplos seria
Final Fantasy Crystal Chronicles que funcionaria como uma demonstração), outras não
conseguiriam salvar , outros não permitiriam o progresso, Phantasy Star alterou as taxas de
queda de itens e muito mais.
No que diz respeito à programação, as empresas primeiro desenvolveram seus próprios métodos básicos
que permitiram a adição de patches bastante genéricos aos carrinhos de cinzas e, em alguns casos, a criação de
cheats genéricos. Mais tarde, embora centenas de verificações tenham sido adicionadas

311
lançado em qualquer ponto do jogo, poderia ser enterrado em sobreposições, poderia muito bem
ficar no modo THUMB, não apareceria como um tipo padrão/comum (não há buscas simples por
um determinado conjunto de instruções), poderia falhar e não agir de acordo com ele por vários
ciclos, estar oculto no binário ARM7 (lembre-se de que não é realmente tocado pelos
desenvolvedores e existe mais como uma biblioteca dinâmica e uma espécie de gerenciamento
de hardware) e mais significa que cada verificação teve que ser encontrada e corrigida e é
também por isso que simples cheat xes para AP pararam de acontecer.
Se você estiver no ponto em que pode fazer algo a respeito, a solução provavelmente
será óbvia, mas mesmo assim será abordada. Suas três opções principais são corrigir
totalmente a verificação para que isso nunca aconteça (a maneira adequada e não mais
difícil), fazer com que a verificação retorne o valor esperado (dependendo de como
funciona, isso pode ser mais difícil do que interromper totalmente a verificação) e fazer
portanto, a rotina IF ELSE (ou no ramo mais provável do ASM if) da qual se originou tem a
condição de falha alterada para pular para a condição tudo está bem (outro método abaixo
do ideal para a maioria das ocasiões). Com as centenas de verificações que eventualmente
se tornaram padrão, os jogos muitas vezes apresentavam uma lentidão perceptível,
embora não necessariamente, de interrupção do jogo, portanto, evitar que a verificação
acontecesse é o melhor caminho.

ExtrasVários métodos existiam aqui para expandir as habilidades do DS além


do hardware original.

Extras de slots GBAAs opções eram duplas aqui

1. Leitura do carrinho GBA. Vários jogos de DS podiam ler a porta GBA para ver se uma versão
anterior de um jogo da franquia ou um relacionado (Megaman e Boktai/Solar Boy Django
estão ligados de várias maneiras) estava presente e geralmente desbloqueando alguns
tokens extras como resultado. Isso geralmente equivalia apenas a ler o cabeçalho para
que você pudesse enganá-lo, mas com uma pequena parte lá, mas alguns jogos e mais
notavelmente Pokémon Diamond e Platinum que podiam ler salvamentos inteiros de
jogos GBA anteriores, permitindo que as pessoas negociassem ao longo da série. Esses
usuários problemáticos do carrinho de cinzas, pois seus salvamentos estariam na SRAM e
o jogo DS seria naturalmente codificado para usar a memória do tipo Flash usada pelos
jogos GBA originais. Cory1492 fez o Pokepatch, no entanto, que o corrigiu para muitos
carrinhos GBA diferentes. Além disso, a versão DS do navegador Opera tem um pouco
mais de memória (12 megabytes que foram mapeados estranhamente, tornando-o inútil
para ROMs GBA) que foi usada para o navegador da web (o homebrew mais tarde obteve
suporte para ele adicionado graças a uma biblioteca/API e o o navegador da web foi
posteriormente hackeado para suportar alguns tipos de RAM do carrinho de cinzas).

2. Expansões de slot GBA. Arkanoid tinha um controlador de remo (que Mario Kart e alguns outros
jogos foram posteriormente hackeados para suportar) e o Guitar Hero tinha um punho de
guitarra. Eles funcionaram principalmente nos ônibus, como outros mencionados aqui, mas a
maioria das pessoas que tiveram que hackeá-los, em vez disso, usaram o fato de que as leituras
foram devolvidas para a memória normal e então atacaram essas áreas, mas se você quiser
mais, veja a tela sensível ao toque para hacks do dpad, pois é muito a mesma ideia.

Extras de slot DSAlgumas coisas aconteceram aqui.

312
Pokémon Black and White veio com um pequeno dispositivo chamado pokewalker que era um
contador de passos que fornecia experiência para o pokémon que continha. Ele se comunicava através
de uma porta infravermelha na parte traseira do carrinho do DS que usava o barramento de salvamento
(através de um seletor) para ativá-lo e isso incomodava as técnicas tradicionais de captura de
salvamento que não tinham visto isso antes, pois não sabiam como acionar o uso do opção salvar. Antes
de as ferramentas de salvamento de software serem criadas, as ferramentas de hardware tinham o
pacote mágico enviado (tipo relacionado a um ataque chamado ataque de repetição) ou as pessoas
podiam soldar a seção de salvamento para estar sempre ligada (ou selecionada por meio de um switch)
e usar o software mais antigo.
Dispositivos homebrew como as luzes DSerial e DSx usaram habilidades aqui.
Carrinhos de cinzas aprimorados mais recentemente, como o Supercard DSTwo,
iPlayer (não fabricado oficialmente pela Supercard) e iSmart MM/iSMM (um iplayer
OEM da iSmart DS com a capacidade de reproduzir ROMs comerciais do DS ao
contrário do iplayer) que possuem recursos de processamento integrados31que
permitem extras sérios (reprodução da maioria dos tipos de vídeo até resoluções SD/
PAL e emulação de coisas até e incluindo PS1 e Amiga no caso do iSMM) e mais
classicamente em processamento integrado para DLDI onde CRC os valores dos dados
gravados nos cartões SD dos carrinhos de cinzas seriam calculados a bordo.

5.8 Proteção contra hackers de ROM


Por diversas razões, alguns que editam imagens ROM não quiseram que os seus trabalhos
fossem usados como base para um trabalho futuro e por isso tentaram proteger o seu trabalho
por meios tecnológicos; esse tipo de coisa tende a ser visto em jogos que possuem ferramentas
de alto nível feitas para eles, o que geralmente significa Pokémon, Fire Emblem, plataformas
Mario e jogos Mario Kart, Final Fantasy, Advance Wars (mais ou menos), Golden Sun e franquias
semelhantes. Outras proteções podem incluir proteções adicionadas a um jogo para que aqueles
que tentam fazer repros (um termo para os carrinhos que têm versões hackeadas/modificadas de
jogos e são feitos para parecerem originais) não possam remover o se você pagou por isso, então
você foram arrancadas telas de tipo.
Como o restante do documento pretende demonstrar, se você tiver o arquivo à
sua frente em uma máquina que você controla, você poderá editá-lo. Isso significa,
além de perguntar no leia-me/notas de lançamento (um método melhor em geral),
colocar um pedaço de texto em algum lugar ou assinar de outra forma (no sentido
clássico e não no sentido criptográfico) para poder demonstrar a origem, um técnica
usada nos campos da computação e da propriedade intelectual moderna, você não
tem muita escolha no assunto.
Na maioria das vezes, no mundo das ferramentas de alto nível, esta edição é um simples anúncio
colocado em algum lugar da ROM (ou um dos vários lugares, se for especialmente avançado) que
qualquer ferramenta GUI que queira estar em conformidade com o padrão irá ler e informar ao usuário
que a ROM foi bloqueada. Ocasionalmente, as coisas serão levadas um passo adiante e parte da ROM
será quebrada e então corrigida em tempo de execução (geralmente visto em grupos de cenas que
fazem introduções para jogos, mas ocasionalmente visto em outros lugares) ou uma técnica semelhante
à abordagem de leitura LBA bruta do Playstation (sistema de arquivos convencional ignorado e adiado
para outro lugar) foi feito/sugerido

31As armadilhas e peculiaridades desses tipos de dispositivos estão um pouco fora do escopo deste
documento, mas na maior parte do tempo com eles foi observado que a programação era mais fácil se o
ARM9 fosse levado a um estado semelhante ao ARM7 em jogos comerciais e apenas realmente usado.
para IO básico e manuseio, como manter a sincronização e trabalhar em torno da largura de banda
limitada do slot DS e de seu protocolo, era muito difícil.

313
no. Isso é mencionado principalmente porque algumas dessas técnicas podem frustrar a
operação do carrinho de cinzas com vários treinadores de cena no DS fazendo isso e alguns hacks
de GBA levaram a alterar o cabeçalho (especificamente os 4 bytes reservados no hex BE de
compensação) em um GBA ROM da qual a maioria dos emuladores e visualizadores de cabeçalho
não reclamaram, mas carrinhos como o EZFlash 4 não concordaram (talvez em função da
necessidade do 00 para encerrar uma leitura semelhante a alguns dos problemas potenciais
discutidos no preenchimento DEADBEEF).
Aqueles que tendem a ser mais voltados para reproduções/repros, tendem a ser feitos por
hackers e programadores experientes, então qualquer método que você possa imaginar é uma
possibilidade aqui. Normalmente, eles só se preocupam em deixar o crédito/se você pagou...
telas, então é improvável que atrapalhem seu carrinho de cinzas, emulador ou outros trabalhos
de hacking. No caso deste último, muitas equipes de tradução que buscam proteger seu trabalho
perceberão que alguém pode querer alterar as estatísticas, os níveis, a música e muito mais do
jogo e, como tal, tenderão a não fazer coisas como verificações binárias completas.

314
Parte III
Exemplos, curiosidades e técnicas.
Onde a parte anterior era um pouco pesada em teoria e leve em exemplos, esta parte
conterá em grande parte exemplos de coisas comuns, alguns exemplos de coisas
menos comuns, algumas técnicas e conceitos que vale a pena conhecer e poder
empregar, bem como agir como um pouco de despejo de conhecimento geral sobre
hacking de ROM/desenvolvimento de jogos. À primeira vista, esta parte pode parecer
menos valiosa do que a anterior, mas pretende ser algo equivalente ao tempo que
você passou algumas horas mexendo em algo que você usa até hoje, em oposição às
horas e horas gastas dizendo memorizando fatos que você não imagina ter que saber
novamente fora de uma noite de curiosidades.

6 Guia de uso geral do Crystaltile2


Se você leu o restante do guia, provavelmente já viu várias capturas de tela do Crystaltile2,
mas pode não estar familiarizado com o funcionamento como um todo. É isso que esta
seção pretende classificar.
Crystaltile2 é uma fantástica ferramenta de hacking de ROM de uso geral, mas
ainda mantém recursos de baixo nível suficientes (e de fato pode até ser dito que gira
em torno deles) para ser útil para qualquer hacker de ROM de baixo nível, embora
aqueles que trabalham no GBA ou DS se beneficiem. mais. O aplicativo original estava
em chinês, mas desde então foi traduzido o suficiente para ser funcional (sempre foi
útil) para quem prefere coisas em inglês. Este é um guia para o uso geral e algumas
especificações do cristal2.
Embora existam algumas funções antes de você fazer isso, a ferramenta realmente ganha
vida quando você abre uma ROM. Para o DS, pelo menos, o uso é duplo

1. A janela principal do programa contendo um editor hexadecimal, visualizador de blocos,


visualizador de desmontagem (há pequenas habilidades de edição), editor de blocos,
ferramentas relacionadas a texto e opções de menu para outras ferramentas (compressão,
pesquisa de texto, edição de fontes NFTR e muito mais). Muitos desses modos têm
recursos líderes de classe, embora ainda existam algumas armadilhas para os incautos e
bugs que podem precisar ser resolvidos. Além disso, alguns recursos só estão disponíveis
quando determinados modos são selecionados e a localização de alguns deles pode ser
um pouco contra-intuitiva.

2. A subjanela do visualizador do sistema de arquivos (apenas imagens DS ROM) que é


acessada clicando no ícone DS. Como um aparte rápido, há um pequeno bug onde se você
maximizar o visualizador do sistema de arquivos para uma segunda tela, ele será
minimizado quando você clicar duas vezes em um arquivo para definir o conjunto (uma
característica útil quando você tem apenas uma tela) que você pode contorne-se
redimensionando manualmente a janela para ocupar o quanto você precisar. Clicar duas
vezes coloca o visualizador no início do arquivo e clicar com o botão direito traz quaisquer
opções extras que o programa possa ter para os formatos extras (os gráficos são
especialmente úteis aqui pois você pode dizer ao jogo para carregar os gráficos, o layout/
formato e as cores necessárias, tudo com apenas alguns cliques), além de oferecer a
opção de exportar um arquivo da ROM, importar um, extrair (como na compactação) se
detectar e compactar um arquivo e importar

315
bem como exportar todos os arquivos ou reconstruí-los quando terminar. Além disso, ele
deve conter algumas informações sobre os binários e é uma das poucas ferramentas de
uso geral que a maioria das pessoas terá que exibe informações analisadas nas
sobreposições, como onde elas serão eventualmente carregadas na memória RAM.

A combinação dos dois permite que você navegue pela ROM, configurando os visualizadores para
determinados pontos e analisando quaisquer dados que puder (bastante útil para formatos de
imagem 2D) e enviando arquivos para análise posterior.
Algumas capturas de tela do programa
Visualização principal do editor hexadecimal

Visualizador básico do sistema de arquivos e menus suspensos

316
Visualizador básico do sistema de arquivos com um clique direito
Quando arquivos compactados são detectados, a descompactação e a compactação (importação
compactada como você faz) ficam disponíveis.

Visualizador de imagens usando tamanho de visualização personalizado

Cada quadro tem uma paleta separada por algum motivo, então ignore as cores quebradas
nesta.

317
Visualizador de montagem configurado para visualizar uma sobreposição

Editor de blocos

318
Conexão visualizador/emulador de memória
Crystaltile2 pode interagir com a versão de depuração no$gba para obter dados de RAM principal
e VRAM.
Você pode acessar as opções pressionando le e depois DS emulator antes de selecionar o
emulador, após o qual você verá uma janela como

Você provavelmente terá que clicar em >> para obter a lista de opções e poderá definir
algumas por conta própria.
A partir daí, clique no que desejar e na maioria das vezes será produzido um novo arquivo
contendo todos os dados. Lembre-se de que você pode despejar a memória da versão de
depuração, desmover e usar muitas das ferramentas de truques que são muito mais
estáveis.

319
Editor de roteiro
Crystaltile2 apresenta uma ferramenta de despejo rápido de script básica, mas bem apresentada, que
possui várias opções. Normalmente o arquivo é carregado, quaisquer tabelas selecionadas no menu
suspenso tbl (e feitas para usá-lo no mesmo). Depois que essa pesquisa de embaixador é pressionada e
ele retorna uma lista do que considera seções de texto viáveis. A partir daqui, o menu suspenso de
métodos de pesquisa especiais permitirá que seleções sejam feitas. A última opção de métodos especiais
de busca permite exportar os resultados selecionados para um arquivo de texto contendo a localização,
comprimento e texto decodificado em qualquer página de código que você julgar necessária. Clicar duas
vezes em um resultado leva você ao editor hexadecimal. Opções básicas de ponteiro estão disponíveis,
mas são insignificantes em comparação com os programas de extração de texto mais tradicionais.

7 Rastreamento de GBA

O rastreamento de GBA foi mencionado na discussão sobre hacking de montagem e a teoria por
trás de tudo foi abordada, mas alguns exemplos trabalhados são provavelmente úteis.

Opções de rastreamento

Não se sabe se a versão de depuração no$gba ainda pode ser obtida legitimamente.

não$gbaUm dos emuladores de depuração mais completos disponíveis em qualquer lugar. Orientado por GUI
com a opção de definir pontos de interrupção e lidar com a montagem em tempo de execução.

VBA-SDL-hUm programa mais baseado em linha de comando, mas no mesmo nível do no$gba
no que diz respeito a funções úteis.

avanço de boicoteMenos recursos que vba-sdl-h, mas mais focado na GUI e ainda assim
tem pontos de interrupção e alguns outros recursos interessantes.

Existem três usos principais para emuladores de rastreamento/depuração no que diz respeito aos
hackers de ROM

1. Descobrir onde um determinado recurso é encontrado

2. Observação e engenharia reversa da lógica do jogo (manipulação real da saúde do jogo e


outros ou como ele descompacta/lida com um formato)

320
3. Encontrar espaço para colocar arquivos/dados na memória

Descobrir onde um determinado recurso é encontrado é especialmente útil em sistemas como o GBA, que não
possuem um sistema de arquivos e, portanto, provavelmente não possuem uma definição clara de onde as
coisas podem ser encontradas.
O processo usual é encontrar os dados de sua escolha na memória (espero que sejam
estáticos) e então executar o jogo até aquele ponto novamente, mas desta vez com um ponto de
interrupção definido em qualquer coisa que grave naquela seção. No GBA (e no DS), a CPU tem
algum acesso básico à memória (embora a recuperação seja feita por meio de comandos reais, e
não como parte de uma instrução, como acontece nas máquinas da família x86), mas a maior
parte do acesso que requer extensa transferência de dados é feito por meio de chamadas DMA
ou SWI (para dados compactados, embora nem todos os jogos usem chamadas SWI ou mesmo
compactação compatível com SWI). As chamadas SWI podem ser registradas e até alimentadas
em ferramentas de descompressão para tentar encontrar dados.
Observar a lógica do jogo geralmente faz parte da criação de alguns dos cheats de
maior alcance, mas o uso é duplo, pois os dados do jogo na ROM/ISO podem não ser os
mesmos que os dados usados na RAM e a própria lógica do jogo pode querer ser
manipulada seja como um multiplicador básico de experiência/dano ou algo mais
aprofundado (que também pode contribuir para a compreensão de formatos que não são
imediatamente aparentes). Lembre-se, porém, de que, no momento em que você vê isso na
tela, provavelmente já foi feito há várias centenas de ciclos.
Restrições de memória estão sempre presentes em dispositivos incorporados
e alguns hackers de ROM otimizam um jogo para ganhar espaço ocasionalmente.
É verdade que isso não é necessário e pode ser mais fácil abordá-lo por outro
caminho (codificação de bloco duplo, loop de áudio mais cedo e tal).

7.0.1 Exemplos trabalhados

VBA-sdl-h é a ferramenta escolhida aqui, mas as ideias seguem aproximadamente para o avanço
do boicote e a versão do desenvolvedor do no$gba.

8 Rastreamento DS

Embora o hacking de montagem do DS já tenha sido feito há algum tempo, ele não é tão
avançado em termos de poder das ferramentas que o fazem como o GBA e os consoles
anteriores. Da mesma forma, o fato de o carrinho não ser mapeado para a memória complica, na
melhor das hipóteses, os métodos básicos de localização de recursos e os coloca fora do processo
mecânico bastante simples que o GBA desfruta.

Emuladores de depuração DS
Com a possível exceção de no$gba, os emuladores de depuração do DS não são
tão avançados quanto VBA-SDL-h e boicotam o avanço do GBA.
Para este fim, existem três emuladores principais com algum suporte real de depuração. Não
se sabe se a versão de depuração no$gba ainda pode ser obtida legitimamente.

não$gbanão funcionará em ROMs posteriores, a menos que você ignore qualquer um incluído
antipirataria, mas tem muitas habilidades, incluindo a capacidade de definir uma variedade de pontos de
interrupção.

321
desmembrarembora possua suporte para desmontagem e uma variedade de memória
opções de visualização, despejo e edição (em geral e como parte de cheats), bem como um
complemento completo de blocos, mapas e outros visualizadores, grande parte da
funcionalidade de depuração é destinada ao homebrew por meio do stub GDB.

Ideiasa principal reivindicação ao status de depuração junto com os outros dois é o suporte
porta para executar até a seleção e depois a função step, bem como a
capacidade de manipular registros.

8.1 Comando de leitura do carrinho

GBAtek detalha grande parte do protocolo de leitura do carrinho, mas para a maioria dos propósitos
B7aaaaaaaa000000 onde os valores a são uma localização de 32 bits (em big endian/mais
significativo, nada menos) é o único comando que importa. Lembre-se de que o binário é carregado
na memória e pode conter qualquer coisa que o jogo possa usar além do próprio binário.

8.1.1 Pesquisa básica e métodos para isso


O comando em si define mais ou menos uma janela na imagem ROM que pode
ser lida de acordo

Compressão à parteCom o carrinho DS não sendo mapeado na memória, ocasionalmente


haverá uma cópia para a memória RAM dos dados vistos no carrinho e uma cópia
subsequente para onde ele precisa ir (no caso de áudio ou gráficos), sem mencionar que a
compactação irá muitas vezes funcionam assim.

8.1.2 Engenharia reversa do cabeçalho/valores gerados


O DS possui um sistema de arquivos e Os arquivos geralmente abrigam outros arquivos ou o sistema
as seções que não são afetadas pelo de arquivos de dados como um todo. Isso é muito legal como
isso significa que uma ROM inteira não precisa ser recompilada pelos codificadores originais
quando uma pequena alteração é feita e também oferece uma quantidade considerável de
flexibilidade no que diz respeito ao hacking de ROM.
É então perfeitamente possível construir uma expressão matemática para encontrar a
localização final de um arquivo e embora muitos

9 Engenharia reversa de várias imagens ROM


A seção a seguir será composta por uma desmontagem básica e, em alguns casos, mais
avançada de uma seleção de ROMs aleatórias e escolhidas a dedo para demonstrar certas
características. Embora a distinção entre géneros não seja brilhante do ponto de vista
artístico, é algo útil do ponto de vista técnico. Dito isto, alguns dos melhores títulos em
qualquer sistema ou mesmo exemplos do referido gênero podem muito bem apresentar
elementos de outros gêneros, com uma das opções mais populares aqui conhecida como
adicionar elementos de RPG onde o que era tradicionalmente sem estado (ignorando o
estranho, usa powerup carry over and lives) os jogos nível a nível ganharam uma pequena
medida de progressão do personagem (experiência e atualizações sendo os métodos
principais), tornando-se um termo comumente usado na discussão de jogos.

322
Tudo isso e o que se segue sendo dito, jogue o jogo, veja algumas imagens do
jogo e se você puder simplesmente brincar com as camadas em um emulador, isso
lhe dará pistas sobre como as coisas serão configuradas no jogo.

9.1 Arquivo grande no topo do sistema de arquivos

Embora o DS tenha um sistema de arquivos, há muitos jogos que usam arquivos grandes e
pequenos e alguns que arquivam todos os dados do jogo (talvez dar ou receber algum
áudio ou baixar o jogo).

9.1.1 Tony Falcão


Um dos primeiros exemplos disso surgiu quando as pessoas estavam copiando áudio e
similares de jogos para colocá-los em dispositivos menores e como este título tinha um
arquivo maior do que a maioria dos carrinhos.

9.1.2 Star Wars – A Força Liberada


9.1.3 El Tigre Faça minha mula
Já usado como exemplo várias vezes.

9.2 Compressão
A compressão é conhecida e bastante bem documentada há muito tempo (o 77 em LZ77
refere-se ao ano em que foi feito), mas fazê-lo de forma útil em tempo real não funcionou
até o GBA e, em uma extensão um pouco menor, o 16 era pouco. A compactação específica
de campo (codificação dupla e múltipla, troca de paleta e todos os outros métodos
abordados nos truques do desenvolvedor) e métodos mais simples, como codificação de
comprimento de execução, já existem há muito tempo. O GBA e o DS apresentam
algoritmos de descompressão para dois métodos populares (LZSS e Human) de vários tipos,
embutidos no BIOS e bem suportados em kits de desenvolvedores oficiais. A
descompressão do BIOS nem sempre foi usada, pois era uma troca entre utilidade,
recursos necessários, tamanho do BIOS e velocidade geral, o que levou os desenvolvedores
a implementar métodos mais rápidos para descompactar
arquivos compactados com compactação padrão do BIOS ou implementando um método
personalizado de compactação.
Normalmente personalizado geralmente significa apenas que permite diferentes comprimentos ou
compactação ou usa um tipo de ag personalizado (a compactação do BIOS é bastante rigorosa quanto
ao que é necessário em um formato compactado) em vez de uma ideia verdadeiramente nova sobre
como compactar as coisas para o máximo possível. na maioria das áreas da ciência e da tecnologia,
saltos massivos são bastante raros, mas pequenas melhorias são perfeitamente possíveis. Para esse fim,
se você souber como a compactação funciona e puder pensar no que mudaria para melhorar a
compactação, normalmente estará bem.
Da mesma forma, onde os desenvolvedores desejam reduzir tamanhos (os tamanhos
dos chips ROM aumentam em potências de 2 e o preço também aumenta e cem mil vezes a
diferença no preço soma um pouco), mas os hackers ROM nem sempre são tão limitados
(problemas de memória de lado), portanto, remover a compressão em primeiro lugar pode
ser feito e geralmente é. Em alguns casos, remover a compactação também acelera o jogo.

323
Lembre-se de que no GBA você normalmente terá todos os 16 megabytes
superiores para brincar e o DS é limitado a 512 megabytes para a ROM, o que,
novamente, poucas ROMs conseguem, sem mencionar a capacidade de criar duas
ROMs e dizer jogar para este ponto então troque.
GBA

9.3 Jogo em primeira pessoa


Existem duas classes principais de jogos vistos na primeira pessoa.

1. Aqueles que tentam usar o DS 3d para fazer um jogo

2. Aqueles que usam animações 2D mais convencionais

Naturalmente, existem combinações dos dois, como visto nos jogos de plataforma que
usam 3D. O DS 3d não é muito poderoso, então alguns jogos optaram por fazer jogos do
tipo galeria de tiro de estilo mais tradicional, que eram camadas e sprites. Os fundos 3D
pré-renderizados apresentavam técnicas semelhantes vistas nos primeiros títulos de
rastreamento de masmorras, onde a câmera era movida de um ponto a um ponto fixo ou fixo
imagens isométricas eram possíveis, mas isso deixava a pessoa. primeiro

Alguns jogos GBA (principalmente versões de jogos de tiro em primeira pessoa da era Doom
1 mais antigos e lm tie em jogos que fazem coisas semelhantes) usaram modos bitmap para
tentar fazer 3D real e como uma transformação de perspectiva no estilo mode7 foi possível no
GBA (e DS ) métodos de estilo mode7 podem acontecer.

9.4 Plataforma
Para a maioria aqui, a grande distinção é entre 2D e 3D, mas isso pode não ser uma grande
diferença no que diz respeito a analisar que tipos de arquivos irão compor um jogo (ambos os
tipos geralmente terão níveis próprios (mesmo que sejam 3D, ainda assim) possuem alguns
dados de mapeamento para os objetos e itens), os objetos e itens e quaisquer animações que
eles fazem.

9.5 Jogos de luta


Para a maioria, eles geralmente são divididos em estágios fixos (street ghter, tekken,
powerstone) e estágios de rolagem (Streets of Rage, Golden Axe, jogos anteriores de
Castlevania), mas isso não é tão útil, pois muitas vezes o estágio de rolagem será uma
ilusão como você pode seguir em frente e receber um sinal para continuar depois de
derrotar tantos inimigos. A distinção entre 2D e várias formas de 3D também é
possível.

9.6 Jogos de RPG


Uma variedade de métodos foi vista aqui e a categorização é extremamente difícil. Na maior
parte, as idéias de mapa mundial, mapas de cidades/castelos (ou mesmo lojas), mundos
completos (seja o clássico rastreador de masmorras ou 3D completo) e onde as batalhas serão
localizadas (locais separados no nível). Há um enorme número de ajustes em várias fórmulas
(batalhas aleatórias contra inimigos no mapa mundial, batalhas baseadas em turnos versus
batalhas ativas) que podem ter um efeito radical no jogo principal.

324
jogo, mas além de uma rotina de manipulação de coisas em um mapa mundial ou mapa de masmorra,
eles podem ter pouco efeito sobre os arquivos e seus conteúdos.

9.7 Jogos de corrida


Existem várias técnicas usadas para fazer jogos de corrida, embora na prática se reduzam a
quatro métodos no que diz respeito à tecnologia.

1. Overhead 2d e isométrico 3d (micro máquinas e Racing Gears Advance)

2. 2d convencional (Space Harrier, Outrun e Road Rash)

3. Estilo Mode7 (SNES FZero, Mario Kart SNES e GBA)

4. Full 3d (a maioria dos jogos de corrida para DS)

Overhead 2d e isométrico geralmente usam métodos semelhantes


Os 2d convencionais são geralmente uma corrida para a esquerda e para a direita em direção ao
horizonte, com a rotação geralmente sendo uma espécie de ilusão e qualquer movimento vertical ainda
mais.
O Modo 7 é tecnicamente 2D, mas é bastante diferente em conceito, pois permite uma
rotação adequada.
Full 3D é tão full 3D normalmente (embora camarotes 2D sejam possíveis) e um mundo
totalmente 3D é criado.

9.8 Quebra-cabeça

Uma das coisas comumente vistas em jogos de quebra-cabeça é que grande parte do texto é
renderizado como um gráfico real e armazenado de maneira semelhante aos gráficos,
geralmente porque não há texto suficiente para garantir um motor completo. Isso não quer dizer
que não possa haver texto no jogo, mas como renderizar uma fonte sofisticada exigiria um
grande esforço, grande parte do texto ainda pode ser gráfica. Eles também são alguns dos mais
prováveis de serem incorporados a outros gêneros (Puzzle Quest é um bom exemplo, embora vá
além e tenha havido alguns títulos de mahjong (não de paciência) embrulhados no que muitos
considerariam.
Em termos gerais, eles são subdivididos em duas classes

1. Versões computadorizadas de jogos tradicionais de cartas/tabuleiro/itens

2. Reex testando jogos

As versões computadorizadas de jogos tradicionais (ou mesmo de jogos não tão tradicionais, mas
que poderiam ter sido) variam tão amplamente quanto os próprios jogos. Na verdade, como fazer
um computador jogá-los é muitas vezes um campo da computação em si ou pelo menos um
problema reconhecido (Xadrez e Go são dois dos mais famosos, embora jogos como o mahjong
também sejam bem estudados). Em muitos casos, isso também faz com que a IA desses jogos
seja classificada como quebrada ou quebrada por modificações que a maioria dos humanos fica
feliz em lidar e podem nem perceber, a menos que reservem um tempo para realmente analisá-
la.
Os jogos de re-teste, por outro lado, tendem a ter mais em comum com outros tipos de jogos
(a série Kururin, por exemplo, é frequentemente classificada como um jogo de quebra-cabeça,
mas vê-lo rodar faria com que a maioria dos hackers o abordasse como fariam).

325
um jogo de plataforma). Embora tenha havido algumas tentativas de capturar jogos de
teste do mundo real, poucas funcionaram tão bem e muitas são realmente bastante
abstratas (considere o que Tetris realmente é por um momento).

9.8.1 Jogo de Mahjong


9.8.2 Tetris

9.9 Outros gêneros


Provavelmente os outros gêneros mais notáveis são os do romance visual, simulação e
aventura de apontar e clicar, embora nos últimos anos o romance visual e a aventura de
apontar e clicar tenham se tornado um tanto interligados (veja jogos como Ace Attorney/
Phoenix Wright). Da mesma forma, muitos jogos que poderiam ter sido direcionados para
um formato de romance visual optaram por usar um mecanismo 3D, embora isso se
direcione mais para o território dos jogos de arte. Deve-se notar que os romances visuais
têm muitos exemplos de títulos ultrassimples que consistem em nada além de algumas
imagens (com texto nas imagens) completos em linguagens de script, portanto, presumir
que sempre será simples não é uma boa ideia.
Outros gêneros comuns incluem jogos musicais, jogos artísticos (pintura e outros) e
jogos utilitários (o aprendizado de línguas é um exemplo comum), mas, além dos jogos
musicais, quase invariavelmente usam formatos extras para funcionar, a maioria daqueles
que geralmente desejam ser abordados em um jogo por base do jogo.

10 sobras do desenvolvedor
Mencionado várias vezes neste documento e assunto de sites como The Cutting Room
Floor, bem como algo que muitos hackers de ROM gostam de encontrar e discutir dentro
de jogos. O interesse neles é triplo, pois as pessoas gostam muito de músicas, sprites e
coisas que não foram incluídas no jogo final. Do ponto de vista do programador, isso pode
dar pistas sobre como as coisas foram feitas (referências a outras) e como as coisas podem
ser encontradas. que ajudam diretamente na engenharia reversa de formatos, seja por
terem versões muito simplistas dos formatos (você pode fazer engenharia reversa de um
modelo inteiro de dragão se quiser todos os vários milhares de pontos, mas se os
desenvolvedores deixarem modelos com um cubo, uma esfera, um cilindro e talvez algo
nele seja a melhor aposta para examiná-lo) ou, ocasionalmente, ferramentas, registros e
partes deles que revelam coisas.
Princess Maker 4 tinha quase todo o código-fonte do jogo incluído. Zoids Saga deixou o
arquivo de log usado quando os sons foram gerados (um formato conhecido como
SMAP), que foi creditado como uma das principais coisas para ajudar na engenharia reversa
do formato SDAT original.
Advance Wars Days of Ruin/Dark con ict tinha um roteiro japonês completo no
jogo e o jogo nunca foi lançado no Japão.
Magi Nation no GBA tinha um roteiro completo em inglês, apesar de nunca ter
sido lançado fora do Japão
Observou-se desde o início que Mario Kart DS tinha níveis que não chegaram ao
corte final e isso estimulou muitos hackers.

326
11 soluções alternativas

Nem todas as ferramentas fazem o trabalho corretamente, às vezes uma pequena mudança pode
ser necessária, mas criar um programa para isso pode não ser tão fácil e no caso do SDAT e do
SDK 3D as ferramentas existentes podem ficar um pouco aquém. Para um bom hacker de ROM,
isso é apenas um obstáculo e eles usarão manualmente ou massagearão a entrada para obter o
que precisam.
Relacionado a isso está o método rápido e sujo. Onde pode ser bom ou até mesmo uma boa
forma ter uma ferramenta completa, se específica do jogo, para fazer seu trabalho, você pode
fazer muito com uma ferramenta básica que permite cortar arquivos, algumas pesquisas e uma
planilha que pode lidar com hexadecimal em algum nível. Fazer isso também permite que você
forneça os dados necessários para outro membro da equipe que possa estar lidando com a
edição de texto, gráficos ou níveis, enquanto você descobre como consertar a ROM depois de
recuperar as versões editadas ou mesmo se sua tarefa for apenas para extrair as várias partes de
um jogo (afinal, extrair sons, sprites e modelos é bastante popular) e pode localizar os arquivos,
apesar de ainda não entender, digamos, o sistema de ponteiro inicial (lembre-se de que muitos
arquivos do DS começam com um selo mágico de alguma forma).

Nenhum dos dois é tão glamoroso quanto codificar ferramentas personalizadas para realizar a tarefa, mas
todos os bons hackers de ROM são capazes de fazer isso (sendo um resultado básico de ser capaz de fazer
pensamento abstrato).

12 Mudando para um novo sistema


Esta seção está mais preocupada com o que acontece quando um sistema totalmente novo
surge (se você deseja ajudar na engenharia reversa, os mapeamentos de memória e IO
depende de você e as habilidades de hacking de ROM são valiosas aqui, mas isso vai se
concentrar no trabalho de nível de arquivo na maior parte) em vez de simplesmente mudar
para um sistema desconhecido do hacker, embora ainda se aplique lá.
Junto com a abstração mencionada em outro lugar, uma das marcas de um bom hacker
de ROM é ser capaz de migrar para um novo sistema (talvez tendo uma ferramenta de
análise de sistema de arquivos disponível) e começar a desmontar as coisas lá, apesar de
não haver muitas ferramentas pré-fabricadas ou elas não ter nenhuma experiência no
dispositivo por saberem como as coisas tendem a ser montadas. Tal capacidade não é
necessariamente rara, mas é aquela que aqueles que se restringem a formatos conhecidos
ou ferramentas de alto nível tenderão a não ter (mais uma razão pela qual muitos hackers
de ROM têm reservas em confiar apenas em tais coisas).
Para este fim/por uma questão de clareza

ˆOs formatos de arquivo tendem a ter tamanhos de arquivo, carimbos mágicos, cabeçalhos e similares
coisas. Encontre-os e você começará a obter o resto/boas coisas.

ˆA técnica de obter vários exemplos de formato de arquivo e pular entre


fazer com que eles vejam as diferenças (mesmo olhando apenas alternando entre as guias em um editor
hexadecimal) é muito útil.

ˆA compressão tende a existir e ser uma variação do LZ ou humano ou algum


tipo conhecido

ˆOs formatos de arquivo tendem a corresponder bastante bem ao hardware ou a ser baseados em
formatos.

327
ˆMesmo que um jogo use uma codificação personalizada, provavelmente ainda terá mensagens de erro
e tal em ASCII ou Unicode.

ˆAs classes básicas de instrução permanecem as mesmas para cada CPU e também
são a base de todo programa.

ˆMesmo que o processador seja personalizado, provavelmente está relacionado a outro


processador existente e o próprio sistema provavelmente não emprega alguma
arquitetura nunca antes vista (ainda haverá gráficos, IO, opções de interface,
memória geral e armazenamento)

ˆSe você conseguir um sistema antigo ou um sistema de potência semelhante, você conhece (embora
Os arquivos destinados aos consoles domésticos de última geração foram eliminados dos formatos
portáteis), muitos deles permanecem bastante semelhantes em termos de formatos de arquivos (o GBA,
o DS, o GameCube e o Wii compartilham muitos formatos de arquivos básicos, se não em comum, pelo
menos em espírito). ).

ˆO que foi dito acima vale em dobro para sistemas verdadeiramente novos (o impacto para novos sistemas
pode ser muito grande, mas os desenvolvedores provavelmente desenvolveram para ambos os sistemas).

ˆTécnicas como corrupção e busca relativa podem ser bastante rudimentares, mas
eles não são específicos do sistema.

13 Truques de desenvolvedor, também conhecidos como pensar como um desenvolvedor

de jogos

Embora você possa gastar muito do seu tempo como hacker de ROM ponderando sobre as
implicações interessantes dos programadores trabalhando em um jogo ou mesmo
corrigindo alguns de seus erros, existem igualmente alguns programadores muito
inteligentes trabalhando em jogos. Uma implicação disso é que os desenvolvedores
empregam todos os tipos de truques para permitir que contornem as limitações do sistema
e, ao fazê-lo, criem jogos melhores. Os métodos para fazer isso variam do óbvio ao
inspirado e vários serão abordados nesta seção. Os melhores jogos e designers de níveis
muitas vezes usarão esses truques e os aplicarão no jogo de tal forma que as próprias
soluções alternativas se tornem parte da experiência do jogo (exemplos serão mencionados
em suas respectivas seções) e, de fato, podem até se tornar tropos do jogo. gênero.

13.0.1 Projeto de nível e mecanismo


Um truque que muitos aprendem cedo quando têm que lidar com crianças pequenas é dar-lhes a
ilusão de escolha (em vez de você querer calçar os sapatos, você quer os sapatos vermelhos ou os
sapatos pretos) e funciona surpreendentemente bem mesmo à medida que as pessoas
envelhecem. Isto é duplamente útil, pois os padrões de crescimento normalmente ficam muito
grandes, independentemente do modelo usado (mesmo o modelo básico de duas escolhas
levando a duas escolhas, cada uma levando a outras duas escolhas, termina bem na faixa das
centenas antes que dez escolhas sejam feitas) e permitindo que você terminar no mesmo ponto
eventualmente permite uma história unida, bem como menos trabalho, embora deva ser
observado que as pessoas escolhem escolhas simbólicas ou efetivamente escolhas simbólicas
cinco minutos antes do final.
Além disso, existem todos os tipos de truques psicológicos interessantes (as pessoas realmente não
gostam de perder coisas; veja declarações como “Tenho que recuperar meu dinheiro”

328
quando em estabelecimentos de jogos de azar ou na filosofia oposta adotada por alguns
métodos de jogo, as fichas não significam nada durante o jogo), muitos dos aspectos psicológicos
da teoria dos jogos, coisas como cronogramas de recompensa e acumulação de pontos/
experiência, economia comportamental, mas esses são abordados em outro lugar bastante
extensivamente, pois as pessoas estão usando-os com grande efeito e estudando-os
intensamente no momento.
Aqui em um jogo de corrida, a quantidade de voltas e reviravoltas nas colinas e outras coisas
(pontes e coisas assim) será mantida para minimizar a quantidade de tempo que o jogador gasta
olhando onde um ponto distante precisará ser renderizado.
Jogos como os primeiros jogos Metal Gear tornaram-se jogos furtivos devido à
incapacidade de renderizar e contabilizar grandes quantidades de inimigos na tela ao
mesmo tempo.
Design de mecanismo é na verdade um termo técnico que se enquadra na teoria
dos jogos e para este parágrafo e alguns dos seguintes a definição estará mais
alinhada com o termo/definição coloquial, mas alguns pequenos exemplos podem até
receber metade do que você compraria como novo (afinal, programar um modelo
econômico real é muito difícil)?
Variáveis ocultas e conceitos relacionados. Uma técnica/ideia interessante em que um conjunto de
regras de jogo não é totalmente explicado (embora ainda possa ser facilmente aparente para aqueles
que olham) e os jogadores são deixados a preencher os espaços em branco (ou não, conforme o caso).

As primeiras entradas da série Ninja Gaiden moderna tinham uma mecânica


interessante onde dependendo do momento em que você fazia os movimentos
(normalmente após pousar de um salto) coisas diferentes poderiam acontecer que não
foram mencionadas no manual, a série Elder Scrolls é bem conhecido por ter variáveis
ocultas controlando aspectos subjacentes do jogo (levando a vários guias detalhando o
mínimo de maximização do seu personagem), Borderlands tinha várias variáveis, mas
também subtipos ocultos de armas dentro do jogo e estatísticas ocultas para eles, as
pessoas também são conhecidas por atribuir um mecanismo oculto onde não há nenhum
(o próximo bloco de tetris para a maioria das versões do Tetris é aleatório ou aleatório de
certa forma32no entanto, devido a uma variação na falácia, memória ou presunção do
jogador, não será considerado aleatório) ou mesmo personificará um sistema (o jogo Left 4
Dead chegou ao ponto de personificar o sistema como o diretor na literatura que o cobre).

13.0.2 Reutilização de Sprites e paletas

Usado tanto que foi notado quando a paleta e a edição de imagens foram abordadas. Aqui,
uma quantidade limitada de memória (vídeo, armazenamento e outros) pode significar que
você pode estender seu aparente zoológico de monstros, habitantes da cidade e outros,
recolorindo-os. Também é um bom ponto colocar um pouco de geração processual/
regeneração dinâmica (especialmente em 3D, algumas mudanças nas cores e nos valores
de vários controles deslizantes podem ver um exército de clones se tornar uma nação de
indivíduos ou adicionar um pouquinho de a aleatoriedade na colocação de entidades
dentro de um grupo de inimigos em marcha faz muita diferença).

32Na verdade, as versões modernas do Tetris devem retirar aleatoriamente de um saco de escolhas possíveis antes de
reiniciar o saco e ir novamente para diminuir as possibilidades de um excesso aleatório da mesma peça, levando ao
potencial de contar peças para um jogador avançado semelhante àqueles que poderiam contar cartas (vários jogos de
tabuleiro também permitem sistemas semelhantes, geralmente cartas numeradas, para serem usadas no lugar dos
dados), o que significa que, no sentido mais estrito, uma corrida ruim será eventualmente seguida por uma boa corrida,
assumindo que as mesmas peças sejam desejadas.

329
13.0.3 Pré-renderização
Donkey Kong no SNES, assim como vários outros títulos da Rare, são
conhecidos por usar essas coisas, mas o jogo mais notável nos últimos
tempos seria a primeira série Resident Evil.

13.0.4 Desfoque de velocidade e neblina

A franquia Wipeout (uma série de jogos de corrida onde você passa grande parte da corrida indo
muito, muito rápido) é notável por usar um efeito de desfoque ao correr em alta velocidade,
originalmente e de muitas maneiras até hoje, ela cobria as menores habilidades de renderização
do dispositivos em que foi portado.
Nevoeiro é um conceito relacionado que visa compensar a capacidade nada
brilhante de renderizar tudo, desde o seu ponto de vista até o horizonte.

13.0.5 Carregando tampas

Os jogos (especialmente em discos, mas os jogos baseados em cartuchos e discos rígidos não
estão imunes a isso) eventualmente precisam ser carregados e demoram o suficiente para que
isso não possa ser feito nos bastidores. Incontáveis exemplos aqui, desde práticas de
movimento em telas de carregamento, carregamento de túneis/pontes em vários jogos de
mundo aberto, animações e imagens usadas para mascarar o carregamento de ambos no jogo
(Portas Resident Evil são um bom exemplo, mas remonta a fitas onde os jogos C64 teriam
imagens e talvez até minijogos) e fora do jogo (os créditos do desenvolvedor no início de um jogo
frequentemente fazem mais do que indicar os nomes das empresas que contribuíram para
produzi-lo, pois qualquer pessoa que tente diminuir o tempo de carregamento inicial deve estar
ciente de).

13.0.6 Otimização de carregamento

Se isso se enquadra na programação do bem geral ou em outra coisa, fica


guardado para um debate diferente, pois é útil saber.
Isso foi visto em muitas ocasiões e, de fato, muitos métodos de execução de código
copiado em consoles originais são frequentemente superiores porque o ignoram e, de fato,
consoles como o PS3 e o Xbox 360 terão opções para instalar jogos em um disco rígido para
ajudá-lo, mas o carregamento de dados de um meio lento, como um pedaço de mídia
óptica, tem sido um gargalo, então os desenvolvedores tentam várias coisas para obter
vantagem.
Um dos exemplos mais notáveis veio no sentido contrário (os jogos copiados tiveram
problemas onde o original estava OK) e foi para Star Wars Knights of the Old Republic no
Xbox original. Aqui, as pessoas a princípio copiavam os jogos arquivo por arquivo (era mais
fácil se você tivesse um Xbox padrão que tivesse apenas cerca de 5 gigabytes de espaço em
disco para trabalhar, o que é menor que um DVD de camada dupla), mas quando
reconstruído o jogo veria lentidão e pausas de carregamento onde o original não foi
perturbado. Mais tarde, descobriu-se que os desenvolvedores do jogo otimizaram o layout
de certos dados no disco para que ficassem mais próximos (tempo de busca mais lento) e
mais rápidos para leitura, em média (o código na borda do disco geralmente é acessado
mais rápido, mesmo mesmo que apenas por quantidades fracionárias).

330
Também aconteceu que um método de proteção contra cópia visto no DS no jogo Houkago
Shounen (sem dúvida o primeiro título a usar proteção contra cópia/AP) cronometrava o
salvamento e o carrinho de cinzas, que era mais rápido na maioria dos casos, seria detectado.

13.0.7 Imagens 3D em geral


O campo de imagens 3D forneceu uma série de técnicas que os desenvolvedores
podem usar para melhorar a aparência das coisas (e muitas vezes serão
percebidas quando falharem).

substituição de textura 2dVários métodos aqui, incluindo coisas básicas como camarotes,
mas também incluindo objetos distantes sendo substituídos por versões renderizadas em
2D do que parecem ser para economizar esforços de renderização.

Mapeamento mip de texturaLeia um livro do outro lado da sala. O texto que seria muito
claro quando visto de perto provavelmente parece um borrão cinza-preto até você se
aproximar. Da mesma forma, objetos distantes podem ter suas texturas reduzidas em
resolução, de modo que tenham que renderizar menos detalhes.

Renderização de ponto de vistaBastante óbvio, mas você só precisa renderizar tudo o que a
câmera vê. Alguns efeitos interessantes podem ser vistos onde jogos de gamecube que
normalmente eram feitos para usar uma proporção de aspecto 4:3 foram hackeados para usar
480p.

Seleção da face posteriorPartes de modelos 3D que não são renderizadas nesse ponto
geralmente ficam claras/não renderizadas na tentativa de reduzir a quantidade de detalhes
que precisam ser renderizados.

Usos alternativos do BackfaceSe você tiver um item que normalmente não é visto ou
não é visto de um determinado ângulo, você pode usar o verso para segurar outra
coisa. A placa de New Super Mario Brothers no DS é um bom exemplo.

Não renderizando objetos ocultosSurpreendentemente, isso não foi feito há relativamente pouco tempo
em muitos jogos 3D. Aqui, se um item estiver bloqueado para visualização, ele tenderá a não ser
renderizado.

Mapeamento dinâmico de texturasAqui, além de todos os métodos acima, as próprias


texturas podem não ser mapeadas até o último momento.

Sombras e iluminaçãoEmbora os outros métodos tenham coisas muito interessantes


acontecendo neles, as coisas que envolvem a replicação da luz e o conceito relacionado de
sombras são mais uma vez objeto de documentos muito mais longos do que este. As coisas
básicas incluem as várias aproximações de modelos matemáticos para coisas que vão
desde sombras, tipos de reflexão/coloração (ambiente, difuso, emissivo e especular) e os
modelos de reflexão. Em uma frente mais básica, a falta de sombra em um item,
especialmente em um mundo ostensivamente real, é bastante perceptível (é sem dúvida
uma variação do conceito de vale misterioso), mas se você colocar uma sombra circular
simples, ela percorrerá um longo caminho. para evitar que seja tão perceptível.

331
A maioria dos sistemas mais antigos usará sombras circulares básicas ou as terá e um tipo de
sombra mais convencional ao mesmo tempo.

13.0.8 Geração processual


Já foi abordado em outro lugar, mas precisará ser mencionado novamente. Aqui você
provavelmente tem coisas que tem certeza de que deseja que aconteçam em um jogo, mas tudo
no meio pouco importa, desde que esteja dentro de certos parâmetros. Se esses parâmetros
forem aleatórios dentro de um determinado intervalo, isso pode economizar muito trabalho de
design (lembre-se da menção aos padrões de crescimento anteriores), economizar muito espaço
de memória, mesmo que você tenha colocado o trabalho de design e garantir muita capacidade
de reprodução. se feito corretamente.
Agora, embora haja muito a ser dito sobre regras de certos campos que permitem que
coisas boas sejam feitas, a história está repleta de exemplos de mestres de uma arte ou
ciência que quebraram várias regras e no processo criaram algo muito especial, por isso
não é uma cura milagrosa mas ainda é uma ferramenta muito boa. Poucos hacks de ROM
adicionaram algo gerado processualmente onde não havia nenhum antes, mas isso poderia
ser um hack interessante.
Outro lado disso é quando se tem que gerar fumaça (historicamente uma coisa bastante
complexa de se fazer corretamente) um método simples é usado, mas com a adição de alguns
fatores faz com que seja alterado a ponto de ser necessária uma análise matemática (por um
breve período). amostra suficiente, cada pedaço de ruído aleatório pode ser dividido em uma
série de ondas senoidais).

13.0.9 Ruído em imagens e sons.


Alguns sistemas até permitem isso no hardware. O olho humano/sistema visual
percebe padrões e detalhes muito bem e uma das maneiras fáceis de tirar
alguém de algo que deveria parecer real é torná-lo muito limpo (tudo alinhado ou
usando linhas retas) e muito claro. Através de uma simples aplicação de algum
ruído isto pode ser anulado ou seriamente diminuído.

13.0.10 Usando os limites do sistema/trabalhando com eles


Reproduza uma peça de áudio idêntica para alguém não versado em teoria de áudio em dois
níveis diferentes de volume e na maioria das vezes você ouvirá que o clipe mais alto soou melhor.
Existem conceitos semelhantes para contraste e nitidez em coisas visuais e todos são bastante
conhecidos tanto por pessoas que querem vender coisas a você quanto por pessoas que têm que
lidar com coisas que foram vendidas a pessoas, então os desenvolvedores jogam em ambos os
campos com bastante frequência e adaptam seus jogos a combinar.
É claro que isso pode ser ruim se você tiver um sistema configurado corretamente ou
um modelo posterior do sistema que lide melhor com as coisas.
Paletas GBA. O primeiro modelo de GBA não tinha uma tela iluminada e isso fazia
com que muitos jogos parecessem bastante escuros na maioria das condições (e um
portátil tende a querer ser jogado quando está fora de casa), então os
desenvolvedores iriam aumentar o contraste, o que era bom e uniforme. agradável no
GBA original, mas quando o jogo SP em torno do qual tinha luz, alguns dos jogos
pareciam um pouco desbotados. Desde então, houve vários hacks para portar a paleta
de cores original, caso fosse uma porta (ajudada pelo GBA e SNES, geralmente um
esquema bastante semelhante) ou melhorá-la de outra forma.

332
Um incidente um tanto relacionado pode ser os métodos pelos quais a Apple e a Microsoft
escolheram renderizar fontes, eles escolheram maneiras diferentes e no final, mesmo que não
soubessem ou conhecessem a lógica subjacente, parece que as pessoas acostumadas com
qualquer um dos sistemas escolheriam e a segunda alternativa é um tanto desagradável de ver.
Não é tanto um problema nos dispositivos portáteis, onde as fontes ruins geralmente são apenas
isso (muito estreitas, muito pequenas, mal coloridas, de outra forma ilegíveis...), mas nos consoles
domésticos que foram e ainda são forçados a ultrapassar os padrões de vídeo mais antigos. e os
mais recentes, apelidados de HD, falharam aqui no que diz respeito ao dimensionamento de suas
fontes.
Foi mencionado anteriormente, mas alguns sistemas mais antigos que foram forçados a
passar por métodos de RF para entrar em uma TV costumavam dizer que as coisas ficariam um
pouco mais confusas, de maneira semelhante à ideia de ruído mencionada na seção anterior.

13.0.11 Codificação de rede


Uma das citações clássicas dos dias do terremoto FPS é algo como se todo mundo
diminuísse o ping, o que obviamente não pode acontecer diretamente (embora haja coisas
que podem ser feitas para diminuí-lo no lado do usuário, geralmente trocando de
equipamento), mas em várias maneiras pelas quais o movimento pode ser previsto com
uma precisão razoável (teletransporte à parte, você provavelmente não aparecerá do outro
lado do mapa e se de fato um objeto em movimento tende a permanecer em movimento,
sua direção e velocidade podem ser usadas para prever onde você vai ser). Embora as
conexões tenham aumentado em velocidade, elas realmente não melhoraram na frente da
latência (que ainda está dentro dos domínios da percepção humana), mas a codificação de
rede melhorou, então coisas são feitas para prever o movimento e resolver conflitos aqui.
Às vezes não é tão eficaz, mas muitas vezes é e você pode querer ajustá-lo.

14 Design de jogos e mídia


Há uma longa história de pessoas envolvidas em ciência e engenharia e pessoas envolvidas
em atividades mais artísticas que não concordam (na verdade, há uma boa chance de que,
depois que você, como hacker de ROM, tenha descoberto um formato e talvez feito uma
prova de conceito de que você vai entregá-lo a um artista para torná-lo bonito), mas vale a
pena conhecer o básico do outro lado, pois isso ajudará a descobrir por que algo foi feito,
permitirá que você imagine como você pode melhorar algo e pode até mesmo permitir que
você faça algo que de outra forma consideraria impossível (na verdade, como mencionado
em outro lugar, toda a IA do jogo é baseada na tentativa de usar uma combinação de
rotinas simplistas para fornecer algum desafio a um ser humano que, pelo menos por
enquanto, é muito mais inteligente do que a máquina com a qual estão brincando e muito
diferente em termos de lógica operacional) ou pelo menos trabalham de forma mais
eficiente dentro de limites.
Agora, esses campos estão um pouco fora do escopo deste documento, mas se
você está lendo isto, é provável que tenha a Internet e, como tal, vale a pena notar
que a discussão de alto nível sobre tópicos, incluindo jogos, produção de vídeos/
filmes, obras literárias (ambas de ficção e técnicas argumentativas) e as convenções e
expectativas de cada meio estão prontamente disponíveis, bem como mais assuntos
como psicologia e teoria dos jogos.

333
Relacionado a isso está o conceito de que os desenvolvedores de jogos e as equipes de
localização geralmente estão sob muita pressão para lançar o jogo em uma determinada
data com certas restrições e, como tal, podem cortar atalhos que você pode explorar ou ter
que contornar.

15 Python, arquivos em lote e programação para hackear


ROM
O hacking de ROM tem tradicionalmente favorecido C, C++ e visual basic como linguagens
de programação preferidas, embora agora algumas incursões tenham sido feitas em C# e
linguagens relacionadas (VB.net), pois são muito boas na criação rápida de ferramentas
orientadas por GUI e C simples tem caiu um pouco em desuso. Surpreendentemente e em
deferência a grande parte do resto da computação (ela é ensinada como uma das principais
linguagens em muitas escolas de computação e é usada em todos os lugares, como
qualquer pessoa que teve que administrar software corporativo/de negócios lhe dirá) Java
não tem grande destaque e nem muitas outras linguagens de alto nível, como perl, lisp e o
assunto desta seção, python, embora isso certamente não queira dizer que essas
linguagens não tenham tido ótimos programas orientados para hacking de ROM feitos com
elas. Se for uma escolha entre aprender a linha de comando/scripts bash e aprender
python, então aprenda a linha de comando/bash, mas um pouco de python irá ajudá-lo a
fazer muito.

15.1 ferramentas de engenharia reversa radare2


Se você administrou o restante deste documento, a programação não será necessariamente
difícil para você. No entanto, como tem que ser capaz de fazer muitas coisas, pode ser mais chato
fazer um programa simples se você tiver que configurar tudo. Da mesma forma, foi observado
que, apesar de frequentemente terem algumas habilidades sérias relacionadas à programação, e
provavelmente conhecimento de como os formatos de dados são construídos do que a maioria
dos outros por aí, nem todos os hackers de ROM podem facilmente derrubar um programa para
executar uma determinada tarefa (embora linguagens mais modernas como python e C# são
muito capazes e não são tão difíceis de aprender). Várias ferramentas executam vários aspectos
do hacking de ROM de uma maneira que é menos estranha do que uma linguagem de
programação (embora obviamente menos capaz do que uma linguagem de programação
adequada), menos propensa a induzir tédio do que manualmente e mais versátil do que algumas
das ferramentas específicas da área. ferramentas.
A ferramenta sugerida hoje em dia provavelmente seria o radare2 (às vezes chamado
de r2), que apresenta muitas coisas interessantes. A escolha anterior do programa era
chamada ROMulan, mas sua licença foi considerada um pouco restritiva para ser mais o
programa sugerido.
A documentação tem uso básico, mas as principais vantagens são a fácil integração em
scripts, extensibilidade por meio de plug-ins e coleção de funcionalidades relacionadas a
hackers incorporadas a ela.

15.2 Linguagens de programação


Antes de passar para o python, se você estiver procurando por uma linguagem de computador
para usar com hacking de ROM, existem alguns requisitos, embora na maioria dos casos eles não
precisem ser rápidos, a menos que você esteja lidando com compactação e

334
funções de pesquisa complicadas, embora mesmo assim, com pessoas que tendem a ter
processadores multi-core na faixa de gigahertz, desde que funcione dentro de duas ordens de
magnitude de uma linguagem rápida, você provavelmente também conseguirá fazer isso. No que
diz respeito ao código aberto, a menos que você seja obrigado a fazê-lo (usando um programa
GPL como base para o seu, por exemplo), não há nenhum estigma real associado a manter as
fontes fechadas nos círculos de hackers de ROM (a maioria dos hackers de ROM que constroem
ferramentas não são estranhos para fazer um pedaço de código espaguete para realizar o
trabalho que não é útil para ninguém que esteja aprendendo ou que queira adaptar/adaptar seus
trabalhos), embora o código aberto seja sempre bem-vindo e encorajado (formatos de arquivos e
estruturas de dados/ROM, por outro lado, tendem querer ser compartilhado).

1. Deve ser capaz de abrir qualquer arquivo. Isso geralmente inclui SQL e outras
linguagens de tipo de banco de dados, linguagens focadas em matemática e
estatística (R e matlab, por exemplo) e outras linguagens de programação específicas
de campo (avisynth, por exemplo). Pode ser possível, mas será uma dor de cabeça no
longo prazo.

2. Deve ser capaz de fazer manipulação binária (deslocar e girar para baixo para
um nível de 1 bit e incluir lógica booleana (AND, XOR, OR, NOT...). Algumas
linguagens não funcionam bem aqui, mas a maioria delas geralmente é
descontado graças ao ponto acima. Igualmente, é melhor se tudo isso vier
como uma função padrão na linguagem ou nas bibliotecas básicas/padrão dela,
pois ter que fazer a sua própria não será divertido.

3. A criação de GUI deve ser relativamente fácil. As ferramentas de linha de comando são
ótimas e, se possível, incluem opções de linha de comando (você nunca sabe quando algo
vai querer ser colocado em um arquivo em lote) e você sempre pode construir um wrapper
em outra linguagem se seu programa for apenas de linha de comando, mas se você pode
usá-lo para construir uma GUI, bem como os pontos acima, você provavelmente tem uma
boa escolha para um idioma.

15.3Píton
Existem muitos livros, mas Think Python é um dos melhores para pessoas que conhecem
conceitos de computação e hacking de ROM e lutam para segurar as mãos, foco em que
muitos livros de programação aprendem. Em uma nota semelhante, grande parte do
Apress Beginning? As séries Do Iniciante ao Profissional também são boas para quem
conhece conceitos, mas só precisa de tudo um pouco focado. As videoaulas UNSW Comp
1917 também fornecem uma boa introdução a muitos conceitos.

16 hackeamento de programas de PC

Mais uma vez, esta é uma seção que vale a pena e contém documentos muito mais longos do que
esta, apenas sobre coisas individuais. Muito do que foi dito até agora se aplica à medida que
formatos de arquivos personalizados e comuns são usados, a compactação é usada e o assembly,
embora agora x86 e x64, está de volta aos cartões, mas há diferenças bastante grandes, assim
como o PC, seja qual for o sistema operacional. você usa tem um sistema de segurança e vários
métodos bastante complexos de trabalho, a criptografia (geralmente ruim e mais próxima da
ofuscação, que é outra coisa popular de se fazer e, como tal, capaz de ser derrotada) é popular e,
mais importante, as linguagens usadas e as APIs disponíveis são muito mais extensos.

335
Falando em segurança, esta seção não cobrirá alguns dos aspectos de nível mais alto
da proteção contra anulação, pois eles podem se envolver bastante e o campo está se
movendo bastante rapidamente, sem mencionar se você entendeu a idéia por trás de
alguns dos métodos de proteção contra anulação (com a nota adicional que alguns
programas de PC modernos podem buscar e buscam trechos de código realmente úteis da
Internet/redes) e como contornar a ofuscação (um truque interessante é otimizar o
programa), é melhor se aventurar na Internet e assistir a vídeos de conferências. Da mesma
forma, esta seção não cobrirá nada sobre programas de hacking na tentativa de colocar o
controle do computador nas mãos de um invasor (veja novamente os vídeos da conferência
e em outros lugares na Internet) ou qualquer coisa sobre trapaça (funciona da mesma
forma em qualquer sistema). Basicamente, esta seção tratará de engenharia reversa
puramente funcional de programas onde não existem tentativas mínimas de evitá-la.

Apesar das diferenças, existem várias grandes vantagens


Os programas de PC, de muitas maneiras, podem ser depurados com muito mais facilidade do que
muitos dos sistemas ROM que os hackers estarão analisando (embora os emuladores contem muito
aqui).
Os programas de PC usam comumente linguagens de alto nível que frequentemente
permitem a descompilação e/ou simplificação massiva para a engenharia reversa.
Também deve ser observado que às vezes a engenharia reversa completa não é necessária e, em
vez disso, apenas como as funções são chamadas em um programa (muitos programas são apenas
interfaces para arquivos DLL personalizados).

Embalagem executável e criptografiaEmbora você sempre possa usar um desmontador,


dos quais existem vários disponíveis com a ferramenta padrão sendo IDA (no que diz
respeito ao X86, há uma versão paga e uma versão freeware que geralmente é apenas a
versão paga, mas várias versões anteriores), muitos os programas de computador terão
executáveis compactados e/ou usarão criptografia e ofuscação. Para esse fim, embora
você possa simplesmente alimentar um diassembler com algo se ele estiver compactado ou
criptografado e apenas renderizado em tempo de execução, você apenas obterá algo sem
sentido.

16.1 Depuração
OllyDbgi é o que a maioria das pessoas tem como ferramenta de nível básico e fornece um bom
desmontador e ferramentas básicas de depuração/listagem.
O mecanismo de cheat funciona de maneira semelhante ao emuhaste abordado
na criação de cheats.
Mais abaixo na linha você tem coisas como
Visualizador de exportação de DLL para ter uma ideia aproximada de quais são as opções de entrada dos
arquivos DLL (e nomes de funções) e escopo.
GDIView (fontes abertas e como elas são definidas e coisas semelhantes) Visualizador de IO
de dispositivo para quando você precisar fazer engenharia reversa de drivers. A Nirsoft abriu
o visualizador para saber quais programas abriram o quê e também existe o Process Explorer
que faz coisas semelhantes.
Rec tenta transformar programas desenvolvidos em C novamente em algo semelhante
ao código-fonte.
Como mencionado, a grande ferramenta da qual a maioria das pessoas acaba tendo
uma cópia é o IDA, pois é tanto desmontador quanto depurador, o que permite muitas
habilidades aqui.

336
16.2 Descompilação
Tradicionalmente, a compilação era uma maneira única de33e, de fato, a maior parte da
programação paga gira ou talvez girasse em torno desse conceito. À medida que as pessoas
continuam a pesquisar em ciência da computação e usam linguagens de nível superior, a
descompilação, que é o ato de transformar um arquivo binário em código-fonte (provavelmente e
infelizmente sem comentários), torna-se cada vez mais viável. Isso não deve ser confundido com a
engenharia reversa como um todo, que sempre foi capaz de ser feita (na verdade, a maior parte
deste guia visa ensinar métodos para fazer isso), embora muitas vezes seja necessário muito
tempo para fazê-lo.

Linguagens interpretadasEm geral, qualquer coisa que não esteja diretamente relacionada a C ou
Assembly provavelmente será uma linguagem de script/interpretada, em oposição a uma
linguagem verdadeiramente compilada (as linhas podem ficar muito confusas, como o C#
provavelmente demonstrará). No entanto, em vez de deixá-lo como código legível por humanos,
haverá uma conversão para algo conhecido como bytecode (ainda é mais rápido manipular boas
seleções de números de comprimentos conhecidos do que analisar uma seleção completa de
texto legível por humanos que pode ter qualquer comprimento, embora existam também
ferramentas que ajudam a encurtar isso) que eventualmente serão transformadas em instruções
de montagem (às vezes no início da execução e às vezes logo antes de serem necessárias- uma
técnica conhecida comoJ.apenasEUnTcompilação ime), mas esse bytecode pode frequentemente
ser transformado novamente em código-fonte. Existem inúmeras linguagens interpretadas, mas
se você procurar por descompilador e pela linguagem interpretada que deseja descompilar,
geralmente obterá algo. Naturalmente, existem maneiras de ofuscar intencionalmente ou não
seu programa e, de fato, alguns dos tempos de execução de linguagens interpretadas oferecem
métodos para fazer isso em vários níveis.

C#Embora o C# seja, estritamente falando, uma linguagem compilada muito parecida com
os predecessores C e C++ e outros membros da família C, ele vem com uma coleção muito
grande de bibliotecas e tempos de execução (uma das principais razões para sua criação
foi, de fato, fornecer um coleção padrão deles para impedir que os programas tenham
muitas e variadas versões em todo o sistema) que podem ser chamados por programas
que usam a linguagem. Sabendo disso, diversas ferramentas foram criadas para remover
as chamadas e formular como elas são chamadas, deixando apenas o código personalizado
real que foi criado em primeiro lugar. Existe uma variedade de ferramentas para isso,
sendo algumas das mais populares ilspy (código aberto), dotPeek (freeware) e .NET Re ector
(pago)

33Existe um problema conhecido como problema da parada que gira em torno do fato de que você pode
produzir um algoritmo que não pode produzir um resultado a partir de todas as combinações de entradas (o
exemplo clássico, embora um pouco instável, seria qual é a raiz quadrada de menos um?) . Na prática, isso
normalmente é visto que você não pode avaliar um programa para todas as entradas possíveis e também se
baseia na ideia de que a entrada humana é meio difícil de imitar/considerar e é necessária para o funcionamento
do programa. No entanto, você pode aproximar soluções e executar programas na tentativa de obter uma saída
típica ou um conjunto restrito de entradas (embora você possa colocar entradas em uma função que causa um
erro, grande parte da programação moderna é projetada para evitar que aconteça - muitas vezes sendo tanto o
causas de travamentos e meios pelos quais os hackers podem fazer o que fazem), que é o que a pesquisa de
descompilação tem feito muito esforço, sem mencionar os modernos processadores X86 (e compiladores e
técnicas de codificação para eles) que tentam prever o mais lógico caminho e faça-o antes que seja solicitado.

337
CA descompilação de C++ não está tão avançada neste momento, mas a
descompilação de C está um pouco mais avançada do que no passado e
ferramentas como REC usadas em conjunto com os métodos de tipo de
depuração acima podem fazer muito para fugir da montagem.

17 Controle de versão e gerenciamento de projetos.


As duas grandes razões para os projetos serem abandonados são pessoas sem habilidades para
fazer o trabalho, o que é resolvido ganhando habilidades e não traduzindo o melhor e mais
recente RPG épico de 90 horas quando você está aprendendo a hackear e falhas no
gerenciamento de projetos, o que significa que as pessoas não o fazem. tenha a chance de fazer
coisas ou acabe esperando pelos outros e tudo desmorona conforme as pessoas passam para
outros projetos.

17.1 Gerenciamento de projetos e equipes


Vários termos são usados aqui e a ideia é popular em toda a sociedade. Embora
em muitos casos tenha sido justamente castigado e ridicularizado, há algumas
coisas que podem ser aprendidas com ele. A maioria das pessoas, ao formar uma
equipe, tende a reunir pessoas com habilidades diferentes para,
esperançosamente, alcançar algo maior do que conseguiriam sozinhos. Não há
uma ideia unificadora por trás desta seção, mas algumas reflexões e
observações.

TraduçãoExistem três funções comuns nos esforços de tradução, sendo a tradução


propriamente dita uma, a edição da tradução para efeitos do jogo sendo outra (pode
haver limites de comprimento e espaço na tela) e a revisão (que idealmente não é
conduzida por qualquer um dos dois primeiros), que também pode ser amalgamado
em edição geral. Várias traduções tentaram omitir o último (tanto profissionalmente
quanto em projetos de hacking de ROM), o que muitas vezes leva à necessidade de
uma limpeza mais tarde na vida. Mais uma vez, loekalization.com tem muitas coisas
interessantes sobre o assunto e a caixa de ferramentas de tradução da Densetsu é
outro recurso valioso.

Hack de ROMMuitas vezes há dois tipos de hackers na equipe e isso geralmente


significa que um deles faz muitas tarefas básicas mais longas (é uma gafe pedir uma
mesa para um jogo, a menos que o jogo faça algo estranho na codificação de um
jogo). motivo) e outro para ajudar com conceitos de nível superior e talvez montagem
com o segundo talvez não sendo membro permanente da equipe. O desenvolvimento
de ferramentas também tende a ser dividido igualmente entre os dois grupos.

Arte e músicaHoje em dia, provavelmente justifica ser dividido em 2D e 3D e talvez também


em fontes, embora na maioria das vezes, ao hackear, as fontes existentes sejam adaptadas
para uso ou pequenos ajustes nas que vêm com um jogo, em vez do desenvolvimento real
da fonte. Ainda assim, à medida que as coisas ficam mais detalhadas (não que o 2D não
tenha sido assim há décadas), é altamente recomendável ter pessoas em uma equipe
apenas para lidar com obras de arte e música do lado criativo das coisas.

338
Designers de níveisConcedido com a maior parte do hacking de ROM normalmente focado
em esforços de tradução ou projetos solo (ou seriam projetos solo com alguns membros da
equipe de habilidades semelhantes) e igualmente a maioria das pessoas que estão
pensando em hackear um jogo geralmente entenderão muito disso. em um nível intuitivo,
essa função não é tão comum quanto no desenvolvimento geral de jogos ou mesmo em
jogos de modificação para PC. No entanto, com os editores de níveis sendo criados e a
edição de níveis acontecendo, sem mencionar a ideia de conversões totais, a ideia de ter
um designer de níveis como membro da equipe talvez não seja tão estranha como era
antes. Além disso, a ideia da teoria dos jogos e da psicologia relacionada foi mencionada
algumas vezes no documento e relacionada a isso está a ideia do design do mecanismo,
pois do ponto de vista da programação multiplicar por 4 não é diferente de multiplicar por
7 (ignorando ideias como excesso de fluxo e limitações de tamanho), mas uma taxa de
geração de experiência quase o dobro de outro (veja alguns dos servidores de terceiros
para jogos como World of Warcraft e as críticas daqueles quando aumentam os
multiplicadores de experiência), uma progressão de pontuação duas vezes maior que a de
outro e especialmente em jogos como aqueles que podem ser descritos como estratégia
em tempo real, uma velocidade de batalha duas vezes maior que a de outro torna o jogo
radicalmente diferente.

gestor de projeto Na vida real, isso pode ser um papel, mas no que diz respeito ao hacking de ROM
Geralmente é uma função adotada por uma única pessoa dentro de uma equipe
(geralmente uma com uma função bastante limitada ou que nem sempre será necessária
ao longo de um projeto). Houve alguns gerentes de projeto em hacking de ROM, mas na
prática parecem ser aqueles que podem estar apenas emprestando algumas habilidades
para um projeto (digamos, um hacker capaz de editar texto e coisas assim, mas menos
habilidoso em montagem) ou alguém que tenha gerenciou anteriormente um projeto
(levando a uma situação complicada em que experiência é necessária, mas obter
experiência não acontecerá a menos que você já a tenha).

Gerenciamento de pipelineO caso mais básico disso é o software de injeção de texto. Os outros
membros da sua equipe podem ter habilidades incríveis em outras áreas e níveis razoáveis de
habilidade técnica, mas ainda assim pode ser sua responsabilidade. Se você tiver que editar
manualmente 3.000 arquivos separados, fica muito tedioso muito rápido, então automatizar um
pouco disso é importante e da mesma forma corta o caminho inverso e se o seu tradutor tiver
que visualizar e editar em um editor hexadecimal ou lidar com uma montanha de extras de
programação provavelmente não irá bem. Geralmente é aqui que aparecem o controle de versão
e coisas que um dia podem acabar como gráficos de Gantt.

17.2 Controle de versão


Geralmente associado à programação e, mais recentemente, ao grande desenvolvimento e, na
melhor das hipóteses, fracamente observado pelos hackers ROM no que diz respeito aos projetos
reais (as ferramentas de programação são uma questão diferente), no entanto, há algumas coisas
que podem ser aprendidas com isso. Como sempre, ele vem com uma coleção de termos
específicos de campo, mas a maioria deles geralmente foi aprendida por meio de software
(especialmente software de código aberto) na última década ou mais. Still A Visual Guide to
Version Control tem uma boa explicação de muitos dos conceitos.
Existem inúmeros padrões, sendo alguns dos maiores

339
ˆCVS Embora isto esteja rapidamente saindo de moda, pois não está sendo
desenvolvido, é um dos métodos mais antigos e tem uma longa história.

ˆMecurial Uma opção relativamente nova no controle de versão, mas como oferece vários recursos interessantes
recursos, tornou-se bastante popular a ponto de começar a acompanhar os
métodos mais antigos.

ˆsvn também conhecido como subversão. Já existe há um bom tempo e mais ou menos se tornou
o sucessor do CVS quando este parou de ser desenvolvido, embora os outros
mencionados tenham feito grandes progressos nele.

ˆGIT Outro relativamente novo, mas ganhando popularidade rapidamente.

ˆFossil Algo como uma ferramenta autônoma, se você quiser, mas


capaz de configurar servidores web (inclusive locais) com um pequeno wiki e um
checkout e muito mais conforme necessário e pode ter acesso ajustado.

ˆPerforce O único software pago nesta lista (existem muitos outros softwares pagos
sistemas de controle de versão de software), mas bastante comumente usado no
desenvolvimento de jogos reais.

Além disso, seu tradutor pode desejar uma classe de ferramenta relacionada para usar para isso.
Eles são conhecidos como ferramentas CAT (tradução assistida por computador) e são
praticamente obrigatórios nos domínios da tradução profissional e visto que você no campo de
hacking de ROM está indo contra eles, vale a pena ver o que eles fizeram antes de você, mas isso
está coberto de volta em hackeamento de texto.
Voltando ao tópico, você pode usá-lo para armazenar especificações que você está fazendo
engenharia reversa, arte e música que você precisa converter, texto que você extraiu, programas
personalizados que você está fazendo para a edição (muitas vezes você pode construir um
programa básico e editar em especificações cs, portanto, poder voltar para seu próximo
programa/projeto é ótimo - lembre-se de que a programação sempre trata da reutilização de
códigos e conceitos existentes), bem como de patches concluídos como um todo. Feito
corretamente, também permitirá que outros continuem caso alguém desista.
Geralmente é considerado obrigatório para projetos de programação profissional hoje em
dia e voltando aos extras deixados pelo desenvolvedor, muitas vezes há pequenos arquivos
gerados por essas ferramentas que são deixados em ROMs que podem fornecer algumas dicas.

18 Links interessantes e leituras adicionais.


Muitas áreas até agora tiveram que ser ignoradas ou não receberam a atenção
que mereciam, seja porque são campos em si ou porque, apesar de existirem em
outros lugares dos jogos, podem não ser imediatamente relevantes para o GBA e
o DS. O objetivo é fornecer alguns termos de pesquisa e links para começar a
analisar essas coisas de maneira mais aprofundada.

18.1 Links
Esta seção será principalmente um despejo de links de todos os links em outras partes deste
documento.

340
18.2 Leitura adicional
Há muito mais para aprender e que os jogos usarão com o passar do tempo (já
no lado do PC, os jogos são vistos usando técnicas de programação de banco de
dados, por exemplo, veja algumas das coisas que entraram na engenharia
reversa do World of Warcraft ).
A seção 3D abordou um pouco disso, mas com o hardware GBA e DS sendo tão
limitado, alguns dos aspectos dos modelos de texturização e iluminação foram, na melhor
das hipóteses, ignorados e, na pior, totalmente omitidos.
A teoria dos jogos foi brevemente mencionada e, embora seja bastante
perigoso aprender se você quiser continuar se divertindo (é realmente o
equivalente a ver como os truques são feitos), suas aplicações são quase infinitas.
De maneira semelhante, aprendendo sobre certos aspectos da psicologia a partir de
coisas mais práticas, como a psicologia visual, que informa muitos aspectos dos jogos
(sabemos que os humanos tendem a ver o movimento, mesmo que sejam quadros
estáticos reproduzidos a uma taxa de cerca de 17 quadros por segundo , sabemos que o
olho humano detecta melhor a luminância (brilho) do que as cores (e o azul é mais difícil de
detectar bem) e que certas partes do quadro têm maior probabilidade de não ter erros
notados (isso leva à ideia de a matriz de quantização)) até coisas mais filosóficas/
sociológicas, como O Herói de Mil Faces, de Joseph Campbell, que detalha as semelhanças
entre mitologias e pondera como elas podem se aplicar mais em geral aos humanos.
Relacionado a isso estão alguns dos aspectos do cinema e da fotografia e como as coisas
funcionam lá, pois os jogos são um meio amplamente visual e apesar de todo o conteúdo
técnico deste documento os jogos contam histórias e transmitem conceitos de forma
criativa e vendo o trabalho que o envolveu pegando um sprite 2D básico e usando-o para
gerar um modelo 3D, codificação manual em ASM usando áreas matemáticas recém-
desenvolvidas um mecanismo 3D aprimorado que ultrapassa os limites do hardware para
fornecer recursos não vistos deste lado de lugares com fazendas de renderização que não
funcionam bem do ponto de vista da narrativa, já que você não enquadrou a câmera
corretamente / usou a composição adequada é, em muitos aspectos, bastante trágico.

341
Parte IV
Formatos de arquivo (especificações,
métodos e formatos conhecidos).
Esta parte tem como objetivo detalhar alguns dos formatos de arquivo básicos que são
conhecidos quando se trata de imagens DS ROM, bem como alguns formatos mais
avançados e incomuns. Também aqui estão algumas visões gerais rápidas do hardware DS
e alguns guias para separar formatos.

19 coisas gerais sobre o DS


Hardware, memória DS 2d, DS 3d, som DS,

20 Formato DS nitro SDK genérico


Formatos de arquivos que podem não necessariamente ter sido vistos antes, mas
provavelmente começaram como uma variação dos formatos SDK vistos no DS,
tendem a ter um certo conjunto amplo de características que fazem parte do layout.
Na maioria das vezes será little endian ao longo da seção, mas há alguns desvios aqui.
O primeiro é geralmente um nome ASCII de 4 caracteres (mas ocasionalmente mais)
que se a extensão ainda não o classificou, isso acontecerá em breve (provavelmente será
usado, mas isso não é certo).
Normalmente em torno do byte 8 haverá um valor que .
Localização (hexadecimal) Tamanho (bytes) Descrição
0 4 Selo mágico ASCII exclusivo para o formato de arquivo
4 4 Preenchimento (outros formatos usarão tamanho)
8 2 ou 4 Tamanho do arquivo inteiro ou seção se estiver em um contêiner

C 2 Tamanho deste cabeçalho (geralmente fixo)


E 2 Para formatos de arquivo, número de seções
Não é imutável e existem formatos SDK que farão outras coisas. Depois disso, tenderão
a ser dados relevantes para a informação que contém ou mais informações se for um
formato de arquivo. Ao contrário de muitos outros formatos em outros lugares da
computação, um carimbo mágico hexadecimal não é tão comum nos formatos nitroSDK.

21 Geral sobre engenharia reversa


Esta seção contém pensamentos e ideias que vão para formatos de arquivos de engenharia reversa a
partir do zero. Muitos dos conceitos são parcialmente abordados em outros lugares, mas o mais
importante é que muitos são muito simples e, embora estejam longe de ser infalíveis, funcionam com
muito mais frequência do que não.
As duas coisas que você deseja ter quando fizer engenharia reversa (além de uma
especificação completa ou talvez código-fonte) são muitos exemplos do formato e uma
versão do arquivo contendo muitas primitivas do tipo de coisa que ele contém (embora
tenha versões com recursos mais avançados também é útil).

342
Dois sites populares que hospedam muitas informações sobre formatos são o xentax.com e o
multimedia.cx (voltado mais para multimídia, mas que abriga uma grande quantidade de
informações sobre os formatos de música e vídeo usados em jogos).
DGTEFF tem um bom ponto de vista alternativo sobre algumas das técnicas
abordadas aqui e vale a pena ler o Guia De nitivo para Explorar Formatos de Arquivo.

21.1 Cabeçalhos
São encontrados na maioria das les e pode fazer muito. Geralmente contêm um comprimento
marcas voadoras, um total idêntico, um comprimento do próprio cabeçalho, localizações do
outras áreas que contêm informações, talvez le nomes ou pelo menos le identi -
algum tipo de cátion.
Também existem subcabeçalhos onde o formato pode ter um cabeçalho de informações
básicas e outro para realmente cobrir o conteúdo do arquivo.

21.2 Tamanhos de arquivo

Ignorar os formatos de embalagem, a menos que você esteja olhando dentro de um tamanho de
arquivo, pode dar uma pista sobre seu conteúdo. Por exemplo, se você estiver fazendo
engenharia reversa de um formato gráfico 2D e tiver dois arquivos pequenos e um arquivo
grande, o menor será uma disputa entre o layout e a paleta e o maior provavelmente será os
dados reais do bloco.

21.3 Múltiplas versões do jogo


Agora, isso não significa necessariamente versões v1.1 (embora possam ser
úteis), mas se você puder ter uma versão japonesa do jogo ao lado de uma
versão europeia e uma versão norte-americana, as diferenças entre elas nos
nomes e no conteúdo do Eles podem dizer muitas coisas sobre o que está
contido nele.

21.4 Nomes e extensões de arquivos


Os arquivos relacionados geralmente recebem nomes semelhantes (muitas vezes com números) e são
colocados próximos uns dos outros ou em ordem semelhante se forem mantidos separados, mesmo
que o nome do arquivo real tenha pouco valor. Extensões significam pouco fora dos computadores do
Windows

21.5 Visualizadores de blocos

Supondo que seu arquivo não esteja compactado e mesmo que você não esteja procurando imagens, dê
uma olhada nele com um editor de blocos e uma paleta apropriada. Embora a maioria de nós reconheça
os números instintivamente, ainda estamos programados para procurar pistas visuais; portanto, se você
vir grandes pedaços de espaço em branco, provavelmente não está olhando para o texto e, da mesma
forma, poderá ter uma ideia dos padrões (cabeçalho, informações e mais cabeçalho e mais informações,
por exemplo). Os editores hexadecimais também oferecem frequentemente colorir a janela/porção
hexadecimal, embora isso não seja o ideal em muitos casos.

343
21.6 Ponteiros e afins
Na maioria das vezes você se encontrará extraindo dados sem muita ideia do que
os ponteiros dizem, mas no lado do ip, se você vir um grupo do que poderiam ser
ponteiros (geralmente após o cabeçalho inicial), tente segui-los e dividir o arquivo
de acordo.

22 Som
22.1 SDAT
SDAT é o formato de áudio dominante no DS e embora por si só não contenha
informações sonoras, ele contém as localizações e as relações entre os vários
arquivos que ele contém.
Localização Tamanho Descrição

22.2 SSEQ
Localização Tamanho Descrição

22.3 STRM
Ocasionalmente visto fora do arquivo SDAT. Oficialmente o único que o faz.

344
Localização Tamanho Descrição

22.4 SWAR
Localização Tamanho Descrição

22.5 SWAR
Localização Tamanho Descrição

345
22.6 BANCO
Localização Tamanho Descrição

22.7 Outros formatos


Consulte http://gbatemp.net/topic/305167-the-various-audio-formats-of-the-ds/
Localização Tamanho Descrição

Localização Tamanho Descrição

346
Localização Tamanho Descrição

23 Gráficos

2d
23.1 NCER
Localização Tamanho Descrição

23.2 NANR
Localização Tamanho Descrição

347
23.3 NCGR
Localização Tamanho Descrição

23.4 RSN
Localização Tamanho Descrição

23,5 NMCR
Localização Tamanho Descrição

23.6 NFTR
Um formato de fonte comum visto no DS. Também viu algumas revisões.

348
Localização Tamanho Descrição

3d
23.7 NSBMD
Um formato de modelo 3D com uma seção de textura opcional (as cores dos materiais estão
disponíveis como texturas separadas).
Localização Tamanho Descrição

23.8 NSBTX
O arquivo NSBMD pode armazenar texturas para serem usadas, mas texturas separadas estão
disponíveis para aqueles que precisam delas.
Localização Tamanho Descrição

349
23.9 NSBCA
Um formato de animação para a família NSBMD. Vários desenvolvedores optaram por não usarg
NSBCA e escreveram seus próprios animações.
Localização Tamanho Descrição

24 Formato da embalagem

24.1 NARC, ARC e CARC


O ARC já era visto há vários anos quando o NARC apareceu. CARC apenas
uma versão compactada do for esteira.
Localização Tamanho Descrição

25 Texto
Embora a maior parte do texto seja personalizada e o que muitos hackers de ROM gastam grande
parte do seu tempo descobrindo, a Nintendo forneceu um formato de texto em seu SDK que
alguns desenvolvedores e muitas vezes a própria Nintendo usam.

25,1 BMG
A versão curta é unicode U16 empilhado sobre ponteiros às vezes relativos, às
vezes padrão, empilhados sobre um formato nitroSDK bastante padrão.

350
Localização Tamanho Descrição

351
Parte V
Glossário, índice e afins
26 Glossário
Um glossário de termos

ˆAbsoluto - também conhecido pelo nome de função ABS. Se um número for negativo ele
retorna o valor positivo (-4 vira 4) e se for positivo também retorna o
valor positivo. Útil ao lidar com valores assinados.

ˆAbstração - o processo de transformar conceitos de baixo nível em conceitos de nível superior


geralmente com o objetivo de simplificar a implementação ou facilitar a
manutenção.

ˆAct imagine - antigo nome do mobiclip e às vezes termo para o vídeo


método de codificação que eles fazem.

ˆAction replay - um dispositivo que efetua hacking de memória e captura todos os termos
para qualquer dispositivo ou código que também hackeie a memória para trapacear.

ˆEndereço - a localização de alguns dados ou arquivos.

ˆADPCM - Um método de codificação um pouco mais avançado para armazenar representações


sensações de arquivos wave. Geralmente possui um wrapper e é compatível com o
sistema de áudio DS.

ˆAND - uma operação booleana. Classificadas como saídas altas se todas as entradas forem
alto. O inverso de NAND.

ˆAnti Pirataria - um termo usado para descrever uma técnica usada por desenvolvedores para
impedir que jogos copiados funcionem corretamente.

ˆAP - veja Anti Pirataria

ˆARM - pode se referir ao ARM da empresa ou ao modo ARM nos processadores


usado pelo DS e GBA.

ˆARM7 - o processador secundário do DS e processador principal (único) do


o GBA e quando no modo GBA.

ˆARM7TDMI - o tipo específico de processador ARM7 visto no GBA e


DS.
ˆARM9 - o processador principal do DS.

ˆASCII - um método antigo de 8 bits (7 bits na prática) para codificação de texto e des
padrão de fato para a maioria dos arquivos até que o texto adequado seja necessário.

ˆASM - veja montagem.

ˆAssembler - pode se referir ao programa para transformar o código ASM em ob-


projeto/código de máquina ou a linguagem assembly de computador. Veja também Montagem.

352
ˆAssembly - uma série de linguagens de computador de baixo nível que correspondem di-
diretamente às instruções da máquina e que variam amplamente entre a arquitetura do
processador e do sistema.

ˆBinários - nome coletivo para os arquivos que abrigam a execução dos processadores de código
embora eles não precisem apenas armazenar o código do processador.

ˆBinário - refere-se ao sistema de numeração de base 2 (1 e 0) ou ao arquivo


que abriga o código que o processador executa.

ˆBIOS - o código embutido para GBA e DS que possui programas de funções


pode usar e governar a operação básica do sistema.

ˆBit - um único dígito binário. Geralmente representado por 1 ou 0 dependendo


se está usado ou vazio.

ˆBLZ - um nome para o binário DS e a compactação LZ específica de sobreposição.

ˆLógica Booleana - uma classe de operações e portas eletrônicas que permitem a


manipulação de sinais.

ˆBPP – Bits por pixel. Refere-se literalmente a quantos bits representam


cada pixel, embora geralmente visto com um número na frente para indicar o
tipo.

ˆBSDi - um formato de patch de uso geral sem muitos dos limites do


IPS costumava corrigir arquivos para sistemas modernos. Rival de Xdelta.

ˆCARC - a versão compactada do formato de arquivo NARC.

ˆTeto - ao usar números flutuantes, ele é arredondado para um número maior


(o negativo aproxima-se de 0/mais próximo do positivo em unidade)

ˆTrapaça - refere-se à alteração dos valores da memória para efetuar mudanças dentro de um
jogo (action replay) ou alterar como o jogo vê a imagem ROM (game
genie)

ˆChecksum - um processo pelo qual os dados são analisados e certas coisas importantes
observado sobre isso que permite que outro (espero) detecte se ele foi alterado
desde que a soma de verificação foi feita.

ˆCodebreaker - um dispositivo que efetua hacking de memória (às vezes referido


como códigos de repetição de ação) para fins de trapaça.

ˆCompilador - uma ferramenta para transformar linguagens de alto nível em código que pode ser
rodar em um processador. Verbo é compilar.

ˆCompressão - o ato de reduzir o tamanho de um arquivo, mas permitir que ele ainda seja
ler. Duas categorias conhecidas como com e sem perdas, cada uma com muitos métodos.
Os métodos sem perdas comuns incluem LZ, U8 e Hu man.

ˆCoprocessador - um processador secundário com o qual algumas máquinas precisam ajudar


determinada tarefa.

353
ˆCrystaltile2 - ferramenta de hacking completa com visualizador e editor de montagem,
editor hexadecimal, editor de blocos líder de classe, visualizador de blocos e suporte para muitos
formatos DS.

ˆDecompiler - uma ferramenta para transformar código de máquina novamente em uma linguagem de alto nível.
medidor. Existe mais para linguagens de alto nível, pois a compilação é frequentemente
considerada um processo unilateral.

ˆDesmume - o emulador com maior compatibilidade com DS ROMs.


Apresenta alguma capacidade de depuração.

ˆDipstar - o primeiro programa de trapaça do DS que funcionava em hardware real.

ˆDMA - acesso direto à memória. Um método pelo qual um dispositivo pode se mover
seções de dados na memória sem ter que passar pelo processador.

ˆDPS - Sistema de patch Deufeufeu. Um formato de patch personalizado que permite


conta para o sistema de arquivos DS e é usado na tradução do Jump Ultimate Stars.

ˆDS - O sucessor do GBA da Nintendo com duas telas e uma touchscreen.

ˆDSi - um modelo posterior do DS com recursos extras e um pouco mais poderoso.

ˆDummying - o ato de substituir um arquivo (geralmente multimídia) por um arquivo de


tamanho zero da menor versão possível de um formato.

ˆDumping - o ato de despejar uma ROM/ISO inteira ou parte de um


formato do contêiner original.

ˆEEPROM - Um tipo de armazenamento permanente (embora tradicionalmente bastante


pequeno) usado para armazenar jogos salvos. Também visto em níveis mais baixos de circuitos para armazenar
dados.

ˆELF - Um formato usado para armazenar código executável. Comumente usado pelo Unix
sistemas baseados (Linux e BSD), bem como desenvolvedores de homebrew.

ˆEmuhaste - uma ferramenta que se conecta a emuladores que permite a visualização da memória
e manipulação. Usado principalmente para fazer cheats, mas tem outros usos.

ˆCodificação - o ato de fazer um código. No hacking de ROM, geralmente se refere a


atribuir uma série de números hexadecimais para representar caracteres.

ˆCriptografia – um processo de ocultar os dados originais e (espero) fazer


tornando-o visível apenas por aqueles que possuem as chaves relevantes.

ˆEndianness - a ordem pela qual os bytes são lidos. Difere entre os


PC comum que o lê como um número comum e a maioria dos outros sistemas
que possuem a menor parte primeiro.

ˆEUC-JP - um tipo comum de codificação de texto japonês de 16 bits. Menos comum


do que shiftJIS em jogos de DS.

ˆSistema de arquivos – o processo de colocar diferentes pedaços de código e conceitos


em arquivos diferentes e definir onde eles estão fora das restrições básicas de memória. Você
pode descompactar um sistema de arquivos.

354
ˆFirmware - o código atualizável no DS e em muitos carrinhos de cinzas que pro-
fornece uma interface de usuário básica e algumas funções adicionais e gerenciamento de
sistema.

ˆPonto fixo - outro método pelo qual os computadores podem lidar com números não inteiros
números e significa literalmente o ponto após o qual a parte não inteira
começa. Visto nos sistemas DS 3D.

ˆFLASH - Um tipo de armazenamento permanente. Caro (relativamente falando)


e usado em carrinhos Flash e para salvar armazenamento. Também possui vários
tipos (NAND e NOR são os dois grandes).

ˆFlip - o ato de reorganizar a ordem dos bytes.

ˆFloat - o processo pelo qual a maioria dos computadores e programas lidam com não
números inteiros (inteiros).

ˆFloor - ao usar números flutuantes, arredonda para um número menor (neg-


ativo se afasta de 0/mais perto de negativo em unidade)

ˆFurigana - uma chave de pronúncia para Kanji, mas na prática é frequentemente usada como
tipo de nota de rodapé.

ˆGame genie - nome para um dispositivo de uma empresa extinta que permitia
pessoas alterassem o que um console viu em um cartucho e captassem todos os termos para
códigos/dispositivos que fazem coisas semelhantes. Nome agora usado em um dispositivo estilo
action replay.

ˆGBA - gameboy advance da Nintendo. Um console portátil da Nin-


tendo.

ˆGPIO - IO de uso geral. No GBA e no DS, várias peças de hard-


ware anexar a ele e permitir o acesso através dele. Inclui controles e coprocessadores com
habilidades extras.

ˆGráficos - a prática de representar visualmente um item ou local. Um


das principais áreas de hacking de ROM.

ˆHasteDS - um programa mais antigo que se conecta a emuladores para permitir o desenvolvimento
mento de cheats. Substituído por mais por Emuhaste.

ˆCabeçalho - uma técnica comum para incluir informações sobre o arquivo


vir. Geralmente encontrado no início ou no final de um arquivo ou sublevo.

ˆEditor hexadecimal - uma ferramenta que exibe o conteúdo bruto de um arquivo e geralmente
a localização nele e uma leitura usando uma determinada codificação, sendo o
padrão geralmente ASCII.

ˆHexadecimal - um sistema de numeração que permite um número maior de bits


para serem transmitidos de forma mais eficaz. Freqüentemente, como o conteúdo de uma ROM
ou ISO é renderizado.

ˆHirgana - símbolos mais suaves usados em japonês principalmente para nativos


palavras.

355
ˆHooking - o ato de fazer com que código extra seja executado onde não há abertura intencional
foi fornecido para isso.

ˆHUFFMAN - um tipo de compressão que organiza comprimentos de código e


classifica-os de acordo com a frequência com que repetem, atribuindo valores de pesquisa mais
curtos para o

ˆIDA - um programa para engenharia reversa de código ostensivamente de qualquer CPU ou


sistema (embora você possa ter que escrever um arquivo contendo uma listagem das
operações do sistema). Considerado o top de linha por muitos, a menos que você esteja
lidando com áreas muito especializadas e/ou pagando números de telefone pelas
ferramentas de engenharia reversa.

ˆInserção - o ato de colocar o conteúdo editado de volta em uma ROM. Geralmente


refere-se ao texto.

ˆLinguagem interpretada - uma linguagem que é deixada como código-fonte ou uma linguagem próxima
equivalente até o tempo de execução. Java, Python, Lua e Lisp possuem opções
interpretadas.

ˆInterrupções - métodos pelos quais o código pode interromper a parte atualmente em execução
de código quando algo muda.

ˆInversão - o ato de transformar 1 em 0 e vice-versa.

ˆIPS - formato de patch mais antigo de uso comum em hackeamento de ROM. Não está mais em
uso comum em sistemas modernos devido a limitações.

ˆISO - Nome de um organismo de padronização mundial, mas também se refere a uma cópia dos dados
de um pedaço de mídia óptica.

ˆISO 9660 – um método comum de armazenamento de dados em CDs e DVDs.

ˆKana - o termo coletivo da fotografia japonesa Hiragana e Katakana.


sistemas de letras magnéticas.

ˆKanji - os símbolos complexos usados em japonês que se originaram no chinês.


Eles são ideógrafos e um Kanji representa uma palavra ou combinados para formar
uma palavra composta.

ˆKatakana - símbolos japoneses de aparência angular usados principalmente para empréstimos.

ˆLisp - uma linguagem de programação de alto nível muito extensível usada por alguns
de programas como o assembler ARMish.

ˆLua - uma linguagem de programação de alto nível que foi vista em alguns DS
jogos como Puzzle Quest.

ˆLZ – Abreviação de Lempel Ziv. O nome para a ampla classe de deslizamento


compactação de janela onde os dados anteriores no arquivo são referidos no caso de
uma repetição.

ˆLZ77- uma variação da compressão LZ desenvolvida em 1977. Muitas vezes por engano
usado como um termo abrangente para compactação LZ moderna ou erroneamente como uma
alternativa ao LZSS.

356
ˆLZM - uma variação do tipo de compressão

ˆLZSS - um derivado do LZ77 (ele próprio uma versão do LZ) e base para alguns dos
os algoritmos de compressão GBA e DS.

ˆLZW-Lempel Ziv Welch. Uma variação da compressão LZ.

ˆMapeamento - o processo de anexar vários pedaços de memória a um comum


método de acesso.

ˆMemória - um dispositivo para armazenar dados.

ˆMobiclip – nome da empresa que faz o Act Imagine/MODS/VX


codificador de vídeo.

ˆMODS - extensão e carimbo mágico do formato de vídeo Mobiclip.

ˆNAND - uma operação booleana. Classificadas como saídas altas se nenhuma das
as entradas são altas. O inverso da NAND e a operação fundamental a partir da qual todas
as outras operações booleanas podem ser construídas.

ˆNARC - um formato de arquivo disponível no NitroSDK e bastante difundido


usado.

ˆNEF - originalmente um formato auxiliar de depuração interno da Nintendo que mais tarde foi obtido
suportado em no$gba e Crystaltile2.

ˆNitro hax - um programa que permitiu aos usuários do carrinho de cinzas no DS a capacidade
ter hacking de memória em jogos normais.

ˆNitro SDK - um termo comumente usado para descrever o kit de desenvolvimento Nin-
tendo é enviado para desenvolvedores licenciados que apresenta muitos tipos de arquivos.

ˆno$gba - um dos melhores emuladores para GBA e ao mesmo tempo o


DS. O suporte à depuração está disponível na versão do depurador, que está
disponível gratuitamente hoje em dia. Também está vinculado às especificações
GBAtek para GBA e DS.

ˆNOP – abreviação de Sem Operação. Uma instrução que não faz nada que
permite que as coisas sejam concluídas ou um hacker remova uma
instrução sem alterar o código a seguir.

ˆNOR - uma operação booleana. Classificadas como saídas altas se nenhuma das
insumos é alto. O inverso de OR.

ˆNOT - uma operação booleana. Classificadas como saídas altas se a entrada for baixa.
Também conhecido como invertido.

ˆNSBMD - nome do formato DS SDK para manipulação de imagens 3D. Provavelmente


o formato dominante.

ˆOAM - Memória de Área de Objeto. A seção da memória que controla onde


sprites estão localizados nas telas do GBA e DS.

ˆO set - ao discutir ponteiros, refere-se a ponteiros que não iniciam


contando desde o início do arquivo.

357
ˆollydbg - um programa comumente usado para analisar, fazer engenharia reversa e depurar
Arquivos executáveis do Windows.

ˆOpcode - um mnemônico para o componente base da instrução a ser executado


um processador.

ˆOR - uma operação booleana. Classificadas como saídas altas se alguma entrada for alta.
O inverso de NOR.

ˆOverlay - uma técnica usada no DS onde uma parte da memória é definida


de lado e substituídos para permitir que diferentes funções aconteçam em um espaço limitado.

ˆPatching - a maioria dos hacks de ROM são distribuídos como listas de alterações e patches
ing é o ato de aplicar um patch. Refere-se também à remoção de medidas de
proteção.

ˆPCM - Uma forma de armazenar/codificar uma representação de uma onda de áudio eu.
Também é um formato de arquivo geral para alguns jogos como N+.

ˆPE - executável portátil. O nome técnico do exe e dll os


usado pelo Windows para hospedar código executável.

ˆPonteiro - um método pelo qual a localização dos dados é anotada. Pode ser usado
para formatos de arquivo, em código de máquina, em gráficos, em texto, em som e muito mais.

ˆPython - linguagem de programação de alto nível comumente usada em geração


computação geral e bastante adequado para hackear ROM.

ˆRAD BINK- nome de um formato de vídeo comumente visto em jogos de computador.

ˆRelativo - ao discutir ponteiros, refere-se a ponteiros que levam seus


própria localização em conta (adicione 20 ao endereço atual, por exemplo)

ˆRelinking - o processo de alterar onde um arquivo é encontrado, alterando o


endereço. Geralmente feito como parte da extração para diminuir o tamanho ou para que os arquivos sejam
reproduzidos fora da ordem pretendida.

ˆRipping - às vezes sinônimo de dumping em ambos os sentidos, mas também


ato de remover arquivos para diminuir o tamanho da ROM/ISO.

ˆRLE - codificação de comprimento de execução. Uma versão de caso primitivo/especial do comando LZ


pressão que executa longas execuções de um único tipo de código e observe o caractere e
o comprimento. Visto em consoles anteriores, bem como em alguns posteriores e
comumente usado em texto (embora não seja realmente no GBA ou DS).

ˆROM - Memória somente leitura. Refere-se frequentemente à imagem ROM que é uma cópia
dos dados de um cartucho.

ˆRomaji - caracteres japoneses renderizados como caracteres romanos de acordo com


como eles soam quando são pronunciados.

ˆGirar - o ato de mover bits em uma determinada quantidade em uma direção ou outra.
Bits que não estão no comprimento original retornam para o outro lado (1001 girado para a esquerda
torna-se 0011)

358
ˆRTC - relógio em tempo real. O processo de adicionar um relógio que sabe a hora
no dispositivo (e esperançosamente no mundo real) geralmente para adicionar
eventos de acordo. Visto no GBA onde era um extra no carrinho (precisando de
patches para rodar em carrinhos de cinzas sem o hardware para isso) e no DS onde
fazia parte do sistema principal.

ˆSDAT - o formato de som dominante para jogos comerciais de DS.

ˆSDK – abreviação de kit de desenvolvimento de software. Consulte também Nitro SDK.

ˆSetor - um método pelo qual pequenos números de endereço podem ser estendidos para
permitir um alcance maior.

ˆShift - o ato de mover bits em uma determinada quantidade em uma direção ou outra.
Os bits que não estão no comprimento original são perdidos.

ˆShiftJIS - um tipo comum de codificação de texto japonês de 16 bits. Digitado por


os 4 bits superiores geralmente são 8 ou 9

ˆAssinatura - um processo de fazer uma soma de verificação, mas usando métodos de estilo de criptografia
ods (espero) significar que apenas alguém com as chaves relevantes pode gerar
novos cheques.

ˆSRAM - Economize RAM. Um tipo de memória de amplo uso usado pelo GBA e
vários outros sistemas e carrinhos de cinzas para salvar jogos. Famoso por precisar de
uma bateria para armazenar dados entre usos em muitas configurações.

ˆSSEQ - o formato de rastreador de estilo midi usado, mas o formato de som SDAT.
Vinculado ao Banco.

ˆTabela - uma lista de valores e os caracteres que eles representam.

ˆTCM - memória fortemente acoplada. Dois pequenos (16 e 32 kilobytes para o


diferentes tipos) seções de memória internas aos processadores do GBA e
DS.

ˆTexto – a prática de usar símbolos para representar ideias e sons. Com-


meu alvo para hackear ROM.

ˆTHUMB - uma operação reduzida, mas teoricamente mais rápida e compacta


modo para os processadores GBA e DS.

ˆTinke - Um dos kits de ferramentas de hacking de ROM de uso geral voltado para DS
jogos com suporte para vários letypes comuns e muito mais.

ˆTWL SDK - o SDK mais recente que substituiu o NitroSDK no DS posterior


jogos e foi usado principalmente em jogos DSi e recursos extras DSi.

ˆU8 - um tipo de arquivo frequentemente visto nos consoles Nintendo Gamecube e


Wii.
ˆUnicode - um método bastante complexo para codificação de texto, erroneamente com-
comparado à variação mais simples chamada unicode U16.

ˆUPS - formato de patch e um sucessor pretendido do IPS, mas veio depois


XDelta e BSDi foram estabelecidas.

359
ˆVBA-SDL-h - o fork de hacking e depuração do emulador GBA VBA.

ˆVBA. Visual Boy Advance, um emulador de GBA para jogos. Bifurcado em


VBA-m quando o VBA parou de ser desenvolvido.

ˆVRAM - RAM de vídeo. O local onde os dados que serão exibidos


na tela caso o manipulador OAM e BG permita que ele seja mantido.

ˆVX - versão mais antiga e extensão do formato de vídeo Mobiclip/act imagine.

ˆWRAM - RAM de trabalho. O nome da localização do mem-


ory no GBA e DS.

ˆXDelta - outro formato de patch de uso geral sem limitações de


IPS costumava corrigir arquivos para sistemas modernos. Rival da BSDi.

ˆXNOR - uma operação booleana. Classificadas como saídas altas se ambas as entradas forem
o mesmo. Inverso de XOR e também geralmente visto apenas em dois formulários de entrada.

ˆXOR - uma operação booleana. Classificadas como saídas altas se uma e única
uma entrada é alta. Geralmente visto apenas em dois formatos de entrada. O inverso de
XNOR.

ˆYAZ0 - outro tipo de compressão visto principalmente no gamecube e no Wii.


Tecnicamente, uma versão do RLE.

360

Você também pode gostar