(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)
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.
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.
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.
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.
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
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.
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()
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.
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
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.
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.
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.
Discussão acalorada sobre programação. Continuem...
O importante é chegar lá...
https://media.giphy.com/media/3o7TKra9XDoRiC6dQ4/giphy.gif
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.
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:
também acho que sem a faixa esta bem melhor esteticamente.
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:
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.
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?
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:
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.
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)
Também curti essa ultima cor faixa, Rafael
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:
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
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.
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.
(https://i.imgur.com/G4PBXYL.png)
Quero agradecer ao pessoal que fez parte dessa tradução. Muito obrigado.
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)
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.
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)
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.
Download adicionado para quem quiser testar tudo e me reportar se encontrar algum erro.
:parabens:
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:
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
Fiz assim e o windows apaga os arquivos e fica só o leia. Mandei para outro amigo meu e deu a mesma coisa...
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.
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.
Sou muito fan do trabalho desse cara!
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
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.
Citação de: babylon online Maio 03, 2024, 01:17:31 AMCitaçã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.
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
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.
Citação de: Mistura_De_Bits online Maio 03, 2024, 18:16:52 PMCitaçã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.
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?
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.
No segundo encontro com a morte no castelo invertido a legenda da conversa está em inglês.
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:
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
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.
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
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:
preciso que vocês testem também as portas azuis e as grades com a maria e richter.
Se vai aparecer as mensagens corretamente.
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:
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.
Citação de: babylon online Maio 14, 2024, 15:26:36 PMCitaçã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.
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:
Citação de: Mistura_De_Bits online Maio 13, 2024, 10:20:01 AMCitaçã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?