Beispiel #1
0
 def export(self, compiler):
     result = ''
     id = p_common.convert_to_identifier(self._no_tag_id)
     result += "%s -1\n" % id
     result += compiler.process_statement_block(id, False, self._block)
     result += '\n'
     return result
Beispiel #2
0
    def create_auto_id(self):
        token_ipt = p_common.convert_to_identifier(self._start)
        token_opt = p_common.convert_to_identifier(self._end)

        auto_id = self.tag + "_" + token_ipt + ":" + token_opt

        if auto_id in self._auto_ids and self._auto_ids[auto_id] != self._text:
            number = 1
            new_auto_id = auto_id + "." + str(number)
            while new_auto_id in self._auto_ids:
                number += 1
                new_auto_id = auto_id + "." + str(number)
            auto_id = new_auto_id
        else:
            self._auto_ids[auto_id] = self._text
        return auto_id
Beispiel #3
0
    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
Beispiel #4
0
    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
Beispiel #5
0
    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
Beispiel #6
0
    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
Beispiel #7
0
 def export(self, compiler):
     result = ""
     id = p_common.convert_to_identifier(self._no_tag_id)
     result += "%s -1\n" % id
     result += compiler.process_statement_block(id, False, self._block)
     result += "\n"
     return result
Beispiel #8
0
    def create_auto_id(self):
        token_ipt = p_common.convert_to_identifier(self._start)
        token_opt = p_common.convert_to_identifier(self._end)

        auto_id = self.tag + "_" + token_ipt + ":" + token_opt

        if auto_id in self._auto_ids and self._auto_ids[auto_id] != self._text:
            number = 1
            new_auto_id = auto_id + "." + str(number)
            while new_auto_id in self._auto_ids:
                number += 1
                new_auto_id = auto_id + "." + str(number)
            auto_id = new_auto_id
        else:
            self._auto_ids[auto_id] = self._text
        return auto_id
Beispiel #9
0
    def export(self, compiler):
        result = "%s %s %d  %d\n" % (p_common.convert_to_identifier(self.id),
                                    p_common.convert_to_identifier(self.no_tag_id),
                                    self._flags, self._mission_type)
        result += "%s \n" % self._description.replace(" ","_")

        # export groups
        result += "\n%d " % len(self._groups)
        for group in self._groups:
            if len(group[5]) > 8:
                Exception('Too many item_overrides in Mission template "%s"' %
                          self.id)

            result += "%d %d %d %d %d %d  " % (group[0],
                                               group[1],
                                               group[2],
                                               group[3],
                                               group[4],
                                               len(group[5]))
            for item_override in group[5]:
                # todo: add_tag_use(tag_uses,tag_item,item_override)
                # todo: why get_index?
                result += "%d " % compiler.index(item_override)
            result += "\n"

        # export triggers
        result += "%d\n" % len(self._triggers)
        for trigger in self._triggers:
            trigger_statement_name = self.name + ".Trigger(%.1f %.1f %.1f)" % (
                trigger[h_triggers.trigger_check_pos],
                 trigger[h_triggers.trigger_delay_pos],
                 trigger[h_triggers.trigger_rearm_pos]
            )

            result += "%f %f %f " % (trigger[h_triggers.trigger_check_pos],
                                     trigger[h_triggers.trigger_delay_pos],
                                     trigger[h_triggers.trigger_rearm_pos])
            result += compiler.process_statement_block(
                trigger_statement_name + '[conditions]', 1,
                trigger[h_triggers.trigger_conditions_pos])
            result += compiler.process_statement_block(
                trigger_statement_name + '[consequences]', 1,
                trigger[h_triggers.trigger_consequences_pos])
            result += '\n'
        result += '\n\n'
        return result
Beispiel #10
0
    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
Beispiel #11
0
    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
Beispiel #12
0
    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
Beispiel #13
0
    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
Beispiel #14
0
    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
Beispiel #15
0
    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
Beispiel #16
0
    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
Beispiel #17
0
    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
Beispiel #18
0
    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
Beispiel #19
0
 def export(self, compiler):
     return "%s %s\n" % (p_common.convert_to_identifier(self._id),
                         p_common.replace_spaces(self._string))