[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.

Luke

#30
Citação de: Ermanium online Abril 14, 2021, 00:04:52 AM
Mas eu inserindo manualmente tem funcionado, mas apenas se o texto comprimido editado ficar menor ou igual ao original, se ficar com o tamanho maior não funciona...
Justamente, porque é preciso recalcular o comprimento e o apontamento do arquivo.
se o o autor do programa fez para inserção na rom, provavelmente o programa altera automaticamente os ponteiros e comprimento de cada container, deve ter alguma coisa pra fazer.
ou você tentar entender o funcionamento do tamanho.

Imagina o seguinte. (um exemplo.)

0 A 100 = PSN ONDINHA
101 A 200 = PROMOÇÃO PSN
201 A 300 = RIP ROMHACK

Ai você alterou:

0 A 100 = PSN ONDINHA PROMOÇÃO DE NATAL.
foi para 0 A 130, porque você aumentou o texto certo?
consequentemente os outros arquivos deve ir pra frente também.

131 A 230
231 A 330

e não mais 200 e 300 como antes, devem seguir pra frente porque você expandiu.

o que acontece é que o apontamento do comprimento ou ponteiro ainda continua apontando pro 100.
então ele pega o final da sua alteração e o começo do segundo container, ai dá pau mesmo.


Ermanium

Pois é, das duas umas:

Ou eu encontro os ponteiros e os edito manualmente, ou eu reinsiro o texto comprimido modificado com a ajuda da ferramenta de compressão, porém não estou conseguindo executar nenhuma dessas duas opções...
When it hasn't been your day, your week, your month or even your year.

WolfferroW

Esse RN64CRC é meio quebrado (em StarFox64 ele já me deixou na mão), optar por uCON64, instale ele e o dat do N64, esse recalcula de boas, mas não abuse muito das extremidades.

Um detalhe, como é mesmo código HEX desses ponteiros?

Ermanium

Vou dar uma olhada nisso que vc sugeriu...

O código hex eu já mencionei aqui na thread, eu acho
When it hasn't been your day, your week, your month or even your year.

Ermanium

Eu consegui usar o compressor pra inserir na ROM o arquivo modificado, ele comprime e insere na ROM, porém o resultado comprimido tem que ser menor ou igual o tamanho do bloco original... Continua na mesma, eu acho que vou seguir o esquema de usar sinônimos pra escrever textos menores que encaixem dentro do bloco comprimido ou então eu uso a ROM europeia e apago os demais idiomas como eu fazia antes.
When it hasn't been your day, your week, your month or even your year.

Ermanium

Gente, eu consegui sair dos loops infinitos quando inicia a ROM, depois de modificar os supostos ponteiros. Eu usei aquela ferramenta que atualiza o checksum da ROM e funcionou, porém agora aparece NO CONTROLLER quando inicia o jogo, não posso apertar nenhum botão do controle, e tbm não consigo acessar os save states que eu tinha salvo anteriormente. Alguém tem alguma ideia do que possa ser? Eu acredito estar no caminho certo, aparentemente é algo com o checksum, já que antes eu não conseguia modificar nenhum byte no bloco de ponteiros pois terminava em loop infinito.
When it hasn't been your day, your week, your month or even your year.

Ermanium

Gente, eu usei o ucon64 com o arquivo DAT do n64 pra recalcular o checksum, mas continua aparecendo o NO CONTROLLER na tela e não carrega o save state salvo anteriormente...
When it hasn't been your day, your week, your month or even your year.

denim

Citação de: Ermanium online Abril 02, 2021, 13:25:00 PM
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

Sua suposição está incorreta. Embora o resultado para este caso em especial não altere, o ponteiro não é de 24 bits, mas sim, 26 bits.

Então para o caso que citou, 0x308BB613, removemos os 6 bits menos significativos, resulta em 0xC22ED8, que ao somar com o base 0x12b24 dá 0xC359FC. Portanto, a fórmula correta é ((offset - 0x12b24) * 64) + tipo de arquivo.

Então se o texto estiver no final da rom, por exemplo 0x1ff0002, pela sua fórmula resulta em 0x7F753713, mas pela fórmula correta, temos 0x7F753793

Essa é a primeira observação. Existe uma outra, que é a indicação do tamanho do bloco comprimido. Não existe isso no bloco em si, este tamanho é obtido pela diferença entre o ponteiro atual e o próximo (isso explica o motivo de eles estarem em ordem crescente e também explica o motivo do jogo travar se você trocar dois ponteiros, pois o tamanho acaba ficando negativo em algum deles).

Sendo assim, é necessário que, sua ferramenta insira todos os dados ao mesmo tempo e faça a atualização de todos os ponteiros, mesmo você tendo alterado apenas um pequeno texto. Se tentar mudar apenas um ou alguns, em algum momento vai gerar erros no tamanho do bloco de algum dos dados e vai travar o jogo.

Abaixo, eu fiz a edição do ponteiro de uma das primeiras falas do jogo, movendo o conteúdo para o final da rom, usando o método correto para atualizar o ponteiro.



Ermanium

Então, eu fiz como você falou movi pro fim da ROM nesse mesmo offset que você passou como exemplo e continua aparecendo o NO CONTROLLER no início do jogo (e não dá pra sair dessa dela)...

Você recalculou o checksum? Alterou o tamanho do bloco original comprimido?

Bom, independente se eu conseguir algo ou não... vlw! Você me deu uma luz aqui, eu já suspeitava que a questão poderia estar especificamente nos bits e não nos bytes, mas não fazia ideia que o comprimento era de 26 bits!
When it hasn't been your day, your week, your month or even your year.

lucas3562

Vi sua postagem referente ao No Controler, nn seei se ja conseguiu resolver mas estava pesquisando e essa mensagem de erro ocorre pois a rare criou uma trava no banjo tooie para evitar pirataria, acredito que ao tentar modificar o código para traduzir o jogo entende que vc esta pirateando, vi que é referente a eprom, da uma olhada nesse vídeo https://youtu.be/97sISm1hzBU, nn manjo muito mas possa ser q te de uma luz, espero q consiga traduzir estou no aguardo para desfrutar desse grande trabalho  :cuteeyes: