[ASM PATCHING] Aula Básica - 05

Iniciado por Anime_World, Julho 23, 2022, 19:58:06 PM

tópico anterior - próximo tópico

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

Anime_World

Na aula anterior, aprendemos a splitar imagens e arquivos binários em pastas separadas.
Nesta aula vamos aprender a montar um Ambiente de Tradução para nosso projeto,
bem como organizar sua estrutura de pastas e automatizar os processo básicos.

Faremos uso do editor de textos VSCODE para essa função.

Para começar crie uma pasta para o seu projeto, no meu caso vou utilizar a ROM de SNES
"Rudra No Hihou (English v2.1b).sfc" logo a pasta do meu projeto será chamada de: "snes_rudranohihou"

Com a nossa pasta criada abra o VSCODE e vá na opção "File > Open Folder". Se tudo ocorreu corretamente,
a pasta será aberta no VSCODE e você verá a pasta vazia na aba EXPLORER, da seguinte forma:


Agora podemos começar a criar nossa estrutura de pastas, para criar uma pasta você deve clicar no
seguinte icone do EXPLORER:


Vamos criar então as seguinte estrutura de pastas:


Uma breve explicação da estrutura:
- "code": aqui armazenaremos nosso códigos assembly que serão importados pelo "patch.asm"
- "gfx": aqui vamos armazenar nossos gráficos
- "ips": aqui vamos armazenar os ips gerados de nossa tradução para distribuir
- "sound": aqui vamos armazenas nossos arquivos de audio
- "tbl": aqui vamos armazenar nossas tabelas de caracteres para visualização dos textos
- "text": aqui armazenaremos os scripts que dumparmos da rom
- "tools": aqui armazenaremos as ferramentas que forem usadas no processo de tradução

Com nossas pastas criadas, vamos copiar nossas ferramentas para a pasta "tools" e a rom para a raiz do projeto.
Dentro da pasta "tool" vamos armazenar todas as ferramentas que utilizaremos em nossa tradução: o bass,
o dd para separar arquivos, compressores, decompressores, dumpers, inserters...
E na raiz do projeto vamos colocar nossa ROM "Rudra no Hihou (English v2.1b).sfc":




Assim se precisarmos distribuir nosso projeto, as ferramentas já vão junto e de forma organizada.
Feito isso, já temos uma boa parte de nosso ambiente configurado e sua estrutura de arquivos pronta.
Vamos agora iniciar a automação da nosso projeto. Para isso crie um arquivo "executar.bat" se você
for usuario do Windows, ou, "executar.sh" se você for usuário Linux ou Mac.



Esse arquivo será responsável por guardar todos os comandos que serão automatizados em nossa tradução.
Você deverá inserir um comando por linha, para esse exemplo vou preenche-lo da seguinte forma:
- Primeiro os comandos que separam os arquivos da ROM
- Depois o comando do bass que executa o nosso patch e gera a rom modificada

Lembrando que como as nossas ferramentas estão na pasta tools, devemos preceder o comando com "tools\"
para que o script de automação encontre-as: "tools\bass".
A mesma coisa será para a localização dos gráficos que ficarão na pasta "gfx": "gfx\fonte.sfc"
E seguindo o que foi feito na ultima aula teremos o script de automação assim:

tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte.sfc" skip=4186112 count=1280 bs=1
pause


Veja que terminei o script de automação com o comando pause, isso é pra que seja possivel
que você visualize algum erro sem que o terminal feche. No Linux ou Mac você não precisa dele.

Agora basta executar nosso script de automação e você verá que os arquivos foram extraidos.
Você pode executa-lo dando um duplo clique sobre o mesmo como se fosse um .exe
ou abrir um prompt de comando dentro do VSCODE em "Terminal > New Terminal", digitar o nome
dele no terminal e dar ENTER.




Agora vamos adicionais mais alguns comandos de split à nossa automação para que ela fique mais divertida,
lembrando que é um comando por linha:

tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte.sfc" skip=4186112 count=1280 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte_16x16.sfc" skip=4116480 count=2336 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte_vwf.sfc" skip=4124672 count=2336 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\digitos_e_miss.sfc" skip=58823 count=608 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_01.sfc" skip=39808 count=12480 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_02.sfc" skip=656128 count=55168 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_03.sfc" skip=720640 count=123136 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_03.sfc" skip=853568 count=45664 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\tiles_01.sfc" skip=1376288 count=65600 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\intro_01.sfc" skip=3550208 count=30720 bs=1
pause


Feito isso basta salvar o arquivo e executar nossa automação novamente e teremos todos os gráficos
que automatizamos extraidos em arquivos separados:



Agora vamos criar nosso patch e inserir os arquivos novamente na ROM:

arch snes.cpu
endian lsb

output "Rudra No Hihou (BR).sfc",create
insert "Rudra no Hihou (English v2.1b).sfc"

origin $3FE000
insert "gfx\fonte.sfc"

origin $3ED000
insert "gfx\fonte_16x16.sfc"

origin $3EF000
insert "gfx\fonte_vwf.sfc"

origin $00E5C7
insert "gfx\digitos_e_miss.sfc"

origin $009B80
insert "gfx\sprites_01.sfc"

origin $0A0300
insert "gfx\sprites_02.sfc"

origin $0AFF00
insert "gfx\sprites_03.sfc"

origin $0D0640
insert "gfx\sprites_04.sfc"

origin $150020
insert "gfx\tiles_01.sfc"

origin $362C00
insert "gfx\intro_01.sfc"


E adicionar a execução do bass à nossa automação para executar nosso patch

tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte.sfc" skip=4186112 count=1280 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte_16x16.sfc" skip=4116480 count=2336 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\fonte_vwf.sfc" skip=4124672 count=2336 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\digitos_e_miss.sfc" skip=58823 count=608 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_01.sfc" skip=39808 count=12480 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_02.sfc" skip=656128 count=55168 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_03.sfc" skip=720640 count=123136 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\sprites_03.sfc" skip=853568 count=45664 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\tiles_01.sfc" skip=1376288 count=65600 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\intro_01.sfc" skip=3550208 count=30720 bs=1
tools\bass patch.asm
pause


Dessa forma sempre que executarmos nosso script de automação ele irá extrair e em seguida
reinserir os arquivos extraidos na ROM. Porém ai mora um problema, como ele extrai inicialmente
antes de inserir, caso modifiquemos um arquivo ele será substituido pelo original.
Para resolver isso conseguirmos inserir nossas modificações vamos mudar nossa estrutura da pasta
gfx para a seguinte:



Aonde a pasta "en" vai armazenar os arquivos originais em inglês e pasta "br", nossos
arquivos modificados. Isso vai ajudar inclusive, caso acontece algum problema em algum gráfico
reparar o original sem muito esforço.

Agora vamos modificar novamente nossa automação para adequar a nova estrutura:

tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\fonte.sfc" skip=4186112 count=1280 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\fonte_16x16.sfc" skip=4116480 count=2336 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\fonte_vwf.sfc" skip=4124672 count=2336 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\digitos_e_miss.sfc" skip=58823 count=608 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\sprites_01.sfc" skip=39808 count=12480 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\sprites_02.sfc" skip=656128 count=55168 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\sprites_03.sfc" skip=720640 count=123136 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\sprites_03.sfc" skip=853568 count=45664 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\tiles_01.sfc" skip=1376288 count=65600 bs=1
tools\dd if="Rudra no Hihou (English v2.1b).sfc" of="gfx\en\intro_01.sfc" skip=3550208 count=30720 bs=1
tools\bass patch.asm
pause


e nosso asm patch também, porem alterando da pasta "en" para a pasta "br", que é aonde ficarão
os arquivos modificados:

arch snes.cpu
endian lsb

output "Rudra No Hihou (BR).sfc",create
insert "Rudra no Hihou (English v2.1b).sfc"

origin $3FE000
insert "gfx\br\fonte.sfc"

origin $3ED000
insert "gfx\br\fonte_16x16.sfc"

origin $3EF000
insert "gfx\br\fonte_vwf.sfc"

origin $00E5C7
insert "gfx\br\digitos_e_miss.sfc"

origin $009B80
insert "gfx\br\sprites_01.sfc"

origin $0A0300
insert "gfx\br\sprites_02.sfc"

origin $0AFF00
insert "gfx\br\sprites_03.sfc"

origin $0D0640
insert "gfx\br\sprites_04.sfc"

origin $150020
insert "gfx\br\tiles_01.sfc"

origin $362C00
insert "gfx\br\intro_01.sfc"



Agora basta executar nossa automação, e, teremos um erro pois o bass não encontrou
os arquivos dentro da pasta "gfx\br"
Copie todos os arquivos da pasta "gfx\en" para pasta "gfx\br".
Executamos a nossa automação novamente e tudo pronto.

Você pode automatizar outras coisas nesse processo, como
conversão das imagens para png, execução do emulador depois da
execução do bass, execução dos decompressores e compressores.
Enfim, fique a vontade para brincar e não esqueça de fazer backup
dos seus projetos antes que o macaco mijão passe por ai.
nonononono

badnest

Importante ressaltar pros iniciantes que dd é uma ferramenta extremamente perigosa e o mau uso dela pode obliterar seus sistemas de arquivos. Não é à toa o apelido de disk destroyer.