Fórum Unificado de Romhacking e Tradução

Romhacking e Tradução de Jogos => Projetos => Tópico iniciado por: Mistura_De_Bits online Maio 16, 2021, 18:47:05 PM

Título: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 16, 2021, 18:47:05 PM
(https://i.imgur.com/36xOiSm.jpg)



Nome Original: Akumajou Dracula X: Gekka no Yasoukyoku
Nome Traduzido: Castlevania Dracula X: Noturno ao Luar
Plataforma: Sega Saturn
Gênero:  Metroidvania, RPG eletrônico de ação, Jogo eletrônico de ação e aventura
Data de lançamento inicial: 25 de Junho de 1998
Série: Castlevania
Estúdio: KCEN
Desenvolvedores: KONAMI
Tradutor: Rafael Silva


Tradução feita com base no patch "Ultimate" do grupo "Medusa Team".

Andamento:
Textos: 100%
Menus e itens: 100%
Gráficos: 100%


Notas de Atualização:
Tradução em testes
Usei o patch "Ultimate" como base para a tradução, corrigi vários erros do mesmo, exemplo: textos fora das caixas transparentes, HP no meio da imagem dos monstros no livro de bestas.


Preciso que testem tudo com e sem o cartucho 4M
Download do patch:
https://drive.google.com/file/d/1J1TBXNYdzirFO6mawBiNXbvrAJpJNrd3/view?usp=sharing


O que ainda falta fazer...
A única coisa que me incomoda, se alguém conseguir ajudar é mudar a posição da quantidade de itens:
(https://i.imgur.com/0xO3BGI.png)


Imagens:
(https://i.imgur.com/wEwZmbC.png)
(https://i.imgur.com/jeZJzKH.png)
(https://i.imgur.com/4XY0onp.png)
(https://i.imgur.com/9Q8oCPe.png)
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: ajkmetiuk online Maio 16, 2021, 23:32:20 PM
a versão do saturn n sabia que tinha projeto, pessoal anda fazendo projetos secretos ai rsrs, mas muito legal hein? entra lá no chat rhbr pra conversar com o pessoal, tem vários que entendem de compressão lzss (não sei se do saturn estão familiarizados) mas deve ser bem parecido.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 17, 2021, 03:36:36 AM
Citação de: ajkmetiuk online Maio 16, 2021, 23:32:20 PM
a versão do saturn n sabia que tinha projeto, pessoal anda fazendo projetos secretos ai rsrs, mas muito legal hein? entra lá no chat rhbr pra conversar com o pessoal, tem vários que entendem de compressão lzss (não sei se do saturn estão familiarizados) mas deve ser bem parecido.
Eu coloquei o código do meu discord lá e apareceu aguardando aprovação do bot, mas não aconteceu nada no discord e eu não uso muito ele, então não entendo quase nada.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Anime_World online Maio 17, 2021, 05:02:54 AM
Provavelmente é uma variação das LZKN encontradas no Mega Drive.
Tentei ler sua explicação, mas talvez por falta de conhecimento seu na área, não faz sentido algum da forma como você colocou.

Vou tentar facilitar pra você explicar melhor a compressão:
1 - LZ trabalha com um par de BYTE, comumente chamados de WORD, ou 16 bits.
2 - O tamanho da cadeia é definido nesse par em bits, sendo X bits pro tamanho e Y bits pro offset no buffer.

Ou seja se você tem a word $FF00 por exemplo:

1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
\________/\___________________/
tamanho         offset


O tamanho do MÁXIMO DA JANELA LZ pelo que você indicou é 0x800
Agora resta só você indicar quantos bits são para o tamanho e quantos bits são para o offset.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 17, 2021, 17:30:09 PM
Citação de: Anime_World online Maio 17, 2021, 05:02:54 AM
Se não descomprimir com as PRS Tools, provavelmente é uma variação das LZKN encontradas no Mega Drive.
Tentei ler sua explicação, mas talvez por falta de conhecimento seu na área, não faz sentido algum da forma como você colocou.

Vou tentar facilitar pra você explicar melhor a compressão:
1 - LZ trabalha com um par de BYTE, comumente chamados de WORD, ou 16 bits.
2 - O tamanho da cadeia é definido nesse par em bits, sendo X bits pro tamanho e Y bits pro offset no buffer.

Ou seja se você tem a word $FF00 por exemplo:

1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
\________/\___________________/
tamanho         offset


O tamanho do MÁXIMO DA JANELA LZ pelo que você indicou é 0x800
Agora resta só você indicar quantos bits são para o tamanho e quantos bits são para o offset.
Desculpa eu quis simplificar já que é parecido com lzss.
vou colocar a informação completa hoje a noite, mas o esquema é diferente desse citado, o índice é 1 byte seguido de 8 valores que podem ser 1 ou 2 bytes cada valor, enfim mais tarde coloco o arquivo com a informação completa da compressão, sou leigo em programação mas dá pra explicar tudo sim já que eu consigo manipular manualmente.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Anime_World online Maio 17, 2021, 18:35:29 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 17:30:09 PM
Desculpa eu quis simplificar já que é parecido com lzss.
vou colocar a informação completa hoje a noite, mas o esquema é diferente desse citado, o índice é 1 byte seguido de 8 valores que podem ser 1 ou 2 bytes cada valor, enfim mais tarde coloco o arquivo com a informação completa da compressão, sou leigo em programação mas dá pra explicar tudo sim já que eu consigo manipular manualmente.

Conversando com o denim hoje, analisamos por cima, realmente é uma variação da LZKN3 que eu usei no Castlevania Bloodlines.
Portanto são 13 bits para o offset e 5 bits para o tamanho. O que me deixa preocupado agora é se tem as exceções para executar diferentes tarefas dentro da compressão.

Quanto a sua explicação, você explicou em digitos e não em bits. Por isso tem que fazer aquele calculo maluco pro 3 e 4 digito. Se usar em bits não precisa.
O calculo correto fica assim para o par LZ 0x7E36

01111110 00110110
\_______________/
    par LZ

01111110 001 10110
\__________/ \___/
  ponteiro  tamanho


os 3 ultimos bits do ponteiro por estarem
no segundo byte passam para o começo


001 01111110 = 0x17E


e o tamanho soma 3 que é o tamanho minímo da cadeia


10110 = 22
22+3 = 25


portanto,


ponteiro: 0x17E
tamanho: 25


pra calcular mais rapidamente pode usar essa formula:

w16 = 0x7e36
ponteiro = ((w16 &0xE0) << 3) | (w16 >> 8)
tamanho = (w16 &0x1F) + 3


funciona em qualquer linguagem, mas aqui tem uma calculadora em python:
https://www.online-python.com/K4TbnY52Dl
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 17, 2021, 19:47:37 PM
Citação de: Anime_World online Maio 17, 2021, 18:35:29 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 17:30:09 PM
Desculpa eu quis simplificar já que é parecido com lzss.
vou colocar a informação completa hoje a noite, mas o esquema é diferente desse citado, o índice é 1 byte seguido de 8 valores que podem ser 1 ou 2 bytes cada valor, enfim mais tarde coloco o arquivo com a informação completa da compressão, sou leigo em programação mas dá pra explicar tudo sim já que eu consigo manipular manualmente.

Conversando com o denim hoje, analisamos por cima, realmente é uma variação da LZKN3 que eu usei no Castlevania Bloodlines.
Portanto são 13 bits para o offset e 5 bits para o tamanho. O que me deixa preocupado agora é se tem as exceções para executar diferentes tarefas dentro da compressão.

Quanto a sua explicação, você explicou em digitos e não em bits. Por isso tem que fazer aquele calculo maluco pro 3 e 4 digito. Se usar em bits não precisa.
O calculo correto fica assim para o par LZ 0x7E36

01111110 00110110
\_______________/
    par LZ

01111110 001 10110
\__________/ \___/
  ponteiro  tamanho


os 3 ultimos bits do ponteiro por estarem
no segundo byte passam para o começo


001 01111110 = 0x17E


e o tamanho soma 3 que é o tamanho minímo da cadeia


10110 = 22
22+3 = 25


portanto,


ponteiro: 0x17E
tamanho: 25


pra calcular mais rapidamente pode usar essa formula:

w16 = 0x7e36
ponteiro = ((w16 &0xE0) << 3) | (w16 >> 8)
tamanho = (w16 &0x1F) + 3


funciona em qualquer linguagem, mas aqui tem uma calculadora em python:
https://www.online-python.com/K4TbnY52Dl

Eu fiz uma explicação detalhada, pra começar eu escrevi errado, são só 0x400 de cache.

A compressão usa um cache de 0x400 mas ela começa a escrever
nesse cache no endereço 3DE.

Para começar temos um índice de 2 nibbles que é lido de trás pra frente em
binário.
No valor binário, 1 indica leitura e gravação direta de um byte
já o 0 indica que há uma compressão formada por 4 Nibbles

Exemplo:

61 00 DE 7F 00 1F 22 1F 3E 18 01 11 5E 08

61=0110 0001

Onde os bytes em parenteses são compressão.
00 (DE 7F) (00 1F) (22 1F) (3E 18) 01 11 (5E 08)

Como funciona a compressão

Neste mesmo exemplo começamos com o valor 00 que será escrito no endereço
inicial do cache "3DE", logo após vem um valor de compressão (DE 7F), onde
os 3 primeiros Nibbles são o endereço e os dois últimos são a quantidade
de bytes a ser lida.

O terceiro nibble "7" será jogado para o começo, ele deve ser
sempre um caractere par e deve ser dividido por 2, o que sobrar
é jogado para a quantidade de bytes a ser lido+3

Sendo assim:
(DE 7f)
(7 DE)(F+3) -> jogamos o 7 para o começo
(6DE) (1F+3) -> tiramos 1 do 7 e juntamos com o F+3
(3DE) (22) -> dividimos o 6 por 2 e somamos o 1F+3.


Sendo assim temos uma leitura de 34 bytes no endereço 0x3DE, porém como só
existe o valor 00 a partir deste endereço por enquanto, esse valor será
repetido até chegar a quantidade pedida.

Depois teremos mais duas escritas de 34 zeros e uma de 27 até chegar nos valores sem compressão "01 11", se tudo der certo esse "01 11" deve começar no endereço do cache 0x60.


O que eu preciso é de uma tool pra fazer isso sozinha.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Anime_World online Maio 17, 2021, 20:38:37 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 19:47:37 PM
Eu fiz uma explicação detalhada, pra começar eu escrevi errado, são só 0x400 de cache.

A compressão usa um cache de 0x400 mas ela começa a escrever
nesse cache no endereço 3DE.

Para começar temos um índice de 2 nibbles que é lido de trás pra frente em
binário.
No valor binário, 1 indica leitura e gravação direta de um byte
já o 0 indica que há uma compressão formada por 4 Nibbles

Exemplo:

61 00 DE 7F 00 1F 22 1F 3E 18 01 11 5E 08

61=0110 0001

Onde os bytes em parenteses são compressão.
00 (DE 7F) (00 1F) (22 1F) (3E 18) 01 11 (5E 08)

Como funciona a compressão

Neste mesmo exemplo começamos com o valor 00 que será escrito no endereço
inicial do cache "3DE", logo após vem um valor de compressão (DE 7F), onde
os 3 primeiros Nibbles são o endereço e os dois últimos são a quantidade
de bytes a ser lida.

O terceiro nibble "7" será jogado para o começo, ele deve ser
sempre um caractere par e deve ser dividido por 2, o que sobrar
é jogado para a quantidade de bytes a ser lido+3

Sendo assim:
(DE 7f)
(7 DE)(F+3) -> jogamos o 7 para o começo
(6DE) (1F+3) -> tiramos 1 do 7 e juntamos com o F+3
(3DE) (22) -> dividimos o 6 por 2 e somamos o 1F+3.


Sendo assim temos uma leitura de 34 bytes no endereço 0x3DE, porém como só
existe o valor 00 a partir deste endereço por enquanto, esse valor será
repetido até chegar a quantidade pedida.

Depois teremos mais duas escritas de 34 zeros e uma de 27 até chegar nos valores sem compressão "01 11", se tudo der certo esse "01 11" deve começar no endereço do cache 0x60.


O que eu preciso é de uma tool pra fazer isso sozinha.

Continua errada sua explicação. O indíce ao qual você se refere é lido em bits e não em nibbles, sendo cada bit uma flag que indica se há ou não compressão no byte. E como já mencionei o par LZ não é lido em nibbles e sim em bits, por ler em nibbles você precisou criar aquela tabela de correção.

Quanto ao cache da janela é o mesmo da LZKN3 bem como o offset de início da janela.

Suspeito ainda que haja um controle para diferentes modos de escrita da janela, na LZKN1 e LZKN3 são 4 modos: ponteiro, ponteiro relativo ao final da janela, copia de x bytes direta e byte sem compressão.
Como é de costume a produtora reaproveitar rotinas, dúvido que fuja à regra.

Outro detalhe, não sei se você cortou o arquivo mas é comum ter 2 bytes (1 word) com o tamanho do arquivo decomprimido antes do 0x61


------


Bom, o programa está pronto... supondo que existam os 2 bytes iniciais com o tamanho no inicio do arquivo.


import os
import sys
import io
import struct
import argparse
import textwrap
from os import SEEK_SET, SEEK_CUR, SEEK_END

class RingBuffer:
    MAX_WINDOW_SIZE = 0
    CURSOR = 0

    def __init__(self, max_window_size=0x1024, start_offset=0, fill_byte=0x0):
        self.MAX_WINDOW_SIZE = max_window_size
        self.CURSOR = start_offset
        self._buffer = bytearray([fill_byte]*self.MAX_WINDOW_SIZE)

    def append(self, byte):
        self._buffer[self.CURSOR] = byte
        self.CURSOR=(self.CURSOR+1)%self.MAX_WINDOW_SIZE

    def get(self, offset):
        return self._buffer[offset%self.MAX_WINDOW_SIZE]

class ROM(io.BytesIO):
    """
        Class to manipulate generic ROM files
    """

    CURSOR = 0
    SIZE = 0

    def __init__(self, filename):
        try:
            self.raw = open(filename, 'rb').read()
        except FileNotFoundError:
            print('[ERROR] Unable to found file')
            exit(0)
        super(ROM, self).__init__(self.raw)
        self.SIZE = len(self.raw)

    def read_8(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>B',self.read(1))[0]
        self.CURSOR+=1
        return readed

    def read_16(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>H',self.read(2))[0]
        self.CURSOR+=2
        return readed

    def read_32(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>I',self.read(4))[0]
        self.CURSOR+=4
        return readed

    def set_offset(self, offset=0):
        self.CURSOR=offset
        self.seek(self.CURSOR, SEEK_SET)

    def get_offset(self):
        return self.tell()


class LZKN4:
   
    _buffer = bytearray()

    def __init__(self, input_data):
        self.DATA = input_data

    def append(self, value):
        self._buffer.append(value)
        self._window.append(value)
        return 1

    def append_from_data(self, length=0):
        count=0
        for i in range(length):
            tmp = self.DATA.read_8()
            count += self.append(tmp)
        return count

    def append_from_window(self, length=0, offset=0):
        count = 0
        for i in range(length):
            tmp = self._window.get(offset+i)
            count += self.append(tmp)
        return count

    def decompress(self, offset=0):
        self._window = RingBuffer(0x400, 0x3DE)
        self._buffer = bytearray()
        uncompressed_size = self.DATA.read_16()
        _decoded = 0
        while (_decoded < uncompressed_size):
            control = self.DATA.read_8()
            for readed_bits in range(8):
                bit = bool((control >> readed_bits) &0x1)
                if not bit:
                    _readed = self.DATA.read_16()
                    length = (_readed &0x1F) + 3
                    offset = ((_readed &0xE0) << 3) | (_readed >> 8)
                    _decoded += self.append_from_window(length, offset)
                else:
                    _readed = self.DATA.read_8()
                    _decoded += self.append(_readed)
        return self._buffer

class Application(argparse.ArgumentParser):
    title = '''
        [Saturn] Castlevania SOTN - Decompressor
        ---------------------------------------------------------
        Tool to decompress graphics from:
            [SATURN] Castlevania - Symphony of the Night (US)
            [SATURN] Akumajou Dracula X: Gekka no Yasoukyoku (JP)
    '''

    argument_list = [
        {
            'name'      : 'input',
            'nargs'     : '?',
            'type'      : argparse.FileType('rb'),     
            'default'   : sys.stdin,
            'help'      : 'Compressed File (.bin)'
        }
    ]

    def __init__(self):
        super(Application, self).__init__()
        self.formatter_class=argparse.RawDescriptionHelpFormatter
        self.description=textwrap.dedent(self.title)

        for argument in self.argument_list:
                self.add_argument(
                argument['name'],
                nargs=argument['nargs'],
                type=argument['type'],
                default=argument['default'],
                help=argument['help']
            )       

        args = self.parse_args()
        if args.input.name != '<stdin>':
            binary = ROM(args.input.name)
            lzkn = LZKN4(binary)
            data = lzkn.decompress(binary)
            try:
                os.stat('output/')
            except:
                os.mkdir('output/')
            out = open("output/"+args.input.name, 'wb')
            out.write(data)
            out.close()
        else:
            self.print_help()

if __name__=="__main__":
    app = Application()
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 17, 2021, 21:43:45 PM
Citação de: Anime_World online Maio 17, 2021, 20:38:37 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 19:47:37 PM
Eu fiz uma explicação detalhada, pra começar eu escrevi errado, são só 0x400 de cache.

A compressão usa um cache de 0x400 mas ela começa a escrever
nesse cache no endereço 3DE.

Para começar temos um índice de 2 nibbles que é lido de trás pra frente em
binário.
No valor binário, 1 indica leitura e gravação direta de um byte
já o 0 indica que há uma compressão formada por 4 Nibbles

Exemplo:

61 00 DE 7F 00 1F 22 1F 3E 18 01 11 5E 08

61=0110 0001

Onde os bytes em parenteses são compressão.
00 (DE 7F) (00 1F) (22 1F) (3E 18) 01 11 (5E 08)

Como funciona a compressão

Neste mesmo exemplo começamos com o valor 00 que será escrito no endereço
inicial do cache "3DE", logo após vem um valor de compressão (DE 7F), onde
os 3 primeiros Nibbles são o endereço e os dois últimos são a quantidade
de bytes a ser lida.

O terceiro nibble "7" será jogado para o começo, ele deve ser
sempre um caractere par e deve ser dividido por 2, o que sobrar
é jogado para a quantidade de bytes a ser lido+3

Sendo assim:
(DE 7f)
(7 DE)(F+3) -> jogamos o 7 para o começo
(6DE) (1F+3) -> tiramos 1 do 7 e juntamos com o F+3
(3DE) (22) -> dividimos o 6 por 2 e somamos o 1F+3.


Sendo assim temos uma leitura de 34 bytes no endereço 0x3DE, porém como só
existe o valor 00 a partir deste endereço por enquanto, esse valor será
repetido até chegar a quantidade pedida.

Depois teremos mais duas escritas de 34 zeros e uma de 27 até chegar nos valores sem compressão "01 11", se tudo der certo esse "01 11" deve começar no endereço do cache 0x60.


O que eu preciso é de uma tool pra fazer isso sozinha.

Continua errada sua explicação. O indíce ao qual você se refere é lido em bits e não em nibbles, sendo cada bit uma flag que indica se há ou não compressão no byte. E como já mencionei o par LZ não é lido em nibbles e sim em bits, por ler em nibbles você precisou criar aquela tabela de correção.

Quanto ao cache da janela é o mesmo da LZKN3 bem como o offset de início da janela.

Suspeito ainda que haja um controle para diferentes modos de escrita da janela, na LZKN1 e LZKN3 são 4 modos: ponteiro, ponteiro relativo ao final da janela, copia de x bytes direta e byte sem compressão.
Como é de costume a produtora reaproveitar rotinas, dúvido que fuja à regra.

Outro detalhe, não sei se você cortou o arquivo mas é comum ter 2 bytes (1 word) com o tamanho do arquivo decomprimido antes do 0x61


------


Bom, o programa está pronto... supondo que existam os 2 bytes iniciais com o tamanho no inicio do arquivo.


import os
import sys
import io
import struct
import argparse
import textwrap
from os import SEEK_SET, SEEK_CUR, SEEK_END

class RingBuffer:
    MAX_WINDOW_SIZE = 0
    CURSOR = 0

    def __init__(self, max_window_size=0x1024, start_offset=0, fill_byte=0x0):
        self.MAX_WINDOW_SIZE = max_window_size
        self.CURSOR = start_offset
        self._buffer = bytearray([fill_byte]*self.MAX_WINDOW_SIZE)

    def append(self, byte):
        self._buffer[self.CURSOR] = byte
        self.CURSOR=(self.CURSOR+1)%self.MAX_WINDOW_SIZE

    def get(self, offset):
        return self._buffer[offset%self.MAX_WINDOW_SIZE]

class ROM(io.BytesIO):
    """
        Class to manipulate generic ROM files
    """

    CURSOR = 0
    SIZE = 0

    def __init__(self, filename):
        try:
            self.raw = open(filename, 'rb').read()
        except FileNotFoundError:
            print('[ERROR] Unable to found file')
            exit(0)
        super(ROM, self).__init__(self.raw)
        self.SIZE = len(self.raw)

    def read_8(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>B',self.read(1))[0]
        self.CURSOR+=1
        return readed

    def read_16(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>H',self.read(2))[0]
        self.CURSOR+=2
        return readed

    def read_32(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>I',self.read(4))[0]
        self.CURSOR+=4
        return readed

    def set_offset(self, offset=0):
        self.CURSOR=offset
        self.seek(self.CURSOR, SEEK_SET)

    def get_offset(self):
        return self.tell()


class LZKN4:
   
    _buffer = bytearray()

    def __init__(self, input_data):
        self.DATA = input_data

    def append(self, value):
        self._buffer.append(value)
        self._window.append(value)
        return 1

    def append_from_data(self, length=0):
        count=0
        for i in range(length):
            tmp = self.DATA.read_8()
            count += self.append(tmp)
        return count

    def append_from_window(self, length=0, offset=0):
        count = 0
        for i in range(length):
            tmp = self._window.get(offset+i)
            count += self.append(tmp)
        return count

    def decompress(self, offset=0):
        self._window = RingBuffer(0x400, 0x3DE)
        self._buffer = bytearray()
        uncompressed_size = self.DATA.read_16()
        _decoded = 0
        while (_decoded < uncompressed_size):
            control = self.DATA.read_8()
            for readed_bits in range(8):
                bit = bool((control >> readed_bits) &0x1)
                if not bit:
                    _readed = self.DATA.read_16()
                    length = (_readed &0x1F) + 3
                    offset = ((_readed &0xE0) << 3) | (_readed >> 8)
                    _decoded += self.append_from_window(length, offset)
                else:
                    _readed = self.DATA.read_8()
                    _decoded += self.append(_readed)
        return self._buffer

class Application(argparse.ArgumentParser):
    title = '''
        [Saturn] Castlevania SOTN - Decompressor
        ---------------------------------------------------------
        Tool to decompress graphics from:
            [SATURN] Castlevania - Symphony of the Night (US)
            [SATURN] Akumajou Dracula X: Gekka no Yasoukyoku (JP)
    '''

    argument_list = [
        {
            'name'      : 'input',
            'nargs'     : '?',
            'type'      : argparse.FileType('rb'),     
            'default'   : sys.stdin,
            'help'      : 'Compressed File (.bin)'
        }
    ]

    def __init__(self):
        super(Application, self).__init__()
        self.formatter_class=argparse.RawDescriptionHelpFormatter
        self.description=textwrap.dedent(self.title)

        for argument in self.argument_list:
                self.add_argument(
                argument['name'],
                nargs=argument['nargs'],
                type=argument['type'],
                default=argument['default'],
                help=argument['help']
            )       

        args = self.parse_args()
        if args.input.name != '<stdin>':
            binary = ROM(args.input.name)
            lzkn = LZKN4(binary)
            data = lzkn.decompress(binary)
            try:
                os.stat('output/')
            except:
                os.mkdir('output/')
            out = open("output/"+args.input.name, 'wb')
            out.write(data)
            out.close()
        else:
            self.print_help()

if __name__=="__main__":
    app = Application()


O tamanho compactado e extraído fica em outro local, não fica junto com o arquivo em si, obrigado pelo seu tempo e conhecimento, não entendo de programação, apesar de ter traduzido 99% do jogo eu uso programas de edição de imagem e editores hexa, encontro as programações pelo dump de memoria do yabause, eita emulador ruim, mas quebra um galho nessa parte.


Estou acompanhando a tradução pra inglês também, apesar de não ter curtido a fonte que ele usou pois só cabe os textos da versão americana, no meu método cabe os textos japoneses apesar de eu ter abreviado muitos com medo de não ter espaço no arquivo, agora já posso remover essas abreviações.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Anime_World online Maio 17, 2021, 21:48:58 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 21:43:45 PM
O tamanho compactado e extraído fica em outro local, não fica junto com o arquivo em si, obrigado pelo seu tempo e conhecimento, não entendo de programação, apesar de ter traduzido 99% do jogo eu uso programas de edição de imagem e editores hexa, encontro as programações pelo dump de memoria do yabause, eita emulador ruim, mas quebra um galho nessa parte.


Estou acompanhando a tradução pra inglês também, apesar de não ter curtido a fonte que ele usou pois só cabe os textos da versão americana, no meu método cabe os textos japoneses apesar de eu ter abreviado muitos com medo de não ter espaço no arquivo, agora já posso remover essas abreviações.


import os
import sys
import io
import struct
import argparse
import textwrap
from os import SEEK_SET, SEEK_CUR, SEEK_END

class RingBuffer:
    MAX_WINDOW_SIZE = 0
    CURSOR = 0

    def __init__(self, max_window_size=0x1024, start_offset=0, fill_byte=0x0):
        self.MAX_WINDOW_SIZE = max_window_size
        self.CURSOR = start_offset
        self._buffer = bytearray([fill_byte]*self.MAX_WINDOW_SIZE)

    def append(self, byte):
        self._buffer[self.CURSOR] = byte
        self.CURSOR=(self.CURSOR+1)%self.MAX_WINDOW_SIZE

    def get(self, offset):
        return self._buffer[offset%self.MAX_WINDOW_SIZE]

class ROM(io.BytesIO):
    """
        Class to manipulate generic ROM files
    """

    CURSOR = 0
    SIZE = 0

    def __init__(self, filename):
        try:
            self.raw = open(filename, 'rb').read()
        except FileNotFoundError:
            print('[ERROR] Unable to found file')
            exit(0)
        super(ROM, self).__init__(self.raw)
        self.SIZE = len(self.raw)

    def read_8(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>B',self.read(1))[0]
        self.CURSOR+=1
        return readed

    def read_16(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>H',self.read(2))[0]
        self.CURSOR+=2
        return readed

    def read_32(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>I',self.read(4))[0]
        self.CURSOR+=4
        return readed

    def set_offset(self, offset=0):
        self.CURSOR=offset
        self.seek(self.CURSOR, SEEK_SET)

    def get_offset(self):
        return self.tell()


class LZKN4:
   
    _buffer = bytearray()

    def __init__(self, input_data):
        self.DATA = input_data

    def append(self, value):
        self._buffer.append(value)
        self._window.append(value)
        return 1

    def append_from_data(self, length=0):
        count=0
        for i in range(length):
            tmp = self.DATA.read_8()
            count += self.append(tmp)
        return count

    def append_from_window(self, length=0, offset=0):
        count = 0
        for i in range(length):
            tmp = self._window.get(offset+i)
            count += self.append(tmp)
        return count

    def decompress(self, offset=0, size=0):
        self._window = RingBuffer(0x400, 0x3DE)
        self._buffer = bytearray()
        uncompressed_size = size
        _decoded = 0
        while (_decoded < uncompressed_size):
            control = self.DATA.read_8()
            for readed_bits in range(8):
                bit = bool((control >> readed_bits) &0x1)
                if not bit:
                    _readed = self.DATA.read_16()
                    length = (_readed &0x1F) + 3
                    offset = ((_readed &0xE0) << 3) | (_readed >> 8)
                    _decoded += self.append_from_window(length, offset)
                else:
                    _readed = self.DATA.read_8()
                    _decoded += self.append(_readed)
        return self._buffer

class Application(argparse.ArgumentParser):
    title = '''
        [Saturn] Castlevania SOTN - Decompressor
        ---------------------------------------------------------
        Tool to decompress graphics from:
            [SATURN] Castlevania - Symphony of the Night (US)
            [SATURN] Akumajou Dracula X: Gekka no Yasoukyoku (JP)
    '''

    argument_list = [
        {
            'name'      : 'input',
            'nargs'     : '?',
            'type'      : argparse.FileType('rb'),     
            'default'   : sys.stdin,
            'help'      : 'Compressed File (.bin)'
        },
        {
            'name'      : 'uncompressed_size',
            'nargs'     : '?',
            'type'      : lambda x: int(x, 0),   
            'default'   : 0,
            'help'      : 'Uncompressed Size'
        }
    ]

    def __init__(self):
        super(Application, self).__init__()
        self.formatter_class=argparse.RawDescriptionHelpFormatter
        self.description=textwrap.dedent(self.title)

        for argument in self.argument_list:
                self.add_argument(
                argument['name'],
                nargs=argument['nargs'],
                type=argument['type'],
                default=argument['default'],
                help=argument['help']
            )       

        args = self.parse_args()
        if args.input.name != '<stdin>':
            binary = ROM(args.input.name)
            lzkn = LZKN4(binary)
            data = lzkn.decompress(binary, args.uncompressed_size)
            try:
                os.stat('output/')
            except:
                os.mkdir('output/')
            out = open("output/"+args.input.name, 'wb')
            out.write(data)
            out.close()
        else:
            self.print_help()

if __name__=="__main__":
    app = Application()


Essa versão modifiquei pra passar o tamanho decomprimido na linha de comando
Salvar como decoder.py e rodar usando o Python 3
Comando:

python decoder.py arquivo.bin tamanho

Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 17, 2021, 22:01:51 PM
Citação de: Anime_World online Maio 17, 2021, 21:48:58 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 21:43:45 PM
O tamanho compactado e extraído fica em outro local, não fica junto com o arquivo em si, obrigado pelo seu tempo e conhecimento, não entendo de programação, apesar de ter traduzido 99% do jogo eu uso programas de edição de imagem e editores hexa, encontro as programações pelo dump de memoria do yabause, eita emulador ruim, mas quebra um galho nessa parte.


Estou acompanhando a tradução pra inglês também, apesar de não ter curtido a fonte que ele usou pois só cabe os textos da versão americana, no meu método cabe os textos japoneses apesar de eu ter abreviado muitos com medo de não ter espaço no arquivo, agora já posso remover essas abreviações.


import os
import sys
import io
import struct
import argparse
import textwrap
from os import SEEK_SET, SEEK_CUR, SEEK_END

class RingBuffer:
    MAX_WINDOW_SIZE = 0
    CURSOR = 0

    def __init__(self, max_window_size=0x1024, start_offset=0, fill_byte=0x0):
        self.MAX_WINDOW_SIZE = max_window_size
        self.CURSOR = start_offset
        self._buffer = bytearray([fill_byte]*self.MAX_WINDOW_SIZE)

    def append(self, byte):
        self._buffer[self.CURSOR] = byte
        self.CURSOR=(self.CURSOR+1)%self.MAX_WINDOW_SIZE

    def get(self, offset):
        return self._buffer[offset%self.MAX_WINDOW_SIZE]

class ROM(io.BytesIO):
    """
        Class to manipulate generic ROM files
    """

    CURSOR = 0
    SIZE = 0

    def __init__(self, filename):
        try:
            self.raw = open(filename, 'rb').read()
        except FileNotFoundError:
            print('[ERROR] Unable to found file')
            exit(0)
        super(ROM, self).__init__(self.raw)
        self.SIZE = len(self.raw)

    def read_8(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>B',self.read(1))[0]
        self.CURSOR+=1
        return readed

    def read_16(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>H',self.read(2))[0]
        self.CURSOR+=2
        return readed

    def read_32(self):
        self.seek(self.CURSOR, SEEK_SET)
        readed = struct.unpack('>I',self.read(4))[0]
        self.CURSOR+=4
        return readed

    def set_offset(self, offset=0):
        self.CURSOR=offset
        self.seek(self.CURSOR, SEEK_SET)

    def get_offset(self):
        return self.tell()


class LZKN4:
   
    _buffer = bytearray()

    def __init__(self, input_data):
        self.DATA = input_data

    def append(self, value):
        self._buffer.append(value)
        self._window.append(value)
        return 1

    def append_from_data(self, length=0):
        count=0
        for i in range(length):
            tmp = self.DATA.read_8()
            count += self.append(tmp)
        return count

    def append_from_window(self, length=0, offset=0):
        count = 0
        for i in range(length):
            tmp = self._window.get(offset+i)
            count += self.append(tmp)
        return count

    def decompress(self, offset=0, size=0):
        self._window = RingBuffer(0x400, 0x3DE)
        self._buffer = bytearray()
        uncompressed_size = size
        _decoded = 0
        while (_decoded < uncompressed_size):
            control = self.DATA.read_8()
            for readed_bits in range(8):
                bit = bool((control >> readed_bits) &0x1)
                if not bit:
                    _readed = self.DATA.read_16()
                    length = (_readed &0x1F) + 3
                    offset = ((_readed &0xE0) << 3) | (_readed >> 8)
                    _decoded += self.append_from_window(length, offset)
                else:
                    _readed = self.DATA.read_8()
                    _decoded += self.append(_readed)
        return self._buffer

class Application(argparse.ArgumentParser):
    title = '''
        [Saturn] Castlevania SOTN - Decompressor
        ---------------------------------------------------------
        Tool to decompress graphics from:
            [SATURN] Castlevania - Symphony of the Night (US)
            [SATURN] Akumajou Dracula X: Gekka no Yasoukyoku (JP)
    '''

    argument_list = [
        {
            'name'      : 'input',
            'nargs'     : '?',
            'type'      : argparse.FileType('rb'),     
            'default'   : sys.stdin,
            'help'      : 'Compressed File (.bin)'
        },
        {
            'name'      : 'uncompressed_size',
            'nargs'     : '?',
            'type'      : lambda x: int(x, 0),   
            'default'   : 0,
            'help'      : 'Uncompressed Size'
        }
    ]

    def __init__(self):
        super(Application, self).__init__()
        self.formatter_class=argparse.RawDescriptionHelpFormatter
        self.description=textwrap.dedent(self.title)

        for argument in self.argument_list:
                self.add_argument(
                argument['name'],
                nargs=argument['nargs'],
                type=argument['type'],
                default=argument['default'],
                help=argument['help']
            )       

        args = self.parse_args()
        if args.input.name != '<stdin>':
            binary = ROM(args.input.name)
            lzkn = LZKN4(binary)
            data = lzkn.decompress(binary, args.uncompressed_size)
            try:
                os.stat('output/')
            except:
                os.mkdir('output/')
            out = open("output/"+args.input.name, 'wb')
            out.write(data)
            out.close()
        else:
            self.print_help()

if __name__=="__main__":
    app = Application()


Essa versão modifiquei pra passar o tamanho decomprimido na linha de comando
Salvar como decoder.py e rodar usando o Python 3
Comando:

python decoder.py arquivo.bin tamanho


Tipo, eu executei aqui, não testei ainda mas vi que ele serve para extrair correto?
Eu já tenho os arquivos devidamente extraídos o que estou fazendo manualmente é recomprimir, tem algum meio de modificar pra compactar de volta?

Desde já agradeço pela boa vontade de ajudar esse noob aqui. XD

Cara eu tentei registrar no discord mas não dá em nada, copiei minha id e colei lá as não tive resultado, criei até um server novo pra ver no que ia dar.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Anime_World online Maio 17, 2021, 22:07:43 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 22:01:51 PM
Tipo, eu executei aqui, não testei ainda mas vi que ele serve para extrair correto?
Eu já tenho os arquivos devidamente extraídos o que estou fazendo manualmente é recomprimir, tem algum meio de modificar pra compactar de volta?

Desde já agradeço pela boa vontade de ajudar esse noob aqui. XD

Cara eu tentei registrar no discord mas não dá em nada, copiei minha id e colei lá as não tive resultado, criei até um server novo pra ver no que ia dar.

Teste o decompressor, se estiver 100% funcional eu faço o compressor. E te passo no privado, não por aqui.
Quanto ao discord, ao entrar no servidor você precisa ir no canal #recem-chegados e se apresentar, após isso vai receber acesso de membro.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 17, 2021, 22:33:58 PM
Citação de: Anime_World online Maio 17, 2021, 22:07:43 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 22:01:51 PM
Tipo, eu executei aqui, não testei ainda mas vi que ele serve para extrair correto?
Eu já tenho os arquivos devidamente extraídos o que estou fazendo manualmente é recomprimir, tem algum meio de modificar pra compactar de volta?

Desde já agradeço pela boa vontade de ajudar esse noob aqui. XD

Cara eu tentei registrar no discord mas não dá em nada, copiei minha id e colei lá as não tive resultado, criei até um server novo pra ver no que ia dar.

Teste o decompressor, se estiver 100% funcional eu faço o compressor. E te passo no privado, não por aqui.
Quanto ao discord, ao entrar no servidor você precisa ir no canal #recem-chegados e se apresentar, após isso vai receber acesso de membro.

Opa, deu certo aqui com o scrypt que usa o tamanho dos dois primeiros bytes do arquivo, eu adicionei aqui, já o de baixo eu coloquei o 61dd na linha de comando mas ficou dizendo que não era um comando reconhecido, ai preferi fazer com o tamanho no começo mesmo.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: huskie online Maio 21, 2021, 04:59:44 AM
Discussão acalorada sobre programação. Continuem...
O importante é chegar lá...

https://media.giphy.com/media/3o7TKra9XDoRiC6dQ4/giphy.gif
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Setembro 13, 2021, 15:11:39 PM
Estou pensando em uma possibilidade e preciso da opinião de vocês...
Estou pensando se vale a pena colocar faixas pretas nos diálogos já que a faixa azul atrás é semitransparente.

Sem a faixa:
(https://i.imgur.com/etCmUcO.png)


Com a faixa:
(https://i.imgur.com/CgpldIJ.png)




Outra opção seria mudar a leitura da faixa e remover a transparência, assim não precisaria sompra nos textos, estou procurando a configuração dela para remover a transparência.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: João13 online Setembro 13, 2021, 15:33:51 PM
Citação de: Mistura_De_Bits online Setembro 13, 2021, 15:11:39 PM
Estou pensando em uma possibilidade e preciso da opinião de vocês...
Estou pensando se vale a pena colocar faixas pretas nos diálogos já que a faixa azul atrás é semitransparente.

Sem a faixa:
(https://i.imgur.com/etCmUcO.png)


Com a faixa:
(https://i.imgur.com/CgpldIJ.png)




Outra opção seria mudar a leitura da faixa e remover a transparência, assim não precisaria sompra nos textos, estou procurando a configuração dela para remover a transparência.

Prefiro sem, com a faixa achei meio feio. :hehe:
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Carlosrez online Setembro 13, 2021, 18:27:33 PM
também acho que sem a faixa esta bem melhor esteticamente.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Viking Spirit online Setembro 14, 2021, 19:03:34 PM
Sobre transparencias, viu esse Hack novo (13 de Setembro): https://www.romhacking.net/hacks/6184/
Não sei se pode colocar o link, caso não Desculpe;  :sermao:
E por favor sem faixas. :choro2:
Muito Obrigado pela Tradução. :parabens:
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Altieres Lima online Setembro 14, 2021, 19:33:47 PM
Citação de: Viking Spirit online Setembro 14, 2021, 19:03:34 PM
Sobre transparencias, viu esse Hack novo (13 de Setembro): https://www.romhacking.net/hacks/6184/
Não sei se pode colocar o link, caso não Desculpe;  :sermao:
E por favor sem faixas. :choro2:
Muito Obrigado pela Tradução. :parabens:

Nossa! Muito bom esse hack.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Setembro 15, 2021, 18:37:49 PM
Bom, fiz alguns testes aqui com o patch do paul e com a faixa opaca, agora só falta ver qual ficou melhor.

Faixa Opaca:
(https://i.imgur.com/AdIKwkb.png)

Patch do Paul Sem Sombra:
(https://i.imgur.com/wD1zNQz.png)

Patch do Paul com Sombra:
(https://i.imgur.com/4PK03wY.png)


E ai o que vocês acham?
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Viking Spirit online Setembro 15, 2021, 20:03:49 PM
MAS QUE LINDO! :cuteeyes:
[1] Com Sombra e [2] Sem Sombra;
Jogando o seu Release Passado, do seu Blog do Mistura, com sombras.
MUITO OBRIGADO Rafael Silva AKA Mistura_De_Bits. :parabens:

Uma pergunta, nesse Hack o Richter está com a Capa, mas quando ele vira-se, e começa a falar com o Dracula, a capa SOME, voltando com o Sprite Original, será que o "paul_met" não conseguiu alterar os Sprites dessa parte?  :hein:
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Setembro 16, 2021, 02:20:39 AM
Citação de: Viking Spirit online Setembro 15, 2021, 20:03:49 PM
MAS QUE LINDO! :cuteeyes:
[1] Com Sombra e [2] Sem Sombra;
Jogando o seu Release Passado, do seu Blog do Mistura, com sombras.
MUITO OBRIGADO Rafael Silva AKA Mistura_De_Bits. :parabens:

Uma pergunta, nesse Hack o Richter está com a Capa, mas quando ele vira-se, e começa a falar com o Dracula, a capa SOME, voltando com o Sprite Original, será que o "paul_met" não conseguiu alterar os Sprites dessa parte?  :hein:

Pelo que sei ele não modificou os sprites, só programou para iniciar com a roupa alternativa, esses sprites do dialogo são fáceis de modificar, mas eu pretendo deixar a roupa original do jogo.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Setembro 16, 2021, 13:39:23 PM
Consegui deixar a cor da faixa mais agradável, fiz um teste com sombra e sem:
(https://media.discordapp.net/attachments/844022330022821938/888095906224799764/unknown.png)
(https://media.discordapp.net/attachments/844022330022821938/888094781085978714/unknown.png)

Esse aqui eu gostei mais:
(https://media.discordapp.net/attachments/844022330022821938/888120598285385758/unknown.png)
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: DiegoFB7 online Setembro 16, 2021, 18:39:50 PM
Também curti essa ultima cor faixa, Rafael
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: João13 online Setembro 16, 2021, 19:28:42 PM
Citação de: Mistura_De_Bits online Setembro 16, 2021, 13:39:23 PM
Consegui deixar a cor da faixa mais agradável, fiz um teste com sombra e sem:
(https://media.discordapp.net/attachments/844022330022821938/888095906224799764/unknown.png)
(https://media.discordapp.net/attachments/844022330022821938/888094781085978714/unknown.png)

Esse aqui eu gostei mais:
(https://media.discordapp.net/attachments/844022330022821938/888120598285385758/unknown.png)

Essa última tá linda  :apaixonado2:
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: babylon online Setembro 19, 2021, 18:18:39 PM
Citação de: Mistura_De_Bits online Setembro 16, 2021, 13:39:23 PM
Consegui deixar a cor da faixa mais agradável, fiz um teste com sombra e sem:
(https://media.discordapp.net/attachments/844022330022821938/888095906224799764/unknown.png)
(https://media.discordapp.net/attachments/844022330022821938/888094781085978714/unknown.png)

Esse aqui eu gostei mais:
(https://media.discordapp.net/attachments/844022330022821938/888120598285385758/unknown.png)

Não vi diferenças nenhuma em ambas as 3. Alias a 3a so vi que faltou a ultima linha. kkk
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Elizomar online Setembro 20, 2021, 21:37:23 PM
Citação de: babylon online Setembro 19, 2021, 18:18:39 PM

Não vi diferenças nenhuma em ambas as 3. Alias a 3a so vi que faltou a ultima linha. kkk

A diferença esta em dar um Zoom nas imagens e ver que nas comparações as letras tem sobras ou não.
Quanto à ultima imagem, ele fez a captura em tempo real. Logo se percebe que o fez ao iniciar a fala.
Tudo muito simples e objetivo.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: babylon online Novembro 07, 2021, 23:59:30 PM
Citação de: Mistura_De_Bits online Maio 17, 2021, 22:33:58 PM
Tipo, eu executei aqui, não testei ainda mas vi que ele serve para extrair correto?

Mistura de Bits, viu que saiu um emulador de Saturn dentro do jogo Cotton Guardian Force Saturn Tribute para Switch e portaram os gringo a versão Dracula X Symphony de saturno em .xci para rodar nele, sera que voce nao consegue olhar e portar a versão BR e ja rodar no Switch?

https://www.youtube.com/watch?v=cZkbGTxrYVA

E poderia deixar um patch separado pra a versão de saturn? Queria aplicar ela em uma versão melhorada do jogo aqui pra o saturn que corrige umas coisas no jogo.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: ka55 online Abril 14, 2023, 23:57:09 PM
(https://i.imgur.com/G4PBXYL.png)
Quero agradecer ao pessoal que fez parte dessa tradução. Muito obrigado.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Janeiro 01, 2024, 20:18:27 PM
Primeiramente, desculpem o sumiço, aconteceram muitas coisas ano passado que me deixaram sem tempo.
Já finalizei toda a parte normal do jogo, está tudo traduzido certinho, falta apenas a parte que é carregada no Cartucho 4mb.
Como estou usando o arquivo kanji.fon com os caracteres AHCI, sobrou muito espaço nele, por isso consegui alterar a leitura de vários graficos compactados para serem lidos direto dele sem compactação, isso acelera os loadings mesmo sem cartucho 4mb e facilitou muito para editar tbm, não precisando mais extrair-recomprimir.


(https://i.imgur.com/EvIouaE.png)
(https://i.imgur.com/kJdyelU.png)
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: babylon online Janeiro 02, 2024, 12:03:29 PM
Ola feliz ano novo para você.

A proposito saiu hoje a tradução do hack Dracula X Nocturne in the Moonlight Extended (v1.5) chamado de Dracula X Nocturne in the Moonlight Extended (Ultimate 1.0), segue video:

https://www.youtube.com/watch?v=DyQ9Fcajy7k

Tacaram a dublagem do PSP!

Paul_Met atualizou sua versão do jogo Dracula X: Nocturne in the Moonlight - Ultimate ( Akumajou Dracula X : Gekka no Yasoukyoku ) :
De acordo com o mesmo, esta é a versão mais completa e avançada do jogo, com diversas melhorias comparadas com ao original.
São as seguintes alterações:
* Versão totalmente traduzida para o inglês ( legendas e vozes ) - PSP ver;
* Restauração de transparências de diversos objetos;
* Acesso direto e ajustes no mapa;
* Restauração de proporções originais de alguns sprites;
* Removido as barras pretas horizontais da tela;
* Possibilidade de "pular" vídeos e diálogos do jogo;
* Acesso direto as vestimenta alternativa do Ritcher;
* Redução do tempo de carregamento;
* Suporte ao cartucho de 4MB;
* Diversos acertos de bugs;
* Habilitado modo difícil;

Basic changes to the «Ultimate» version of the game:
- Fully translation into English; -Restoration of translucency of many objects;
-Direct access to the global map; -Finalization of the global map;
-Restoration of the original proportions of some sprites;
-Removing horizontal black bars of the screen;
-Skipping videos and dialogues; -Access to Richter's alternate costume;
-Reduced loading time;
-Support for 4MB expansion card;
-Bug fixes;
-Hard Mode;

Patch (v1.0):
https://mega.nz/file/shMihIyb#o-2S_b2822NIsX8NY8EC48U71p9NVG8nGdkGoJErgAE


Se puder traduzir essa versão para nosso idioma PTBR seria uma boa, sera tem como?

Alias o que muda da versão japonesa desse hack a Dracula X Nocturne in the Moonlight Extended (v1.5) para essa chamada de Dracula X Nocturne in the Moonlight Extended (Ultimate 1.0) fora audios e legendas em ingles?

A sim, seria top esse jogo com a hack traduzido pra PTBR.
Título: Re:[SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Janeiro 28, 2024, 10:32:00 AM
Já estou portando tudo para a Versão Ultimate, está indo até rápido, já foram todos os itens, estou na metade dos monstros, dai vai faltar os dialogos, vou fazer duas versões, jap e eng.
PS:Os itens serão mantidos da versão japonesa, só vou fazer duas versões de dialogos.
(https://i.imgur.com/egdx3BI.png)
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: babylon online Abril 10, 2024, 01:37:25 AM
Citação de: Mistura_De_Bits online Janeiro 28, 2024, 10:32:00 AMJá estou portando tudo para a Versão Ultimate, está indo até rápido, já foram todos os itens, estou na metade dos monstros, dai vai faltar os dialogos, vou fazer duas versões, jap e eng.
PS:Os itens serão mantidos da versão japonesa, só vou fazer duas versões de dialogos.
(https://i.imgur.com/egdx3BI.png)

Ansioso por essa tradução, voce tem mais imagens ou video para mostrar ate lançamento?

Obg.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 01, 2024, 20:52:40 PM
Download adicionado para quem quiser testar tudo e me reportar se encontrar algum erro.
:parabens:
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 02, 2024, 16:54:54 PM
Aqui no meu Windows quando eu clico em aplicar ele apaga todos os arquivos... Já tentei de tudo e não encontrei solução! :desisto:
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 02, 2024, 17:22:16 PM
Citação de: EvaldoCeBr online Maio 02, 2024, 16:54:54 PMAqui no meu Windows quando eu clico em aplicar ele apaga todos os arquivos... Já tentei de tudo e não encontrei solução! :desisto:

Você colocou os arquivos originais com os nomes corretos como está no arquivo Leia?

A pasta deve ficar assim:
7z.exe
Akumajou Dracula X - Gekka no Yasoukyoku (Japan) (2M) (Track 1).bin
Akumajou Dracula X - Gekka no Yasoukyoku (Japan) (2M) (Track 2).bin
Akumajou Dracula X - Gekka no Yasoukyoku (Japan) (2M).cue
Aplicar.bat
Dracula_X_PT-BR.7z

os traduzidos ficam assim:
Akumajou Dracula X - Gekka no Yasoukyoku (PT-BR) (2M) (Track 1).bin
Akumajou Dracula X - Gekka no Yasoukyoku (PT-BR) (2M) (Track 2).bin
Akumajou Dracula X - Gekka no Yasoukyoku (PT-BR) (2M).cue

Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 02, 2024, 19:34:55 PM
Fiz assim e o windows apaga os arquivos e fica só o leia. Mandei para outro amigo meu e deu a mesma coisa...
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Altieres Lima online Maio 02, 2024, 19:43:21 PM
Citação de: EvaldoCeBr online Maio 02, 2024, 19:34:55 PMFiz assim e o windows apaga os arquivos e fica só o leia. Mandei para outro amigo meu e deu a mesma coisa...

Descompacta os arquivo compactado e tenta novamente.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 02, 2024, 21:03:38 PM
Mandei para duas pessoas, uma delas formada em TI para ver se conseguiam e não conseguiram.Quando o aplicar.bat é executado apaga os arquivos. Se alguem puder disponibilizar um link já colocado o pacht eu agradeço.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: jairisongs online Maio 02, 2024, 21:27:26 PM
Sou muito fan do trabalho desse cara!
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 02, 2024, 22:44:32 PM
Citação de: EvaldoCeBr online Maio 02, 2024, 19:34:55 PMFiz assim e o windows apaga os arquivos e fica só o leia. Mandei para outro amigo meu e deu a mesma coisa...

se tiver caractere especial na pasta de usuário pode ser que dê ruim, cria uma pasta no disco c: direto

https://drive.google.com/file/d/1Dt_KU92Q65uXuQtuqix3Cxx1CcMIoF_g/view
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: babylon online Maio 03, 2024, 01:17:31 AM
Citação de: EvaldoCeBr online Maio 02, 2024, 16:54:54 PMAqui no meu Windows quando eu clico em aplicar ele apaga todos os arquivos... Já tentei de tudo e não encontrei solução! :desisto:

Oi, eu consegui ja patchear a iso, esta perfeita, por algum motivo só teve uma vez depois da morte o balão insistia continuar, ai resetei foi perfeito, o jogo estava com um proporção de tela estranha, acho é Saturn, o jogo ta bem mexido... mas depois vi rodei novamente e esta perfeito a proporção.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 03, 2024, 09:42:29 AM
Citação de: babylon online Maio 03, 2024, 01:17:31 AM
Citação de: EvaldoCeBr online Maio 02, 2024, 16:54:54 PMAqui no meu Windows quando eu clico em aplicar ele apaga todos os arquivos... Já tentei de tudo e não encontrei solução! :desisto:

Oi, eu consegui ja patchear a iso, esta perfeita, por algum motivo só teve uma vez depois da morte o balão insistia continuar, ai resetei foi perfeito, o jogo estava com um proporção de tela estranha, acho é Saturn, o jogo ta bem mexido... mas depois vi rodei novamente e esta perfeito a proporção.

Tentei tudo que disseram e não teve jeito. Libera o acesso ao drive pf.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Gugabrsp online Maio 03, 2024, 16:52:45 PM
Achei o Erro do patch, ele tem 2 del a mais, e nao executou direito para extrair a pasta zip, avho que precisaria so rever a logica do arquivo.bat

Adendum, faltou colocar a dll do 7z para descompactar os arquivos do zip, e com isso criar a estrutura que foi mencionada pelo criador, espero que tenha ajudado aqueles que estao com dificuldades
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 03, 2024, 18:16:52 PM
Citação de: Gugabrsp online Maio 03, 2024, 16:52:45 PMAchei o Erro do patch, ele tem 2 del a mais, e nao executou direito para extrair a pasta zip, avho que precisaria so rever a logica do arquivo.bat

Adendum, faltou colocar a dll do 7z para descompactar os arquivos do zip, e com isso criar a estrutura que foi mencionada pelo criador, espero que tenha ajudado aqueles que estao com dificuldades

Obrigado, como eu já tinha o 7z instalado no pc não exigiu a dll, já o arquivo bat está com o script correto, só faltava o dll mesmo, já corrigi.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 03, 2024, 21:20:28 PM
Citação de: Mistura_De_Bits online Maio 03, 2024, 18:16:52 PM
Citação de: Gugabrsp online Maio 03, 2024, 16:52:45 PMAchei o Erro do patch, ele tem 2 del a mais, e nao executou direito para extrair a pasta zip, avho que precisaria so rever a logica do arquivo.bat

Adendum, faltou colocar a dll do 7z para descompactar os arquivos do zip, e com isso criar a estrutura que foi mencionada pelo criador, espero que tenha ajudado aqueles que estao com dificuldades

Obrigado, como eu já tinha o 7z instalado no pc não exigiu a dll, já o arquivo bat está com o script correto, só faltava o dll mesmo, já corrigi.

Finalmente consegui por a tradução obrigado pela ajuda.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 04, 2024, 12:46:39 PM
Vcs que estão emulando com o Yaba Sanshiro para Android quando abre os mapas aparecem uns caracteres diferentes na parte de cima da tela de uma ponta a outra? Será que é bug do jogo ou do emulador?
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 08, 2024, 09:22:26 AM
Citação de: EvaldoCeBr online Maio 04, 2024, 12:46:39 PMVcs que estão emulando com o Yaba Sanshiro para Android quando abre os mapas aparecem uns caracteres diferentes na parte de cima da tela de uma ponta a outra? Será que é bug do jogo ou do emulador?
Era um erro na paleta de cores, já corrigi, postei o patch novo.
corrigi tbm alguns itens que estavam com a descrição errada e o Sealled dor que por algum motivo ficou em inglês.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: EvaldoCeBr online Maio 08, 2024, 13:38:42 PM
No segundo encontro com a morte no castelo invertido a legenda da conversa está em inglês.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: FR Oliveira online Maio 08, 2024, 14:15:40 PM
Boa Tarde meus amigos. Como podem ver sou novo aqui. Primeiramente agradecendo do fundo do coração nosso amigo Rafael Silva. MUITO OBRIGADO MESMO por essa pérola traduzida, ainda mais do nosso querido Sega Saturn, ou seja, a melhor versão de todas de CASTLEVANIA. Venho nessa mensagem igual disse no post que era para TESTAR O JOGO E RELATAR possíveis erros. Então, estou jogando no RETROARCH e usando a MARIA no momento de salvar a legenda está toda em JAPONÊS. Igual o amigo acima disse, não sei se pode ser o emulador e outra coisa quando jogo com ALUCARD fica com uns BUGS na parte inferior do MAPA. Se quiser eu tiro foto e posto aqui, mais não sei como???

Desde já muito obrigado meu amigo... Esse jogo é da época DOURADA DOS GAMES. PARABÉNS!!!!! :parabens:  :parabens:  :parabens:
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Xalusc online Maio 08, 2024, 17:22:24 PM
Opa. Pergunta rápida: como você fez pra aplicar as mudanças do patch Ultimate da Meduza Team, mas manter as vozes em japonês? Eu tentei só trocar os arquivos de áudio mas as vozes cortavam antes do diálogo terminar
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 13, 2024, 10:19:24 AM
Citação de: EvaldoCeBr online Maio 08, 2024, 13:38:42 PMNo segundo encontro com a morte no castelo invertido a legenda da conversa está em inglês.

Pow cara, eu traduzi essa parte e testei kkkk
mas como eu tava passando pro HD externo deve ter dado algum erro de sincronia, enfim, hoje vou verificar os arquivos e corrigir isso, sobre o save da maria, vou verificar tbm os arquivos dela, vlw pessoal, eu não tenho muito tempo pra testar hoje em dia, é muito importante vocês ajudarem.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 13, 2024, 10:20:01 AM
Citação de: Xalusc online Maio 08, 2024, 17:22:24 PMOpa. Pergunta rápida: como você fez pra aplicar as mudanças do patch Ultimate da Meduza Team, mas manter as vozes em japonês? Eu tentei só trocar os arquivos de áudio mas as vozes cortavam antes do diálogo terminar

tem que reprogramar os dialogos, não é só texto, tem uma programação por trás.
EX: Qual áudio vai ser reproduzido, quantas letras serão exibidas, qual o tamanho da faixa de áudio a ser reproduzida, pausas, acelerar o texto, etc.

Se não me engano, cortar o áudio é 0b000000
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: FR Oliveira online Maio 13, 2024, 17:41:24 PM
Boa noite amigo Rafael, tudo bem. Que DEUS ti abençoe. Perdão mais lembrei que na campanha do RICHTER, também no momento de salvar o jogo, as legendas estão também todas em JAPONÊS... OBRIGADO E SUCESSO... :cuteeyes:  :cuteeyes:  :cuteeyes:
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 13, 2024, 23:02:21 PM
preciso que vocês testem também as portas azuis e as grades com a maria e richter.
Se vai aparecer as mensagens corretamente.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: FR Oliveira online Maio 14, 2024, 13:39:26 PM
Boa tarde amigo RAFAEL tudo bem.
Só umas dúvidas, no canal SEGA SATURN MANIA BR que eu acompanho, você disse que vai lançar uma versão AMERICANA????
Outra dúvida, esse PATCH e da versão ULTIMATE 1.0 ou 1.1???
Porque não sei se você sabe, mais o MEDUSA TEAM, lançou a versão 1.1 que corrige mais uns BUGS no GAME!!!!!
Como por exemplo, eles terminaram o cenário superior no início do jogo com RICHTER!!!!

MAIS UMA VEZ MEU AMIGO EU SÓ AGRADEÇO POR EXISTIR VOCÊ E O PESSOAL DO MEDUSA TEAM POR TORNAR ESSE SONHO EM REALIDADE POR NÓS, MUITO OBRIGADO!!!!!!!!  :torico:  :torico:  :parabens:  :parabens:  :angel:  :angel:
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: babylon online Maio 14, 2024, 15:26:36 PM
Citação de: FR Oliveira online Maio 14, 2024, 13:39:26 PMBoa tarde amigo RAFAEL tudo bem.
Só umas dúvidas, no canal SEGA SATURN MANIA BR que eu acompanho, você disse que vai lançar uma versão AMERICANA????
Outra dúvida, esse PATCH e da versão ULTIMATE 1.0 ou 1.1???
Porque não sei se você sabe, mais o MEDUSA TEAM, lançou a versão 1.1 que corrige mais uns BUGS no GAME!!!!!
Como por exemplo, eles terminaram o cenário superior no início do jogo com RICHTER!!!!

MAIS UMA VEZ MEU AMIGO EU SÓ AGRADEÇO POR EXISTIR VOCÊ E O PESSOAL DO MEDUSA TEAM POR TORNAR ESSE SONHO EM REALIDADE POR NÓS, MUITO OBRIGADO!!!!!!!!  :torico:  :torico:  :parabens:  :parabens:  :angel:  :angel:

Ola, ele disse vai sair sim uma versão americana e somente, a com audio ingles baseada no PSP como o medusa fez e essa em jap.

Quanto a outra duvida, ambas eram em ingles porem o 1.0 que lançaram eram com audio japones depois eles colocaram com audio em ingles e colocaram titulo 1.1, ambas baseadas no Extended (v1.5) o hack que inicialmente era todo japones usando 4MB.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Mistura_De_Bits online Maio 14, 2024, 15:47:33 PM
Citação de: babylon online Maio 14, 2024, 15:26:36 PM
Citação de: FR Oliveira online Maio 14, 2024, 13:39:26 PMBoa tarde amigo RAFAEL tudo bem.
Só umas dúvidas, no canal SEGA SATURN MANIA BR que eu acompanho, você disse que vai lançar uma versão AMERICANA????
Outra dúvida, esse PATCH e da versão ULTIMATE 1.0 ou 1.1???
Porque não sei se você sabe, mais o MEDUSA TEAM, lançou a versão 1.1 que corrige mais uns BUGS no GAME!!!!!
Como por exemplo, eles terminaram o cenário superior no início do jogo com RICHTER!!!!

MAIS UMA VEZ MEU AMIGO EU SÓ AGRADEÇO POR EXISTIR VOCÊ E O PESSOAL DO MEDUSA TEAM POR TORNAR ESSE SONHO EM REALIDADE POR NÓS, MUITO OBRIGADO!!!!!!!!  :torico:  :torico:  :parabens:  :parabens:  :angel:  :angel:

Ola, ele disse vai sair sim uma versão americana e somente, a com audio ingles baseada no PSP como o medusa fez e essa em jap.

Quanto a outra duvida, ambas eram em ingles porem o 1.0 que lançaram eram com audio japones depois eles colocaram com audio em ingles e colocaram titulo 1.1, ambas baseadas no Extended (v1.5) o hack que inicialmente era todo japones usando 4MB.

Usei o patch com dublagem americana do psp, porém eu reprogramei para voltar a ficar em japa.
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: FR Oliveira online Maio 14, 2024, 16:28:41 PM
NOSSA QUE LEGAL, pensei que teria que traduzir tudo de novo e passar para o INGLÊS. Pois esse jogo só foi lançado no JAPÃO e nunca na AMÉRICA.
ANSIOSISSÍMO (nem sei se essa palavra existe) pela versão AMERICANA!!!!
Essa realmente será a versão MEGAPOWER DAS GÁLAXIAS desse jogo, para o nosso querido SEGA SATURN!!!!!

VAAAAAAAALLLLLLLLLEEEEEEEUUUUUU!!!!!!!!!!!!1 :cuteeyes:  :cuteeyes:  :cuteeyes:  :parabens:  :parabens:  :parabens:  :parabens:
Título: Res: [SAT] Akumajou Dracula X: Gekka no Yasoukyoku
Enviado por: Xalusc online Maio 15, 2024, 11:42:06 AM
Citação de: Mistura_De_Bits online Maio 13, 2024, 10:20:01 AM
Citação de: Xalusc online Maio 08, 2024, 17:22:24 PMOpa. Pergunta rápida: como você fez pra aplicar as mudanças do patch Ultimate da Meduza Team, mas manter as vozes em japonês? Eu tentei só trocar os arquivos de áudio mas as vozes cortavam antes do diálogo terminar

tem que reprogramar os dialogos, não é só texto, tem uma programação por trás.
EX: Qual áudio vai ser reproduzido, quantas letras serão exibidas, qual o tamanho da faixa de áudio a ser reproduzida, pausas, acelerar o texto, etc.

Se não me engano, cortar o áudio é 0b000000
Tô querendo fazer uma versão do Ultimate, em inglês mesmo, só trocando as vozes de volta pro japonês.
Eu sou programador, mas não faço ideia de como começar a mexer nisso. Tem como tu me dar uma luz?