Recentemente resolvi converter estes tutoriais antigos para um formato indexável pelo Google, assim fica muito mais fácil de achá-los. Aproveitem 8)
:huh:
Este é um de possivelmente vários tutoriais que eu pretendo escrever para demonstrar àqueles que não sabem nada sobre o romhacking o mínimo do mínimo que é preciso saber. Neste tutorial que eu traduzi daqui (https://www.romhacking.net/documents/726/), é ensinado sobre as notações numéricas binárias e hexadecimais, visto que muitos tutoriais do rom hacking que eu vejo por aí não ensinam isso. Eu acabei também tendo que adaptar algumas partes do tutorial, pois ele já estava desatualizado.
Eu resolvi chamar esse tutorial de "Zé da Esquina" pra mostrar que até mesmo o Zézinho que vende pastel ali na esquina é capaz de aprender a romhackear. ;3
Pretendo (mas não prometo) talvez lançar outros neste mesmo estilo.
Boa sorte, romhackers!
Guia ROMHacker Zé da EsquinaCitarUm guia destinado a leigos, pessoas com dificuldade de aprendizagem ou que têm preguiça.
Parte 1: Guia Hexadecimal e BinárioEscrito por mevoid Traduzido por Chatterine
Introdução do Autor OriginalSejam bem-vindos ao guia hexadecimal e binário. Este guia é direcionado a pessoas que estão começando no ROMHacking, e mesmo aqueles que não estão interessados nele ainda podem lê-lo para aprender o hexadecimal e o binário. Neste guia eu assumo que o leitor não tenha experiência anterior com hexadecimal ou binário. Eu começarei ensinando sobre o binário e como funciona, seguido por uma lição sobre o hexadecimal, e então eu mostrarei a vocês como trabalhar com hexa e binário na calculadora do Windows, de modo a fazer sua vida ROMHacker mais fácil.
Eu gastei bastante tempo escrevendo este guia para torná-lo o mais fácil o possível para iniciantes ler e entender binário e hexadecimal. Há algum tempo atrás, eu vi um tópico em um fórum discutindo como as pessoas estão começando a perder o interesse pelo ROMHacking por ele parecer intimidante e complexo, assim como não existem bons tutoriais por aí. Então eu decidi começar a escrever guias que sejam extremamente fáceis de seguir e compreender. Eu também decidi incluir exercícios e imagens com a finalidade de tornar as coisas mais fáceis.
Qual é a aplicação disto no ROMHacking? Bem, o hexadecimal é EXTREMAMENTE importante de se saber quando se está fazendo ROMHacking. Se você não tiver conhecimento sobre hexadecimal, você só poderá no máximo editar alguns jogos por meio de ferramentas que já existem. E se você quiser fazer uma hack de uma ROM para a qual ninguém criou ferramentas? Eu irei mostrar um exemplo pequeno mais tarde quando vocês chegarem na parte hexadecimal do guia. E quanto ao Binário? Mesmo que não seja segredo algum que não é necessário o binário para fazer ROMHacking (pelo menos o básico), eu acredito que aprender binário torna a aprendizagem de hexadecimal mais fácil, logo é o motivo de sua inclusão neste guia.
Observação: O binário é sim necessário se você pretende se tornar um hacker verdadeiramente avançado.
Notação e Código BinárioO BásicoAfinal de contas, o que é o código binário? Computadores são capazes de entender apenas dois números, que são 1 (um) e 0 (zero). Ligado e Desligado para ser exato, mas eles são representados como 1 e 0. O número 0 significa desligado, e o 1 significa ligado. É possível entrar em maiores detalhes técnicos a respeito disso, mas isso está fora do escopo neste momento.
Antes de continuarmos, quero ter certeza que você entenda o decimal primeiro. "Decimal" se refere ao sistema de contagem que você utiliza na matemática. Decimal é um sistema de base 10 (dez), o que significa que ele é composto de dez símbolos:
Citar0 1 2 3 4 5 6 7 8 9
Acima estão todos os caracteres utilizados no sistema decimal. O que vem após o 09 (eu coloquei o zero na frente para ser mais fácil de entender)? Obviamente, o 10. Mas, por qual motivo? Não há mais símbolos para serem usados após o 9 (nove), portanto o 9 volta para o 0, e o 1 é colocado na sua frente, o que te deixa com o 10. Eu quero que você realmente entenda esta forma de pensar, pois ela irá te ajudar a aprender os sistemas binário e hexadecimal com muito mais facilidade.
Então, qual é a aplicação disto em binário? Pois bem. O sistema binário é de base dois, o que significa que apenas dois algarismos são utilizados. Esses algarismos são o 0 e o 1. Vamos começar a contar com este sistema do 0 até o 5, e eu vou explicar enquanto estivermos aprendendo como o binário funciona. É claro, temos o 0 e o 1. Eles são iguais aos seus equivalentes no decimal:
| Binário | Hexadecimal |
| 0 | 0 |
| 1 | 1 |
| ? | 2 |
| ? | 3 |
| ? | 4 |
| ? | 5 |
Em notação decimal, o 2 vem após o 1. E quanto no binário? Se lembre do exemplo que eu acabei de te dar anteriormente com o decimal. Se você pensar sobre isso em binário, já que o 1 é o último algarismo no sistema binário, ele voltará para o 0 enquanto o número 1 é colocado na sua frente.
O que vem após o "2" ("10" em binário?) O "3", que é representado por "11" em binário.
| Binário | Hexadecimal |
| 0 | 0 |
| 1 | 1 |
| 10 | 2 |
| 11 | 3 |
| ? | 4 |
| ? | 5 |
O que acontece agora? Nós temos "11" em binário, e se adicionarmos 1, o segundo número "1" (11) se tornará um 0, e vamos adicionar um 1 no primeiro "1" (11) para que ele também se torne um 0, e simplesmente colocamos um último 1 na frente. Agora temos "100". Agora eu quero que você adivinhe como é 5 em binário. Se você respondeu "101", acertou.
Resultado final de nossa tabela:
| Binário | Hexadecimal |
| 0 | 0 |
| 1 | 1 |
| 10 | 2 |
| 11 | 3 |
| 100 | 4 |
| 101 | 5 |
Isso foi fácil. E o 6? Bem, se pegarmos o 1 da direita (101) e adicionarmos 1, ele se tornará um 0, e então precisaremos adicionar 1 ao dígito logo à sua esquerda (101), o que nos daria "110", ou seja, "6" em decimal.
Conversão de Binário para Decimal
1 1 0 1 0 0 1 0
128 64 32 16 8 4 2 1
\/ \/ \/ \/ \/ \/ \/
x2 x2 x2 x2 x2 x2 x2
<---------------------------
Quando você entender a parte anterior, esta parte deverá ser bastante fácil. Digamos que tenhamos o número "11010010". Pegue um pedaço de papel e o escreva de lápis, como a tabela abaixo mostra:
Quando estivermos convertendo de binário para decimal, trabalharemos da direita para a esquerda. Então vamos para o dígito mais à direita ("11010010"), e escreva o número 1 debaixo dele. Agora, multiplique o 1 que você escreveu anteriormente por 2, e escreva isso debaixo do dígito à esquerda ("11010010"). Repita o mesmo com o 2 que você acabou de encontrar e você achará o 4, então escreva o 4 embaixo do dígito anterior ("11010010"). Basicamente você começa com o 1 e vai multiplicando por 2. Você deverá ter encontrado isso:
| (1) | (1) | 0 | (1) | 0 | 0 | (1) | 0 |
| (128) | (64) | 32 | (16) | 8 | 4 | (2) | 1 |
Nós temos os números 128, 64, 16 e 2. Se você somá-los, você terá o número em decimal! É tão simples assim: 128 + 64 + 16 + 2 = 210
Outro exemplo: "111011". Repita os passos anteriores para obter a tabela:
Somando todos os valores que estão debaixo do 1: 32 + 16 + 8 + 2 + 1 = 59
Conversão de Decimal para BinárioIsso é bastante fácil, você só precisa fazer algumas contas. Vamos converter "103" para binário. Basicamente, no primeiro passo iremos dividir o número por 2, e usar os restos das divisões. Deste modo:
103/2 = 51 (,5) resto 1 (ignore as casas depois da vírgula)
51/2 = 25 (,5) resto 1
25/2 = 12 (,5) resto 1
12/2 = 6 resto 0
6/2 = 3 resto 0
3/2 = 1 (,5) resto 1
1/2 = 0 (,5) resto 1
Depois que você tiver feito isso, conte os números do resto de baixo para cima, que você receberá o número "1100111". Isso é tudo.
Exercícios de Fixação sobre Código Binário1. Converta para decimal:
a) 11
b) 1010
c) 111111
d) 1000001
e) 1010110
2. Converta para binário:
a) 14
b) 50
c) 100
d) 125
e) 567
Respostas:
1.: a) 3 b) 10 c) 63 d) 65 e) 86
2.: a) 1110 b) 110010 c) 1100100 d) 1111101 e) 1000110111
Notação Hexadecimal
Agora que você compreendeu o binário, podemos partir para o hexadecimal. Aqui está a tabela de caracteres:
| Hexadecimal | Decimal | 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 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
Então basicamente os números de 0 a 9 são os mesmos em Decimal e Hexadecimal, mas o hex inclui 6 caracteres a mais: A, B, C, D, E e F. Logo, 10 em hexadecimal é "A", 15 é "F" e 16 é "10". Isso se deve ao fato de que, como vimos anteriormente com a notação binária, quando acabam os algarismos a serem usados, é adicionada uma unidade à casa anterior, e a atual é reiniciada ao valor inicial.
Aplicação no ROMHackingHá diversos usos do código hexadecimal no ROMHacking, que vão desde à criação de tabelas thingy ou a edição e tradução de textos até a modificação de níveis. Todo o código do jogo pode ser visualizado (de maneira pouco legível) por meio de um editor hex. Abaixo, a imagem da ROM de NES "Pac-Man" aberta no editor hexadecimal HxD. (Clique para expandir.)
(https://i.ibb.co/bMzWJP6t/image13.png) (https://ibb.co/bMzWJP6t)
Conversão de Decimal para HexadecimalÉ bem parecida com a conversão para binário. O processo é o mesmo, só que desta vez você irá dividir por 16. Vamos converter o número 58:
58/16 = 3(,625) resto 10 (lembre-se de ignorar as casas decimais)
3/16 = 0(,1875) resto 3
Leia os restos de cima para baixo, e com suas equivalências em hexadecimal. Logo, ao invés de 10, usamos A, o que nos dá o resultado "3A".
Conversão de Hexadecimal para DecimalConverter de hexadecimal para decimal não é uma tarefa difícil. Por exemplo, vamos converter F15FF. O primeiro passo é escrever a posição do número da direita para esquerda, começando pelo 0. Assim:
Agora que temos a posição de cada um deles, é preciso usar uma fórmula em cada um desses valores. A fórmula é o número atual multiplicado pelo 16 elevado à potência de sua posição: letra . 16 ^ posição
| F | 1 | 5 | F | F |
| 15*16^4=983040 | 1*16^3=4096 | 5*16^2=1280 | 15*16^1=240 | 15*16^0=15 |
Ao multiplicar letras, use seu valor na notação decimal, ou seja, 15 ao invés de F, e por aí vai. Depois disso, é só você somar que você terá o seu resultado final!
983040 + 4096 + 1280 + 240 + 15 = 988671
Exercícios de Fixação sobre Notação Hexadecimal1. Converta para decimal:
a) 1F
b) 3D
c) AA
d) FFF
e) ABF23F
2. Converta para hexadecimal:
a) 23
b) 56
c) 99
d) 1039
e) 1092
Respostas:
1.: a) 31 b) 61 c) 170 d) 4095 e) 704291
2.: a) 17 b) 38 c) 63 d) 40F e) 444
Uso da Calculadora do Windows 10 e 11 (Seção adaptada)
Se você chegou até aqui, é porque agora você entende como converter de/para decimal, hexadecimal e binário. É claro que você não vai ter que passar por este processo toda vez que você estiver fazendo uma ROM Hack para todo o valor que você encontrar, pois isso irá te atrasar. Se você conhece alguma linguagem de programação, é uma boa idéia programar um aplicativo para converter para você (como um hacker, é importantíssimo saber criar suas próprias tools). E se você não souber, não precisa se preocupar. O programa da calculadora do Windows pode te ajudar a converter os valores em binário e hexa. Ela até te permite fazer matemática com eles.
Para iniciar a calculadora, aperte as teclas ⊞Win + R e digite "calc" (ou simplesmente acesse o seu menu iniciar e abra sua calculadora por lá).
Quando você tiver a calculadora rodando, você precisa trocá-la para a função programadora. Acesse o menu contextual apertando o botão ☰ localizado no canto superior esquerdo e clique na opção Programador.
(https://i.ibb.co/PzcRvF2M/image2.png) (https://ibb.co/PzcRvF2M)
Você deve notar que o layout da sua calculadora foi alterado. Na esquerda, estão posicionadas as siglas"Hex", "Dec", "Oct" e "Bin", que significam, respectivamente "Hexadecimal", "Decimal", "Octal" e "Binário". Octal não é usado no ROMHacking, mas se necessário, é possível adaptar as técnicas que vimos anteriormente, visto que ele é de base 8 (ou seja, usa apenas os algarismos 0-7).
Para converter, é fácil: basta escolher o sistema de notação numérica em que o número original se encontra com as opções à esquerda, e digitá-lo. O número será automaticamente convertido para os outros sistemas na tabela que fica na esquerda, como mostra a figura:
(https://i.ibb.co/Gf95GktR/image1.png) (https://ibb.co/Gf95GktR)
É possível até mesmo realizar operações aritméticas com a calculadora!
(https://i.ibb.co/CKGQfLNx/image10.png) (https://ibb.co/CKGQfLNx)
ConclusãoConclusão do autor original do guia: Este guia tomou muito tempo meu para que eu escrevesse, então eu espero que vocês tenham curtido lê-lo tanto quanto eu curti escrevê-lo (é uma frase clichê, mas peraí! É verdade!). Espero que tenham aprendido como aplicar binário e hexadecimal, pois se você pretender se tornar um ROMHacker, é uma habilidade necessária. Eu levei cerca de cinco horas para escrevê-lo em duas jornadas longas, então eu espero muito que você esteja fazendo bom uso deste guia 😛 Contato: https://mevoidroms.wordpress.com/contact/
Conclusão da tradutora: É um guia bom, sim, que provavelmente é o primeiro de outros que possivelmente virão. Me contate me enviando mensagem no meu privado lá no fórum. Até a próxima!
Créditos-
JV132, por ter dado a ideia de converter os docs para HTML.
-
mevoid, pois foi ele quem escreveu o tutorial original.
-
red M95, por ter sempre me ajudado na medida do possível.
- ferramentas usadas:
Google Docs (escrever este arquivo),
Canva (design da capa),
Calculadora do Windows, Reverso
Context (dicionário), um
cérebro com pelo menos 60 de QI.
Navegação:
Próxima Parte -> (https://www.romhacking.net.br/index.php?topic=2474.0)
Voltar ao Índice (https://www.romhacking.net.br/index.php?topic=2476.0)
A parte 2 do meu tutorial no qual até mesmo o Zezinho que vende pastel na esquina aprende romhacking já saiu. Desta vez é uma tradução deste arquivo aqui (https://www.romhacking.net/documents/58/), e eu tive que fazer diversas adaptações, principalmente para trocar as ferramentas (já que no original elas estão desatualizadas).
Feliz hacking!
CitarAviso: Como sempre, as imagens só serão dadas como miniaturas!
Guia Zé da Esquina 2, Parte IEmulador, Debugger e Editor HexadecimalEscrito por Sliver X Traduzido por Chatterine
Introdução do Autor OriginalO ROMHacking é, resumidamente, um processo de modificação de alterar o código de computadores que já existe, embora a sua aplicação geralmente envolve fuçar com jogos de consoles antigos armazenados em sistemas modernos, chamados de ROMs (Read Only Memory, uma referência às placas de circuito de dados dentro dos cartuchos que computadores de consoles usaram por mais de duas décadas.).
Isso significa que você pode alterar os jogos em si, como os gráficos, as cores, o som, e as fases. Coisas ainda mais avançadas podem ser feitas se você possuir o conhecimento (extremamente avançado), como fazer o Mario ser três vezes mais alto do que o normal, disparando Koopas de dentro do ânus dele enquanto faz um som de sino toda vez que ele anda.
Entretanto, tais técnicas avançadas estão muito além do escopo deste documento. Ele assume que você seja totalmente novo a esse negócio inteiro do ROMHacking, então qualquer um que saiba o que está fazendo irá receber absolutamente nenhuma ideia nova a partir disto, de forma alguma. Mas se você souber como modificar um jogo, e não souber como começar, eu espero que este tutorial irá te ajudar a entrar na trilha para realizar seu desejo.
Nós vamos nos limitar aos conceitos mais básicos do ROMHacking, hackeando em particular jogos que são para o Nintendinho (NES), um console que sempre irá ter um lugar especial dentro do meu coração ou algo do tipo. Nós iremos começar com os conceitos mais essenciais, e também um pouco mais complicados. Mas primeiro, vamos revisar o sistema hexadecimal.
Revisão hexadecimalHexadecimal é um sistema de notação numérica de base 16 utilizado para tornar mais fácil a vida de programadores e engenheiros reversos que não querem ter que lidar com o código binário, como você.
| Hexadecimal | Binário | Hexadecimal | Binário |
| 0 | 0000 | 8 | 1000 |
| 1 | 0001 | 9 | 1001 |
| 2 | 0010 | A | 1010 |
| 3 | 0011 | B | 1011 |
| 4 | 0100 | C | 1100 |
| 5 | 0101 | D | 1101 |
| 6 | 0110 | E | 1110 |
| 7 | 0111 | F | 1111 |
Espero que você tenha se lembrado. Caso contrário, releia a parte anterior deste guia. Agora, vamos às ferramentas necessárias.
Ferramentas utilizadas (adaptado)- Mesen (https://www.mesen.ca/): Excelente emulador de NES.
- Monkey Moore (https://www.romhacking.net/utilities/513/): Tool para realizar pesquisas relativas em ROMs.
- YY-CHR (https://www.romhacking.net/utilities/119/): Ferramenta para editar gráficos de jogos.
- ROM do Super Mario Bros: Joga no Google que você acha.
- ROM do Wrath of the Black Manta: Outro jogo de NES. Também joga no Google.
Sobre o emulador MesenQuando o assunto é ROMHacking, esta é uma das melhores ferramentas que você pode usar, e por dois motivos: a precisão da emulação e as ferramentas de debugging. Não só o emulador é extremamente fiel ao console de verdade como ele contém uma rica variedade de ferramentas que vão desde a visualização de imagens na memória até a obtenção de valores hexadecimais para gráficos e texto. Também é possível ver as paletas carregadas na RAM, que será assunto de outra seção. Você irá precisar deste programa para a maior parte dos procedimentos abaixo, então já faça download, supondo que você seja usuário de um computador. Se você está em um celular, aí já não é comigo.
Nota: As modificações aqui descritas só servem para jogos de NES. Muita da teoria se expande para outras plataformas, mas a metodologia em si será diferente.
Modificação de paletasO que são paletas, e como modificá-las? Bem, quando se modificam os gráficos de um jogo, às vezes você quer que eles usem outras cores fora daquelas que eles já estão usando. A alteração de paletas no Nintendinho também é outra excelente forma de praticar nossas habilidades com hexadecimal.
Carregue a ROM do Super Mario Bros no emulador Mesen. Aperte Start para começar um novo jogo, e pause o jogo assim que você iniciar no mundo 1-1. Agora esta é a parte em que as ferramentas para debugging do Mesen entram em ação.
Vá em Debug -> Palette Viewer. (Se o seu Mesen estiver em Português ou em outra língua, apenas acompanhe as screenshots. O layout das opções é o mesmo.)
(https://i.ibb.co/fV6dLspz/image2.png) (https://ibb.co/fV6dLspz)
A seguinte janela deverá aparecer.
(https://i.ibb.co/LhQqMdZp/image37.png) (https://ibb.co/LhQqMdZp)
Estas são as cores atualmente utilizadas pelo jogo. Elas estão organizadas de quatro em quatro cores, e estão divididas em paletas do plano de fundo e paletas dos sprites, separadas por aquela cor azulzinha ali no começo de cada uma (essa cor azul será diferente a depender da ROM). Nós iremos fazer algumas modificações aqui. Você consegue observar a quinta paleta de cima para baixo, aquela que é azul, vermelha, laranja e marrom? Essa é a paleta que o Mario utiliza quando está normal, sem a flor de fogo. Posicione o mouse sobre cada uma delas e observe os valores que o emulador te dará.
(https://i.ibb.co/DDZ4vqRt/image32.png) (https://ibb.co/DDZ4vqRt)
Anote o valor na linha sublinhada em vermelho (Value em inglês) de cada uma dessas quatro cores, e você terá o número "22 16 27 18". Muito bem. Agora, feche essa janela das paletas pois agora vamos abrir o editor hexadecimal no emulador. Vá em Debug -> Memory Viewer.
(https://i.ibb.co/cX1ny7Z6/image27.png) (https://ibb.co/cX1ny7Z6)
Troque o tipo da memória visualizado para PRG ROM, como demonstra a imagem abaixo.
(https://i.ibb.co/twwNZqrN/image30.png) (https://ibb.co/twwNZqrN)
Clique em Search -> Find
(https://i.ibb.co/v41Nf3PD/image14.png) (https://ibb.co/v41Nf3PD)
E busque pelo valor que você encontrou nas paletas, "22162718", sem espaços.
(https://i.ibb.co/qMCn9HGs/image5.png) (https://ibb.co/qMCn9HGs)
Encontramos um resultado. Ele se localiza no entre os endereços $5D7 e $5DA, como indicado pelo rodapé da janela. Você não precisa entender muito bem dos específicos da coisa, apenas acompanhe o passo-a-passo.
(https://i.ibb.co/pBKHpyCf/image20.png) (https://ibb.co/pBKHpyCf)
Depois que você encontrar esse valor, troque o 16 para 0C, e o 27 para 2A.
(https://i.ibb.co/C5X8GnX2/image29.png) (https://ibb.co/C5X8GnX2)
Você pode fazer isso selecionando os números e os sobrescrevendo com o teclado. Agora, realize um reset no seu emulador com as teclas Ctrl+R. Você deverá notar que o Mario está um pouquinho diferente....
(https://i.ibb.co/d08fyZyv/image9.png) (https://imgbb.com/)
Você acaba de alterar a paleta de cores do Mario. Tome cuidado, pois há um efeito colateral desta mudança: qualquer outro gráfico que compartilha a mesma paleta que o Mario também teve sua paleta alterada. Outra coisa que é importante você notar é que, às vezes, o primeiro resultado nem sempre será aquele que você deseja, pois a mesma informação pode estar armazenada em formato hexadecimal mais de uma vez no arquivo do jogo. Quando o assunto é a edição hexadecimal, você precisa ir na tentativa e erro, mudando cada um deles até achar o certo. Lembre-se de fazer backups frequentes!
Um detalhe importante sobre a modificação de paletas, às vezes a ROM não lista a primeira paleta (transparente, neste caso). Se esta ROM funcionasse desta forma, você teria que procurar por "162718", e não "
22162718".
O Nintendinho possui até 64 cores que ele pode usar, que estão exibidas nesta tabela abaixo. Talvez você queira tirar uma print disso para guardar para depois, já que é uma grande ajuda. As linhas horizontais representam o primeiro byte da esquerda das cores (brilho), e as verticais o segundo byte (tonalidade). Créditos ao Toma por esta imagem.
(https://i.ibb.co/99LyJtL3/image34.png) (https://ibb.co/99LyJtL3)
É tudo isso sobre o hacking de paletas. Ainda há outras coisas a serem faladas, como...
Hacking de Recursos GráficosAlterar os gráficos de um jogo pode ser tanto divertido quanto entediante ao mesmo tempo, especialmente se suas capacidades artísticas forem limitadas (como as minhas). A modificação de recursos gráficos é a principal forma de se adicionar letras acentuadas às ROMs.
(https://i.ibb.co/RkncxqQv/image15.png) (https://ibb.co/RkncxqQv)
Você saberia me dizer o que é isto? Parece um quebra-cabeças, não é? E é porque é mesmo. Acima estão todos os gráficos de fundo do jogo Super Mario Bros. Os gráficos estão organizados em "tiles", e cada tile é uma porção pequena de 8x8 pixels usada para exibir um gráfico na tela.
Os tiles se combinam em conjuntos chamados Name Tables para exibir os fundos, cenários e o texto em jogos de NES. Pense em tiles como cada peça individual de um quebra-cabeça, e as Name Tables como o todo. Alguns desses tiles são a fonte, como é possível ver ali em cima.
Abra o programa YY-CHR.
(https://i.ibb.co/fzQMY6ch/image35.png) (https://ibb.co/fzQMY6ch)
Se esta é a primeira vez que você abre o aplicativo e você percebeu que as letras parecem "corrompidas", copie e cole o arquivo "yychr.ENG", e o chame de "yychr.PTB", como mostra a imagem abaixo (ignore o aviso do Windows dizendo que alterar a extensão de um arquivo pode torná-lo inutilizável):
(https://i.ibb.co/3YGBQD14/image25.png) (https://ibb.co/3YGBQD14)
Vá em File -> Open, e carregue a ROM do Super Mario Bros.
(https://i.ibb.co/9k9pRZZP/image10.png) (https://ibb.co/9k9pRZZP)
Você deve ter notado que a tela do programa mudou para a visualização dos gráficos do jogo. É possível visualizar os sprites dos personagens e inimigos do jogo.
(https://i.ibb.co/CKqKpRwz/image19.png) (https://ibb.co/CKqKpRwz)
Quando não se encontram os gráficos desejados pela primeira vez, é possível vasculhar outros lugares da ROM. Se mesmo assim você não encontrou, é possível que os gráficos estejam comprimidos, e será necessário programar um algoritmo de descompressão de dados. Mas os gráficos do Super Mario Bros não estão comprimidos. Por isso, role para baixo no programa até localizá-los:
(https://i.ibb.co/tt18Dgr/image3.png) (https://ibb.co/tt18Dgr)
Vamos selecionar um gráfico qualquer para editar. Como a letra W. Clique em cima dela para selecioná-la. Use a paleta de cores do programa para modificá-la.
(https://i.ibb.co/SWm5L0j/image21.png) (https://ibb.co/SWm5L0j)
Salve suas modificações clicando no botão 💾 de disquete no canto superior esquerdo. Recarregue a ROM dentro do seu emulador.
(https://i.ibb.co/rKb28m7S/image28.png) (https://ibb.co/rKb28m7S)
Observe a barra de status do jogo, e veja como a letra W agora está representada por outro símbolo. Todas as instâncias da letra W foram substituídas pela nova letra que desenhamos É possível, ainda, experimentar substituir as letras K, W e Y por letras acentuadas, como o "ã".
Na próxima seção iremos aprender a fazer uso das letras acentuadas que criamos.
(https://i.ibb.co/bg0JcZqk/image26.png) (https://ibb.co/bg0JcZqk)
Edição Textual Primeiro eu preciso dizer que o Nintendinho não funciona como nos processadores avançados, logo não é possível que ele rode um comando como na linguagem de programação Python "print('Hello World!')" e exiba na tela as informações a respeito do texto escolhido. Por este motivo, diversos fabricantes adotavam suas encodings proprietárias, sendo "encoding" o termo usado para designar a correspondência das letras do alfabeto latino à seus respectivos códigos em hexadecimal.
Um exemplo de encoding extremamente popular e suportado por praticamente todo e qualquer editor hexadecimal é a ASCII, que já vem instalada por padrão nos editores hexas. Se você der sorte, o jogo que você está modificando já virá com a encoding ASCII por padrão.
Um exemplo de um jogo que usa ASCII para representar suas letras é o jogo
Wrath of the Black Manta. O primeiro texto aparece logo na tela de título, "Push Start Button":
(https://i.ibb.co/tPwkgx2J/image11.png) (https://ibb.co/tPwkgx2J)
Abra o Memory Viewer novamente, e realize uma busca por PUSH START, desta vez selecionando a categoria "String" para buscar por um texto, e não um valor hexadecimal.
(https://i.ibb.co/m5KhRVfp/image23.png) (https://ibb.co/m5KhRVfp)
Encontramos uma correspondência exata no endereço 7707. Para quem não sabe, endereço é um valor que determina a posição de determinado número hexadecimal dentro de um arquivo.
(https://i.ibb.co/1GzNwB9B/image17.png) (https://ibb.co/1GzNwB9B)
Se você quiser testar, experimente mudar "PUSH" para "AUSH". Resete a ROM:
(https://i.ibb.co/0p0nx3Wh/image6.png) (https://ibb.co/0p0nx3Wh)
Conseguimos modificar o texto da ROM com ASCII! Vamos tentar a mesma coisa com o Super Mario Bros, desta vez buscando pelo termo "World".
(https://i.ibb.co/39Y9dCZD/image13.png) (https://ibb.co/39Y9dCZD)
Não encontramos resultados. Isso significa que o jogo do Mario não usa ASCII.
(https://i.ibb.co/Q35phWYc/image4.png) (https://ibb.co/Q35phWYc)
O que fazer neste caso? Precisamos de um buscador relativo, um programa que tenta identificar encodings proprietárias em uma ROM por meio da gematria.
A gematria é a filosofia que associa letras a valores numéricos. A gematria nas buscas relativas usa sua posição dentro do alfabeto. Por exemplo, a gematria da letra "A" é 01, pois ela é a primeira letra do alfabeto. A gematria de "K" é 11, pois é a décima primeira do alfabeto. E assim por diante. É possível aplicar essa técnica para identificar a encoding de um jogo.
Obviamente esta lógica só se aplica se o jogo estiver com sua fonte na mesma ordem que as letras do alfabeto latino. Se a fonte começar ao contrário, ou seja, do Z até o A, então o número 01 será a gematria do número 01. Como identificamos na parte gráfica com o YY-CHR, o jogo Super Mario Bros possui sua fonte em uma ordem lógica. Deste modo, supondo que as letras comecem a partir do valor hexadecimal B3, então B3 seria o valor de A, B4 o valor de B, B5 o valor de C, e assim por diante.
Iremos identificar a tabela do jogo por meio da ferramenta Monkey Moore. Abra o programa e carregue a ROM do jogo selecionado. Você terá a opção de escolher entre fazer uma 1) busca relativa ou 2) busca por valores relativos. Você só usaria a opção 2 se as letras do jogo estivessem desordenadas (como no exemplo da fonte que vai da letra Z até a letra A), então vamos na opção 1. Iremos buscar pela palavra "WORLD".
(https://i.ibb.co/PGnK90fg/image22.png) (https://ibb.co/PGnK90fg)
Clique no botão "Criar Tabela". Você poderá fazer alterações na tabela antes de salvá-la. A tabela, neste caso, é um arquivo que relaciona os valores hexadecimais a suas letras, portanto é uma forma de representar uma encoding proprietária em editores hexadecimais.
(https://i.ibb.co/DfpN7KWZ/image7.png) (https://ibb.co/DfpN7KWZ)
Dê um nome para sua tabela, e a salve. Iremos salvá-la como "smb.tbl". "tbl" é a extensão usada por esse tipo de arquivo. Se quiser, abra a sua tabela em um editor de texto comum, como o próprio bloco de notas do Windows. Perceba que ela é um arquivo de texto normal: os valores hexadecimais estão separados de suas correspondências pelo sinal de igualdade (=).
(https://i.ibb.co/Y47yZR6V/image33.png) (https://ibb.co/Y47yZR6V)
Vamos criar uma cópia da tabela.
Clique em Arquivo -> Salvar como, e salve outra dessa como "smb_br.tbl". Remova as letras minúsculas, pois elas não são utilizadas neste jogo. Modifique as letras K, W e Y pelos caracteres com acentos que adicionamos anteriormente. Certifique-se de pular uma linha em branco no final do arquivo, pois ela determina o final da tabela. Salve a tabela.
(https://i.ibb.co/3mTzPSf7/image12.png) (https://ibb.co/3mTzPSf7)
Vamos carregar a tabela no emulador. Vá em File -> Load TBL File... e faça upload da tabela smb.tbl no emulador. Você irá perceber que os textos no editor hexadecimal foram alterados. Realize outra busca por WORLD, desta vez com a opção "Use TBL mappings" ativada.
(https://i.ibb.co/Q35phWYc/image4.png) (https://ibb.co/Q35phWYc)
Bingo! O encontramos no endereço 75D.
(https://i.ibb.co/yFd16NWt/image24.png) (https://ibb.co/yFd16NWt)
Agora, carregue a tabela em português que você criou (smb_br.tbl). Se você receber um erro, verifique-se que a sintaxe está certa e que você pulou uma linha no final do arquivo. Se você tentar inserir as letras acentuadas...
(https://i.ibb.co/JWvfZWrn/image36.png) (https://ibb.co/JWvfZWrn)
Conseguimos modificar o texto com sucesso! Tome cuidado. O texto que inserimos com o editor hexadecimal não pode ser mais longo que o original. É possível expandi-lo com ponteiros, de modo que é possível colocar algo como "Estágio" no lugar de "World". Ponteiros, entretanto, estão fora do escopo deste tutorial.
Nesta última seção, veremos como publicar sua tradução em formato patch.
Navegação:
<- Parte Anterior (https://www.romhacking.net.br/index.php?topic=2473) || Próxima Parte -> (https://www.romhacking.net.br/index.php?topic=2475.0)
Voltar ao Índice (https://www.romhacking.net.br/index.php?topic=2476.0)