[SNES] Dragon View-Criar tabela

Iniciado por drmarques1983, Outubro 28, 2020, 19:44:15 PM

tópico anterior - próximo tópico

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

drmarques1983

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á!!

angel333119

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


Link para minhas traduções e hacks
https://mega.nz/folder/IZAyBTTZ#UdGc3UVFM2mrN5Avcksukw

(\_/)
(o_O)
(> <)
Esse é Jack o coelhinho; Adicione em sua Assinatura para ele Dominar o mundo!

drmarques1983

Muito obrigado pelos vídeos (excelente ajuda) !!
Agora vou estudar muito mais...
Esse jogo excepcional merece uma tradução BR.
Valeu, muito obrigado mesmo.

Anime_World

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()
nonononono