Lost Eden
Olá pessoal.
Eu há uns tempos, quando ainda estava de cama, lembrei-me de um granda jogo dos tempos do DOS, o Lost Eden. A história é sobre um mundo onde os humanos e os dinossauros coexistiam, e eram amigos (alguns), e era bem fixe para a altura!
O jogo era feito de animações em vídeo, género ficheiros FLC feitos no 3D Studio, e incluía altas musicas do grande compositor Stéphane Picq (eu tenho o CD original da banda sonora ;-).
Andei à procura nas internets a ver se alguém já tinha feito o reverse engineer ao jogo, e se já dava para jogar em SO actuais, mas pelos vistos não. A única maneira de o jogar é no DOSBox, mas fica uma beca com frame-skip.
Decidi então, mesmo sabendo que não ia fazer nada de jeito, tentar eu algo.
O jogo vem com alta ficheiro de 431MB chamado EDEN.DAT, fui então primeiro tentar descobrir qual é o conteúdo desse ficheiro.
Este site explica o seguinte:
The EDEN.DAT file begins with 2 bytes which might indicate the number of files contained in the GRAF. Following this number is a series of 25-byte records. Each record is laid out as follows:
bytes 0-11 filename: typically 8.3 DOS filenames, padded with zeroes
bytes 12-15 unknown
bytes 16-19 file size
bytes 20-23 absolute offset of file within GRAF
byte 24 unknown
Então meti mãos à obra, e fiz um script para extrair todos os ficheiros que estão no EDEN.DAT.
#!/opt/local/bin/python # this script can never fail import os import struct dat = open("EDEN.DAT", "rb") dat.seek(0) (total,) = struct.unpack("<H", dat.read(2)) print "O total de ficheiros e: %i" % total # primeiro 0x2 - 2 # segundo 0x1b - 27 # terceiro 0x34 - 52 for info in range(0,total): #for info in range(0,1000): start = 2+25*info dat.seek(start) filename = str.strip(dat.read(12),'\x00') if filename != "": print "Filename: %s" % filename dat.seek(start+16) (file_size,) = struct.unpack("<L", dat.read(4)) print "Tamanho : %i bytes" % file_size dat.seek(start+20) (file_offset,) = struct.unpack("<L", dat.read(4)) print "Offset: 0x%x" % file_offset destfn = os.path.join("rip/",filename) print "A escrever ficheiro %i: %s " % (info, repr(destfn)) dat.seek(file_offset) dest = open(destfn, "wb") dest.write(dat.read(file_size)) dest.close dat.close
Consegui então extrair, montes de ficheiros VOC, que são todas as vozes e musicas do jogo, e também vários ficheiros mais ou menos grandes com a extensão HNM e com mais umas buscas nas internets descobri que o HNM é alta formato de video proprietário da já extinta CRYO Interactive Entertainment e que não há nenhum decoder ainda feito. Com essa informação fiquei triste e nunca mais toquei nisto, mas hoje liguei aqui o maczinho e vi aqui isto, e achei que era uma boa coisa para blogar, nem que seja para não perder o código. Espero que tenham gostado.
Fiquem bem, e joguem muito!
Pede ao Dcoder pra fazer o decoder
Infelizmente nunca joguei a isto mas adorei a homenagem ao jogo.
Epah, que cena elite essa de extrair o DAT! A ver se continuas isso....