Fórum Unificado de Romhacking e Tradução

Romhacking e Tradução de Jogos => Dúvidas e Ajuda => Tópico iniciado por: drmarques1983 online Outubro 28, 2020, 19:44:15 PM

Título: [SNES] Dragon View-Criar tabela
Enviado por: drmarques1983 online Outubro 28, 2020, 19:44:15 PM
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á!!
Título: Re:Criação de tabela de Dragon View [SNES]
Enviado por: angel333119 online Outubro 28, 2020, 21:57:39 PM
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
Título: Re:Criação de tabela de Dragon View [SNES]
Enviado por: 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.
Título: Re:Criação de tabela de Dragon View [SNES]
Enviado por: Anime_World online Dezembro 07, 2020, 22:03:02 PM
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()