def load(self, rdr): if not isinstance(rdr, BinaryReader): rdr = BinaryReader(rdr) rdr: BinaryReader self.original = rdr.read() rdr.seek(0) self.number = rdr.read_uint16() rdr.read_uint16() # 112 self.title = rdr.read_string(encoding=self.encoding) rdr.seek(0x34) self.tutorial_id = rdr.read_uint8() for i in range(3): self.picarat_decay[i] = rdr.read_uint8() print(rdr.tell()) self._flags = rdr.read_uint8() self.location_id = rdr.read_uint8() self.type = rdr.read_uint8() self.bg_btm_id = rdr.read_uint8() rdr.read_uint16() self.bg_top_id = rdr.read_uint8() self.reward_id = rdr.read_uint8() print(rdr.tell()) puzzle_text_offset = 0x70 + rdr.read_uint32() puzzle_correct_answer_offset = 0x70 + rdr.read_uint32() puzzle_incorrect_answer_offset = 0x70 + rdr.read_uint32() puzzle_hint1_offset = 0x70 + rdr.read_uint32() puzzle_hint2_offset = 0x70 + rdr.read_uint32() puzzle_hint3_offset = 0x70 + rdr.read_uint32() rdr.seek(puzzle_text_offset) self.text = subs.replace_substitutions( rdr.read_string(encoding=self.encoding), True) rdr.seek(puzzle_correct_answer_offset) self.correct_answer = subs.replace_substitutions( rdr.read_string(encoding=self.encoding), True) rdr.seek(puzzle_incorrect_answer_offset) self.incorrect_answer = subs.replace_substitutions( rdr.read_string(encoding=self.encoding), True) rdr.seek(puzzle_hint1_offset) self.hint1 = subs.replace_substitutions( rdr.read_string(encoding=self.encoding), True) rdr.seek(puzzle_hint2_offset) self.hint2 = subs.replace_substitutions( rdr.read_string(encoding=self.encoding), True) rdr.seek(puzzle_hint3_offset) self.hint3 = subs.replace_substitutions( rdr.read_string(encoding=self.encoding), True)
def read_stream(self, stream): if not isinstance(stream, BinaryReader): rdr = BinaryReader(stream) else: rdr = stream self.chunk_id = rdr.read(4) self.chunk_size = rdr.read_uint32() self.format = rdr.read(4) if self.chunk_id != b"RIFF" or self.format != b"WAVE": raise NotImplementedError() self.fmt.read(rdr) if self.fmt.audio_format != WaveFormat.WAVE_FORMAT_PCM or self.fmt.bits_per_sample == 0x08: raise NotImplementedError() rdr.seek(0x14 + self.fmt.chunk_size) data_id = rdr.read(4) while data_id != b"data": offset = rdr.read_uint32() rdr.seek(rdr.tell() + offset) data_id = rdr.read(4) rdr.seek(-4, os.SEEK_CUR) self.data.read(rdr, self.fmt)