09/01/2010

Spawn 2.0 - Tabela de Caracteres!

Vejamos... alguns avisos.
Vou induzir, quem acompanhar esse tutorial, ao erro e reflexão, então não fique frustrado se acaso não der certo os passos que vou indicar. Há certas coisas que precisamos errar para poder entender o por que de fazer certo.

Primeira coisa que precisamos fazer é dar uma olhada no jogo e verificar algum texto que seja possível se fazer uma busca relativa por ele. Precisamos de uma tabela de caracteres para ser usada como referência, senão não veremos texto algum no editor HEX.

Antes de começar, programas que usarei nessa primeira parte:
  • Monkey-Moore 0.5; (do Darklord'0)
  • Table Manager 1.0e; (do Hyllian)
  • WindHex; (do Bongo)
  • Tile Layer Pro 1.1 (de Kent Hansen)
Você consegue esses programas acessando: http://www.romhackers.org/modules/PDdownloads2/viewcat.php?cid=1


Vamos ao início de tudo:

Era uma vez, Spawn...personagem de quadrinhos criado por Todd McFarlane em 1992. Spawn era o agente da CIA, Al Simmons, que após ser morto numa armadilha armada por seu chefe vai para o inferno. Lá, ganha poderes, após negociar com o demônio Malebolgia para se tornar um "filho do inferno". Spawn acaba revolta-se contra os demônios e passa a enfrentar as criaturas sobrenaturais e a Máfia. Além da série de HQ que tem o mesmo nome do personagem, Spawn estrela um filme, uma série de desenho animado e vários jogos de video-game. No Super Nintendo, Spawn sai à procura de Cyan, filha de sua ex-esposa, que está entre 13 crianças desaparecidas em Nova York, e  durante sua jornada cruza com vários de seus inimigos, como o Violador, entre outros. E como todo final clichê, quem conhece a série pode imaginar quem está por trás de tudo! DuH!

Olha! Que coincidência! Eu traduzi esse jogo! WHWUAHWuAHWuhAUWh!!

Após uma breve introdução ao jogo, vamos direto para a primeira parte da tradução deste excelente jogo.

1ª Parte - Busca Relativa e Confecção da Tabela.

OBS: para detalhes sobre tabelas, visite http://www.romhacking.trd.br/wiki/Tabelas

Imaginemos: "Nossa! Deve ser muito fácil fazer busca relativa nessa ROM, afinal, o Gambas traduziu! Se ele consegue, eu também consigo!"... Tátátátá, é fácil sim, mas até captarem a mensagem de que uma busca relativa comum não irá encontrar nada, já perderam boas horas fuçando sem resultado!

Como todo passo-a-passo, olhem para a imagem abaixo.

Texto bonito, não? DuH! Se você possuir as habilidades básicas de um ROMhacker, faça uma busca pelo texto mostrado na imagem.

Não tem conhecimentos de ROMhacker? Não faz mal. Como diria um serial killer, vamos por partes.
Abra o Monkey-Moore para darmos uma olhada na interface do programa e assimilar algumas informações.

Coloquei cores de modo à facilitar o entendimento de cada campo.




  • Cor VERMELHA: É o campo que usaremos para abrir nosso arquivo de ROM;
  • Cor VERDE: Aqui marcamos nossa opção "Busca relativa", que tem por objetivo fazer uma busca para os valores em HEX de "A" e "a". Já vem por padrão marcado como na imagem;
  • Cor AZUL: Campo onde digitaremos o texto (aqueles do jogo) que usaremos para achar os valores de "A" e "a";
  • Cor PRETA: Marque esta caixa para que seja possível separar as palavras durante a busca e outros;
  • Cor AMARELA: Marque a caixa "Definir charset" para colocar o formato possível de alfabeto no campo correspondente (caso não saiba, deixe a caixa desmarcada);
  • Cor ROXA: Esse botão realiza a pesquisa;
  • Cor LARANJA: Campo onde irão aparecer os resultados (se houver algum para ser mostrado!WHAUwhuAHWuHAW!).
Imagino eu que não precisaremos saber mais do que isso para usar o programa e traduzir essa ROM.

Próximo passo: realizar a pesquisa!
Abra a ROM usando o botãozinho na frente do campo VERMELHO. Se observar, o local onde a ROM está aparece DENTRO do campo vermelho. Faremos a busca usando apenas letras maiúsculas, pois é assim que elas se encontram na ROM.
Usaremos aquele texto da imagem acima, o TRAIL*ENDS*HERE. Digite a frase em caixa alta mesmo no Monkey-Moore, naquele campo AZUL, tomando o cuidado de colocar um asterísco (*) entre as palavras. Marque a caixa "Usar curingas", representada pela Cor PRETA.
 Clique no botão circulado em ROXO e observe os resultados.




NENHUM!!!!!!!!!!! hwuahWUAHWUHauwHauhwUahwuH! Sem fechar o Monkey-Moore, siga em frente com a leitura. Voltaremos neste ponto mais tarde.
Sem problemas! Eu explico! Melhor dar uma olhada nessa imagem:


Até aí tudo bem. Um alfabeto normal de uma ROM normal, aberta no Tile Layer Pro.
Para localizar esse alfabeto através do Tile Layer Pro, abra a ROM nele, aperte ctrl+g; vai aparecer uma caixa como esta:


Viu o Offset dentro da caixinha? Sim! Aquele "000B6600"! Digite aquele offset e clique em "Go!".
A tela mostrada acima irá fechar e o Tile Layer Pro vai mostrar o lugar na ROM onde está esse offset.
Deve aparecer algo como:

Não vemos as letras por causa do formato em que a visualização se encontra. Vamos até o menu "View/Format/Game Boy". Não tem erro! Se fizer como está sendo descrito, você verá a imagem do alfabeto.
Vamos voltar até a imagem do alfabeto.

Observem. As letras são formadas por 2 tiles, então teremos um alfabeto em 16 bits? 2 bytes? Vamos fazer alguns testes.
Então como faremos nossa busca para saber os valores de "A" e "a"? Simples!

Antes, para um melhor entendimento, leia a parte "tabelas em 16 bits" em http://www.romhacking.trd.br/wiki/Tabelas#Tabelas_de_16_bits

Para fazer uma busca em 16 bits no Monkey-Moore, usaremos caracteres-curingas, ou melhor, um caractere-curinga. Usemos o asterisco (*) mesmo.
De volta ao ponto em que paramos no Monkey-Moore, faremos uma busca relativa novamente utilizando o conhecimento que temos agora:
Aparentemente o alfabeto está em 16 bits e teremos que usar curingas para representar o byte que se repete em cada letra:
Geralmente alfabetos em 16bits são representados assim:
0220=A \__Exemplo 1
0221=B /
ou...
2002=A \__Exemplo 2
2102=B /

Se o alfabeto é de 16 bits, provavelmente teremos um byte se repetindo em cada letra, e é exatamente aí que entra o CURINGA (não... não é o do Batman... o do Batman é CORINGA!!!) pois não sabemos que byte é esse.
Novamente configuramos o Monkey-Moore como se fôssemos fazer uma pesquisa comum, da mesma forma quando procuramos por TRAIL*ENDS*HERE, só que dessa vez mudaremos o texto a ser pesquisado.
Vamos tentar localizar os valores de "A" e "a" pesquisando pela palavra TRAIL escrita com curingas representando o byte que se repete. Ela deve ficar da seguinte forma:
*T*R*A*I*L --Esta forma para o Exemplo 1
T*R*A*I*L* --Esta forma para Exemplo 2

Supondo que seguiu meu conselho de deixar o Monkey-Moore aberto, copie e cole os modos de escrita da palavra TRAIL no campo de Cor AZUL e em seguida clique no botãozinho com uma LUPA, circulado pela Cor ROXA. Observem no Monkey os resultados com cada exemplo.

Agora paramos para pensar: "Caraca... que merda de ROM é essa...? Já usei meu conhecimento de merda para procurar as referências para montar a tabela... e NADA... ROM do capeta... DESISTO...!"

NÃO! AINDA NÃO DESISTA!! Mostrei os mesmos erros que eu cometi quando iniciei a tradução desse jogo em 2002. Naquela época não havia tutoriais; todo material era escasso e o que havia era da "elite", sem falar que ou aprendia sozinho ou dependia de pessoas de boa vontade (coisa rara antigamente...).

Agora revelarei o segredinho do alfabeto de... SPAWN...  a ROM dos infernos! WHAUwhuaHwuAH!!

Vamos voltar naquela imagem em que mostro o alfabeto pelo Tile Layer Pro.

O que estamos vendo? As letras são formadas por 2 tiles, então teremos um alfabeto em 16 bits? 2 bytes?
A resposta correta é "NANANINANÃO"!
Aí você me pergunta: "Mas Gambas... que merda é essa? Eu pesquisei TRAIL*ENDS*HERE e se estivesse em 8bits, eu tinha encontrado a porcaria do texto... então, qual é a dessa ROM?"

Devo admitir que as palavras são mostrada no jogo usando pares de bytes, ou seja, 16 bits, mas esse jogo em especial, usa um modo diferente de trabalhar o texto.

Sempre pensamos  (nós, ocidentais) que por textos serem escritos da esquerda para a direita, sempre na horizontal, a tabela terá referências do mesmo modo. Já no caso dessa ROM, consideremos os bytes das letras (2bytes) como se estivessem em colunas.
O que acontece na ROM do Spawn é que a parte superior do alfabeto é totalmente independente da parte inferior.
Cada frase no jogo tem sua duplicata com hexadecimais diferentes. Para exemplificar observe abaixo:

"I'VE TRACKED THE CHILDREN THIS FAR AND THE TRAILS ENDS HERE   "

"i ve tracked the children this far and the trails ends here..."

As frases tem o mesmo tamanho, mas podemos observar os acentos e pontuações.
Para entender melhor, vou montar o alfabeto da imagem acima de acordo com a forma que o jogo estoca as frases.
ABCDEFGHIJKLMNOP
abcdefghijklmnop
QRSTUVWXYZ012345
qrstuvwxyz

E novamente você pensa: "Gambas, seu filho da p..., me enrolou pra dizer isso?". Calma! Ainda não acabou!
Por isso que não achamos TRAIL*ENDS*HERE e muito menos somente a palavra TRAIL. O alfabeto não está em uma sequência lógica, então o que temos que tentar é achar uma palavra que use somente as letras que estão na mesma linha. Um exemplo: MALEBOLGIA. Malebolgia é um dos vilões do jogo e seu nome aparece sempre. Faça a busca usando essa palavra.

Poiseh! 14 resultados! Temos os valores exatos para "A" (60) e para "a" (80). O valor 80 para "a" está incorreto, pois ele está logo abaixo do "A", então podemos presumir que
Talvez, se ainda não entendeu, deve estar perguntando: "Mas Gambas... por que MALEBOLGIA o Monkey-Moore foi capaz de encontrar e TRAIL não?".
Observe onde estão as letras de cada palavra:
MALEBOLGIA:
ABCDEFGHIJKLMNOP
abcdefghijklmnop
QRSTUVWXYZ
qrstuvwxyz


TRAIL:





ABCDEFGHIJKLMNOP
abcdefghijklmnop
QRSTUVWXYZ
qrstuvwxyz


Para achar os valores correto, o certo é usar palavras que tenham letras na mesma linha. MALEBOLGIA usa apenas letras da 1ª linha enquanto TRAIL usa letras da 1ª e da 2ª linha. O único modo de encontrar a palavra TRAIL seria utilizar referências próprias, como vou descrever adiante.

Ainda há outra forma de encontrar as referências para "A" e "a" (até mais exatas) usando um recurso interessante do Monkey -Moore, o CHARSET! E o que ele faz? Ele define a possível ordem em que as letras estão organizadas.
Com base no que possivelmente já sabemos olhando a imagem do alfabeto no Tile Layer Pro e fazendo a busca pela palavra MALEBOLGIA, podemos montar o charset da ROM Spawn.


Retiramos as quebras de linha no final de cada sequência de letra e teremos:
ABCDEFGHIJKLMNOPabcdefghijklmnopQRSTUVWXYZqrstuvwxyz


Se a gente não mostrar ao programa como procurar, ele vai sempre considerar o charset padrão (ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz), e teremos que fazer aquele lance lá da palavra pesquisada somente conter as letras "ABCDEFGHIJKLMNOP"

"E onde eu enfio esse tal charset do Spawn? HEHE!!!" WAHUWhuaHw!!! A resposta é mais simples do que você pensou e dará menos trabalho!

Imagino que tenha percebido na descrição de alguns recursos do Monkey-Moore uma caixa de marcação circulada na Cor Amarela. Se não percebeu, dê uma olhadinha:

Em amarelo temos "Definir charset". Vamos novamente procurar por TRAIL*ENDS*HERE. Marque a caixa e coloque dentro do campo correspondente o charset que encontramos para a ROM Spawn. Não podemos esquecer de usar curingas!!! Faça a pesquisa. Sua tela deve estar desta forma:

HA! Achamos os valores corretos! Finalmente vemos a frase "TRAIL*ENDS*HERE" e algo mais, e por isso temos certeza de que estamos com a tabela QUASE terminada.
Para salvar a tabela, selecione um dos resultados e clique em "Criar tabela". Irá aparecer uma tela mostrando os caracteres e seus respectivos bytes, um lugar para colocar o nome da tabela e o formato. Atribua um nome de fácil identificação e clique no ícone de um disquete para salvar sua tabela. Pode fechar o Monkey-Moore, pois já terminamos com ele.

Agora vem a parte mais simples: corrigir a tabela!

Abra o Table Manager.


Abra a tabela que salvamos no Table Manager e se prepare para a decepção.


Não sei se é um bug no Monkey-Moore, mas ele desconsiderou as maiúsculas que haviam após o "p". A tabela deveria estar como no exemplo:

ABCDEFGHIJKLMNOP
abcdefghijklmnop
QRSTUVWXYZ
qrstuvwxyz


E não foi o que aconteceu. Teremos que corrigir, pois o Monkey-Moore localiza corretamente o valor dos caracteres QRSTUVWXYZ, mas não os salva corretamente, então só nos resta colocar na sequência correta.


Após a correção, ela deverá aparecer dessa forma.

Muito bem, povo! Acho que vou encerrando o post por aqui. Já escrevi demais! HWUAHWuhuwhaUwhuaHw!

No próximo post sobre Spawn 2.0, vou explicar como completar a tabela e vamos passar para a edição do texto dentro da ROM através do WindHex.

Valeu, gente. Até a próxima!
Abraço!


7 comentários:

  1. Que papo é esse de usar o Tile Layer Pro? Se adeque às modas ROMHackers: O esquema é usar o Tile Molester!

    ResponderExcluir
  2. Gosto do jeito que explica as coisas Gambas, tudo bem detalhado.
    Muito bom!

    ResponderExcluir
  3. COEH, Lobim! Sou das antigas, e aquele foi o modo mais simples que pude mostrar como se faz, pow! HAWHaUwhuaHwuahwuaHwu! E outra, prefiro o Tile Layer Pro por causa do arranger. Pra ROM do Spawn ajuda pacas, já que na hora de acentuar vou ter que fazer gambiarra! Você vai ver!

    Valeu, Lady! Em breve meu tutorial do SNESSOR reformulado!

    Abraço, galera!

    ResponderExcluir
  4. Gambiarra? Já estou acostumado! Você já leu a postagem do Space Invaders no meu blog? Aquilo é uma GAN (Gambiarra de Alto Nível) SHAUSHAUSAHSAUSA.

    As vezes uso o Tile Layer Pro para fazer edições in editor, mas se for para exportar, Tile Molester owna e muito!

    ResponderExcluir
  5. Muito bom Gambas, ótima leitura. Quanto mais conhecimento, melhor. Adorei seu tutorial aí, tudo bem explicadinho. Abraço, e obrigado.

    ResponderExcluir
  6. bom dia amigo, gostaria de tirar uma dúvida, estou começando agora a prender a traduzir jogos de nintendo 8 bits, estou quebrando a cabeça ,mas aos pucos estou aprendendo.

    emfim, gostaria de traduzir o jogo ultima IV - quest of avatar, e estou tomando uma surra, já li vários tutoriais e o mais proximo que cheguei de tirar duvida foi o seu.

    aparentemente só consigo achar os textos de menu e sub menu do jogo, porém não acho nem fedendo, os textos de dialogo, aparentemente, cada tela tem sua propria tabela, é possivel isso?? agradeceria imensmente se vc pudesse me ajudar, alias o jogo é este:
    http://www.youtube.com/watch?v=mBwEwcOgi6o

    só quer traduzir ele porque nao achei ninguem que teve coragem pra traduzir ele, acho q to descobrindo o porque de ninguem ter traduzido, acho q ele não é uma rom usual.

    grato

    ruben andré

    ResponderExcluir
  7. É moço: primeiramente muito obrigado pela ótima explicação!!!
    Rapaz: tô tentando fazer a tabela de um jogo, o Weapon Lord do SNES mas, num consigo nem começar, num acho nenhuma palavra de nenhuma frase, essa rom difere das demais?

    ResponderExcluir