Olá, gostaria de uma ajudinha de vcs. Estou tentando traduzir o jogo Dragon View de SNES. Um ótimo jogo de RPG. Mas não consigo montar a Tabela de Caracteres.
Será que alguém pode me dar essa grande ajuda!!???
Agradeço desde já!!
Esse jogo tem compressão nos textos... porém pra sua sorte, um cara fez um vídeo de debugger desse jogo e upou no youtube (em inglês)... Pelo que entendi lendo a descrição do vídeo, alguém pediu a ele que descobrisse qual a compressão dos textos do jogo...
Não sei se você entende de debugger, mas se não entender, vai precisar estudar sobre o assunto, pois você vai precisar muito para traduzir o jogo.
Boa sorte. Segue os vídeos.
Parte 1
https://www.youtube.com/watch?v=FNpNvGzH47E
Parte 2
https://www.youtube.com/watch?v=z81kLjaLUvw
Muito obrigado pelos vídeos (excelente ajuda) !!
Agora vou estudar muito mais...
Esse jogo excepcional merece uma tradução BR.
Valeu, muito obrigado mesmo.
Citação de: drmarques1983 online Novembro 12, 2020, 21:26:16 PM
Muito obrigado pelos vídeos (excelente ajuda) !!
Agora vou estudar muito mais...
Esse jogo excepcional merece uma tradução BR.
Valeu, muito obrigado mesmo.
Segue o decompressor feito pelo Ondinha, anos atrás:
#!/usr/bin/env python
from sys import exit
import psyco
psyco.full()
class dv_huff:
"""decompress/compress [SNES]Dragon View."""
def __init__(self, dv_rom, dv_scp):
"""constructor"""
try:
self.rom = open(dv_rom, "rb")
self.script = open(dv_scp, "w+b")
except IOError, the_error:
print "Error: ", the_error[1]
raw_input("Press any key to quit.")
exit()
self.addr_tbl = 0x01B1D8
self.tbl_ptr = 0x05B551
self.addr_txt = 0x05B751
self.bin_values = list()
self.ptr_values = list()
self.invert = lambda offset: offset[-1::-1]
def __ptr_to_int(self, pointer):
"""readed pointer will be int type"""
int_ptr = 0
for x in pointer:
int_ptr = (int_ptr << 8) | ord(x)
return int_ptr
def __buffering_pointers(self):
"""create a list of pointers"""
self.rom.seek(self.tbl_ptr)
for x in range(256):
invpointer = self.__ptr_to_int(self.invert(self.rom.read(2)))
self.ptr_values.append(invpointer)
return self.ptr_values
def __buffering(self, size):
"""create a list of binary digits"""
for x in xrange(size):
byte=ord(self.rom.read(1))
for y in xrange(8):
bit = ((byte << y) & 0x80) >> 7
self.bin_values.append(bit)
return self.bin_values
def decomp(self):
"""decompress [SNES]Dragon View."""
raw_input("STARTING... PRESS ANY KEY TO START.\a")
pointers = self.__buffering_pointers()
for x in range(len(pointers)):
if x != 255:
size = (pointers[x + 1] - pointers[x])
else:
break
self.rom.seek(0x50000 + pointers[x])
comp_data = self.__buffering(size)
self.rom.seek(self.addr_tbl, 0)
while 1:
if not comp_data:
break
if comp_data.pop(0) is 0:
self.rom.seek(8, 1)
else:
decision = (comp_data.pop(0)<<2)|(comp_data.pop(0)<<1)|comp_data.pop(0)
self.rom.seek(decision, 1)
byte = self.rom.read(1)
if ord(byte) is 0x7F:
break
self.script.write(byte)
self.rom.seek(self.addr_tbl, 0)
raw_input("FINISHED!! PRESS ANY KEY TO FINISH.\a")
#def comp(self):
if __name__ == "__main__":
print """
=============================================
| [SNES]Dragon View |
| Decompression Tool v.0.5 |
=============================================
| Author: Odin |
| Thanks: Vegetal Gibber, Fallen_Soul |
---------------------------------------------
| Visit us: |
---------------------------------------------
| Trans-Center Group: www.trans-center.org |
| ROMHacking Forum: fut.centralmib.com |
| Odin's Temple: odin.trans-center.org |
=============================================
"""
rom = raw_input("\nROM File Name: ")
dragon_view=dv_huff(rom, "script.dmp")
dragon_view.decomp()