Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import struct
- import sys
- def get_str(pos, filedata):
- return filedata[pos:filedata.find(b'\x00', pos)].decode(
- 'cp932')
- class Quest(object):
- def __init__(self):
- self.name = ''
- self.lines = []
- def __repr__(self):
- return self.name
- sys.argv.append('T_QUEST._DT')
- #Strip out linebreaks and change fullwidth spaces to regular spaces
- #Ended up not using this
- trans_tbl = dict(((1, None),
- (ord(' '), ' ')))
- ptr_start = 0x0
- ptr_end = 0xAE
- with open(sys.argv[1], 'rb') as f:
- filedata = f.read()
- quests = []
- ptrs = tuple(struct.unpack(
- '<H', filedata[x:x+2])[0] for x in range(ptr_start, ptr_end, 2))
- for ptr in ptrs:
- quest = Quest()
- quest_ptrs = tuple(struct.unpack('<H', filedata[x:x+2])[0] for x in range(
- ptr + 0x12, ptr + 0x12 + 0x24, 2))
- quest.name = get_str(quest_ptrs[0], filedata)
- quest.desc = get_str(quest_ptrs[1], filedata)
- for ptr2 in quest_ptrs[2:]:
- quest.lines.append(get_str(ptr2, filedata))
- ## quest.lines.append(get_str(ptr2, filedata).translate(trans_tbl))
- quests.append(quest)
- with open('questdump.tsv', 'w', encoding='utf-8') as f:
- for i, quest in enumerate(quests):
- f.write('{}\tName:\t{}\n\tIntro:\t'.format(i, quest.name))
- f.write(quest.desc.replace('\x01', '\n\t\t'))
- f.write('\n')
- for j, line in enumerate(quest.lines):
- f.write('\t{}\t{}\n'.format(j, line.replace('\x01', '\n\t\t')))
Add Comment
Please, Sign In to add comment