def get_trainer_gender(): offset_table = VERSION_TABLE[savefile.version] section_offset = savefile.section_table["TRAINER_INFO"] b = savefile.bytes_at(section_offset + offset_table["PLAYER_GENDER"], 1)[0] return {0x00: "M", 0x01: "F"}[b]
def get_trainer_id(): offset_table = VERSION_TABLE[savefile.version] section_offset = savefile.section_table["TRAINER_INFO"] bs = savefile.bytes_at(section_offset + offset_table["TRAINER_ID"], 4) public_id = int.from_bytes(bs[0:2], "little") secret_id = int.from_bytes(bs[2:4], "little") return (public_id, secret_id)
def get_nickname(self): bs = savefile.bytes_at(self.offset + POKEMON_TABLE["NICKNAME"], 10) chars = [] for b in bs: if b == 255: break chars.append(BYTE_TO_CHAR.get(b, "?")) return "".join(chars)
def set_trainer_id(new_public_id, new_secret_id): offset_table = VERSION_TABLE[savefile.version] section_offset = savefile.section_table["TRAINER_INFO"] savefile.set_value_at(section_offset + offset_table["TRAINER_ID"], new_public_id, 2) savefile.set_value_at(section_offset + offset_table["TRAINER_ID"] + 2, new_secret_id, 2) return savefile.bytes_at(section_offset + offset_table["TRAINER_ID"], 4)
def get_trainer_name(): offset_table = VERSION_TABLE[savefile.version] section_offset = savefile.section_table["TRAINER_INFO"] bs = savefile.bytes_at(section_offset + offset_table["PLAYER_NAME"], 7) chars = [] for b in bs: # Trim input to 7 bytes chars.append(BYTE_TO_CHAR[b]) return "".join(chars)
def check_validity(self): bs = savefile.bytes_at(self.offset + POKEMON_TABLE["DATA"], 48) return any(bs)