[J2ME] Ajuda com ponteiros em Heroes Lore: Zero

Iniciado por AlonSo, Julho 20, 2020, 18:58:48 PM

tópico anterior - próximo tópico

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

AlonSo

 E aí pessoal? Essa é minha primeira pergunta, então aos adm desculpa por qualquer erro.
É o seguinte: decidi me aventurar um pouquinho no mundo romhacker e comecei por um jogo relativamente simples de celular java e como qualquer novato encontrei complicações nos ponteiros. No caso, o jogo é em formato .jar e deve ser descompactado, os diálogos da missão principal estão no caminho: m > m > 00.m até  99.m.


Usando um editor Hex é possí­vel traduzir e passar dos limites sem que o jogo trave, mas tem aquele clássico erro do espaço, corte de palavras e desorganização na caixa de diálogos.


Coloquei a palavra "pipoca" só pra demonstrar, mas saiu cortada.

Sei que é possí­vel resolver isso através dos ponteiros, o problema é que não encontro os benditos.
Em outras partes da ROM é possivel aumentar o espaço apenas somando o "ponteiro" antes da frase.
ex: no caminho itm > 01



observe que "Battle Caymore" é igual a 0F (15 bits contando o espaço). Basta somar ou subtrair esse 0F para modificar o tamanho da frase.

O problema é que no caso anterior no arquivo 01.m (primeira imagem) essa regra não se aplica, então se alguém puder me dar uma dica, indicar um tutorial ou qualquer coisa que possa me ajudar, ficaria agradecido.
Não sei se é permitido, mas aqui vai um anexo com jogo e emulador:
https://mega.nz/folder/x1k0FApS#MoirdG7UoqYUlqYs4kdsng

Kamppello

Olá, AlonSo. Bem vindo ao fórum.

Ao que parece, o que você encontrou não são ponteiros e sim caracteres de controle, eles controlam o tamanho das frases, neste caso! É algo pouco comum!

Um carácter de controle tem várias funções, pode indicar a posição onde a frase vai aparecer na tela, a quantidade de caractere entre outras.

O ponteiro indica onde algo começa, eles provavelmente devem estar acima dos textos, ou abaixo, ou em último caso espalhados pelo jogo.

O endstring indica onde a frase acaba, no seu caso seria o valor "00", porém, nesse jogo ele não aparenta ter muita utilidade, já que tem algo que limita a quantidade de carácteres.

Experimente dar uma olhada em cima e embaixo dos textos, se tiver códigos com valores não muito diferentes, experimente deixá-los todos iguais para ver se em todos os diálogos irão aparecer a mesma frase.

Ex:
0d0a 0d12 0d22 0d2f 0d3e (ponteiro de 2 bits, pode ter mais ou apenas 1bit)
Substitua por apenas um desses valores:
0d0a 0d0a 0d0a 0d0a 0d0a


Caso de dê certo, você faz o seguinte calculo:

Posição de inicio da frase - ponteiro = Valor relativo

Subtraindo o valor relativo da posição de inicio de cada frase você deve encontrar o valor do ponteiro.

Talvez essa dica não ajude muito. Sugiro que busque vídeos no youtube a respeito, não se atenha a plataforma, não varia muito de uma para outra.

Magalicia

Não sei se nesse caso se aplica, mas jogos de celular assim esporadicamente não tem ponteiros, eles são organizados estruturadamente com uma lista de strings (é de java que estamos falando kk).
Acho que Solid One sabe melhor, por ter feito uma vez, então ele pode te dar mais informações, boa sorte.

kuroi

É... Então... Eu andei mexendo nos arquivos que você passou aí, porém constatei o que o Magalicia disse aí em cima... No caso do J2ME, é possível que não exista mesmo o conceito de "Ponteiros", uma vez que ele seja o produto de um programa feito em Java.

Pode ser que exista algo parecido com o conceito de Ponteiros ao invés disso...

Até mais!!
君の夢が叶うのは誰かの影じゃないぜ。
風の強い日を選んで走ってきた。