Menu

Mostrar postagens

Esta seção permite que você visualize todas as postagens feitas por este membro. Observe que você só pode ver postagens feitas em áreas às quais tem acesso atualmente.

Menu Mostrar postagens

Mensagens - douglaskraft

#1
Não criei no objetivo de ser um tutorial, e sim para ser mais como um exemplo,
" se vc está com dificuldade de inserir textos pode fazer com Python", aliás a 2°versão está com alguma falha, que assim que me sobrar tempo corrijo, por mesmo motivo não está no Github.
Esse manual, que já tinha lido, não ajuda em situações que eu estou enfrentando no jogo especifico.
Quem utiliza o colab, sabe que é simples fazer uma cópia e mexer como quiser, sabe como rodar o código inteiro de uma vez, se por algum motivo o Google restringiu o acesso, eu libero novamente.
 
Ultimamente estou sem tempo e cabeça para prosseguir com o desenvolvimento do código/tradução.
#3
Citação de: Anime_World online Maio 26, 2023, 19:38:38 PM
Só de ter escrito "Phyton" já perdi a vontade de olhar o código.
FODA-SE meu irmão
#4
Desconheço como fazer tradução desse tipo de arquivo, porem,
não sei o quanto vc sabe sobre traduções de jogos, só que não se pode aumentar ou diminuir o tamanho do arquivo editado, em vários jogos, existem ponteiros que determinam o início e termino da frase.
Dizer o jogo que está modificando também ajuda.
#5
Lançamentos / Re:[PS4] Sniper Elite V2 Remastered
Abril 16, 2023, 12:37:56 PM
Não achei que era possível traduzir jogos de PS4, uma dúvida? Tem que ter o PS4 desbloqueado ou se tiver uma cópia digital, da pra aplicar a tradução em um console original?
#6
Fiz uma 2° versão do código
#7
Citação de: Luke online Março 31, 2023, 21:01:50 PM
Usa o $nopsx e use um breakpoint, no endereço do texto, ai faça uma varredura no log.
Então, não sei como fazer isso, sabe de algum tutorial? Nunca encontrei um que ensinava como fazer no NO$PSX

Usei esse tutorial como base:
https://www.youtube.com/watch?v=khrOvki72B8&t=1532s
#8
Dúvidas e Ajuda / [PSX] Como fazer Tracer?
Março 31, 2023, 20:15:52 PM
Nem sei se isso pode me ajudar kkkkk.
O problema é o seguinte:
Mesmo alterando os ponteiros do jogo, tem alguns ponteiros que estão Fixos, geralmente quando acontece um evento importante no jogo, ou seja, mesmo que consiga escrever menos ou mais do ponto do evento, o jogo sempre busca aquele evento, fazendo o jogo travar quando ele é pedido.
Estou tentando usar o emulador pSX_1_13 e Cheat engine para tentar achar esses ponteiros e de alguma forma alterar eles, porem sem sucesso.
Como estou buscando uma posição específica no arquivo tipo ex: 05, entre os textos, usado para chamar o texto, não encontro a região da rom que está a função específica.
E li em varios lugares que tem a opção tracer nos emuladores, que busca todas as funções que o jogo faz em um determinado momento. Creio que isso poderia me ajudar.
#9
Na minha caminhada para tentar traduzir um Jogo, fiz alguns códigos em phyton, que podem auxiliar alguém em algum projeto.
Deixei eles públicos no colab, da para baixar e modificar do jeito que achar melhor.
Estou usando para traduzir Guardian's Crusade, então o exemplo é do jogo.

Sobre o código, são 7 passos, que vão da leitura dos ponteiros do aquivo original e modificada, até a mudança deles.
Para extração e inserção de texto, creio que tem ferramentas eficientes na internet.
Não sou especialista em python então não me perguntem muita coisa, qualquer coisa tem ChatGPT da vida para mudar o código como vcs quiserem kkkk.

Se tiver uma conta google, pode salvar no drive e usar no colab em ambiente virtual.


https://colab.research.google.com/drive/1R4qY4pFFVLQpCQFY9EiV9ZIjQWvH70QC?usp=sharing


2° versão


Vc diz qual o arquivo original e modificado, depois a posição da tabela de ponteiros, e pode executar tudo de uma vez. OBS: tem que modificar o código para cada projeto, o header dos ponteiros do arquivo que estou trabalhando sempre está a 4 byts do início, os textos começam e terminam após valores específicos.


#10
Citação de: Belmont online Março 29, 2023, 16:02:11 PM
Olá parceiro, gostei da sua explicação

Só tenho uma dúvida, como faço para calcular os ponteiros de uma rom do PSX?

Depende do jogo, porem, geralmente vc tem que saber o endereço do primeiro ponteiro da tabela de ponteiros e diminuir ou somar dos ponteiros que aparecem no texto do jogo.

Abra um tópico de dúvidas com nome do seu jogo e todas as dificuldades que está passando.
Pode aparecer alguém para ajudar kkkk
#11
Vcs indicam qual emulador usar?
Já usei um muito tempo e não lembro qual foi.
Tentei 2:
VBA tem melhor qualidade, porem a imagem fica apagada, não sei pq.
mGBA as cores ficam melhores, porem não da contorno nos serrilhados.
#12
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.
#13
Citação de: lummie online Janeiro 22, 2023, 11:26:47 AM
Estou tentando encontrar as fontes do jogo Wild Arms do PS1 para adicionar acentos, cedilha, etc.
Mas já vasculhei todos os arquivos dentro do jogo com o Tile Molester e não consegui encontrar nada (estou usando o formato 4bpp linear, reverse order em 2 Dimensões)
Alguém que já mexeu com esse jogo consegue me dar uma ajuda sobre como eu posso encontrar as fontes dele?

Conseguiu alguma coisa?
Mexendo no Tile molester encontrei algo interessante:
em 1bpp planar 2 dimensões no offset-010720
1x22 tiles (só fica uma coluna)
arquivo: WILDARMS.EXE

Encontrei uma sequência de caracteres, não tentei alterar ou achar outros, então pode ser útil ou não kkkkk.
#14
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.
#15
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