Bem-vindo: Seg Jun 26, 2017 5:02 pm


Tutorial rom hacking de nes (parte 1)

Acervo de tutoriais e guias sobre videogames e outros assuntos. Quer trocar a bateria de seu cartucho de SNES? Como fazer para abrir aquela fitinha de Famicom? Sempre (ou quase sempre) encontre socorro nesta seção!

Moderadores: Monge Cravos, Hunter

Tutorial rom hacking de nes (parte 1)

Mensagempor nesrocks » Sex Abr 08, 2016 11:41 pm

Devido ao interesse do DirleyVR no tópico do super pitfall resolvi fazer esse tutorial introdutório ao rom hacking no nes. Vou mostrar como fazer pra mudar os gráficos, e depois como mudar o texto. São modificações simples (dependendo da rom escolhida), e que quebram a barreira inicial e ensinam uma coisa ou duas sobre o funcionamento do NES que são úteis depois ao fazer hacks mais complicados. Se tiver bastante interesse posso fazer mais outros tutoriais prosseguindo no nível de complexidade. Lembrando que to em processo de aprendizagem, então se eu falar alguma besteira me corrijam. Acho rom hacking bem divertido e quem sabe vocês também. :positivo:

Vamos lá!

Mudando os gráficos de um jogo de NES

Introdução
Os gráficos do nes, como a maioria já sabe, são feitos de tiles. Esses tiles tem 8x8 pixels e não guardam a informação da cor, e sim um ID que vai de 0 a 4. Pixels com o mesmo ID vão ter a mesma cor, e pixels com ID 0 são transparentes. As cores são atribuídas depois por uma paleta de 4 cores.
Existem alguns editores de tile disponíveis. Eu gostei mais de usar o yy-chr pois ele tem umas funcionalidades muito bacanas que podem ser usadas mais tarde pra tarefas mais complexas do que o que vou mostrar aqui, então já começar usando ele pra se acostumar é uma boa ideia. Ele está disponível em duas versões. Eu sempre usei a C++ e nem tinha visto que tinha outra. Abri a C# aqui e vi que é um pouco diferente, mas não muito.
http://www.romhacking.net/utilities/119/
Vamos usar também o fceux que tem ferramentas muito completas de debug.
http://www.fceux.com/web/home.html

A maioria das roms do NES são facilmente editáveis nesses programas, mas nem todas. Algumas os programadores colocaram compressão de gráficos. Exemplo disso é o Contra que na versão americana tem a rom comprimida e na versão japonesa está tudo sem compressão. Eles fizeram isso pro jogo caber num chip menor e cortar os custos. Além de comprimir o jogo removeram um monte de conteúdo... Sacanas. :devil:
Uma maneira fácil de verificar se a ROM tem compressão é simplesmente abrir o yy-chr e abrir uma rom (sem ser zipada, a rom .nes mesmo). Aí você vai dando scroll. Se encontrar tiles é porque não tem compressão.
Dica: crie uma pasta de romhacking e crie uma subpasta pra cada jogo pra organizar, e mantenha uma rom original sempre à mão e trabalhe nas alterações na cópia.

Mão na massa
Vamos editar uma ROM sem compressão. Pra começar do fácil, escolha um jogo do começo do nes, aqueles jogos menores mais antigos, tipo balloon fight, battle city, etc. Eles são mais simples e têm menos gráficos e você não vai ficar perdido. Eu recomendo o arkanoid que tem os gráficos armazenados lindamente na ROM :hypnotized: Nunca vi tamanha organização, impressionante! :ghost: Mas eu escolhi duck hunt porque gosto de desafios. :rotfl:

Imagem

No lado esquerdo da tela do yy-chr tem a rom inteira exibida em forma gráfica. Se você der scroll vai ver que a maior parte dela é chuvisco. Isso aí nada mais é que o código do jogo que ao ser lido como imagem não significa nada. Da mesma forma que a estática da tv são as ondas de rádio vindas do espaço... :bigsmile: (fun fact). Mas o programa já da scroll automaticamente pra parte que ele acha serem os gráficos e normalmente ele está certo. Se não estiver, dê scroll até encontrar. Se não encontrar, escolha outro jogo. Descomprimir gráficos não é tarefa para iniciantes. :devil:

Imagem

Aí é só escolher um tile e modificar ele na área da direita. Lembre-se que a paleta usada no editor é apenas para referência, então tente usar uma paleta parecida com a real do jogo pra você não se confundir. Você pode editar cada cor individualmente e tentar chegar numa coloração parecida. E toda primeira cor de cada paleta de 4 cores é transparência, então mudar essa cor serve como referencia da "cor de céu", mas pintar o tile com essa cor significa aplicar transparencia!
Comece mudando algo simples, como o desenho da bala na interface do duck hunt. Ele está na página seguinte ao carregar o jogo no yy-chr (ao lado da palavra "SHOT").

Imagem

Salve a ROM (lembre-se de trabalhar com backups) e abra no emulador e chegue na fase com o tile que você alterou. Voilá! Realmente é simples assim editar os gráficos!

Imagem
smileys no lugar de balas na interface

E agora?
Mas... Ok, os tiles tem 8 pixels, mas tem pedaço de pato pra todo lado na rom! :dontknow: Como funciona isso? Simples, os gráficos estão todos desmontados no editor em tiles de 8x8. Essa parte de montagem dos tiles é feita na lógica do jogo. Com isso o jogo consegue ter meta tiles maiores, formando imagens mais interessantes.
No caso dos sprites (objetos em movimento, personagens, inimigos, etc) isso é feito caso a caso na programação. Para os backgrounds existem umas tabelas que fazem o esquemático de montagem dos tiles e seu nome é nametable. O console usa essas nametables pra pegar os tiles e posicionar na tela formando a figura completa. No yy-chr é possível carregar nametables pra usar o cenário montadinho como referência e editar os tiles, mas não é possível editar facilmente as nametables. Esse assunto é tarefa pra outro tutorial. :coffee:

Informação extra

Todo gráfico tem que ser carregado pelo NES na sua memória RAM pra fácil acesso pra que a unidade de processamento de gráficos (PPU) consiga exibir na tela. Ele é lido da ROM e copiado pra RAM temporariamente pra processamento. Abrindo um jogo no fceux e indo em Debug, PPU viewer, você visualiza os 2 bancos de gráficos atualmente carregados na PPU. Somente esses tiles podem ser visualizados no jogo nesse momento! Quando ele quer mostrar gráficos novos ele tem que descarregar o anterior e aí ele não pode mais ser exibido. Isso é muito útil pra encontrar os tiles na ROM chegando naquela fase e observando no PPU viewer quais estão carregados. Aliás é por essa limitação que em double dragon 2 (e no 1 também se não me engano), você nunca vê dois inimigos diferentes ao mesmo tempo na tela, porque não cabiam aqui carregados ao mesmo tempo... Acabei com a infância de quem nunca tinha percebido isso. :witsend:

Imagem

A cada momento existem no máximo 8 paletas carregadas. Cada paleta de cores está exibida na parte de baixo do viewer, de 4 em 4 cores. Clicando nas tabelas em cima com o botão direito você troca a paleta usada pra poder visualizar melhor os tiles (isso não afeta o jogo, é apenas para visualização no ppu viewer).

Passando o mouse em cima de cada tile no PPU viewer aparece embaixo o endereço na memória temporária onde o gráfico está carregado. Cada referência de tile ocupa 1 byte da memória. Se você for atento vai ver que os mesmos endereços da esquerda se repetem na direita (por exemplo o primeiro tile de cada área é o byte "$00"). Na verdade eles são diferentes, é que seus começos são omitidos pelo fceux. Os da esquerda começam com "00" e os da direita com "10", então cada tabela começa em $0000 e $1000 respectivamente, mas foram abreviados mostrando apenas o byte final.

Aliás, no NES praticamente tudo é armazenado e calculado em hexadecimal (contagem de base 16), e existem muitos sites na net explicando, mas basicamente é 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10. Sendo que "A" vale 10, "B" vale 11, "F" vale 15 e "10" vale 16. "20" vale 32, "40" vale 64, "80" vale 128 e "FF" vale 255 (que é até onde vai 1 byte). . Ou seja, enquanto que no sistema decimal com apenas 2 algarismos você só consegue contar até 99, no sistema hexadecimal conta até 255. Contando com o zero são 256 possíveis valores.

No próximo tutorial vou falar sobre como mudar o texto dos jogos. :positivo:

Próximo tutorial (Parte 2): editando texto
Editado pela última vez por nesrocks em Seg Mai 16, 2016 10:40 pm, em um total de 3 vezes.
Avatar do usuário
nesrocks
Patrocinador
 
Registrado em: Seg Ago 15, 2005 1:55 am
Localização: Rio de Janeiro - RJ

Re: Tutorial rom hacking de nes (parte 1)

Mensagempor Macbee » Seg Abr 11, 2016 5:38 pm

Aê! Que venham os próximos! =D
Avatar do usuário
Macbee
Membro NES Archive
 
Registrado em: Qui Nov 24, 2011 2:21 am
Localização: Porto Alegre, RS

Re: Tutorial rom hacking de nes (parte 1)

Mensagempor 81Gaiden » Ter Abr 12, 2016 2:35 pm

Wow, muito legal este tópico. Acho que a partir dele dá pra entender um pouco mais de construção de games em ASM no NES e quem sabe criar uma rom futura. :)
Avatar do usuário
81Gaiden
Membro NES Archive
 
Registrado em: Qui Nov 24, 2011 2:28 am
Localização: A room at Lahja Tower

Re: Tutorial rom hacking de nes (parte 1)

Mensagempor Bispo Snake » Ter Abr 12, 2016 6:02 pm

Sem trocadilhos, tutorial FODA. Vou arranjar tempo pra ler ele em breve, parabéns!
Evil is powerful, but courage is SOLID.
Either you die a hero, or you live long enough to see yourself become the villain.
FC 3DS: 3496-9906-0535 / Steam: BispoSnake / NNID: BispoSnake
Avatar do usuário
Bispo Snake
Membro NES Archive
CCBBEDEDSS
 
Registrado em: Sex Jan 30, 2009 5:45 pm
Localização: Outer Heaven

Re: Tutorial rom hacking de nes (parte 1)

Mensagempor DirleyVR » Qui Abr 14, 2016 3:54 pm

Bispo Snake escreveu:Sem trocadilhos, tutorial FODA. Vou arranjar tempo pra ler ele em breve, parabéns!



2!

:bigsmile:
Vivendo minha vida gamer hoje como se fosse nos anos 90!
Avatar do usuário
DirleyVR
Administrador
I'M A RETROGAMER!!!
 
Registrado em: Ter Nov 13, 2012 2:20 pm
Localização: Entre 1980 e 1994...

Re: Tutorial rom hacking de nes (parte 1)

Mensagempor castello » Seg Mai 16, 2016 8:35 pm

:worship: :worship: :worship: :worship: :worship: :worship:
Sensacional.
Avatar do usuário
castello
Membro NES Archive
 
Registrado em: Qui Mar 04, 2010 6:28 am
Localização: sao paulo

Re: Tutorial rom hacking de nes (parte 1)

Mensagempor eduardo_facirolli » Sex Jul 29, 2016 12:01 am

Obrigado, está me ajudando.
Avatar do usuário
eduardo_facirolli
Membro NES Archive
 
Registrado em: Qui Mar 04, 2010 6:29 am
Localização: Birigui - SP


Voltar para Tutoriais: reparos e gambiarras!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante