Exemplo n.º 1
0
    def extract(self, wads):
        wad = wads[self.wad_name]
        offset = wad.files[self.path][0]

        pak_header = pak.PakHeader(wad.file, offset)
        for index in self.indices:
            offset = pak_header.base_offset + pak_header.offsets[index]
            pak_header = pak.PakHeader(wad.file, offset)

        values = {}
        for i, offset in enumerate(pak_header.offsets):
            wad.file.seek(pak_header.base_offset + offset)
            values[str(i).zfill(self.key_width)] = read_string(wad.file)
        return values
Exemplo n.º 2
0
    def extract(self, wads):
        wad = wads[self.wad_name]

        offset = wad.files[self.path][0]

        for index in self.indices:
            pak_header = pak.PakHeader(wad.file, offset)
            offset = pak_header.base_offset + pak_header.offsets[index]

        wad.file.seek(offset)
        value = read_string(wad.file)
        return value
Exemplo n.º 3
0
    def extract_to(self, wads, output):
        import formats.tga
        import png
        import io
        wad = wads[self.wad_name]

        entry = wad.files[self.path]
        offset = entry[0]
        size = entry[1]

        for index in self.indices:
            pak_header = pak.PakHeader(wad.file, offset)
            offset = pak_header.base_offset + pak_header.offsets[index]

        color_map, pixel_data = formats.tga.read_tga(wad.file, offset)
        w = png.Writer(len(pixel_data[0]), len(pixel_data), palette=color_map)
        w.write(output, pixel_data)
#parser.add_argument('path')
parser.add_argument('indices', nargs='*', type=int)
parser.add_argument('output')
args = vars(parser.parse_args())

#wad = wad.Wad(args['input'])
outdir = args['output']
if not os.path.exists(outdir): os.makedirs(outdir)
indices = args['indices']

#entry = wad.files[args['path']]
file = open(args['input'], 'rb')
#offset = entry[0]
offset = 0
for idx in indices:
    pak_header = pak.PakHeader(file, offset)
    offset = pak_header.base_offset + pak_header.offsets[idx]

pak_header = pak.PakHeader(file, offset)
for i, offset in enumerate(pak_header.offsets):
    begin = pak_header.base_offset + offset
    #tga.read_tga(wad.file, begin)
    #end = wad.file.tell()
    end = pak_header.base_offset + pak_header.offsets[i + 1] if i < len(
        pak_header.offsets) - 1 else os.path.getsize(args['input'])

    file.seek(begin)
    data = file.read(end - begin)

    out = open(os.path.join(outdir, '{:03}'.format(i)), 'wb')
    out.write(data)
Exemplo n.º 5
0
import sys
import os
import toml
import formats.wad as wad
import formats.pak as pak
from metadata.report_card import report_card as report_card_meta

_pak = 'Dr2/data/us/bin/bin_progress_font_l.pak'

report_card = toml.load(os.path.join(sys.argv[1], 'report_card.toml'))
dr2_data_us = wad.Wad(sys.argv[2])
bin_progress_font_l = pak.PakHeader(dr2_data_us.file, dr2_data_us.files[_pak][0])
bin_progress_font_l_strings = bin_progress_font_l.extract_strings(dr2_data_us.file)

def replace_strings(strings, data, meta):
    if isinstance(data, str):
        indices = meta.pak_indices
        while len(indices) > 1:
            strings = strings[indices[0]]
            indices.pop(0)
        strings[indices[0]] = data
    elif isinstance(data, list):
        for i in range(len(data)):
            replace_strings(strings, data[i], meta[i])
    elif isinstance(data, dict):
        for k in data.keys():
            replace_strings(strings, data[k], meta[k])
    else:
        raise ValueError

replace_strings(bin_progress_font_l_strings, report_card, report_card_meta)
import sys
import pprint
import formats.wad as wad
import formats.pak as pak

wad = wad.Wad(sys.argv[1])
pak_header = pak.PakHeader(wad.file, wad.files[sys.argv[2]][0])
strings = pak_header.extract_strings(wad.file)

pprint.pprint(strings)
import sys

parser = argparse.ArgumentParser(description='.wad .pak lister')
parser.add_argument('input')
parser.add_argument('path')
parser.add_argument('indices', nargs='*', type=int)
args = vars(parser.parse_args())

indices = args['indices']

input = open(args['input'], 'rb')
wad_header = wad.WadHeader(input)

for file in wad_header.files:
    if file['path'] == args['path']:
        pak_header = pak.PakHeader(input, wad_header.header_size + file['offset'])
        for idx in indices:
            pak_header = pak.PakHeader(input, pak_header.base_offset + pak_header.offsets[idx])

        for offset in pak_header.offsets:
            str_offset = pak_header.base_offset + offset
            input.seek(str_offset)
            str_data = bytearray()
            
            in_ = input.read(2)
            assert in_ == b'\xff\xfe'
            in_ = input.read(2)
            while in_ != b'\0\0':
                str_data.extend(in_)
                in_ = input.read(2)