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
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()
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()
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))
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
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())
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()