def save(self): with self.game.open('overlays_dez', 'overlay_{0:04}.bin'.format( self.game.overworld_sprite_table[0]), mode='r+') as handle: writer = BinaryIO.writer(handle) writer.seek(self.game.overworld_sprite_table[1]) Editable.save(self, writer)
def save(self, writer): self.flag_ = 0 if self.scale_s_fx32 == self.scale_t_fx32 == 4096: self.flag_ |= self.FLAG_NO_SCALE if self.rot_sin_fx32 == self.rot_cos_fx32 == 0: self.flag_ |= self.FLAG_NO_ROTATE if self.trans_s_fx32 == self.trans_t_fx32 == 0: self.flag_ |= self.FLAG_NO_TRANSLATE if self.effect: if len(self.effect) != 16: raise ValueError('Effect matrix must be 4x4 as 16 entries') self.flag_ |= self.FLAG_EFFECT_MATRIX writer = Editable.save(self, writer) if not self.flag_ & self.FLAG_NO_SCALE: writer.writeInt32(self.scale_s_fx32) writer.writeInt32(self.scale_t_fx32) if not self.flag_ & self.FLAG_NO_ROTATE: writer.writeInt32(self.rot_sin_fx32) writer.writeInt32(self.rot_cos_fx32) if not self.flag_ & self.FLAG_NO_TRANSLATE: writer.writeInt32(self.trans_s_fx32) writer.writeInt32(self.trans_t_fx32) if self.flag_ & self.FLAG_EFFECT_MATRIX: for value in self.effect: writer.writeInt32(value) return writer
def save(self, writer): start = writer.tell() writer = Editable.save(self, writer) writer = self.nodes.save(writer) ofs = writer.tell() - start with writer.seek(start + self.get_offset('sbc_offset')): writer.writeUInt32(ofs) for command in self.sbc: writer.writeUInt8(command) ofs = writer.tell() - start with writer.seek(start + self.get_offset('mat_offset')): writer.writeUInt32(ofs) writer = self.materials.save(writer) ofs = writer.tell() - start with writer.seek(start + self.get_offset('shp_offset')): writer.writeUInt32(ofs) writer = self.shapes.save(writer) ofs = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(ofs) return writer
def save(self, writer): old_datasize = self.datasize if self.cgr.encryption != NCGR.ENCRYPTION_NONE: self.encrypt(self.cgr.encryption) self.datasize = len(self.data) self.size_ += self.datasize - old_datasize writer = Editable.save(self, writer) writer.write(self.data) return writer
def save(self, writer=None): idx = 1 blocks = [0] * 4 for block_id in range(4): for bit in range(32): if idx in self.tms: blocks[block_id] |= 1 << bit idx += 1 return Editable.save(self, writer)
def save(self, writer=None): writer = BinaryIO.writer(writer) start = writer.tell() writer = Editable.save(self, writer) if self.game.is_hgss(): writer.write(self.block1) self.ublock1_size = len(self.block1) writer = self.permissions.save(writer) self.permission_size = self.permissions.get_size() writer = self.objects.save(writer) self.objects_size = self.objects.get_size() writer.write(self.bmd) self.bmd_size = len(self.bmd) writer.write(self.bdhc) self.bdhc_size = len(self.bdhc) with writer.seek(start): Editable.save(self, writer) return writer
def save(self, writer=None): self.namelen = len(self.name) writer = Editable.save(self, writer) writer.write(self.name) if self.has_map_definition_ids: writer = self.map_definitions.save(writer) if self.has_mystery_zone: writer = self.mystery_details.save(writer) writer = self.land_data_maps.save(writer) return writer
def save(self, writer): writer = Editable.save(self, writer) if self.trainer.hold_items: writer.writeUInt16(self.item) if self.trainer.movesets: for move in self.moves: writer.writeUInt16(move) if self.trainer.game.is_hgss(): writer.writeUInt16(self.seal_capsule) return writer
def save(self, writer=None): writer = BinaryIO.writer(writer) start = writer.tell() writer = Editable.save(self, writer) writer = self.char.save(writer) if self.cpos.loaded: writer = self.cpos.save(writer) size = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(size) return writer
def save(self, writer): start = writer.tell() self._data.num = self.num writer = Editable.save(self, writer) for entry in self.entries: writer.writeUInt32(entry.start) writer.writeUInt32(entry.stop) writer.writeAlign(4) size = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(size) return writer
def save(self, writer=None): writer = BinaryIO.writer(writer) start = writer.tell() writer = Editable.save(self, writer) writer = self.fatb.save(writer) writer = self.fntb.save(writer) writer = self.fimg.save(writer) writer.writeAlign(4) size = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(size) return writer
def save(self, writer=None): writer = BinaryIO.writer(writer) start = writer.tell() self.mdldict.num = len(self.models) writer = Editable.save(self, writer) writer = self.mdldict.save(writer) for i in range(self.mdldict.num): writer = self.models[i].save(writer) size = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(size) return writer
def save(self, writer): start = writer.tell() writer = Editable.save(self, writer) rel = writer.tell() for file_id, entry in enumerate(self.narc.fatb.entries): writer.writePadding(entry.start + rel) writer.write(self.files[file_id]) writer.writeAlign(4) size = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(size) return writer
def save(self, writer=None): writer = BinaryIO.writer(writer) start = writer.tell() writer = Editable.save(self, writer) for record_idx, record_name in enumerate(self.record_names): self.record_offsets[record_idx] = writer.tell() - start if record_name == 'SEQARC': prefixes = set() offsets = [] for entry in self.records[record_name]: if entry[0] == record_name: prefixes.add(entry[1]) writer.writeUInt32(len(prefixes)) ofs_ofs = writer.tell() for i in range(len(prefixes) * 2): writer.writeUInt32(0) for name in prefixes: offsets.append(writer.tell() - start) writer.writeString(name) writer.writeAlign(8) offsets.append(writer.tell() - start) num, text_writer = self.save_entries( self.records[record_name], writer.tell() - start + 4, (record_name, name)) writer.writeUInt32(num) writer.write(text_writer.getvalue()) with writer.seek(ofs_ofs): writer.write(array.array('I', offsets).tostring()) else: num, text_writer = self.save_entries(self.records[record_name], writer.tell() - start + 4, (record_name, )) writer.writeUInt32(num) writer.write(text_writer.getvalue()) writer.writeAlign(8) self.size = writer.tell() - start with writer.seek(start): writer = Editable.save(self, writer) return writer
def save(self, writer=None): for name, data in self.files.iteritems(): name = os.path.splitext(name)[0] name_parts = name.split('/') record_name = name_parts.pop(0) if name_parts not in self.symb.records[record_name]: self.symb.records[record_name].append(name_parts) # TODO: handle new info entries?! writer = BinaryIO.writer(writer) start = writer.tell() writer = Editable.save(self, writer) for block_ofs, block in zip( self.block_offsets, [self.symb, self.fat, self.info, self.file]): block_ofs.block_offset = writer.tell() - start writer = block.save(writer) writer.writeAlign(4) block_ofs.block_size = writer.tell( ) - start - block_ofs.block_offset with writer.seek(start): writer = Editable.save(self, writer) return writer
def save(self, writer): start = writer.tell() writer = Editable.save(self, writer) writer = self.matdict.save(writer) ofs = writer.tell() - start with writer.seek(start + self.get_offset('texmatdict_offset')): writer.writeUInt32(ofs) writer = self.texmatdict.save(writer) ofs = writer.tell() - start with writer.seek(start + self.get_offset('palmatdict_offset')): writer.writeUInt32(ofs) writer = self.palmatdict.save(writer) return writer
def save(self, writer=None): writer = BinaryIO.writer(writer) start = writer.tell() self.num = len(self.glyphs) base_glyph = Glyph() self.footer_offset = base_glyph.get_size() * self.num + self.headersize writer = Editable.save(self, writer) writer = self.glyphs.save(writer) self.widths = [0] * self.num for i, glyph in enumerate(self.glyphs): self.widths[i] = width = glyph.get_bbox()[0] writer.writeUInt8(width) return writer
def save(self, writer=None): if self.tex.loaded: self.numblocks = 2 else: self.numblocks = 1 writer = BinaryIO.writer(writer) start = writer.tell() writer = Editable.save(self, writer) offset_offset = writer.tell() for i in range(self.numblocks): writer.writeUInt32(0) block_ofs = writer.tell() - start with writer.seek(offset_offset): writer.writeUInt32(block_ofs) writer = self.mdl.save(writer) if self.tex.loaded: block_ofs = writer.tell() - start with writer.seek(offset_offset + 4): writer.writeUInt32(block_ofs) writer = self.tex.save(writer) size = writer.tell() - start with writer.seek(start + self.get_offset('size_')): writer.writeUInt32(size) return writer
def save(self, writer=None): self.num = len(self.entries) writer = Editable.save(self, writer) writer = self.entries.save(writer) return writer
def save(self, writer=None): self.update() return Editable.save(self, writer)