def export(self, compiler): result = '' faction_index = compiler.index(self._faction) scene_index = compiler.index(self._scene) scene_index |= self._scene_entry result += "%s %s %s %s %d %d %d %d " % ( convert_to_identifier(self._id), replace_spaces(self._name), replace_spaces(self._plural), replace_spaces(str(self._image)), self._flags, scene_index, self._reserved, faction_index) result += '%d %d' % tuple( compiler.index(x) for x in self._upgradable_to) result += '\n ' for inventory_item in self._inventory: result += "%d 0 " % compiler.index(inventory_item) for i in range(64 - len(self._inventory)): result += "-1 0 " result += "\n " strength = (self._attributes & 0xff) agility = ((self._attributes >> 8) & 0xff) intelligence = ((self._attributes >> 16) & 0xff) charisma = ((self._attributes >> 24) & 0xff) starting_level = ( self._attributes >> h_trp.level_bits) & h_trp.level_mask result += " %d %d %d %d %d\n" % (strength, agility, intelligence, charisma, starting_level) wp_word = self._proficiencies for wp in range(h_trp.num_weapon_proficiencies): wp_level = wp_word & 0x3FF result += " %d" % wp_level wp_word >>= 10 result += "\n" for i in range(h_skills.num_skill_words): result += "%d " % ((self._skills >> (i * 32)) & 0xffffffff) result += "\n " for fckey in (self._face_code, self._face_code2): word_keys = [] for word_no in range(4): word_keys.append((fckey >> (64 * word_no)) & 0xFFFFFFFFFFFFFFFF) for word_no in range(4): result += "%d " % word_keys[(4 - 1) - word_no] result += '\n\n' return result
def export(self, compiler): result = '' faction_index = compiler.index(self._faction) scene_index = compiler.index(self._scene) scene_index |= self._scene_entry result += "%s %s %s %s %d %d %d %d " % ( convert_to_identifier(self._id), replace_spaces(self._name), replace_spaces(self._plural), replace_spaces(str(self._image)), self._flags, scene_index, self._reserved, faction_index) result += '%d %d' % tuple(compiler.index(x) for x in self._upgradable_to) result += '\n ' for inventory_item in self._inventory: result += "%d 0 " % compiler.index(inventory_item) for i in range(64 - len(self._inventory)): result += "-1 0 " result += "\n " strength = (self._attributes & 0xff) agility = ((self._attributes >> 8) & 0xff) intelligence = ((self._attributes >> 16) & 0xff) charisma = ((self._attributes >> 24) & 0xff) starting_level = (self._attributes >> h_trp.level_bits) & h_trp.level_mask result += " %d %d %d %d %d\n" % (strength, agility, intelligence, charisma, starting_level) wp_word = self._proficiencies for wp in range(h_trp.num_weapon_proficiencies): wp_level = wp_word & 0x3FF result += " %d" % wp_level wp_word >>= 10 result += "\n" for i in range(h_skills.num_skill_words): result += "%d " % ((self._skills >> (i * 32)) & 0xffffffff) result += "\n " for fckey in (self._face_code, self._face_code2): word_keys = [] for word_no in range(4): word_keys.append((fckey >> (64 * word_no)) & 0xFFFFFFFFFFFFFFFF) for word_no in range(4): result += "%d " % word_keys[(4 - 1) - word_no] result += '\n\n' return result
def export(self, compiler): result = "%s %s %d %d \n" % (p_common.convert_to_identifier( self._id), p_common.replace_spaces( self._name), self._flags, self._color) relations = self.all_relations()[self.index] for relation in relations: result += " %f " % relations[relation] result += "\n" result += "%d " % len(self._ranks) for rank in self._ranks: result += " %s " % (p_common.replace_spaces(rank)) return result
def _get_quick_string_index(self, sentence): text = p_common.convert_to_identifier_with_no_lowercase(sentence) sentence = p_common.replace_spaces(sentence) i = min(20, len(text)) while i <= len(text): auto_id = "qstr_" + text[0:i] if auto_id in self._quick_strings: # string already exists, don't do anything if self._quick_strings[auto_id] == sentence: break else: # auto_id exists but contains other sentence. # increase auto_id i += 1 else: # auto_id is free, store sentence self._quick_strings[auto_id] = sentence break else: # `"qstr_" + text` is already an auto_id, use numbers number = 1 base_auto_id = "qstr_" + text auto_id = base_auto_id + str(number) while auto_id in self._quick_strings: number += 1 auto_id = base_auto_id + str(number) self._quick_strings[auto_id] = sentence return list(self._quick_strings.keys()).index(auto_id)
def export(self, compiler): if isinstance(self._flags, int): flags = self._flags else: flags = self._flags.as_index(compiler) result = "%s %s %d %d %d %d "%(p_common.convert_to_identifier(self._id), p_common.replace_spaces(self._name), flags, compiler.index(self._menu), compiler.index(self._faction), self._personality) for member in self._members: result += "%d %d %d " % (compiler.index(member[0]), member[1], member[2]) if len(member) == 4: result += "%d " % member[3] elif len(member) > 4: logging.warning('Troop in party template "%s" has more than 4 ' 'parameters. Extra parameters ignored.' % self._id) else: result += "0 " for i in range(6 - len(self._members)): result += '-1 ' result += '\n' return result
def export(self, compiler): result = "%s %s %d %d \n" % ( p_common.convert_to_identifier(self._id), p_common.replace_spaces(self._name), self._flags, self._color) relations = self.all_relations()[self.index] for relation in relations: result += " %f " % relations[relation] result += "\n" result += "%d " % len(self._ranks) for rank in self._ranks: result += " %s " % (p_common.replace_spaces(rank)) return result
def export(self, compiler): if isinstance(self._flags, int): flags = self._flags else: flags = self._flags.as_index(compiler) result = "%s %s %d %d %d %d " % (p_common.convert_to_identifier( self._id), p_common.replace_spaces( self._name), flags, compiler.index( self._menu), compiler.index( self._faction), self._personality) for member in self._members: result += "%d %d %d " % (compiler.index( member[0]), member[1], member[2]) if len(member) == 4: result += "%d " % member[3] elif len(member) > 4: logging.warning('Troop in party template "%s" has more than 4 ' 'parameters. Extra parameters ignored.' % self._id) else: result += "0 " for i in range(6 - len(self._members)): result += '-1 ' result += '\n' return result
def _get_quick_string_index(self, sentence): text = p_common.convert_to_identifier_with_no_lowercase(sentence) sentence = p_common.replace_spaces(sentence) i = min(20, len(text)) while i <= len(text): auto_id = "qstr_" + text[0:i] if auto_id in self._quick_strings: # string already exists, don't do anything if self._quick_strings[auto_id] == sentence: break else: # auto_id exists but contains other sentence. # increase auto_id i += 1 else: # auto_id is free, store sentence self._quick_strings[auto_id] = sentence break else: # `"qstr_" + text` is already an auto_id, use numbers number = 1 base_auto_id = "qstr_" + text auto_id = base_auto_id + str(number) while auto_id in self._quick_strings: number += 1 auto_id = base_auto_id + str(number) self._quick_strings[auto_id] = sentence return self._quick_strings.keys().index(auto_id)
def export(self, compiler): result = '' result += "%s %s %d %s %s %f %f %f %f %f %s " % \ (convert_to_identifier(self._id), replace_spaces(self._no_tag_id), self._flags, self._mesh, self._body, self._min_pos[0], self._min_pos[1], self._max_pos[0], self._max_pos[1], self._water_level, self._terrain_code) result += "\n %d " % len(self._passages) for passage in self._passages: result += " %d " % self.get_scene_index(passage) result += "\n %d " % len(self._chest_troops) for chest_troop in self._chest_troops: troop_no = compiler.index(chest_troop, tag='trp') if troop_no == 0: logging.error('Unable to find chest-troop "%s" in scene "%s"' % (chest_troop, self._id)) result += " %d " % troop_no result += "\n" if self._outer_scene: result += " %s " % self._outer_scene else: result += " 0 " result += '\n' return result
def compile(self, types=()): if not types: types = objects.ALL_TYPES for object_type in types: if object_type == objects.Slot: # slots are not exported continue logging.info('Compiling "%s"' % object_type.__name__) if objects.HEADERS[object_type]: result = objects.HEADERS[object_type] + '\n' else: result = '' # "sound" needs samples exported if object_type == objects.Sound: result += object_type.export_samples() # "Party" needs 2 len's. if object_type == objects.Party: result += "%d " % len(object_type.objects) result += "%d\n" % len(object_type.objects) for id in object_type.objects: logging.debug('Compiling "%s.%s"' % (object_type.__name__, id)) # add to _all_entities keeps a track of all cases. if object_type in objects.TAG_TO_OBJECT_TYPE.values(): self._all_entities.add("%s_%s" % (object_type.tag, id)) try: result += object_type.objects[id].export(self) except Exception as e: import sys raise e with open(self._export_dir + '/' + objects.FILE_NAMES[object_type], 'wb') as f: f.write(result.replace('\n', '\r\n').encode('utf-8')) # save quick strings result = "%d\n" % len(self._quick_strings) for q_string in self._quick_strings: result += "%s %s\n" % \ (q_string, p_common.replace_spaces(self._quick_strings[q_string])) with open(self._export_dir + '/quick_strings.txt', 'wb') as f: f.write(result.replace('\n', '\r\n').encode('utf-8')) # export dialog states result = '' for dialog_state in objects.Dialog.dialog_states: result += "%s\n" % dialog_state with open(self._export_dir + '/' + 'dialog_states.txt', 'wb') as f: f.write(result.replace('\n', '\r\n').encode('utf-8')) self.save_logs()
def export(self, compiler): result = " {id} {name} {name} {meshes_number} ".format( id=convert_to_identifier(self._id), name=replace_spaces(self._name), meshes_number=len(self._meshes) ) for mesh in self._meshes: result += " %s %d " % (mesh[0], mesh[1]) # hp share the same bits as attack type since items cannot have both. hp = hi.get_hit_points(self._stats) if hi.get_thrust_damage(self._stats) + hi.get_swing_damage(self._stats) > 0: hp = 0 result += " %d %d %d %d %f %d %d %d %d %d %d %d %d %d %d %d %d\n" % ( self._flags, self._capabilities, self._slot_no, self._value, hi.get_weight(self._stats), hi.get_abundance(self._stats), hi.get_head_armor(self._stats), hi.get_body_armor(self._stats), hi.get_leg_armor(self._stats), hi.get_difficulty(self._stats), hp, hi.get_speed_rating(self._stats), hi.get_missile_speed(self._stats), hi.get_weapon_length(self._stats), hi.get_max_ammo(self._stats), hi.get_thrust_damage(self._stats), hi.get_swing_damage(self._stats), ) result += " %d\n" % len(self._factions) for faction in self._factions: result += " %d" % compiler.index(faction) if self._factions: result += "\n" result += "%d\n" % len(self._triggers) for trigger in self._triggers: result += "%f " % trigger[0] result += compiler.process_statement_block(self.name, 1, trigger[1]) result += "\n" result += "\n" return result
def export(self, compiler): result = " {id} {name} {name} {meshes_number} ".format( id=convert_to_identifier(self._id), name=replace_spaces(self._name), meshes_number=len(self._meshes)) for mesh in self._meshes: result += " %s %d " % (mesh[0], mesh[1]) # hp share the same bits as attack type since items cannot have both. hp = hi.get_hit_points(self._stats) if hi.get_thrust_damage(self._stats) + hi.get_swing_damage( self._stats) > 0: hp = 0 result += " %d %d %d %d %f %d %d %d %d %d %d %d %d %d %d %d %d\n" % \ (self._flags, self._capabilities, self._slot_no, self._value, hi.get_weight(self._stats), hi.get_abundance(self._stats), hi.get_head_armor(self._stats), hi.get_body_armor(self._stats), hi.get_leg_armor(self._stats), hi.get_difficulty(self._stats), hp, hi.get_speed_rating(self._stats), hi.get_missile_speed(self._stats), hi.get_weapon_length(self._stats), hi.get_max_ammo(self._stats), hi.get_thrust_damage(self._stats), hi.get_swing_damage(self._stats)) result += " %d\n" % len(self._factions) for faction in self._factions: result += " %d" % compiler.index(faction) if self._factions: result += "\n" result += "%d\n" % len(self._triggers) for trigger in self._triggers: result += "%f " % trigger[0] result += compiler.process_statement_block(self.name, 1, trigger[1]) result += "\n" result += "\n" return result
def export(self, compiler): #if (party[5] >= 0): # add_tag_use(tag_uses,tag_faction,party[5]) if isinstance(self._flags, int): flags = self._flags else: flags = self._flags.as_index(compiler) result = " 1 %d %d " % (self.index, self.index) result += "%s %s %d " % (p_common.convert_to_identifier(self.id), p_common.replace_spaces(self._name), flags) if isinstance(self._menu, str): menu_index = compiler.index(self._menu) else: menu_index = self._menu result += "%d " % menu_index result += "%d %d %d %d %d " % (compiler.index(self._template), compiler.index(self._faction), self._personality, self._personality, self._ai_behavior) if isinstance(self._ai_target, str): ai_target_index = compiler.index(self._ai_target) else: ai_target_index = self._ai_target result += "%d %d " % (ai_target_index, ai_target_index) result += "%f %f " % (self._init_position[0], self._init_position[1]) result += "%f %f " % (self._init_position[0], self._init_position[1]) result += "%f %f 0.0 " % (self._init_position[0], self._init_position[1]) result += "%d " % len(self._members) for member in self._members: # todo: add_tag_use(tag_uses,tag_troop,member[0]) result += "%d %d 0 %d " % (compiler.index(member[0]), member[1], member[2]) result += "\n%.4f\n" % ((3.1415926 / 180.0) * self._bearing) return result
def export(self, compiler): #if (party[5] >= 0): # add_tag_use(tag_uses,tag_faction,party[5]) if isinstance(self._flags, int): flags = self._flags else: flags = self._flags.as_index(compiler) result = " 1 %d %d " % (self.index, self.index) result += "%s %s %d " % (p_common.convert_to_identifier( self.id), p_common.replace_spaces(self._name), flags) if isinstance(self._menu, str): menu_index = compiler.index(self._menu) else: menu_index = self._menu result += "%d " % menu_index result += "%d %d %d %d %d " % (compiler.index( self._template), compiler.index(self._faction), self._personality, self._personality, self._ai_behavior) if isinstance(self._ai_target, str): ai_target_index = compiler.index(self._ai_target) else: ai_target_index = self._ai_target result += "%d %d " % (ai_target_index, ai_target_index) result += "%f %f " % (self._init_position[0], self._init_position[1]) result += "%f %f " % (self._init_position[0], self._init_position[1]) result += "%f %f 0.0 " % (self._init_position[0], self._init_position[1]) result += "%d " % len(self._members) for member in self._members: # todo: add_tag_use(tag_uses,tag_troop,member[0]) result += "%d %d 0 %d " % (compiler.index( member[0]), member[1], member[2]) result += "\n%.4f\n" % ((3.1415926 / 180.0) * self._bearing) return result
def export(self, compiler): return "%s %s\n" % (p_common.convert_to_identifier(self._id), p_common.replace_spaces(self._string))
def export(self, compiler): result = "%s %d %s " % (self.id, self._flags, p_common.replace_spaces(self._resource_name)) result += ' '.join(['%f' % i for i in self._trans + self._rot + self._scale]) result += '\n' return result
def compile(self, types=()): if not types: types = objects.ALL_TYPES for object_type in types: if object_type == objects.Slot: # slots are not exported continue logging.info('Compiling "%s"' % object_type.__name__) if objects.HEADERS[object_type]: result = objects.HEADERS[object_type] + '\n' else: result = '' # "sound" needs samples exported if object_type == objects.Sound: result += object_type.export_samples() # "Party" needs 2 len's. if object_type == objects.Party: result += "%d " % len(object_type.objects) result += "%d\n" % len(object_type.objects) for id in object_type.objects: logging.debug('Compiling "%s.%s"' % (object_type.__name__, id)) # add to _all_entities keeps a track of all cases. if object_type in objects.TAG_TO_OBJECT_TYPE.values(): self._all_entities.add("%s_%s" % (object_type.tag, id)) try: result += object_type.objects[id].export(self) except Exception as e: import sys raise type(e), type(e)('"%s" happens at "%s".' % (e.message, object_type.objects[id].name)), \ sys.exc_info()[2] with open(self._export_dir + '/' + objects.FILE_NAMES[object_type], 'wb') as f: f.write(result.replace('\n', '\r\n')) # save quick strings result = "%d\n" % len(self._quick_strings) for q_string in self._quick_strings: result += "%s %s\n" % \ (q_string, p_common.replace_spaces(self._quick_strings[q_string])) with open(self._export_dir + '/quick_strings.txt', 'wb') as f: f.write(result.replace('\n', '\r\n')) # export dialog states result = '' for dialog_state in objects.Dialog.dialog_states: result += "%s\n" % dialog_state with open(self._export_dir + '/' + 'dialog_states.txt', 'wb') as f: f.write(result.replace('\n', '\r\n')) self.save_logs()
def export(self, compiler): result = "%s %d\n %s %s %s\n" % (self._no_tag_id, self._flags, self._body, self._calf, self._hand) result += " %s %d " % (self._head, len(self._faces)) for face_key in self._faces: result += "skinkey_%s %d %d %f %f %s " % \ (p_common.convert_to_identifier(face_key[4]), face_key[0], face_key[1], face_key[2], face_key[3], p_common.replace_spaces(face_key[4])) result += "\n%d\n" % len(self._hair_meshes) for mesh_name in self._hair_meshes: result += " %s " % mesh_name result += "\n %d\n" % len(self._beard_meshes) for bmn in self._beard_meshes: result += " %s\n" % bmn result += '\n' result += " %d " % len(self._hair_textures) for tex in self._hair_textures: result += " %s " % tex result += "\n" result += " %d " % len(self._beard_textures) for tex in self._beard_textures: result += " %s " % tex result += "\n" result += " %d "%len(self._face_textures) for tex in self._face_textures: color = tex[1] hair_mats = tex[2] hair_colors = [] if len(tex) > 3: hair_colors = tex[3] result += " %s %d %d %d "%(tex[0], color, len(hair_mats), len(hair_colors)) for hair_mat in hair_mats: result += " %s "%(p_common.replace_spaces(hair_mat)) for hair_color in hair_colors: result += " %d " % hair_color result += "\n" result += " %d " % len(self._voices) for voice_rec in self._voices: result += " %d %s " % (voice_rec[0], voice_rec[1]) result += "\n" result += " %s %f " % (self._skeleton, self._scale) result += "\n%d %d\n" % (compiler.index(self._blood_particles[0]), compiler.index(self._blood_particles[1])) result += "%d\n" % len(self._face_constraints) for constraint in self._face_constraints: result += "\n%f %d %d " % (constraint[0], constraint[1], (len(constraint) - 2)) for i_pair in range(len(constraint)): if i_pair > 1: result += " %f %d" % (constraint[i_pair][0], constraint[i_pair][1]) result += "\n" return result
def export(self, compiler): return "%s %s %s\n" % (self.id, p_common.replace_spaces( self._name), p_common.replace_spaces(self._description))
def export(self, compiler): result = "%s %s " % (self.id, p_common.replace_spaces(self._name)) result += "%d %d %s\n" % (self._flags, self._max_level, self._description.replace(" ", "_")) return result
def export(self, compiler): return "%s %s %s\n"% (self.id, p_common.replace_spaces(self._name), p_common.replace_spaces(self._description))