示例#1
0
    def _as_ascii(stream: InputStream, symbolic_names: bool = False):
        working = ""
        while not stream.is_eos():
            char_code = stream.get_u8()
            if char_code > 0x80:
                char_code = (char_code << 8) | stream.get_u8()
            elif char_code == 0x25:
                char_code = (char_code << 8) | stream.get_u8()
                next_char = stream.get_u8()

                if char_code == 0x2532 and next_char == 0x64:
                    char_code = 0x253264
                else:
                    stream.unget_u8()
            elif char_code in TextBlock.TEXT_TABLE:
                char_code = char_code
            else:
                print(f"Unknown code encountered in string: {hex(char_code)}")

            to_append = TextBlock.TEXT_TABLE[
                char_code] if char_code in TextBlock.TEXT_TABLE else None
            if not symbolic_names:
                if to_append is None or (len(to_append) > 1
                                         and not to_append.startswith("\\")):
                    working += TextBlock._escape(char_code)
                else:
                    working += to_append
            else:
                if to_append is not None:
                    working += to_append
                else:
                    working += TextBlock._escape(char_code)

        return working
示例#2
0
    def __init__(self, stream: InputStream):
        self.contents = stream.get_u8()
        self.shop_graphic = (self.contents >> 4) & 0x0f
        self.shop_data_length = self.contents & 0x0f

        self.unused = []
        for unused in range(3):
            self.unused.append(stream.get_u8())
        self.pointer = stream.get_u32()
示例#3
0
    def __init__(self, stream: InputStream = None):
        if stream is None:
            self.enemy_id = 0
            self.min_count = 0
            self.max_count = 0
            self.unused = 0

        else:
            self.enemy_id = stream.get_u8()
            self.min_count = stream.get_u8()
            self.max_count = stream.get_u8()
            self.unused = stream.get_u8()
示例#4
0
    def __init__(self, stream: InputStream = None):
        if stream is None:
            self.config = 0
            self.unrunnable = 0
            self.surprise_chance = 0
            self.groups = []

        else:
            self.config = stream.get_u8()
            self.unrunnable = stream.get_u8()
            self.surprise_chance = stream.get_u16()
            self.groups = []
            for index in range(4):
                self.groups.append(EncounterGroup(stream))
示例#5
0
    def __init__(self, stream: InputStream, length: int):
        self.magic = []
        self.armor = []
        self.weapons = []
        self.items = []

        # There's no byte code for magic, so start there and change based on the data
        active = self.magic

        read_length = 0
        while read_length < length:
            data = stream.get_u8()
            if data == 0xfc:
                active = self.armor
            elif data == 0xfd:
                active = self.weapons
            elif data == 0xfe:
                active = self.items
            else:
                active.append(data)
                read_length += 1
示例#6
0
    def __init__(self, stream: InputStream = None):
        if stream is None:
            self.exp_reward = 0
            self.gil_reward = 0
            self.max_hp = 0
            self.morale = 0
            self.unused_ai = 0
            self.evasion = 0
            self.pdef = 0
            self.hit_count = 0
            self.acc = 0
            self.atk = 0
            self.agi = 0
            self.intel = 0
            self.crit_rate = 0
            self.status_atk_elem = 0
            self.status_atk_ailment = 0
            self.family = 0
            self.mdef = 0
            self.unused = 0
            self.elem_weakness = 0
            self.elem_resists = 0
            self.drop_type = 0
            self.drop_id = 0
            self.drop_chance = 0
            self.padding = []

        else:
            self.exp_reward = stream.get_u16()
            self.gil_reward = stream.get_u16()
            self.max_hp = stream.get_u16()
            self.morale = stream.get_u8()
            self.unused_ai = stream.get_u8()
            self.evasion = stream.get_u8()
            self.pdef = stream.get_u8()
            self.hit_count = stream.get_u8()
            self.acc = stream.get_u8()
            self.atk = stream.get_u8()
            self.agi = stream.get_u8()
            self.intel = stream.get_u8()
            self.crit_rate = stream.get_u8()
            self.status_atk_elem = stream.get_u16()
            self.status_atk_ailment = stream.get_u8()
            self.family = stream.get_u8()
            self.mdef = stream.get_u8()
            self.unused = stream.get_u8()
            self.elem_weakness = stream.get_u16()
            self.elem_resists = stream.get_u16()
            self.drop_type = stream.get_u8()
            self.drop_id = stream.get_u8()
            self.drop_chance = stream.get_u8()
            self.padding = []
            for index in range(3):
                self.padding.append(stream.get_u8())
示例#7
0
    def __init__(self, stream: InputStream = None):
        if stream is None:
            self.base_hp = 0
            self.base_mp = 0
            self.starting_spell_level = 0
            self.base_strength = 0
            self.base_agility = 0
            self.base_intellect = 0
            self.base_stamina = 0
            self.base_luck = 0
            self.base_accuracy = 0
            self.base_evade = 0
            self.base_mdef = 0
            self.weapon_id = 0
            self.armor_id = 0
            self.unused = 0

        else:
            self.base_hp = stream.get_u16()
            self.base_mp = stream.get_u16()
            self.starting_spell_level = stream.get_u8()
            self.base_strength = stream.get_u8()
            self.base_agility = stream.get_u8()
            self.base_intellect = stream.get_u8()
            self.base_stamina = stream.get_u8()
            self.base_luck = stream.get_u8()
            self.base_accuracy = stream.get_u8()
            self.base_evade = stream.get_u8()
            self.base_mdef = stream.get_u8()
            self.weapon_id = stream.get_u8()
            self.armor_id = stream.get_u8()
            self.unused = stream.get_u8()