Tutorial de Ponteiros.
Bom, aqui vai mais um tutorial. Nele, vou tentar te ensinar como localizar
a área de ponteiros. Na verdade, essa coisa de "Área de ponteiros" foi
definida por mim para poder trabalhar com o ROMPont, isso porque, pelo que
vi até agora, os ponteiros estão sempre juntos, um depois do outro.
O que é um ponteiro? Imagine que um certo texto na ROM começa no endereço
3F45A (por exemplo, um texto que aparece numa certa janela da fala de uma
pessoa em uma cidade qualquer), o texto é "Existe uma passagem secreta
numa caverna para leste.". Sabendo que o texto começa com a letra "e"
maiúscula da palavra existe, se você olhar o endereço dessa letra num editor
hexa, você verá o endereço 3F45A, porque a letra "E" é o início do texto. Em
algum lugar da ROM (veja bem que eu já usei esse termo antes com você,
várias vezes, para definir onde estão as DTEs por extenso, pois as DTEs
SEMPRE existem por extenso em algum lugar, de onde o jogo deve puxar a
informação), do mesmo jeito, tem que existir um lugar na ROM que define
onde começa cada texto que aparece na tela. Então, em algum lugar da ROM,
deve estar escrito "por extenso" esse endereço 3F54A. Bom, é quase isso,
do mesmo jeito que te ensinei a localizar as DTEs, você tem que procurar
esse endereço... Aí começa a parte mais difícil, vou tentar te explicar
como no passo a passo que li. Vou usar como exemplo uma ROM real e bem
conhecida por você, o Final Fantasy (1). Com uma diferença, vou usar uma
versão traduzida para o português, isso mesmo a nossa língua! Heheheheh :)
Acho que chega de enrolar, vamos ao que interessa! O texto exemplo é
"Nada aqui" mas, poderia ser qualquer outro, peguei esse para ficar mais
didático, pois é a primeira fala do bloco de história. Quando me referir
ao endereço de uma fala, estarei me referindo ao 1o. byte dessa fala,
isso é a letra "N". Então o endereço dessa fala é 28210 (hexa). Você terá
que achar esse endereço "escrito" em alguma parte da ROM, como é
impossível se fazer isso sem macetes específicos vou tentar exemplificar ao
máximo. Imagine a diferença entre um cartucho de video-game e uma ROM. O
cartucho foi feito especialmente para o video-game, a informação gravada
nele é lida diretamente pelo video-game qdo se liga. A ROM (apesar de ter
sido criada há muito mais tempo que os emuladores) tem informações extras
para serem usadas pelos emuladores, digamos assim. Essas informações não
existem no cartucho, então um ponteiro estaria escrito no cartucho
exatamente com os mesmos valores do endereço da fala, no caso da ROM,
temos que "descontar" alguns bytes para nossa localização ser perfeita.
Precisamos saber quantos bytes essa informação ocupa na ROM, este dado eu
vou passar e você vai ter que aceitar, não tenho como explicar isso, mas o
valor é 10 (hexa) bytes. Usei o hexa entre parênteses para diferenciar do
10 decimal. Não se você tem noções de conversão decimal/hexa, mas 10 hexa
= 16 decimal (o nosso 16 usado para contar laranjas, por exemplo). Então o
que fazer com esse 10h? Entenda bem essa parte para saber porque fazemos
isso, temos que subtrair do endereço da fala 10h, pois esses 10h bytes não
são importantes num cartucho real, eles compõem o "header" da ROM. Então, se
vc não sabe subtrair hexadecimal, utilize a calculadora do Windows em modo
científico e mude ela p/ o modo "Hex". Antes de subtrair esses 10h,
mantenha apenas as últimas quattro casas do endereço, pois da quinta casa
para frente nunca será importante.
Então o 28210h ficaria: 8210h
Vá na calculadora e coloque nela 8210h - 10h, isso vai dar 8200h. Separe
em duas partes: 82 00 Cada valor será um byte, lembra que falei que um
ponteiro tem dois bytes? Então, um dos bytes tem valor 82h e o outro tem
valor 00h. Você acha o que deve procurar no ponteiro dessa fala! 82h e 00h
que na ROM seriam uma seqüência: 8200. Por algum motivo que eu não sei o
qual você também deve aceitar isso, o ponteiro não estará desse jeito... Ele
estará armazenado como 0082 (apenas inverta os bytes).
Bom, agora já estamos prontos para localizar o ponteiro! Já estamos com o
valor nas mãos e vamos abrir nosso editor hexa Thingy'98 preferido! :)
Nele, apertando "s" como se fóssemos fazer uma busca normal de um texto,
entramos na tela de procura. Como não sabemos o que esses bytes
significam, sabemos apenas os valores deles, devemos procurar por valor, o
Thingy'98 faz isso quando apertamos a tecla de acento de crase (aquele
acento agudo invertido). Colocamos ele e digitamos "00", depois colocamos
ele novamente e digitamos "82". Repare que o texto não apareceu na parte
de baixo, os valores que vc digitou apareceram em cima. Pronto, dê um ESC
e espere p/ ele encontrar. Espere um pouco e pronto! Vc achou seu primeiro
pobnteiro! Nesse caso específico, a primeira ocorrência é, realmente, o
ponteiro, mas poderiam ser dois bytes com os mesmos valores do ponteiros
indicando uma outra coisa qualquer, portanto, não se preocupe se depois vc
achar um ponteiro descobrir que ele não era o ponteiro. Mas, como conferir
se é o ponteiro? Normalmente (eu sempre digo normalmente pq qse sempre vc
vai encontrar as coisas assim, mas, não existe uma coisa fixa em ROMs,
sempre vc vai descobrir coisas novas, é até melhor, pq isso faz vc ganhar
experiência, não é sempre a mesma coisa repetitiva), bom, continuando,
normalmente, o bloco de ponteiros vem diretamente antes do bloco com as
falas. Isto é, um grupo de bytes que representa os ponteiros é seguido por
outro grupo de bytes com o texto do jogo. Então, para achar o texto, uma
regra boa é achar o ponteiro que está mais próximo, acima do começo do
bloco de texto. Podem existir vários poteiros com valores iguais, o que
significa isso? Se vc mudar o valor de um, tem que mudar de todos os
outros. Como exemplo, podemos citar uma frase hipotética: "Você morreu!";
suponha que ele pode ser chamada em vários casos diferentes, então, vários
ponteiros têm o valor dessa fala. Talvez eu esteja complicando muito, mas
muito do que falo aqui aprendi por experiência, vc só vai se acostumar
mexendo. Bom, expliquei como vc faz p/ saber se é o ponteiro, mas, é um
método que pode ser trabalhoso, vc pode tentar outro método onde vc muda o
valor do ponteiro e vê o que acontece. Lembra do endereço 28210h? Lembra p/
onde ele aponta? "N" de "Nada aqui", vamos fazer um teste p/ mostrar como
os ponteiros funcionam e, ainda, saber se é o ponteiro p/ esse texto
mesmo.
Imagine a palava "Nada" de "Nada aqui", se 28210h é o endereço do "N",
28210h + 1h é o endereço da primeira letra "a" de "Nada". Vamos fazer os
testes supondo que o ponteiro apontasse parra essa letra "a" e sabendo que
o jogo lê o texto até o "delimitador de texto" o novo texto seria: "ada
aqui", como? Bem, vamos fazer o processo de achar o ponteiro novamente,
sabendo que o endereço agora é 28211h:
28211 - 10
28201
8201
82 01
01 82
0182
Se vc procurar esse endereço, não vai achar, pode até achar alguma coisa
com esse valor, mas não vai ser o endereço pq não existe endereço algum
apontando para "ada aqui". Então p/ que achamos isso?????? Bom, lebra de
onde está o ponteiro antigo? Aquele com valor 0082, sabe o que vc faz? no
lugar de 0082, coloca 0182. Agora sai do editor hexa e entra no jogo,
procura algum lugar onde apareceria a fala "Nada aqui". Veja o que aparece
agora: "ada aqui". Vc modificou seu primeiro ponteiro e viu seus efeitos
na ROM! Vc poderia, por exemplo, mostrar outro texto, usando o valor do
ponteiro desse outro texto no mesmo lugar do ponteiro de "Nada qui"!
Lembre-se sempre de fazer seus backups heim!
A partir daqui, a utilidade é apenas p/ a prática, será útil no uso do
ROMPont. O tutorial sobre como saber o que é um ponteiro termina aqui.
Vc achou um ponteiro, mas inda não achou o bloco de ponteiros. Podem
existir vários espalhados pela ROM, cada um p/ um bloco de texto (assim
como o Final Fantasy (1) e o Y's (1) Master System). No Final Fantasy 3,
todos os ponteiros para qualquer texto estão sempre no mesmo bloco. Tente
ver o que parece ser o bloco de texto não existe uma definição de onde
começa é onde termina, vc deve achar o início e o fim. tente métodos como
o ponteiro da primeiro fala do bloco e o ponteiro da última fala do bloco.
O ponteiro da última fala, quase sempre, vem logo antes do primeiro bytes
do bloco e fala que corresponde ao bloco de ponteiro. Então, os dois
últimos bytes antes do bloco de fala devem ser parte do último ponteiro.
faça um teste, a partir de um ponteiro, tente achar o texto
correspondente. Os últimos dois bytes antes de "Nada Aqui" são uma DTE
"yo" e uma letra "q". Isso é bom p/ vc saber que não interessa o conteúdo
por extenso dos ponteiros mas sim o seu valor. Os valores, que devem
aparecer na coluna da esquerda de QUALQUER editor hexadecimal são os que
devem ser usados. Eles são 56B4. vamos fazer o caminho inverso p/ ver se
ele aponta p/ alguma coisa:
56B4
56 B4
B4 56
B456
B456 + 10
B466
Agora, tem um problema, qdo vc procura o ponteiro, vc desconsidera
qualquer casa a partir da quinta. Se vc desconsidera, qual valor deve
colocar p/ transformar num endereço real. Isso não é um chute. O endereço
do texto não é B466h. O endereço verdadeiro é o próximo endereço, depois
do ponteiro com o final B466. Então vai procurando o "primeiro" B466
depois do ponteiro. O ponteiro está no endereço 2820Eh, o próximo endereço
B466h seria 2B466h. Vá nesse endereço e olhe se tem alguma fala. A fala
nesse endereço é "Há uma placa de pedra no porão...". Perceba que existe
um delimitador de texto logo antes de "Há". Como vc deve ter reparado essa
não é a última fala do bloco. Isso prova que um ponteiro pode apontar p/
qualquer lugar, não estão seqüência exata das falas. Mas, uma coisa boa vc
descobriu, que esse é um ponteiro real e é o último ponteiro do bloco de
ponteiros, pq o último? Pq logo depois vem o bloco de texto. Agora vamos
ver se o ponteiro de "Nada aqui" é o primeiro do bloco de ponteiros. Os
bytes que estão antes do 0082 são 0303. Se vc procurar pelo próximo 0313
(já com os cálculos) será o 30313. Não existe nada nesse endereço. Logo, o
0082 é o primeiro endereço do bloco de ponteiros. O bloco de texto é mais
fácil de se ver. Pode se achado apenas visualmente, sem cálculos. O bloco
de texto referente a esse bloco de ponteiros começa em "Nada aqui' e
termina em "A placa de pedra está no chão vocês entem algo". Vc pode
definir isso, pq depois de "A placa..." não existe mais texto, mas alguns
lixos, só bem depois etm texto novamente.
Tudo isso que vc achou na segunda parte do tutorial serve p/ vc achar os
valores p/ serem usados no ROMPont. Pegue o endereço do primeiro e do
último ponteiro do bloco de ponteiros: o 0082 está em: 28010h o 56B4 está
em: 2820Eh o "Nada aqui" está em: 28210h o "A placa de" está em: 2B5CBh
Lemra aquele primeiro ROMPOnt que te madei? Lembra o que ele fez com a sua
ROM (eu sei o que veio na sua mente: "Nem me lembre...")? Sabe pq ele fez
aquilo? Pq os ponteiros não estão na mesma seqüência das falas! Esse novo
ROMPont, como já disse várias vezes, usa uma oitra ROM "boa" como apoio.
Assim, ele olha o endereço de uma fala (faz aqueles cálculos) acha onde
está o ponteiro, olha o endereço da fala na ROM nova, vai no mesmo lugar
do ponteiro antigo mas na ROM nova e nuda o valor, passa p/ a próxima fala
e faz a mesma coisa. É qse impossível ele errar, no teste In Game, não
achei erro de ponteiro algum. Com isto é bom vc saber, vc pode mudar o
texto de lugar desde que atualize o valor de seus ponteiros. Vc não pode
mudar os ponteiros de lugar.
Aqui vai um exemplo do uso do ROMPont:
ROMPont ff3p.nes ff3e.nes 30D70 320C4 30D70 30010 30D6E
ff3p.nes é o nome da ROM nova ff3e.nes é o nome da rOM de apoio 30D70 é o
endereço inicial de um bloco e texto do FF3 320C4 é o endereço final do
mesmo bloco citado acima Esses dois endereços são da ROM nova, onde o
programa navega p/ saber o novo valor do ponteiro. o segundo 30D70, é o
endereço inicial do texto da ROM velha, serve p/ saber onde começa a
comparação. Sabendo que a quantidade de falas é sempre a mesma mesmo
depois da tradução, não é necessárioo informar o endereço final do texto
da ROM antiga. Qdo o programa chegar no fim do bloco de texto na ROM nova
(última fala), automaticamente estará no fim do bloco de texto da ROM
antiga. 30010 é o endereço inicial do bloco de ponteiros 30D6E é o
endereço final do bloco de ponteiros
Mas, coo ficaria o uso do ROMPont nesse teste do Final Fanatay (1) feito
nesse tutorial? Assim: ROMPont ff1p.nes ff1e.nes 28210 2B5CB 28210 28010
2820E Fácil né? Como vc já tem uma versão traduzida que funciona com os
ponteiros em seus lugares corretos, vc pode usar essa ROM como ROM antiga.
O importante é que a ROM antiga "funcione". Em algum email que eu te
mandei, tem um tutorial mais explicativo do ROMPont, use ele em conjunto
com a segunda parte desse tutorial. Espero que vc tenha tido paciência p/
chegar até o fim desse tutorial e que ele seja de grande utilidade p/ vc.
Estarei sempre disposto a ensinar quem quiser aprender! :)
Dicas:
Vc pode ver que existem algumas coisas semelhantes entre ponteiros, por
exemplo, falas armazenadas em pates próximas da ROM, tem endereços
parecidos, olhe os ponteiros que seguem depois do 0082, eles são: 0982
5C82 BD82 D982 etc.
Não tente reajustar o espaço do texto dentro do editor hexa, vc terá que
levar todo o texto para a frente redigitando-o. Faça um Dump, mude o que
vc quiser do bloco inteiro de texto reinsira e use o ROMPont.
Sempre queira aprender mais, tenha ganância pelo conhecimento.
Nunca deixe o mundo dos emuladores.
Nunca pare de traduzir ROMs.
FIM
a área de ponteiros. Na verdade, essa coisa de "Área de ponteiros" foi
vi até agora, os ponteiros estão sempre juntos, um depois do outro.
O que é um ponteiro? Imagine que um certo texto na ROM começa no endereço
3F45A (por exemplo, um texto que aparece numa certa janela da fala de uma
pessoa em uma cidade qualquer), o texto é "Existe uma passagem secreta
maiúscula da palavra existe, se você olhar o endereço dessa letra num editor
hexa, você verá o endereço 3F45A, porque a letra "E" é o início do texto. Em
algum lugar da ROM (veja bem que eu já usei esse termo antes com você,
várias vezes, para definir onde estão as DTEs por extenso, pois as DTEs
informação), do mesmo jeito, tem que existir um lugar na ROM que define
onde começa cada texto que aparece na tela. Então, em algum lugar da ROM,
deve estar escrito "por extenso" esse endereço 3F54A. Bom, é quase isso,
do mesmo jeito que te ensinei a localizar as DTEs, você tem que procurar
esse endereço... Aí começa a parte mais difícil, vou tentar te explicar
como no passo a passo que li. Vou usar como exemplo uma ROM real e bem
conhecida por você, o Final Fantasy (1). Com uma diferença, vou usar uma
versão traduzida para o português, isso mesmo a nossa língua! Heheheheh :)
Acho que chega de enrolar, vamos ao que interessa! O texto exemplo é
"Nada aqui" mas, poderia ser qualquer outro, peguei esse para ficar mais
didático, pois é a primeira fala do bloco de história. Quando me referir
ao endereço de uma fala, estarei me referindo ao 1o. byte dessa fala,
isso é a letra "N". Então o endereço dessa fala é 28210 (hexa). Você terá
que achar esse endereço "escrito" em alguma parte da ROM, como é
impossível se fazer isso sem macetes específicos vou tentar exemplificar ao
máximo. Imagine a diferença entre um cartucho de video-game e uma ROM. O
cartucho foi feito especialmente para o video-game, a informação gravada
nele é lida diretamente pelo video-game qdo se liga. A ROM (apesar de ter
sido criada há muito mais tempo que os emuladores) tem informações extras
para serem usadas pelos emuladores, digamos assim. Essas informações não
existem no cartucho, então um ponteiro estaria escrito no cartucho
exatamente com os mesmos valores do endereço da fala, no caso da ROM,
temos que "descontar" alguns bytes para nossa localização ser perfeita.
Precisamos saber quantos bytes essa informação ocupa na ROM, este dado eu
vou passar e você vai ter que aceitar, não tenho como explicar isso, mas o
valor é 10 (hexa) bytes. Usei o hexa entre parênteses para diferenciar do
10 decimal. Não se você tem noções de conversão decimal/hexa, mas 10 hexa
= 16 decimal (o nosso 16 usado para contar laranjas, por exemplo). Então o
que fazer com esse 10h? Entenda bem essa parte para saber porque fazemos
isso, temos que subtrair do endereço da fala 10h, pois esses 10h bytes não
são importantes num cartucho real, eles compõem o "header" da ROM. Então, se
vc não sabe subtrair hexadecimal, utilize a calculadora do Windows em modo
científico e mude ela p/ o modo "Hex". Antes de subtrair esses 10h,
mantenha apenas as últimas quattro casas do endereço, pois da quinta casa
para frente nunca será importante.
Então o 28210h ficaria: 8210h
Vá na calculadora e coloque nela 8210h - 10h, isso vai dar 8200h. Separe
em duas partes: 82 00 Cada valor será um byte, lembra que falei que um
ponteiro tem dois bytes? Então, um dos bytes tem valor 82h e o outro tem
valor 00h. Você acha o que deve procurar no ponteiro dessa fala! 82h e 00h
que na ROM seriam uma seqüência: 8200. Por algum motivo que eu não sei o
qual você também deve aceitar isso, o ponteiro não estará desse jeito... Ele
estará armazenado como 0082 (apenas inverta os bytes).
Bom, agora já estamos prontos para localizar o ponteiro! Já estamos com o
valor nas mãos e vamos abrir nosso editor hexa Thingy'98 preferido! :)
Nele, apertando "s" como se fóssemos fazer uma busca normal de um texto,
entramos na tela de procura. Como não sabemos o que esses bytes
significam, sabemos apenas os valores deles, devemos procurar por valor, o
Thingy'98 faz isso quando apertamos a tecla de acento de crase (aquele
acento agudo invertido). Colocamos ele e digitamos "00", depois colocamos
ele novamente e digitamos "82". Repare que o texto não apareceu na parte
de baixo, os valores que vc digitou apareceram em cima. Pronto, dê um ESC
e espere p/ ele encontrar. Espere um pouco e pronto! Vc achou seu primeiro
pobnteiro! Nesse caso específico, a primeira ocorrência é, realmente, o
ponteiro, mas poderiam ser dois bytes com os mesmos valores do ponteiros
indicando uma outra coisa qualquer, portanto, não se preocupe se depois vc
achar um ponteiro descobrir que ele não era o ponteiro. Mas, como conferir
se é o ponteiro? Normalmente (eu sempre digo normalmente pq qse sempre vc
vai encontrar as coisas assim, mas, não existe uma coisa fixa em ROMs,
sempre vc vai descobrir coisas novas, é até melhor, pq isso faz vc ganhar
experiência, não é sempre a mesma coisa repetitiva), bom, continuando,
normalmente, o bloco de ponteiros vem diretamente antes do bloco com as
falas. Isto é, um grupo de bytes que representa os ponteiros é seguido por
outro grupo de bytes com o texto do jogo. Então, para achar o texto, uma
regra boa é achar o ponteiro que está mais próximo, acima do começo do
bloco de texto. Podem existir vários poteiros com valores iguais, o que
significa isso? Se vc mudar o valor de um, tem que mudar de todos os
outros. Como exemplo, podemos citar uma frase hipotética: "Você morreu!";
suponha que ele pode ser chamada em vários casos diferentes, então, vários
ponteiros têm o valor dessa fala. Talvez eu esteja complicando muito, mas
muito do que falo aqui aprendi por experiência, vc só vai se acostumar
mexendo. Bom, expliquei como vc faz p/ saber se é o ponteiro, mas, é um
método que pode ser trabalhoso, vc pode tentar outro método onde vc muda o
valor do ponteiro e vê o que acontece. Lembra do endereço 28210h? Lembra p/
onde ele aponta? "N" de "Nada aqui", vamos fazer um teste p/ mostrar como
os ponteiros funcionam e, ainda, saber se é o ponteiro p/ esse texto
mesmo.
Imagine a palava "Nada" de "Nada aqui", se 28210h é o endereço do "N",
28210h + 1h é o endereço da primeira letra "a" de "Nada". Vamos fazer os
testes supondo que o ponteiro apontasse parra essa letra "a" e sabendo que
o jogo lê o texto até o "delimitador de texto" o novo texto seria: "ada
aqui", como? Bem, vamos fazer o processo de achar o ponteiro novamente,
sabendo que o endereço agora é 28211h:
28211 - 10
28201
8201
82 01
01 82
0182
Se vc procurar esse endereço, não vai achar, pode até achar alguma coisa
com esse valor, mas não vai ser o endereço pq não existe endereço algum
apontando para "ada aqui". Então p/ que achamos isso?????? Bom, lebra de
onde está o ponteiro antigo? Aquele com valor 0082, sabe o que vc faz? no
lugar de 0082, coloca 0182. Agora sai do editor hexa e entra no jogo,
procura algum lugar onde apareceria a fala "Nada aqui". Veja o que aparece
agora: "ada aqui". Vc modificou seu primeiro ponteiro e viu seus efeitos
na ROM! Vc poderia, por exemplo, mostrar outro texto, usando o valor do
ponteiro desse outro texto no mesmo lugar do ponteiro de "Nada qui"!
Lembre-se sempre de fazer seus backups heim!
A partir daqui, a utilidade é apenas p/ a prática, será útil no uso do
ROMPont. O tutorial sobre como saber o que é um ponteiro termina aqui.
Vc achou um ponteiro, mas inda não achou o bloco de ponteiros. Podem
existir vários espalhados pela ROM, cada um p/ um bloco de texto (assim
como o Final Fantasy (1) e o Y's (1) Master System). No Final Fantasy 3,
todos os ponteiros para qualquer texto estão sempre no mesmo bloco. Tente
ver o que parece ser o bloco de texto não existe uma definição de onde
começa é onde termina, vc deve achar o início e o fim. tente métodos como
o ponteiro da primeiro fala do bloco e o ponteiro da última fala do bloco.
O ponteiro da última fala, quase sempre, vem logo antes do primeiro bytes
do bloco e fala que corresponde ao bloco de ponteiro. Então, os dois
últimos bytes antes do bloco de fala devem ser parte do último ponteiro.
faça um teste, a partir de um ponteiro, tente achar o texto
correspondente. Os últimos dois bytes antes de "Nada Aqui" são uma DTE
"yo" e uma letra "q". Isso é bom p/ vc saber que não interessa o conteúdo
por extenso dos ponteiros mas sim o seu valor. Os valores, que devem
aparecer na coluna da esquerda de QUALQUER editor hexadecimal são os que
devem ser usados. Eles são 56B4. vamos fazer o caminho inverso p/ ver se
ele aponta p/ alguma coisa:
56B4
56 B4
B4 56
B456
B456 + 10
B466
Agora, tem um problema, qdo vc procura o ponteiro, vc desconsidera
qualquer casa a partir da quinta. Se vc desconsidera, qual valor deve
colocar p/ transformar num endereço real. Isso não é um chute. O endereço
do texto não é B466h. O endereço verdadeiro é o próximo endereço, depois
do ponteiro com o final B466. Então vai procurando o "primeiro" B466
depois do ponteiro. O ponteiro está no endereço 2820Eh, o próximo endereço
B466h seria 2B466h. Vá nesse endereço e olhe se tem alguma fala. A fala
nesse endereço é "Há uma placa de pedra no porão...". Perceba que existe
um delimitador de texto logo antes de "Há". Como vc deve ter reparado essa
não é a última fala do bloco. Isso prova que um ponteiro pode apontar p/
qualquer lugar, não estão seqüência exata das falas. Mas, uma coisa boa vc
descobriu, que esse é um ponteiro real e é o último ponteiro do bloco de
ponteiros, pq o último? Pq logo depois vem o bloco de texto. Agora vamos
ver se o ponteiro de "Nada aqui" é o primeiro do bloco de ponteiros. Os
bytes que estão antes do 0082 são 0303. Se vc procurar pelo próximo 0313
(já com os cálculos) será o 30313. Não existe nada nesse endereço. Logo, o
0082 é o primeiro endereço do bloco de ponteiros. O bloco de texto é mais
fácil de se ver. Pode se achado apenas visualmente, sem cálculos. O bloco
de texto referente a esse bloco de ponteiros começa em "Nada aqui' e
termina em "A placa de pedra está no chão vocês entem algo". Vc pode
definir isso, pq depois de "A placa..." não existe mais texto, mas alguns
lixos, só bem depois etm texto novamente.
Tudo isso que vc achou na segunda parte do tutorial serve p/ vc achar os
valores p/ serem usados no ROMPont. Pegue o endereço do primeiro e do
último ponteiro do bloco de ponteiros: o 0082 está em: 28010h o 56B4 está
em: 2820Eh o "Nada aqui" está em: 28210h o "A placa de" está em: 2B5CBh
Lemra aquele primeiro ROMPOnt que te madei? Lembra o que ele fez com a sua
ROM (eu sei o que veio na sua mente: "Nem me lembre...")? Sabe pq ele fez
aquilo? Pq os ponteiros não estão na mesma seqüência das falas! Esse novo
ROMPont, como já disse várias vezes, usa uma oitra ROM "boa" como apoio.
Assim, ele olha o endereço de uma fala (faz aqueles cálculos) acha onde
está o ponteiro, olha o endereço da fala na ROM nova, vai no mesmo lugar
do ponteiro antigo mas na ROM nova e nuda o valor, passa p/ a próxima fala
e faz a mesma coisa. É qse impossível ele errar, no teste In Game, não
achei erro de ponteiro algum. Com isto é bom vc saber, vc pode mudar o
texto de lugar desde que atualize o valor de seus ponteiros. Vc não pode
mudar os ponteiros de lugar.
Aqui vai um exemplo do uso do ROMPont:
ROMPont ff3p.nes ff3e.nes 30D70 320C4 30D70 30010 30D6E
ff3p.nes é o nome da ROM nova ff3e.nes é o nome da rOM de apoio 30D70 é o
endereço inicial de um bloco e texto do FF3 320C4 é o endereço final do
mesmo bloco citado acima Esses dois endereços são da ROM nova, onde o
programa navega p/ saber o novo valor do ponteiro. o segundo 30D70, é o
endereço inicial do texto da ROM velha, serve p/ saber onde começa a
comparação. Sabendo que a quantidade de falas é sempre a mesma mesmo
depois da tradução, não é necessárioo informar o endereço final do texto
da ROM antiga. Qdo o programa chegar no fim do bloco de texto na ROM nova
(última fala), automaticamente estará no fim do bloco de texto da ROM
antiga. 30010 é o endereço inicial do bloco de ponteiros 30D6E é o
endereço final do bloco de ponteiros
Mas, coo ficaria o uso do ROMPont nesse teste do Final Fanatay (1) feito
nesse tutorial? Assim: ROMPont ff1p.nes ff1e.nes 28210 2B5CB 28210 28010
2820E Fácil né? Como vc já tem uma versão traduzida que funciona com os
ponteiros em seus lugares corretos, vc pode usar essa ROM como ROM antiga.
O importante é que a ROM antiga "funcione". Em algum email que eu te
mandei, tem um tutorial mais explicativo do ROMPont, use ele em conjunto
com a segunda parte desse tutorial. Espero que vc tenha tido paciência p/
chegar até o fim desse tutorial e que ele seja de grande utilidade p/ vc.
Estarei sempre disposto a ensinar quem quiser aprender! :)
Dicas:
Vc pode ver que existem algumas coisas semelhantes entre ponteiros, por
exemplo, falas armazenadas em pates próximas da ROM, tem endereços
parecidos, olhe os ponteiros que seguem depois do 0082, eles são: 0982
5C82 BD82 D982 etc.
Não tente reajustar o espaço do texto dentro do editor hexa, vc terá que
levar todo o texto para a frente redigitando-o. Faça um Dump, mude o que
vc quiser do bloco inteiro de texto reinsira e use o ROMPont.
Sempre queira aprender mais, tenha ganância pelo conhecimento.
Nunca deixe o mundo dos emuladores.
Nunca pare de traduzir ROMs.
FIM
Nenhum comentário:
Postar um comentário