DUMP/INSERT texto usando CARTOGRAPHER + ATLAS (Parte 2)

Iniciado por Gutembergh, Março 07, 2021, 15:23:40 PM

tópico anterior - próximo tópico

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

Gutembergh

DUMP/INSERT texto usando CARTOGRAPHER + ATLAS (Parte 2)

Guia uso Atlas junto com o Cartographer

Dando continuidade, após extraído todos os scripts com o Cartographer, vamos inserir usando o ATLAS.

Vou usar o jogo DemiKids - Light Version, do GBA, como exemplo. É jogo que estou traduzido no momento.

(Inserindo o texto)

PASSO #1

Baixe o ATLAS e crie na mesma pasta um arquivo .bat com qualquer nome. Aqui vou usar "Altas.bat".
Dentro dele cole os comandos a seguir:

Atlas ../Rom/JOGO.gba ../Scripts/BR/DemiKids_script_000.txt

pause


"../Rom/JOGO.gba Comandos.txt"
Aqui estou especificando o caminho da ROM.

"../Scripts/BR/DemiKids_script_000.txt"
Aqui estou especificando o caminho do arquivo de texto para inserir.

Agora, salve e feche o arquivo.

PASSO #2

Abra o arquivo de texto que vai inserir na ROM e coloque os comandos a seguir no cabeçalho.

#VAR(Table, TABLE)
#ADDTBL("..\Tabela\INSERT.tbl", Table)
#ACTIVETBL(Table)
#HDR($F8000000)
#JMP($220050, $222BDA)


Explicando.

#VAR(Table, TABLE)
#ADDTBL("..\Tabela\INSERT.tbl", Table)
#ACTIVETBL(Table)

Aqui eu estou especificando a tabela para usar na inserção do texto.

#HDR($F8000000)
Da mesma forma que precisou de um valor base para extrair, também vai precisar para inserir. Muitas vezes o mesmo valor base usado para dumpar não dar certo aqui, então uma dica que dou para saber o valor base de inserir é:
O primeiro ponteiro nunca vai ser alterado, ele sempre vai permanecer igual, mesmo após a modificação. Caso tenha inserido e ele tenha sido alterado, seu valor base está errado. (Isso a menos que mude o local onde vai inserir os textos na ROM)
Dessa forma, salve o valor base do primeiro ponteiro sem modificação. Use como valor base $0, agora execute o arquivo .bat. Veja se ele foi modificado. Agora só precisa saber a diferença de um pro outro, esse vai ser o teu valor base.

#JMP($220050, $222BDA)
Aqui eu estou dizendo onde inserir o texto. Ele vai ser inserido do offset $220050 até o offset $222BDA. Só será inserido o que couber dentro desse intervalo, por isso se atente na tela do CMD, pois lá irá dar várias informações, inclusive se foi possível inserir tudo e quantos bytes não coube.

Meu arquivo para inserir ficou assim:

//GAME NAME:

//BLOCK #000 NAME: História - 000(POINTER_RELATIVE)

#VAR(Table, TABLE)
#ADDTBL("..\Tabela\INSERT.tbl", Table)
#ACTIVETBL(Table)
#HDR($F8000000)
#JMP($220050, $222BDA)

//POINTER #0 @ $24B674 - STRING #0 @ $220050

#W32($24B674)
Sombras e Luz[TEMPO]*
marcam a passagem do tempo.[TEMPO]@
Um se esconde no outro,[TEMPO]*
formando um círculo...[TEMPO]@
Um círculo da vida.[TEMPO][END-FF]


//POINTER #1 @ $24B678 - STRING #1 @ $220142

#W32($24B678)
Dentro da Torre do Tempo[TEMPO][END-FF]


Pronto, salve e feche o arquivo.

PASSO #3

Execute o arquivo .bat e veja o resultado.


E é isso.
Um dia chegaremos lá!

jdomingos

Parabéns pelo tutorial, muitos me perguntam como fazer tradução, mas primeiro tem que estudar os tutoriais primeiro.

PSGM

Esse tutorial me ajudou muito. Gostaria de deixar minha contribuição.

No meu projeto tem ponteiros incorporados ao texto.
Ainda não entendo todos os pormenores.

Primeiro é necessário adicionar esta instrução:

#EMBTYPE("LINEAR", 24, $0)

- 24 porque o ponteiro que estou trabalhando é de 24bits)
- $0 seria o deslocamento, na rom que estou trabalhando é zero.

Meu cabeçalho ficou assim:
#VAR(Principal, TABLE)
#ADDTBL("tabelas\principal.tbl", Principal)
#ACTIVETBL(Principal)
#EMBTYPE("LINEAR", 24, $0)
#HDR($00C00000)
#JMP($00360C00, $003FFFFF)


Texto original:

#W24($8EC42)
[FB][F4]Soldier:[F8][EF][14][00][8B][31][F0][E0][14][00]
We've orders not/to let anyone pass.[E7]
Huh...? [EA]
Is that/you, Falco?![E7]
Lord Caios is waiting for/you at the pub.[FF]
Go on! Head over/to the pub![FF]


[8B][31][F0] é um ponteiro e aponta pro texto: Go on! Head over/to the pub![FF]

Para deixar o Atlas calcular automaticamente o código é necessário adicionar duas intruções:
#EMBSET(X) (o ponteiro)

#EMBWRITE(X) (onde o ponteiro aponta)
sendo X um identificador numérico único.

No final fica assim:

#W24($8EC42)
[FB][F4]Soldier:[F8][EF][14][00]
#EMBSET(005)
[E0][14][00]
We've orders not/to let anyone pass.[E7]
Huh...? [EA]
Is that/you, Falco?![E7]
Lord Caios is waiting for/you at the pub.[FF]
#EMBWRITE(005)
Go on! Head over/to the pub![FF]