(WindHex) Usar 3 (três) bytes na tabela

Iniciado por RodrigoF., Maio 20, 2025, 21:02:14 PM

tópico anterior - próximo tópico

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

RodrigoF.

Olá pessoal, estou montando uma tabela para uma rom de GBA. No início de cada caixa de texto do jogo, tem 4 bytes antes dos textos, sendo o primeiro byte, o ponteiro, e os outros três para representar o avatar do personagem (se eu não estiver enganado). Eu identifiquei esses padrões e comecei a montar a tabela identificando cada avatar (com 3 bytes, ex.: 00FF00=[IKKY]) para facilitar na leitura e extração dos textos. Porém o WindHex não exibe itens da tabela que tenham 3 bytes, 2 ele exibe. Eu queria muito usar esse editor porque ele muda a cor do texto e tal, facilita bastante. Alguém poderia me dar uma dica do que fazer para ele exibir? Ou outro editor tão bom quanto e tudo mais.

Nome da rom: Medabots Metabee Version (GBA)

Desde já, muito obrigado.

kuroi

Boa tarde, blz?
Eu dei uma olhada por cima nesse jogo ontem, mas pelo que analisei, os ponteiros que você comentou não estão no começo de cada frase. Eles parecem estar em um "bloco de ponteiros" que fica diretamente antes de cada bloco de texto...
君の夢が叶うのは誰かの影じゃないぜ。
風の強い日を選んで走ってきた。

RodrigoF.

Citação de: kuroi online Maio 21, 2025, 18:01:18 PMBoa tarde, blz?
Eu dei uma olhada por cima nesse jogo ontem, mas pelo que analisei, os ponteiros que você comentou não estão no começo de cada frase. Eles parecem estar em um "bloco de ponteiros" que fica diretamente antes de cada bloco de texto...

Opa, obrigado pela disposição. Sim, eu talvez não soube esclarecer minha dúvida. A tabela fica antes de todo o bloco de texto mesmo, mas o que eu tentei dizer é que o primeiro byte de cada início de diálogo (por exemplo, não TODO diálogo obviamente) é o offset que referência ele na tabela de ponteiros. Mas o meu problema é só que eu queria exibir o avatar (ou foto do personagem, se preferir) no editor hexadecimal, e cada avatar é composto de 3 bytes, por exemplo: avatar do IKKY TRISTE é 01FC00. Aí eu queria colocar na tabela (.tbl) assim:

01FC00=<IKKY_TRISTE>

E que "<IKKY_TRISTE>" aparecesse com a corzinha diferente no editor. Mas o editor só faz isso com 2 bytes.

No entanto, não vai ser mais necessário eu vou usar um extrator de textos em linha de comando e este extrator exibe da maneira que eu desejar (é o "dumper.exe").

Mas fico agradecido pela atenção.

D!sturbed

Hummm... Dificilmente os 3 bytes representam algo desse tipo, é muito byte (24 bits) para esse tipo de informação...

Provavelmente um deles deve representar alguma outra coisa... Dei uma olhada rápida aqui, aparentemente o terceiro byte representa o lado da tela que irá aparecer o avatar... por exemplo, editei aqui em 0x414DA7 de 00 para 01 e o resultado foi que o avatar do personagem passou da direita para a esquerda... depois mudei os 2 endereços logo em seguida para 0004 e troquei o avatar do personagem, ou seja, apenas os bytes 00 04 formam o avatar, sendo o byte antecessor responsável por outra coisa (no caso aqui, a posição do avatar, mas como não conheço o jogo nem me aprofundei na rom, não posso dizer que será assim o tempo todo).



RodrigoF.

Citação de: D!sturbed online Maio 31, 2025, 04:04:46 AMHummm... Dificilmente os 3 bytes representam algo desse tipo, é muito byte (24 bits) para esse tipo de informação...

Provavelmente um deles deve representar alguma outra coisa... Dei uma olhada rápida aqui, aparentemente o terceiro byte representa o lado da tela que irá aparecer o avatar... por exemplo, editei aqui em 0x414DA7 de 00 para 01 e o resultado foi que o avatar do personagem passou da direita para a esquerda... depois mudei os 2 endereços logo em seguida para 0004 e troquei o avatar do personagem, ou seja, apenas os bytes 00 04 formam o avatar, sendo o byte antecessor responsável por outra coisa (no caso aqui, a posição do avatar, mas como não conheço o jogo nem me aprofundei na rom, não posso dizer que será assim o tempo todo).




Entendi, bacana esse teste que vc fez vou fazer mais uns testes deste tipo para verificar, mas de qualquer forma deu pra encontrar qual byte é de pulo de linha, pulo de janela e fim de diálogo e consequentemente os de início de cada diálogo, desta forma eu estou conseguindo extrair o texto de pouco em pouco, traduzindo, re-inserindo, e realocando os ponteiros. O que me falta agora é um "realocador" automático de ponteiros. Mas ainda não estou neste patamar de conhecimento...
Também vou ter que aprender a extrair os gráficos comprimidos.

D!sturbed

Essa ROM parece trabalhar com ponteiros normais de GBA. Talvez a tool que desenvolvi para extrair os scripts do Metroid Fusion que estou traduzindo seja compatível... isso significa que já tenho uma tool para inserir os textos também, trabalhando com os ponteiros... Se tiver a tabela completa do jogo e quiser me enviar, faço os testes aqui e se funcionar, te passo acesso a tool

RodrigoF.

#6
Citação de: D!sturbed online Maio 31, 2025, 18:11:26 PMEssa ROM parece trabalhar com ponteiros normais de GBA. Talvez a tool que desenvolvi para extrair os scripts do Metroid Fusion que estou traduzindo seja compatível... isso significa que já tenho uma tool para inserir os textos também, trabalhando com os ponteiros... Se tiver a tabela completa do jogo e quiser me enviar, faço os testes aqui e se funcionar, te passo acesso a tool

Está completa mas com ressalvas, porque falta essa parte dos avatares até porque são muitos, e talvez possa faltar algo do tipo que verei ao avançar mais na tradução. Agora letramento eu garanto que tá completa, será que dá? Obs.: Estou fazendo sobre a versão espanhola do game, NO INTRO CRC: 7e907ec8.

D!sturbed

Vou dar uma olhada aqui, ver o que preciso adaptar, segunda ou terça te dou um retorno, blz?

RodrigoF.

Citação de: D!sturbed online Maio 31, 2025, 23:07:30 PMVou dar uma olhada aqui, ver o que preciso adaptar, segunda ou terça te dou um retorno, blz?

Blz, muito obrigado.

D!sturbed

#9
Dei uma olhada aqui agora de tarde e infelizmente minha ferramenta não é compatível, por um detalhe... A ROM em questão utiliza uma tabela mista de 8 e 16 bits, o que acaba extraindo os textos de forma errada com minha ferramenta do jeito que está:



O que acarretaria inserir de forma errada também...

Eu precisaria reprogramar uma parte dela para identificar o início do bloco de instrução, extrair os bytes de instrução em 16bits (posição e avatar), depois trabalhar com a extração dos textos em 8bits, e depois fazer o processo inverso na ferramenta de inserção, para que tudo funcione como deve... Não é exatamente de alta complexidade, mas levaria um tempinho.

Teria problema para você trabalhar com uma tabela com configuração diferente da que você me passou?



Se você concordar, posso fazer os ajustes na tool aqui, daí enquanto isso, você vai terminando a tabela, para que quando a tool estiver pronta, possamos testar.

Edit: Esqueci de anexar a tabela...

RodrigoF.

Na verdade eu já estou bem avançado na tradução dos scripts da maneira que estou fazendo, e descobrir todos os avatares pra completar a tabela acho que levaria o mesmo tempo que eu gastaria para terminar de traduzir os scripts. Mas se quiser se divertir aí criando a ferramenta, se animar, quando terminar quiser me mostrar. De qualquer forma muito obrigado pela moral

D!sturbed

#11
Sem problemas!

A maior dificuldade de implementar a tool é a tabela mista, tentei contornar isso criando um buffer, mas acaba dando na mesma, quando ele bate em bytes que coincidem com os de 8 bits ele extrai como se fossem 16bits, daí gera uma anomalia na extração e acabo tendo uma saída assim:

414D63
[LEFT_IMG][ATENDENTE_1B]Good afternoon.[NEXTLINE]Did you come by to see[MAIN_CHAR_04]r.[MAIN_CHAR_01]ki again?[END_BOX][RIGHT_IMG][MAIN_CHAR_04]Yup![END_BOX][LEFT_IMG][ATENDENTE_1B]Well, then you should go check his[NEXTLINE]office all the way in the back.[END_BOX][RIGHT_IMG][MAIN_CHAR_01]Okay, thanks [ATENDENTE_1B]lot![ENDBLOCK]

quando a saída correta deveria ser assim:

414D63
[LEFT_IMG][ATENDENTE_1B]Good afternoon.[NEXTLINE]Did you come by to see Dr. Aki again?[END_BOX][RIGHT_IMG][MAIN_CHAR_04]Yup![END_BOX][LEFT_IMG][ATENDENTE_1B]Well, then you should go check his[NEXTLINE]office all the way in the back.[END_BOX][RIGHT_IMG][MAIN_CHAR_01]Okay, thanks a lot![ENDBLOCK]

Dá para modificar um pouco a lógica e extrair de outra maneira e depois passar por outro programa para normalizar o script (por exemplo, eu fingiria que os 4 bytes de instrução formam uma cadeia de 32bits, apenas com o intuito de não quebrar muito a cabeça pensando em como tratar isso, e depois de extrair tudo passaria por outro programa que pegaria esse dump e normalizaria ele, quebrando esses 32bits fake em 1 par de 16bits, fazendo o inserter funcionar corretamente... mas de qualquer forma, eu precisaria da tabela completa para fazer isso...) Se precisar, só falar!

kuroi

Acho que posso ajudar aqui...
Qual é a lógica dos ponteiros desse jogo?
君の夢が叶うのは誰かの影じゃないぜ。
風の強い日を選んで走ってきた。

RodrigoF.

Opa, boa noite, felizmente agora ponteiros não é mais o problema, eu até consegui desenvolver uma calculadora para eles, agora tinha que conseguir editar os gráficos, e são muitos. Se alguém tiver animado.