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

Iniciado por Gutembergh, Março 07, 2021, 13:53: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 1)

Guia uso Cartographer junto com o Atlas

Bom, há uns dias postaram um guia traduzido do Atlas, daí pensei em passar o que sei dessas duas ferramentas. Nunca vi muito se falar sobre CARTOGRAPHER e o ATLAS em nosso idioma. Aqui vou mostrar como DUMPAR o texto da ROM de duas formas e inserir.

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

(Extraindo o texto)

#1 MÉTODO: DUMPAR O TEXTO USANDO OS PONTEIROS.

PASSO #1

Baixe o CARTOGRAPHER e crie na mesma pasta um arquivo de texto com qualquer nome. Aqui vou usar "Comandos.txt".
Dentro dele cole os comandos a seguir:


#BLOCK NAME: História - 000(POINTER_RELATIVE)
#TYPE: NORMAL
#METHOD: POINTER_RELATIVE
#POINTER ENDIAN: LITTLE
#POINTER TABLE START:         $24B674
#POINTER TABLE STOP:         $24B804
#POINTER SIZE: $04
#POINTER SPACE: $00
#ATLAS PTRS: Yes
#BASE POINTER: -$08000000
#TABLE: ..\Tabela\INICIAL.tbl
#COMMENTS: No
#END BLOCK


Vou explicar um por um.

#BLOCK NAME:         História - 000(POINTER_RELATIVE)
Comando usado apenas para identificar o que está sendo extraído. No meu caso, uso para identificar o texto e o método usado para extrair.

#TYPE:         NORMAL
Dificilmente irá precisar trocar esse comando.
Comandos possíveis: NORMAL, FIXED_STRING, FIXED_STRING && FIXED_LINE.

#METHOD:         POINTER_RELATIVE
Esse método usa os ponteiros como base para fazer a extração do texto.
Comandos possíveis: POINTER, POINTER_RELATIVE, RAW.

#POINTER ENDIAN:      LITTLE
Aqui é espeficiado o tipo do ponteiro. Difícilmente irá precisar trocar esse comando.
Comandos possíveis: BIG ou LITTLE.

#POINTER TABLE START:   $24B674
#POINTER TABLE STOP:   $24B804

Offset do início e final da tabela de ponteiros.

#POINTER SIZE:      $04
Tamanho do ponteiro. No caso desse jogo, são 4 bytes.

#POINTER SPACE:         $00
Usado caso exista espaçamento entre os ponteiros.

#ATLAS PTRS:         Yes
SEMPRE deixe Yes.

#BASE POINTER:         -$08000000
Aqui utilizaremos um valor base para ser adicionado ou subtraído ao ponteiro para que possa chegar até o offset que ele aponta.
Exemplo:

No caso desse jogo, o primeiro ponteiro é 50002208 e está localizado no offset 0x24B674.
Esse ponteiro está apontando para o primeiro texto que aprece no jogo, localizado no offset 0x220050.

Caso fosse especificado no valor base $0, o CARTOGRAPHER iria pegar o texto que estivesse no offset 0x08220050.(Como foi especificado antes, o nosso ponteiro é do tipo LITTLE, por isso é invertido).
Pra ele poder chegar ao offser certo, será necessário subtrair 0x08000000 (0x08220050 - 0x08000000 = 0x220050).
Assim, nosso valor base é -$08000000.
Atenção: Esse valor base pode ser diferente para cada bloco de ponteiros. Na mesma rom poderá usar mais de um valor base.

#TABLE:            ..\Tabela\INICIAL.tbl
Aqui você irá colocar o caminho da tabela.
Para controlar até onde cada ponteiro deve extrair, o byte de controle de fim de diálogo deve vir acompanhado de "/".
Exemplo:

/F900FF00=[END-F9]
/FF00=[END-FF]


Minha tabela para EXTRAIR está assim:

[color=blue]/FA007800FF00E700FF00=[END-FA]\n\n
FA007800=[TEMPO]
E500=@\n
F900FC00=[-1]\n
FE00=*\n
F900=[P]
F900FD00=+\n

/F900FF00=[END-F9]\n\n
/FF00=[END-FF]\n\n
F300=[PLAYER]

8140=
8141=[X-1]
8142=.
8143=[X-2]
8144=:
8145=?
8146=!
8147=[X-3]
8148=-
8149=/
814A=~
814B=(
814C=)
814D=((
814E=))
814F=[X-4]
8150=[X-5]
8151=[X-6]
8152=º
8153={
8154=}
8155=[+]
8156=[-]
8157=[x-7]
8158=œ
8159=¥
815A=$
815B=[%]
815C=&
815D=[*]
815E=[X-8]
815F=[X-9]
816F=«
8170=»
8171=?
8172=0
8173=1
8174=2
8175=3
8176=4
8177=5
8178=6
8179=7
817A=8
817B=9
817C=A
817D=B
817E=C
817F=D
8180=D
8181=E
8182=F
8183=G
8184=H
8185=I
8186=J
8187=K
8188=L
8189=M
818A=N
818B=O
818C=P
818D=Q
818E=R
818F=S
8190=T
8191=U
8192=V
8193=W
8194=X
8195=Y
8196=Z
8197=a
8198=b
8199=c
819A=d
819B=e
819C=f
819D=g
819E=h
819F=i
81A0=j
81A1=k
81A2=l
81A3=m
81A4=n
81A5=o
81A6=p
81A7=q
81A8=r
81A9=s
81AA=t
81AB=u
81AC=v
81AD=w
81AE=x
81AF=y
81B0=z
81B2=À
81B3=Á
81B4=Â
81B5=Ã
81B6=à
81B7=á
81B8=â
81B9=ã
81BA=É
81BB=Ê
81BC=é
81BD=ê
81BE=Í
81BF=í
81C0=Ú
81C1=ú
81C2=ó
81C3=ô
81C4=õ
81C5=Ç
81C6=ç
82A1=?
82A4=,
82A5=;
82A6=...
82A7=['a]
82A8='
82A9="
82AA="
82AB==
82AC=<
82AD=>
82AE=#

EE000500F6000000=[Akira]\n
EE000500=[AKIRA]\n
EE000600F6000200=[Lena]\n
EE000600=[LENA]\n
EE000700F6000300=[Amy]\n
EE000700=[AMY]\n
EE000800F6000B00=[Shin]\n
EE000800=[SHIN]\n
EE000900F6001000=[Norn]\n
EE000900=[NORN]\n
EE000A00F6000600=[Judy]\n
EE000A00=[JUDY]\n
EE000B00F6000500=[Forlon]\n
EE000B00=[FORLO]\n
EE000C00=[TEACHER]\n
EE000D00=[WARTAK]\n
EE000E00F6000B00=[Shin-2]\n
EE000E00=[SHIN-2]\n
EE000F00=[PRIMUS]\n
EE001000=[REBEL]\n
EE001100F6000900=[Guy]\n
EE001100=[GUY]\n
EE001200F6000800=[Bul]\n
EE001200=[BUL]\n
EE001300=[MORTON]\n
EE001400=[MELKLI]\n
EE001500F6000700=[Naomi]\n
EE001500=[NAOMI]\n
EE001600F6000C00=[Drail]\n
EE001600=[DRAIL]\n
EE001700=[DURAN]\n
EE001800=[KING ICY]\n
EE001900F6000D00=[Urd]\n
EE001900=[URD]\n
EE001A00F6000F00=[Verdandi]\n
EE001A00=[VERDANDI]\n
EE001B00F6000E00=[Skuld]\n
EE001B00=[SKULD]\n
EE001C00=[GNOME]\n
EE001D00=[GLASYABO]\n
EE001E00=[GREVIR]\n
EE001F00=[MAIDENS]\n
EE002000F6000400=[Lucifer]\n
EE002000=[LUCIFER]\n
EE002100F6001500=[L. Light]\n
EE002100=[L. LIGHT]\n
EE002200F6001400=[DarkLord]\n
EE002200=[DARKLORD]\n
EE002300=[BIFRONZ]\n
EE002400=[OZEMOS]\n
EE002500F6002C00=[Imperius]\n
EE002500=[IMPERIUS]\n
EE002600=[LUDRA]\n
EE002700=[SKYFISH]\n
EE002800=[ROKSAUR]\n
EE002900=[RAYKON]\n
EE002A00=[MAD HAT]\n
EE002B00=[GILGAMIS]\n
EE002C00=[DREDALUS]\n
EE002D00=[SHIVA]\n
EE002E00=[GARGOYLE]\n
EE002F00=[RAND]\n
EE003000=[QUAZIR]\n
EE003100F6000300=[Desconhecido]\n
EE003100=[???]\n
EE003200=[KIBRA]\n
EE003300=[BLUDKAP]\n
EE003400=[OBERON]\n
EE003500=[ANDROMUS]\n
EE003600=[SISTER]\n
EE003700=[KYME]\n
EE003800=[STARHAIR]\n
EE003900=[LUCIFROZ]\n
EE003A00=[PANDORA]\n
EE003B00=[CHOT]\n

EE000000F6000100=[Eu]\n
EE000000=[EU]\n[/color]


#COMMENTS:            No
Esse comando serve para deixar o texto extraído como comentário. Assim, tudo que estiver comentado não será inserido pelo ATLAS. Muito bom caso queira manter um backup do texto original. É possível deixar a tradução embaixo do texto original.
Comandos possíveis: Yes ou No.

#END BLOCK
Finaliza e dá inicio ao próximo bloco de comandos, se houver.
Pode ser adicionado quantos quiser ao mesmo arquivo.

Agora salve e pode fechar o arquivo.

PASSO #2

Crie um arquivo .bat com qualquer nome no mesmo diretório. Aqui vou usar "Cartographer.bat".

Dentro dele cole isso:

cartographer ../Rom/JOGO.gba Comandos.txt ../Scripts/EN/DemiKids_script -m

pause


"../Rom/JOGO.gba Comandos.txt"
aqui estou especificando o caminho da ROM. Se quiser, pode deixar no mesmo diretório do programa "JOGO.gba".
Não pode conter espaços!

"Comandos.txt"
Vai ler os comandos que colocamos antes

"../Scripts/EN/DemiKids_script -m"
Para onde será extraido os arquivos de texto. O programa não irá criar nenhuma pasta, você deverá ter que fazer isso manualmente. Caso ele não encontre o caminho especificado, irá dar erro.

Pronto, salve e feche o arquivo.
Agora execute o arquivo .bat.

PASSO #3

Se tudo deu certo, nosso arquivo dumpado estará assim:

//GAME NAME:

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

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

#W32($24B674)
Light and Dark mark[TEMPO]*
the passage of time.[TEMPO]@
One fades into the other,[TEMPO]*
forming an eternal cycle...[TEMPO]@
A circle of life.[TEMPO][END-FF]


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

#W32($24B678)
    Within the Time Tower[END-FA]

   

#2 METDO: DUMPAR O TEXTO SEM USAR OS PONTEIROS.

Caso não tenha conseguido achar os ponteiros, também poderá dumpar o texto da rom, porém, terá que respeitar fielmente o número de bytes de cada diálogo. Caso coloque um a mais ou menos, isso irá comprometer todos os outros diálogos. Bom, eu criei um arquivo no excel para ajudar nesses casos. Não irei falar dele aqui, porque já está ficando muito grande. Farei um post separado.

Vamos lá. Agora, nosso arquivo de comando ficará diferente. Usaremos esses comandos:
Estarei usando a ROM Legend of Wukong, do Mega Drive.

#GAME NAME: LOW (RAW)

#BLOCK NAME:                 Dialogue Block (RAW)
#METHOD:                     RAW
#SCRIPT START:               $117C63
#SCRIPT STOP:                $12C263
#TABLE:                      DUMP_LOW.tbl
#COMMENTS:                   Yes
#END BLOCK


A unica diferença para antes, é que invés de usar o inicio e final dos bloco de ponteiros, irá espeficar o inicio e fim do bloco de texto.

Então, é isso!

Como ficou muito grande, eu vou fazer outro post explicando como inserir o texto após modificado.

Um dia chegaremos lá!

Breno


jdomingos