[ASM PATCHING] Aula Básica - 04

Iniciado por Anime_World, Julho 23, 2022, 18:03:53 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Anime_World

Em nossa última aula, vimos como alterar ponteiros usando o BASS.
Nesta aula aprenderemos como extrair os gráficos para binários separados
e reinseri-los no jogo utilizando o BASS.
Esta técnica é muito util para gerenciar e controlar seu projeto de tradução,
assim se você precisar substituir um gráfico ou realizar uma revisão, não
perderá tempo reinserindo-o na rom. Bem como para mover os gráficos traduzidos
para algum espaço não utilizado na ROM ou para uma area expandida.

Para esta aula iremos fazer uso da ROM de Super Nintendo "Rudra no Hihou (English v2.1b).sfc".
Antes de qualquer procedimento, inicialmente precisaremos estudar a ROM para coletar
informações de onde estão os gráficos, com a ajuda do Tile Molester, iniciaremos nossa
busca pelo gráfico mais importante em qualquer tradução: a fonte do jogo.
Iremos encontrar esta em formato 1BPP Planar (1bit por pixel, ou seja cada byte representa 8 pixels)
iniciando no endereço 0x3FE000 em visualização de 16 linhas por 16 colunas e terminando no endereço 0x3FE500
como mostra a imagem a seguir:


Com estas informações em mãos, poderemos iniciar nosso "split" da fonte para outro
arquivo. Para isso vamos utilizar o programa "dd", que você poderá baixar aqui: comando dd caso seja um usuário do Windows.
Caso você seja usuário de uma distribuição Linux ou Mac,
o comando já vem nativamente integrado.
O uso do comando é muito simples:
dd if=rom.sfc of=grafico.sfc skip=offset_do_grafico_em_decimal count=tamanho_do_grafico_em_decimal bs=1

No nosso caso o endereço do gráfico é 0x3FE000 que em decimal dá 4186112.
E o tamanho do gráfico é 0x3FE500-0x3FE000 (endereço final - endereço inicial, o resultado será 0x500 que em decimal dá 1280 bytes.
Com base dessas informações nosso comando ficará assim, basta executa-lo em seu prompt de comando:
dd if="Rudra no Hihou (English v2.1b).sfc" of="fonte.sfc" skip=4186112 count=1280 bs=1

Agora temos a fonte extraída da jogo em um arquivo separado para edição:


Com a fonte em um arquivo separado, vamos converte-la em png para edição.
Basta selecionar a opção "Edit > Copy to..." do Tile Molester e salvar o seu arquivo png como "fonte.png".
Agora você pode edita-lo no Adobe Photoshop ou qualquer outro editor de imagem da forma que quiser.
Finalizada a edição. Vamos importa-lo novamente usando a opção "Edit > Apply From" do Tile Molester,
selecione o arquivo "fonte.png" e confirme. Não esqueça que é necessário clicar em uma área acinzentada do editor
para ele colocar o PNG no arquivo, conforme a imagem a seguir:


Com as modificações da fonte salva em nosso arquivo isolado, vamos inseri-lo no jogo usando o BASS.
Para isto faremos uso do comando "insert" do BASS, que tem a seguinte dinâmica:
insert "nomedoarquivo"

Em nosso caso:
insert "fonte.sfc"

E como visto nos tutoriais anteriores, fazemos uso do comando "origin" para especificar em qual endereço,
faremos a modificação. Nesse caso:
origin $3FE000
insert "fonte.sfc"


Ficando nosso script final da seguinte forma:
arch    snes.cpu    //; Especifica que faremos uso da arquitetura do Super Nintendo
endian  lsb         //; Especifica o Endian como Little-Endian

output "Rudra no Hihou (Modificado).sfc",create    //; Nome do arquivo que será criado com a modificação
insert "Rudra no Hihou (English v2.1b).sfc"        //; Nome do arquivo com a ROM original

origin $3FE000
insert "fonte.sfc"


Ao executar o nosso script do bass no seu prompt de comando com:
bass script.asm

Teremos a nossa rom com a modificação criada. E ao abri-la veremos presente a modificação da fonte.
Essa mesma técnica serve para outros recursos presentes na rom também. Inclusive se você quiser
separar os binários dos textos, audios ou arquivos comprimidos. O comando para reinseri-los na ROM
é o mesmo.

Além disso você pode organizar esses recursos em pastas separadas por tipos, segue um exemplo de estrutura das pastas:
- gfx\
    - fonte.sfc
    - tela_de_titulo.sfc
    - personagem.sfc
- data\
    - bloco_de_texto_1.bin
    - bloco_de_texto_2.bin
    - ponteiros_1.bin
    - ponteiros_2.bin
- sound\
    - som_1.bin
    - som_2.bin
bass.exe
dd.exe
Rudra no Hihou (Modificado).sfc
Rudra no Hihou (English v2.1b).sfc
script.asm


O que facilita na gerencia de projetos grandes em que você precisará distribuir arquivos para edição
entre os membros de sua equipe.

Estudem e até a próxima aula.

nonononono

SatY

Estudante de Assembly z80

Participe do meu servidor no discord!
https://discord.gg/sZwRyT5QK4