[N64] Banjo-Tooie-Ponteiros

Iniciado por Ermanium, Abril 02, 2021, 13:25:00 PM

tópico anterior - próximo tópico

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

Ermanium

Então, como vocês sabem, eu estou trabalhando num projeto de tradução pt-br do jogo Banjo-Tooie já algum tempo. Eu havia parado por uns meses, mas retomei há uns dias.

A questão é que eu tô batendo cabeça com os ponteiros do jogo, a ROM que eu uso agora é a USA mesmo. Os ponteiros estão localizados entre os offsets 5188 e 12B23. Os ponteiros têm 4 bytes de comprimento, sendo o último quarto byte (alterna entre 16, 13, 17, 04 e outros) o tipo do arquivo comprimido para o qual o ponteiro está apontando (texto, música, etc).

Exemplo: No endereço 84F0 temos o ponteiro para o primeiro texto do jogo: 30 8B B6 13

O último byte (13) é o tipo do arquivo: texto, no caso. Já o 308BB6 é a distância entre o offset de início do bloco onde está localizado o texto comprimido (C359FC) menos o offset do primeiro bloco (12B24); tudo isso divido por 4. A fórmula fica assim:

ponteiro = (offset início do texto - 12B24) / 4

Entretanto mesmo utilizando a fórmula, movendo pro final da ROM, eu não consigo alterar nenhum ponteiro, qualquer valor que eu altere dentro do bloco de ponteiros deixa a ROM em loop infinito, então eu retomo o valor original. Se alguém puder me dar uma luz aqui eu vou ser muito agradecido.
When it hasn't been your day, your week, your month or even your year.

Kamppello

Talvez o jogo não permita mover o arquivo de texto para uma posição muito distante, ou talvez haja um bloqueio nesses ponteiros. Eu recuaria um pouca a posição de um desses arquivos para testar.

Caso funcione, você pode usar o espaço que sobrar em um para compensar em outro.

Caso esteja realmente bloqueado, você pode usar a versão europeia, apagando o texto de algum idioma para compensar a falta de espaço no que você quer traduzir, e também para forçar o arquivo a ficar menor que o original após recomprimido e não ter a necessidade de alterar o ponteiro.

O ponteiro interno desses arquivos de texto, indicam a posição de inicio e a quantidade de caráter que o diálogo terá. Não me lembro bem, mas acho que era assim que funcionava.

Ermanium

#2
Citação de: Kamppello online Abril 05, 2021, 11:18:46 AM
Talvez o jogo não permita mover o arquivo de texto para uma posição muito distante, ou talvez haja um bloqueio nesses ponteiros. Eu recuaria um pouca a posição de um desses arquivos para testar.

Caso funcione, você pode usar o espaço que sobrar em um para compensar em outro.
Um byte que eu diminua ou aumente em qualquer ponteiro resulta em loop infinito, não funcionou :/

Citação de: Kamppello online Abril 05, 2021, 11:18:46 AM
Caso esteja realmente bloqueado, você pode usar a versão europeia, apagando o texto de algum idioma para compensar a falta de espaço no que você quer traduzir, e também para forçar o arquivo a ficar menor que o original após recomprimido e não ter a necessidade de alterar o ponteiro.
Eu já fazia isso, acho que vou continuar por esse caminho mesmo com a rom europeia já que acho que não vou conseguir manipular os ponteiros... Eu só gostaria de saber se tem como eu remover a opção de escolher idioma do menu do jogo, como eu não sabia fazer eu colocava um "?" como todas as opções de idioma pra driblar isso...

Citação de: Kamppello online Abril 05, 2021, 11:18:46 AM
O ponteiro interno desses arquivos de texto, indicam a posição de inicio e a quantidade de caráter que o diálogo terá. Não me lembro bem, mas acho que era assim que funcionava.
Os ponteiros internos dos arquivos eu sei como funcionam, mais ou menos.

Obrigado pela ajuda! Eu vou tentar ver o que eu consigo fazer por aqui.
When it hasn't been your day, your week, your month or even your year.

Kamppello

#3
Infelizmente isso ocorre em muitos jogos do Nintendo 64.

Há 4 anos eu tentei desenvolver uma ferramenta para esse jogo, infelizmente eu não cheguei a finalizar nem o extrator, ainda assim ela ficou mais ou menos.

<e3>: RED FEATHERS ARE NEEDED FOR KAZOOIE TO FLY!<0x0005010001050100>
<e3>: KAZOOIE A BESOIN DE PLUMES ROUGES POUR VOLER!<0x0005010001050100>
<e3>: KAZOOIE BRAUCHT ROTE FEDERN ZUM FLIEGEN!<0x0005010001050100>
<e3>: ¡KAZOOIE NECESITA PLUMAS ROJAS PARA VOLAR!<0x0005010001050100>


<80>: OOOH...AN EGG! I'M SURE WE'LL FIND A USE FOR THIS SOMEWHERE...<0x0005010001050100>
<80>: OHHH... UN OEUF! JE SUIS SÛR QU'IL POURRA NOUS ÊTRE UTILE!...<0x0005010001050100>
<80>: HE, EIN EI! DAS KÖNNEN WIR SICHER IRGENDWO VERWENDEN...<0x0005010001050100>
<80>: OOOH... ¡UN HUEVO! CREO QUE LE ENCONTRAREMOS ALGÚN USO EN ALGÚN LUGAR...<0x00050100>


Imagino que o <e3> seja o BOTTLES, <80> seja o BANJO.

A melhor opção para tentar resolver o problema com os ponteiros é procurar orientação de algum grupo de fora que tenha traduzido o jogo.

Vou deixar os arquivos em anexo, talvez possam servir para consulta.

Ermanium

#4
Poxa, que pena que você não finalizou a ferramenta...

Mas de qualquer forma, obrigado pela ajuda, vou ver se consigo mais informações nesses grupos. Apenas o Banjo-Kazooie foi traduzido, mas com base nele eu provavelmente vou achar algo relevante sobre o Banjo-Tooie, talvez eu encontre algo em forums internacionais da rare também.
When it hasn't been your day, your week, your month or even your year.

Anime_World

#5
Citação de: Kamppello online Abril 05, 2021, 11:18:46 AM
Talvez o jogo não permita mover o arquivo de texto para uma posição muito distante, ou talvez haja um bloqueio nesses ponteiros. Eu recuaria um pouca a posição de um desses arquivos para testar. .

Não existe isso.
De duas uma, ou a alteração no ponteiro está sendo feita de forma incorreta ou o que você está alterando não é o ponteiro.
nonononono

Ermanium

Pra mim são os ponteiros sim, eles começam bem próximo de onde inicia o bloco de ponteiros do banjo-Kazooie, e eles tem uma padronização com valores crescentes... Utilizando a fórmula eu consigo chegar no valor exato que está lá no bloco de ponteiros, porém como eu já havia mencionado: qualquer valor que eu altere lá resulta em loop infinito, então eu sempre retorno aos valores originais.
When it hasn't been your day, your week, your month or even your year.

Anime_World

Citação de: Ermanium online Abril 06, 2021, 11:55:16 AM
Pra mim são os ponteiros sim, eles começam bem próximo de onde inicia o bloco de ponteiros do banjo-Kazooie, e eles tem uma padronização com valores crescentes... Utilizando a fórmula eu consigo chegar no valor exato que está lá no bloco de ponteiros, porém como eu já havia mencionado: qualquer valor que eu altere lá resulta em loop infinito, então eu sempre retorno aos valores originais.

Existe outras coisas que possuem padronização e valores crecentes, como por exemplo, tilemap.
nonononono

SBraz Gamer

Já viu se recalculando o crc da rom resolve?
Uma vez eu usei uma ferramenta chamada "rn64crc" que corrigiu o loop que estava tendo numa rom de 64.

Ermanium

Fiz aqui o que você sugeriu: depois de modificar o ponteiro, usei a ferramenta pra atualizar o crc, mas infelizmente continuou em loop ao tentar emular a ROM, então eu retornei ao ponteiro original.
When it hasn't been your day, your week, your month or even your year.

Ermanium

Citação de: Anime_World online Abril 06, 2021, 17:18:16 PM
Citação de: Ermanium online Abril 06, 2021, 11:55:16 AM
Pra mim são os ponteiros sim, eles começam bem próximo de onde inicia o bloco de ponteiros do banjo-Kazooie, e eles tem uma padronização com valores crescentes... Utilizando a fórmula eu consigo chegar no valor exato que está lá no bloco de ponteiros, porém como eu já havia mencionado: qualquer valor que eu altere lá resulta em loop infinito, então eu sempre retorno aos valores originais.

Existe outras coisas que possuem padronização e valores crecentes, como por exemplo, tilemap.

É uma possibilidade, tiveram coisas que me fizeram pensar que esse poderia ser o bloco de ponteiros, mas vou vasculhar outros pontos na ROM que possam ser ponteiros.
When it hasn't been your day, your week, your month or even your year.

Anime_World

Citação de: Ermanium online Abril 06, 2021, 20:48:24 PM
Citação de: Anime_World online Abril 06, 2021, 17:18:16 PM
Citação de: Ermanium online Abril 06, 2021, 11:55:16 AM
Pra mim são os ponteiros sim, eles começam bem próximo de onde inicia o bloco de ponteiros do banjo-Kazooie, e eles tem uma padronização com valores crescentes... Utilizando a fórmula eu consigo chegar no valor exato que está lá no bloco de ponteiros, porém como eu já havia mencionado: qualquer valor que eu altere lá resulta em loop infinito, então eu sempre retorno aos valores originais.

Existe outras coisas que possuem padronização e valores crecentes, como por exemplo, tilemap.

É uma possibilidade, tiveram coisas que me fizeram pensar que esse poderia ser o bloco de ponteiros, mas vou vasculhar outros pontos na ROM que possam ser ponteiros.

Essa ferramenta decomprime o conteúdo do jogo:
https://www.romhacking.net/utilities/496/
nonononono

Ermanium

#12
Pois é, eu já utilizo essa ferramenta, a única questão é os ponteiros mesmo...

Eu andei vasculhando a ROM e encontrei outro ponto que tem uma padronização crescente

-O primeiro intervalo que eu já tinha mencionado era o 5188-12B23 e os ponteiros tinham 4 bytes, utilizando a fórmula eu consigo encontrar o bloco de texto comprimido pra onde o ponteiro aponta (que eu tenho os arquivos .bin descomprimidos em uma pasta graças ao descompactador da rare). Porém, como eu tinha dito anteriormente, eu não consigo modificar os ponteiros sem resultar em loop, eu já mandei o bloco de texto pro final da ROM, já substituí ponteiros por outros existentes dentro do bloco de ponteiros, já incrementei e decrementei o último byte do ponteiro em 1... e nada.

-O outro local que eu encontrei começa no offset 1A14574, que é praticamente no final da ROM (é possível visualizar melhor esse padrão do bloco se cada linha do editor hexadecimal tiver 18 bytes). Porém, esse bloco é bem curto e nem tão padronizado. Além do mais, eu alterei todos os valores crescentes dentro desse bloco pra um já existente ali e não resultou em nada aparentemente (porém sem loop ao tentar emular). Eu gostaria de saber se o bloco de ponteiros pode ser no final da ROM.

Obrigado pela atenção!
When it hasn't been your day, your week, your month or even your year.

Anime_World

Citação de: Ermanium online Abril 07, 2021, 20:50:30 PM
Pois é, eu já utilizo essa ferramenta, a única questão é os ponteiros mesmo...

Eu andei vasculhando a ROM e encontrei outro ponto que tem uma padronização crescente

-O primeiro intervalo que eu já tinha mencionado era o 5188-12B23 e os ponteiros tinham 4 bytes, utilizando a fórmula eu consigo encontrar o bloco de texto comprimido pra onde o ponteiro aponta (que eu tenho os arquivos .bin descomprimidos em uma pasta graças ao descompactador da rare). Porém, como eu tinha dito anteriormente, eu não consigo modificar os ponteiros sem resultar em loop, eu já mandei o bloco de texto pro final da ROM, já substituí ponteiros por outros existentes dentro do bloco de ponteiros, já incrementei e decrementei o último byte do ponteiro em 1... e nada.

-O outro local que eu encontrei começa no offset 1A14574, que é praticamente no final da ROM (é possível visualizar melhor esse padrão do bloco se cada linha do editor hexadecimal tiver 18 bytes). Porém, esse bloco é bem curto e nem tão padronizado. Além do mais, eu alterei todos os valores crescentes dentro desse bloco pra um já existente ali e não resultou em nada aparentemente (porém sem loop ao tentar emular). Eu gostaria de saber se o bloco de ponteiros pode ser no final da ROM.

Obrigado pela atenção!

Nem sempre os ponteiros estão em uma tabela e seguem uma padronização, nem sempre os ponteiros são absolutos, em alguns casos eles são relativos, existindo um ponteiro que aponta para o bloco todo e posteriormente os relativos dentro desse bloco apontando para os dialogos. Você está considerando eles como absoluto, pode ser esse seu erro.
nonononono

Luke

Olá.

Posta o arquivo com a tabela, pra olharmos mais de perto.