Fórum Unificado de Romhacking e Tradução

Romhacking e Tradução de Jogos => Dúvidas e Ajuda => Tópico iniciado por: douglaskraft online Fevereiro 15, 2023, 22:17:09 PM

Título: [PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Fevereiro 15, 2023, 22:17:09 PM
Ola, Sou novo aqui, porem já há muito tempo acompanho o trabalho da comunidade.
Estou tentando traduzir esse jogo: Guardian's Crusade, EN para o PT porem estou com dificuldades para achar os ponteiros.
A parte de TIM já achei um jeito de modificá-las, esse jogo possui muitas CLUTS que dificulta as ferramentas de extrair e repor corretamente, no entanto, após algumas tentativas não tenho problemas. Os textos, estou usando uma ferramenta Russa "Kruptar7", apesar que em letras latinas ter que repetir a letra para o jogo aceitar o caractere.

Agora os ponteiros eu não encontro, meio que até achei aonde eles deveriam estar, só não consigo um modo prático de encontrá-los

https://drive.google.com/file/d/1MLCOzdk1DV70qB66lQDZgVV3EiSwgd7a/view?usp=sharing (https://drive.google.com/file/d/1MLCOzdk1DV70qB66lQDZgVV3EiSwgd7a/view?usp=sharing)
(https://i.postimg.cc/WbBscT7P/imagem-2023-02-15-214651775.png)
https://drive.google.com/file/d/1Pp5Qt04qDBGfQ5SH3--SQuJZgD9WBllB/view?usp=sharing (https://drive.google.com/file/d/1Pp5Qt04qDBGfQ5SH3--SQuJZgD9WBllB/view?usp=sharing)
(https://i.postimg.cc/Qx40FdyR/imagem-2023-02-15-214731586.png)
A parte em azul muda sequencialmente a cada bloco de texto.
Verde e vermelha se mantêm.
No final do bloco, todas as partes destacadas mudam.
Usando um editor, sempre tem esse conjunto de códigos entre um bloco e outro, mesmo que em jogo uma frase seja em uma janelá, ela pode começar em um bloco e terminar em outro.
https://drive.google.com/file/d/1e-CZmdRpIFSFBKJcIw3b6m4t4h5jO5Lv/view?usp=share_link (https://drive.google.com/file/d/1e-CZmdRpIFSFBKJcIw3b6m4t4h5jO5Lv/view?usp=share_link)
(https://i.postimg.cc/SKQ5wvHh/imagem-2023-02-15-220636562.png)
Essa parte selecionada não aparece no CDmage, não sei pq.

Se alguém, puder ajudar, agradeço.

Obs: já vi vários vídeos e manuais sobre ponteiros.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: Luke online Fevereiro 16, 2023, 14:34:19 PM
Boa tarde,

Esse jogo tem arquivos ocultos, fica muito difícil e meio que uma tarefa bem inviável traduzir direto na bin.
O fato de você abrir o jogo diretamente pelo arquivo bin, você acaba lendo junto os pedaços de dados de controle (chunks), por isso que fica um monte de códigos juntos com o texto.

O que dá pra fazer, é eliminar esses dados de controle provisoriamente, para que eles não te atrapalhem na hora de fazer a tradução, mas mesmo assim, é um trabalho muito árduo traduzir diretamente da Bin/ISO.

Baixe o programa quickbms e use esse script.
Copia e cola esse código em um arquivo .txt e use no programa junto com a bin, o script deve recriar a bin/iso sem os pedaços de dados de controle.

get SIZE asize
putvarchr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
for OFFSET = 0 u< SIZE
    idstring "\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00"
    get DUMMY long
    get DUMMY long
    get DUMMY long
    savepos OFFSET
    log MEMORY_FILE OFFSET 0x800
    math OFFSET + 0x800
    math OFFSET + 0x118
    goto OFFSET
next
append

get SIZE asize MEMORY_FILE
get NAME basename
get EXT extension
string NAME + "_unchunked."
string NAME + EXT
log NAME 0 SIZE MEMORY_FILE

Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Fevereiro 16, 2023, 15:16:26 PM
Citação de: Luke online Fevereiro 16, 2023, 14:34:19 PM
Boa tarde,

Esse jogo tem arquivos ocultos, fica muito difícil e meio que uma tarefa bem inviável traduzir direto na bin.
O fato de você abrir o jogo diretamente pelo arquivo bin, você acaba lendo junto os pedaços de dados de controle (chunks), por isso que fica um monte de códigos juntos com o texto.

O que dá pra fazer, é eliminar esses dados de controle provisoriamente, para que eles não te atrapalhem na hora de fazer a tradução, mas mesmo assim, é um trabalho muito árduo traduzir diretamente da Bin/ISO.

Baixe o programa quickbms e use esse script.
Copia e cola esse código em um arquivo .txt e use no programa junto com a bin, o script deve recriar a bin/iso sem os pedaços de dados de controle.

get SIZE asize
putvarchr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
for OFFSET = 0 u< SIZE
    idstring "\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00"
    get DUMMY long
    get DUMMY long
    get DUMMY long
    savepos OFFSET
    log MEMORY_FILE OFFSET 0x800
    math OFFSET + 0x800
    math OFFSET + 0x118
    goto OFFSET
next
append

get SIZE asize MEMORY_FILE
get NAME basename
get EXT extension
string NAME + "_unchunked."
string NAME + EXT
log NAME 0 SIZE MEMORY_FILE


Ressumindo: esses dados não contam para o cálculo dos ponteiros?
Usando um emulador com debug + Cheat engine, consigo ver apenas as partes dos textos, sem esses dados atrapalhando entre um bloco e outro, não sei se seria um modo de fazer.
Ainda vou tentar usar o programa que tu falou.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Fevereiro 16, 2023, 15:34:35 PM
  offset           filesize   filename
--------------------------------------

- signature of 12 bytes at offset 0x0000000005a3c3f0 doesn't match the one
  expected by the script:

  this one: "333333333333"
  33 33 33 33 33 33 33 33 33 33 33 33               333333333333

  expected: ""
  00 ff ff ff ff ff ff ff ff ff ff 00               ............

- 0 files found in 4 seconds
  coverage file 0    19%   83354500   437436720  . offset 0000000005a3c3fc
  coverage file -1    0%   0          82388992   . offset 0000000004e92800

Press ENTER or close the window to quit


Acho que não deu certo, como o programa define o offset? está direcionando para um lugar que nem está escrito no script.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: Luke online Fevereiro 16, 2023, 15:37:41 PM
Você está fazendo errado.
Acabei de fazer aqui e deu certo.

Pega a iso original.

abra o programa, selecione o txt depois a iso, depois a pasta onde quer que ela vá.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Fevereiro 16, 2023, 16:08:52 PM
Citação de: Luke online Fevereiro 16, 2023, 15:37:41 PM
Você está fazendo errado.
Acabei de fazer aqui e deu certo.

Pega a iso original.

abra o programa, selecione o txt depois a iso, depois a pasta onde quer que ela vá.

Deu certo kkkk
tenho tanta versão do jogo, que a original se perdeu.
Agora vou ver o resultado
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Fevereiro 18, 2023, 15:20:43 PM
Certo tenho os arquivos " limpos", porem não resolvi o problema principal: achar os ponteiros e modificá-los.
Extra:Quem tiver intersere, esse jogo tem uma versão original em japonês, aparentemente possui algumas mudanças em relação à Ocidental 
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Fevereiro 28, 2023, 19:28:02 PM
Citação de: Luke online Fevereiro 16, 2023, 15:37:41 PM
Você está fazendo errado.
Acabei de fazer aqui e deu certo.

Pega a iso original.

abra o programa, selecione o txt depois a iso, depois a pasta onde quer que ela vá.


Para voltar o processo é mais complexo(tem que fazer um script próprio)? Pois tentei fazer usando reimport e simplesmente não vai.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: denim online Março 03, 2023, 20:41:52 PM
Aplique esse patch que eu gerei para você que mostra todos os arquivos do jogo. Como as tabelas de arquivos foram apagadas na iso original, não tem como saber o nome dos arquivos originalmente. Então criei arquivos com nomes genéricos, sequenciais e prefixados com o nome da pasta pai.

Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Março 05, 2023, 01:30:11 AM
Muito legal, abriu algumas possibilidades.
Obrigado.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: denim online Março 05, 2023, 10:06:17 AM
Sobre os ponteiros em si, a melhor forma de encontrar é pelo debugger. Mas pode tentar fazer a busca pela força bruta mesmo.

Um exemplo, o arquivo npc-07 possui a primeira frase do jogo, "[05][03]Good morning! Wake up, wake up!", no arquivo, essa está em 1dd0. Subtraia este valor de 0204, resultando em 1bcc. Este é o valor do "ponteiro relativo" que deverá buscar no arquivo. Pela busca vai ver que no offset 2249 há um 1bcc, basta modificá-lo como for conveniente. Para os demais, use o mesmo método. No caso deste jogo, os ponteiros estão dentro de um script de eventos e não sequenciais, então vai ter que buscar de um em um.

E sobre o 0204, você vai perguntar de onde tirei isso, ele é o valor encontrado no offset 4 do arquivo.

Fiz uma atualização no patch que enviei, removendo um arquivo duplicado além de corrigir a ordem de uns arquivos para que fiquem em ordem crescente de lba.

Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Março 05, 2023, 11:43:00 AM
Citação de: denim online Março 05, 2023, 10:06:17 AM
Sobre os ponteiros em si, a melhor forma de encontrar é pelo debugger. Mas pode tentar fazer a busca pela força bruta mesmo.

Um exemplo, o arquivo npc-07 possui a primeira frase do jogo, "[05][03]Good morning! Wake up, wake up!", no arquivo, essa está em 1dd0. Subtraia este valor de 0204, resultando em 1bcc. Este é o valor do "ponteiro relativo" que deverá buscar no arquivo. Pela busca vai ver que no offset 2249 há um 1bcc, basta modificá-lo como for conveniente. Para os demais, use o mesmo método. No caso deste jogo, os ponteiros estão dentro de um script de eventos e não sequenciais, então vai ter que buscar de um em um.

E sobre o 0204, você vai perguntar de onde tirei isso, ele é o valor encontrado no offset 4 do arquivo.

Fiz uma atualização no patch que enviei, removendo um arquivo duplicado além de corrigir a ordem de uns arquivos para que fiquem em ordem crescente de lba.

Rapaz tu me ajudou demais.
Antes disso, estava pensando em pegar a versão alemã do jogo pq tinha mais espaço, o problema que eu não sei alemão kkkkk, então era um duplo trabalho, além de ficar achando aonde o texto acabava e ter que adicionar espaço ou apagar alguma coisa.

Vou tentar aplicar o patch e tentar usar essa lógica de ponteiros, porem fica uma pergunta: como apliquei esse patch, se eu criar um patch ele vai ser sobre o patch ou sobre a Iso original, resumindo, uma pessoa poderá usar minhas mudanças na iso dela ou teria que usar (baixar) a iso que modifiquei
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: Luke online Março 05, 2023, 12:35:54 PM
Citação de: douglaskraft online Março 05, 2023, 11:43:00 AM
Citação de: denim online Março 05, 2023, 10:06:17 AM
Sobre os ponteiros em si, a melhor forma de encontrar é pelo debugger. Mas pode tentar fazer a busca pela força bruta mesmo.

Um exemplo, o arquivo npc-07 possui a primeira frase do jogo, "[05][03]Good morning! Wake up, wake up!", no arquivo, essa está em 1dd0. Subtraia este valor de 0204, resultando em 1bcc. Este é o valor do "ponteiro relativo" que deverá buscar no arquivo. Pela busca vai ver que no offset 2249 há um 1bcc, basta modificá-lo como for conveniente. Para os demais, use o mesmo método. No caso deste jogo, os ponteiros estão dentro de um script de eventos e não sequenciais, então vai ter que buscar de um em um.

E sobre o 0204, você vai perguntar de onde tirei isso, ele é o valor encontrado no offset 4 do arquivo.

Fiz uma atualização no patch que enviei, removendo um arquivo duplicado além de corrigir a ordem de uns arquivos para que fiquem em ordem crescente de lba.

Rapaz tu me ajudou demais.
Antes disso, estava pensando em pegar a versão alemã do jogo pq tinha mais espaço, o problema que eu não sei alemão kkkkk, então era um duplo trabalho, além de ficar achando aonde o texto acabava e ter que adicionar espaço ou apagar alguma coisa.

Vou tentar aplicar o patch e tentar usar essa lógica de ponteiros, porem fica uma pergunta: como apliquei esse patch, se eu criar um patch ele vai ser sobre o patch ou sobre a Iso original, resumindo, uma pessoa poderá usar minhas mudanças na iso dela ou teria que usar (baixar) a iso que modifiquei

Depois que você finalizar a tradução basta pegar a iso original, a sua modificada e criar outro xdelta.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Março 08, 2023, 16:46:54 PM
Citação de: denim online Março 05, 2023, 10:06:17 AM
Sobre os ponteiros em si, a melhor forma de encontrar é pelo debugger. Mas pode tentar fazer a busca pela força bruta mesmo.

Um exemplo, o arquivo npc-07 possui a primeira frase do jogo, "[05][03]Good morning! Wake up, wake up!", no arquivo, essa está em 1dd0. Subtraia este valor de 0204, resultando em 1bcc. Este é o valor do "ponteiro relativo" que deverá buscar no arquivo. Pela busca vai ver que no offset 2249 há um 1bcc, basta modificá-lo como for conveniente. Para os demais, use o mesmo método. No caso deste jogo, os ponteiros estão dentro de um script de eventos e não sequenciais, então vai ter que buscar de um em um.

E sobre o 0204, você vai perguntar de onde tirei isso, ele é o valor encontrado no offset 4 do arquivo.

Fiz uma atualização no patch que enviei, removendo um arquivo duplicado além de corrigir a ordem de uns arquivos para que fiquem em ordem crescente de lba.

Fiz como vc ensinou e deu certo, só tive que achar dois ponteiros que não tem o padrão [05][03].

Só falta duas coisas para a tradução fluir normalmente(se é que exite um fluxo normal):
1° Encontrar um método para sub. os ponteiros automaticamente, tentei criar um código em phyton para fazer isso, porem ainda não está funcionando como esperado.
2° Os caracteres latinos tendem a ser problema, o jogo tende a não reconhecer o caractere ex: "Nós", apenas se escrever "Nóos. Tenho que achar algum lugar na fonte que o jogo não considere ser "dublo espaço".

Quem sabe, após isso, posso lançar uma versão beta, kkkkk.

Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Março 08, 2023, 21:01:42 PM
Citação de: douglaskraft online Março 08, 2023, 16:46:54 PM
Citação de: denim online Março 05, 2023, 10:06:17 AM
Sobre os ponteiros em si, a melhor forma de encontrar é pelo debugger. Mas pode tentar fazer a busca pela força bruta mesmo.

Um exemplo, o arquivo npc-07 possui a primeira frase do jogo, "[05][03]Good morning! Wake up, wake up!", no arquivo, essa está em 1dd0. Subtraia este valor de 0204, resultando em 1bcc. Este é o valor do "ponteiro relativo" que deverá buscar no arquivo. Pela busca vai ver que no offset 2249 há um 1bcc, basta modificá-lo como for conveniente. Para os demais, use o mesmo método. No caso deste jogo, os ponteiros estão dentro de um script de eventos e não sequenciais, então vai ter que buscar de um em um.

E sobre o 0204, você vai perguntar de onde tirei isso, ele é o valor encontrado no offset 4 do arquivo.

Fiz uma atualização no patch que enviei, removendo um arquivo duplicado além de corrigir a ordem de uns arquivos para que fiquem em ordem crescente de lba.

Fiz como vc ensinou e deu certo, só tive que achar dois ponteiros que não tem o padrão [05][03].

Só falta duas coisas para a tradução fluir normalmente(se é que exite um fluxo normal):
1° Encontrar um método para sub. os ponteiros automaticamente, tentei criar um código em phyton para fazer isso, porem ainda não está funcionando como esperado.
2° Os caracteres latinos tendem a ser problema, o jogo tende a não reconhecer o caractere ex: "Nós", apenas se escrever "Nóos. Tenho que achar algum lugar na fonte que o jogo não considere ser "dublo espaço".

Quem sabe, após isso, posso lançar uma versão beta, kkkkk.

Aqui está o código de sub. os ponteiros em phyton, tem outro código para calcular os novos ponteiros, depois posso organizar tudo e fazer um passo a passo.

import binascii
import struct
import os

# define o intervalo de bytes que você deseja ler
start = 0x0000093C
end = 0x00002B9C

# define o nome do arquivo de saída
output_file = 'NPC-07-substituido.bin'

# abre o arquivo binário e lê os bytes correspondentes ao intervalo especificado
file_size = os.path.getsize('/content/NPC-07.bin')
if end > file_size:
    end = file_size
bytes_to_read = end - start

with open('/content/NPC-07.bin', 'rb') as f:
    f.seek(start)
    data = f.read(bytes_to_read)

# lê os valores a serem pesquisados do arquivo txt e os converte em uma lista de inteiros
with open('/content/hexanovo.txt', 'r') as f:
    search_values = [int(line.strip(), 16) for line in f]

# lê os valores de substituição do arquivo txt e os converte em uma lista de inteiros
with open('/content/hexavelho.txt', 'r') as f:
    replace_values = [int(line.strip(), 16) for line in f]

# converte os bytes em uma lista de inteiros
int_list = list(struct.unpack('>' + 'H' * (bytes_to_read // 2), data))

# substitui os valores encontrados pelos valores de substituição correspondentes
sub_count = 0
for i, value in enumerate(int_list):
    if value in search_values:
        index = search_values.index(value)
        int_list[i] = replace_values[index]
        sub_count += 1

# escreve os valores substituídos no arquivo de saída
with open(output_file, 'wb') as f:
    for value in int_list:
        f.write(struct.pack('>H', value))

# imprime a contagem de substituições feitas
print(f'Foram feitas {sub_count} substituições no arquivo binário.')


Este código trabalha com o arquivo bin, os ponteiros originais e os novos depois do texto traduzido.
As tabela txt estão como exemplo:
0x5507
0xb707
0x5d08
0x8208
0x500a
que são já os ponteiros calculados.
Deve servir para qualquer jogo que use a mesma lógica
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Março 12, 2023, 13:08:46 PM
Modifiquei a fonte do jogo para aceitar os caracteres latinos, tive que colocar no lugar de "()<>" e alguns outros que aparentemente não são usados no jogo(espero).

Porem está sendo um trampo mudar os ponteiros. Quando o não é código python que não trabalha direito, é o jogo que coloca uns ponteiros fora de padrão.

Acho que vou fazer a parte da tradução e inserir os textos de volta, e no fim, vejo como fazer essa troca de ponteiros mais eficiente.
Título: Re:[PSX] Guardian's Crusade-Ponteiros
Enviado por: douglaskraft online Março 20, 2023, 18:56:42 PM
Finalmente consegui criar uns códigos em phyton que modifica os ponteiros, porem encontrei um problema.
Não sei muito bem aonde começa e aonde termina esses ponteiros, sendo assim, o código que criei acaba mudando alguma parte do arquivo que não está relacionado aos textos, limitei a área de substituição, porem sem sucesso, fazendo com que o jogo bug em algumas partes.