Changeset 560


Ignore:
Timestamp:
06/24/10 18:35:28 (9 years ago)
Author:
beliar
Message:

Patch by Beliar.

  • The game now searches for dialogues in the directory specified in the settings.xml and stores them in a dictionary.
  • Agents are now created by using the information in the *_agents.yaml files
  • Removed agents from the map files
  • Please note that saving/loading probably doesn't work currently
Location:
branches/map_loading_change/game
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • branches/map_loading_change/game/local_loaders/xmlmap.py

    r559 r560  
    295295        for instance in instances: 
    296296 
     297            object_type = instance.get('object_type') 
    297298            object_id = instance.get('map_object') 
    298299            if not object_id: 
     
    300301            if not object_id: 
    301302                object_id = instance.get('o') 
    302  
    303             if not object_id: self._err('<instance> does not specify an '\ 
    304                                         'map_obj attribute.') 
     303            if not object_id: 
     304                try: 
     305                    object_id = self.model.object_db[object_type]["gfx"] 
     306                except AttributeError:  
     307                    self._err('<instance> does not specify a '\ 
     308                                'map_obj attribute.') 
    305309 
    306310            n_space = instance.get('namespace') 
     
    379383                 
    380384            #Check for PARPG specific map_obj attributes 
    381             object_type = instance.get('object_type') 
    382385            if object_type: 
    383386                inst_dict = {} 
     
    394397                    inst_dict['dialogue'] = instance.get('dialogue') 
    395398                inst_dict["target_map_name"] = instance.get('target_map_name') 
    396                 inst_dict["target_map"] = instance.get('target_map') 
    397399                inst_dict["target_x"] = instance.get('target_x') 
    398400                inst_dict["target_y"] = instance.get('target_y') 
  • branches/map_loading_change/game/maps/all_agents.yaml

    r558 r560  
    2121    Map: "Mall" 
    2222    Position: [2.0, -8.0, 0.0] 
    23     Inventory:   
    24         - {object_id: "456", object_type: "Dagger123"} 
    25         - {object_id: "555", object_type: "Beer"} 
    26         - {object_id: "616", object_type: "Pamphlet"} 
     23    Rotation: 0 
     24    Inventory: 
     25        - {ID: "456", object_type: "Dagger123", slot: "right_hand"} 
     26        - {ID: "555", object_type: "Beer"} 
     27        - {ID: "616", object_type: "Pamphlet"} 
    2728--- 
    2829Janie: 
     
    3435    Map: "Mall" 
    3536    Position: [-5.0, -3.0, 0.0] 
     37    Rotation: 0 
    3638--- 
    3739Bart: 
     
    4345    Map: "Mall" 
    4446    Position: [-5.0, -4.0, 0.0] 
     47    Rotation: 0 
    4548--- 
    4649Skwisgaar: 
     
    5255    Map: "Mall" 
    5356    Position: [-5.0, -6.0, 0.0] 
     57    Rotation: 0 
    5458--- 
    5559Matti: 
     
    6165    Map: "Mall" 
    6266    Position: [-8.0, -6.0, 0.0] 
     67    Rotation: 0 
    6368--- 
    6469Dig: 
     
    7075    Map: "Mall" 
    7176    Position: [2.0, -6.0, 0.0]  
     77    Rotation: 0 
    7278--- 
    7379Jacob: 
     
    7985    Map: "Mall" 
    8086    Position: [3.0, -6.0, 0.0]  
     87    Rotation: 0 
    8188--- 
    8289Kimmo: 
     
    8895    Map: "Mall" 
    8996    Position: [4.0, -6.0, 0.0] 
     97    Rotation: 0 
    9098--- 
    9199Helja: 
     
    97105    Map: "Mall" 
    98106    Position: [5.0, -7.0, 0.0] 
     107    Rotation: 0 
    99108--- 
    100109Aino: 
     
    106115    Map: "Mall" 
    107116    Position: [-6.0, -7.0, 0.0] 
     117    Rotation: 0 
    108118--- 
    109119Kandi: 
     
    115125    Map: "Mall" 
    116126    Position: [-7.0, -7.0, 0.0] 
     127    Rotation: 0 
    117128--- 
    118129Cali: 
     
    124135    Map: "Mall" 
    125136    Position: [-8.0, -7.0, 0.0] 
     137    Rotation: 0 
    126138--- 
    127 Camilla: 
     139Camilla Niitty: 
    128140    ViewName: "Camilla" 
    129     RealName: "Camilla" 
     141    RealName: "Camilla Niitty" 
    130142    ObjectType: "NonPlayerCharacter" 
    131143    ObjectModel: "long_coat_female" 
     
    133145    Map: "Mall" 
    134146    Position: [-5.0, -7.0, 0.0] 
     147    Rotation: 0 
    135148--- 
    136149Synnove: 
     
    142155    Map: "Mall" 
    143156    Position: [-5.0, -9.0, 0.0] 
     157    Rotation: 0 
    144158--- 
    145159Manslow: 
     
    151165    Map: "Farm" 
    152166    Position: [-3.0, -3.0, 0.0] 
     167    Rotation: 0 
    153168--- 
    154169Sami: 
     
    160175    Map: "Farm" 
    161176    Position: [3.0, 4.0, 0.0] 
     177    Rotation: 0 
    162178--- 
    163179Rasmus: 
     
    169185    Map: "Farm" 
    170186    Position: [4.0, 3.0, 0.0] 
     187    Rotation: 0 
  • branches/map_loading_change/game/maps/map.xml

    r559 r560  
    53325332        <layer grid_type="square" id="ObjectLayer" pathing="cell_edges_and_diagonals" rotation="0.0" transparency="0" x_offset="0.0" x_scale="1.0" y_offset="0.0" y_scale="1.0"> 
    53335333                <instances> 
    5334                         <i dialogue="dialogue/fguard.yaml" id="long_coat_female0" is_open="None" locked="None" name="Janie" o="long_coat_female" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A woman wearing a large coat, and a big gun" x="-5.0" y="-3.0" z="0.0" /> 
    5335                         <i dialogue="dialogue/drunkard.yaml" id="long_coat_male0" is_open="None" locked="None" name="Bart" o="long_coat_male" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A very drunk looking man" x="-5.0" y="-4.0" z="0.0" /> 
    5336                         <i dialogue="dialogue/crazy_swede.yaml" id="male_traveler0" is_open="None" locked="None" name="Skwisgaar" o="male_traveler_1" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A wild-eyed man with an axe" x="-5.0" y="-6.0" z="0.0" /> 
    5337                         <i dialogue="dialogue/snowshoveler.yaml" id="male_traveler01" is_open="None" locked="None" name="Matti" o="male_traveler_1" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A man shoveling snow into a hole" x="-8.0" y="-6.0" z="0.0" /> 
    5338                         <i dialogue="dialogue/bouncer.yaml" id="male_traveler02" is_open="None" locked="None" name="Dig" o="male_traveler_1" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A tough looking dude." x="2.0" y="-6.0" z="0.0" /> 
    5339                         <i dialogue="dialogue/innkeeper.yaml" id="long_coat_male01" is_open="None" locked="None" name="Jacob" o="long_coat_male" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A lean man with a sharp face and an appraising gaze" x="3.0" y="-6.0" z="0.0" /> 
    5340                         <i dialogue="dialogue/leader.yaml" id="male_traveler03" is_open="None" locked="None" name="Kimmo" o="long_coat_male" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="An older man who exudes confidence and ability" x="4.0" y="-6.0" z="0.0" /> 
    5341                         <i dialogue="dialogue/quartermaster.yaml" id="woman01" is_open="None" locked="None" name="Helja" o="npc_woman" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A business-like woman, short and stout" x="5.0" y="-7.0" z="0.0" /> 
    5342                         <i dialogue="dialogue/ma.yaml" id="woman02" is_open="None" locked="None" name="Aino" o="npc_woman" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="An ancient crone with a tight lipped smile.  She has an unlit cigarette dangling from her lips" x="-6.0" y="-7.0" z="0.0" /> 
    5343                         <i dialogue="dialogue/grifter2.yaml" id="woman03" is_open="None" locked="None" name="Kandi" o="npc_woman" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A dark haired, scantily clad woman giving you the once over" x="-7.0" y="-7.0" z="0.0" /> 
    5344                         <i dialogue="dialogue/grifter1.yaml" id="woman04" is_open="None" locked="None" name="Cali" o="npc_woman" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A scantily clad blond, checking you out" x="-8.0" y="-7.0" z="0.0" /> 
    5345                         <i dialogue="dialogue/camilla.yaml" id="sister00" is_open="None" locked="None" name="Camilla" o="long_coat_female" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A hard-faced pretty young woman.  She seems to be scowling." x="-5.0" y="-8.0" z="0.0" /> 
    5346                         <i dialogue="dialogue/synnove.yaml" id="sister01" is_open="None" locked="None" name="Synnove" o="long_coat_female" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A plain looking girl with a faraway look in her eye" x="-5.0" y="-9.0" z="0.0" /> 
    5347                         <i id="crate02" is_open="False" locked="False" name="A dirty old crate" o="crate" object_type="WoodenCrate" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A crate that is covered in grime and dirt. There doesn&apos;t seem to be anything remarkable about it" x="-2.0" y="-11.0" z="0.0" /> 
    53485334                        <i o="guard_tower" r="315" x="4.0" y="-17.0" z="0.0" /> 
    5349                         <i id="PC" is_open="None" locked="None" name="None" o="player" object_type="PlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="None" x="2.0" y="-8.0" z="0.0" >  
    5350                                 <inventory> 
    5351                                         <object id="456" object_type="Dagger123" /> 
    5352                                         <object id="555" object_type="Beer" /> 
    5353                                         <object id="616" object_type="Pamphlet" /> 
    5354                                 </inventory> 
    5355                         </i> 
    5356                         <i id="shanty-door01" is_open="False" locked="None" o="shanty-door" object_type="ShantyDoor" r="0" target_map_name="Farm" target_x="10.0" target_y="10.0" x="-6.0" y="-13.0" z="0.0" /> 
    53575335                        <i o="container_house01" r="0" x="-1.0" y="2.0" z="0.0" /> 
    53585336                        <i o="container_house02" r="0" x="14.0" y="4.0" z="0.0" /> 
     
    54685446                        <i o="block" r="0" x="5.0" y="-20.0" z="0.0" /> 
    54695447                        <i o="block" r="0" x="6.0" y="-20.0" z="0.0" /> 
    5470                         <i id="lock_box01" is_open="False" locked="False" o="lock_box_metal01" object_type="Footlocker" r="225" target_map="None" target_map_name="None" target_x="None" target_y="None" x="-9.0" y="0.0" z="0.0" /> 
    54715448                        <i o="pillar1_segment0" r="0" x="-35.0" y="-60.0" z="0.0" /> 
    54725449                        <i o="pillar1_segment1" r="0" x="-33.0" y="-60.0" z="0.0" /> 
  • branches/map_loading_change/game/maps/map2.xml

    r559 r560  
    10071007        <layer grid_type="square" id="ObjectLayer" pathing="cell_edges_and_diagonals" rotation="0.0" transparency="0" x_offset="0.0" x_scale="1.0" y_offset="0.0" y_scale="1.0"> 
    10081008                <instances> 
    1009                         <i dialogue="dialogue/farmer.yaml" id="male_farmer0" is_open="None" locked="None" name="Manslow" o="male_farmer_1" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A grimy looking farmer" x="-3.0" y="-3.0" z="0.0" /> 
    1010                         <i dialogue="dialogue/farm_boy1.yaml" id="farm_boy0" is_open="None" locked="None" name="Sami"    o="long_coat_male" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="An earstwhile boy, working hard" x="3.0" y="4.0" z="0.0" /> 
    1011                         <i dialogue="dialogue/farm_boy2.yaml" id="farm_boy1" is_open="None" locked="None" name="Rasmus"  o="long_coat_male" object_type="NonPlayerCharacter" r="0" target_map="None" target_map_name="None" target_x="None" target_y="None" text="A grimy looking farmer" x="4.0" y="3.0" z="0.0" /> 
    1012                         <i id="shanty-door01" is_open="False" locked="None" o="shanty-door" object_type="ShantyDoor" r="0" target_map_name="Mall" target_x="5.0" target_y="5.0" text="Looks like the exit of the building." x="-2.0" y="6.0" z="0.0" /> 
    10131009                </instances> 
    10141010        </layer> 
  • branches/map_loading_change/game/maps/map2_agents.yaml

    r559 r560  
    1919    ObjectType: "ShantyDoor" 
    2020    Position: [-2.0, 6.0, 0.0] 
     21    Rotation: 0 
    2122    TargetMap: "Mall" 
    2223    TargetPosition: [5.0, 5.0] 
  • branches/map_loading_change/game/maps/map_agents.yaml

    r559 r560  
    1414#   along with PARPG.  If not, see <http://www.gnu.org/licenses/>. 
    1515--- 
    16 Dirty_Old_Crate: 
     16DirtyOldCrate: 
    1717    ViewName: "A dirty old crate" 
    1818    RealName: "A dirty old crate" 
     
    2020    Text: "A crate that is covered in grime and dirt. There doesn&apos;t seem to be anything remarkable about it." 
    2121    Position: [-2.0, -11.0, 0.0] 
     22    Rotation: 0 
    2223--- 
    2324ShantyDoor: 
     
    2627    ObjectType: "ShantyDoor" 
    2728    Position: [-6.0, -13.0, 0.0] 
     29    Rotation: 0 
    2830    TargetMap: "Farm" 
    2931    TargetPosition: [10.0, 10.0] 
    3032--- 
    3133Footlocker: 
    32     ViewName: "A dirty old crate" 
    33     RealName: "A dirty old crate" 
    34     ObjectType: "WoodenCrate" 
     34    ViewName: "Footlocker" 
     35    RealName: "Footlocker" 
     36    ObjectType: "Footlocker" 
    3537    Position: [-9.0, 0.0, 0.0] 
     38    Rotation: 255 
  • branches/map_loading_change/game/scripts/gamemap.py

    r559 r560  
    8080        self.map = loadMapFile(filename, self.engine, self.model) 
    8181        self.agent_layer = self.map.getLayer('ObjectLayer') 
    82         self.top_layer = self.map.getLayer('TopLayer') 
    83          
    84         #find out if a PlayerCharacter instance was created when the map was loaded 
    85         found = False 
    86         inst = None 
    87         for inst in self.agent_layer.getInstances(): 
    88             if inst.getId() == "PC": 
    89                 found = True 
    90                 break 
    91                  
    92         #If there is not a PlayerCharacter instance created yet than we construct the PlayerCharacter 
    93         #instance from what we have saved in the PlayerCharacter Game Object 
    94         if not found: 
    95             x = float(self.model.target_position[0]) 
    96             y = float(self.model.target_position[1]) 
    97             z = 0 
    98             pc_obj = self.fife_model.getObject("player", "PARPG") 
    99             inst = self.agent_layer.createInstance(pc_obj, \ 
    100                                             fife.ExactModelCoordinate( 
    101                                                                       x, 
    102                                                                       y, 
    103                                                                       z), 
    104                                             "PC") 
    105             fife.InstanceVisual.create(inst) 
    106         #If the PlayerCharacter instance exists already then make sure it's set to correct 
    107         #location for this new map 
    108         elif self.model.target_position is not None: 
    109             pos = self.model.target_position 
    110             coord = fife.DoublePoint3D(float(pos[0]), float(pos[1]), 0) 
    111             location = fife.Location(self.agent_layer) 
    112             location.setMapCoordinates(coord) 
    113             inst.setLocation(location) 
    114         #else we are loading the first map and the PlayerCharacter position were set by 
    115         #the coordinates in the Map file 
     82        self.top_layer = self.map.getLayer('TopLayer')       
    11683             
    11784        # it's possible there's no transition layer 
     
    166133        # Update gamestate.PlayerCharacter 
    167134        self.model.game_state.PlayerCharacter.behaviour.onNewMap(self.agent_layer) 
    168  
    169         # actually this is real easy, we just have to 
    170         # attach the main camera to the PlayerCharacter, if a camera 
    171         # was already used, we simply recycle it.  
    172         if self.cameras[self.my_cam_id].getAttached() == None: 
    173             self.cameras[self.my_cam_id].attach(self.model.game_state. 
    174                                                 PlayerCharacter.behaviour.agent) 
     135        self.cameras[self.my_cam_id].attach(self.model.game_state. 
     136                                            PlayerCharacter.behaviour.agent) 
    175137 
    176138    def toggleRenderer(self, r_name): 
  • branches/map_loading_change/game/scripts/gamemodel.py

    r559 r560  
    2222from gamestate import GameState 
    2323from objects import createObject 
     24from objects.composed import CarryableItem 
    2425from gamemap import GameMap 
    2526from fife import fife 
    2627from common.utils import locateFiles 
     28from common.utils import parseBool 
     29from inventory import Inventory 
    2730try: 
    2831    import xml.etree.cElementTree as ElementTree 
     
    6063        self.agents["all"] = {} 
    6164        self.engine = engine 
     65        self.fife_model = engine.getModel() 
    6266        self.maps_file = "maps/maps.yaml" 
    6367        self.all_agents_file = "maps/all_agents.yaml" 
    6468        self.object_db_file = "objects/ObjectDatabase.yaml" 
    6569        self.agents_directory = "objects/" 
     70        self.dialogues_directory = "dialogue" 
     71        self.dialogues = {} 
    6672        self.agent_import_files = {} 
    6773        self.settings = settings 
     
    100106        """TODO: Change when we use other and or more classes  
    101107        for inventory objects""" 
    102         from objects.composed import CarryableItem 
    103108        info = {} 
    104109        info.update(attributes) 
    105110        info.update(extra) 
    106         ID = info.pop("id") 
     111        ID = info.pop("id") if info.has_key("id") else info.pop("ID") 
     112        index = info.pop("index") if info.has_key("index") else None 
     113        slot = info.pop("slot") if info.has_key("slot") else None 
    107114         
    108115        obj = CarryableItem(ID = ID, **info) 
    109116        #obj = createObject(attributes, extra) 
    110         container.placeItem(obj) 
     117        if slot: 
     118            container.moveItemToSlot(obj, slot) 
     119        else: 
     120            container.placeItem(obj, index) 
    111121         
    112122    def save(self, path, filename): 
     
    166176        # In these cases we need a target position 
    167177          
    168     def teleport(self, position): 
    169         """Called when a door is used that moves a player to a new 
    170            location on the same map. the setting of position may want 
    171            to be created as its own method down the road. 
    172            @type position: String Tuple 
    173            @param position: X,Y coordinates passed from engine.changeMap 
    174            @return: fife.Location""" 
     178    def teleport(self, agent, position): 
     179        """Called when a an agent is moved instantly to a new position.  
     180        The setting of position may wan to be created as its own method down the road. 
     181        @type position: String Tuple 
     182        @param position: X,Y coordinates passed from engine.changeMap 
     183        @return: fife.Location""" 
    175184        print position 
    176185        coord = fife.DoublePoint3D(float(position[0]), float(position[1]), 0) 
    177186        location = fife.Location(self.active_map.agent_layer) 
    178187        location.setMapCoordinates(coord) 
    179         self.game_state.PlayerCharacter.teleport(location) 
    180                  
     188        agent.teleport(location)          
     189                
    181190    def getObjectAtCoords(self, coords): 
    182191        """Get the object which is at the given coords 
    183             @type coords: fife.Screenpoint 
    184             @param coords: Coordinates where to check for an object 
    185             @rtype: fife.Object 
    186             @return: An object or None""" 
     192        @type coords: fife.Screenpoint 
     193        @param coords: Coordinates where to check for an object 
     194        @rtype: fife.Object 
     195        @return: An object or None""" 
    187196        instances = self.active_map.cameras[ 
    188197                                            self.active_map.my_cam_id].\ 
     
    247256 
    248257        self.agents[namespace].update(agent) 
    249         ObjectModel = "" 
     258        object_model = "" 
    250259        agent_values = agent.values()[0] 
    251260        if agent_values.has_key("ObjectModel"):  
    252             ObjectModel =  agent_values["ObjectModel"] 
    253         else: 
    254             ObjectModel = self.object_db[agent_values["ObjectType"]]["gfx"] 
    255         import_file = self.agent_import_files[ObjectModel] 
     261            object_model =  agent_values["ObjectModel"] 
     262        else: 
     263            object_model = self.object_db[agent_values["ObjectType"]]["gfx"] 
     264        import_file = self.agent_import_files[object_model] 
    256265        loadImportFile(import_file, self.engine) 
    257266         
     
    274283        ret_dict = self.agents[map_name] 
    275284        for agent_name, agent_value in self.agents["all"].iteritems(): 
    276             if agent_value["GameMap"] == map_name: 
     285            if agent_value["Map"] == map_name: 
    277286                ret_dict[agent_name] = agent_value 
    278287        return ret_dict 
    279288                 
     289    def getAgentsOfActiveMap(self): 
     290        """Returns the agents that are on active map 
     291        @return: A dictionary with the agents of the map 
     292        """ 
     293        return self.getAgentsOfMap(self.active_map.map.getId()) 
     294 
    280295    def clearAgents(self): 
    281296        """Resets the agents dictionary""" 
     
    308323            self.setActiveMap(map_name) 
    309324 
     325    def placeAgents(self): 
     326        """Places the current maps agents 
     327        """ 
     328        if not self.active_map: 
     329            return 
     330        agents = self.getAgentsOfMap(self.game_state.current_map_name) 
     331        for agent in agents: 
     332            if agent == "PlayerCharacter": 
     333                continue 
     334            if self.active_map.agent_layer.getInstances(agent): 
     335                continue 
     336             
     337            object_type = agents[agent]["ObjectType"] 
     338            object_id = agents[agent]["ObjectModel"] \ 
     339                                    if agents[agent].has_key("ObjectModel") \ 
     340                                    else None 
     341            if object_id == None: 
     342                object_id = self.object_db[object_type]["gfx"] 
     343            map_obj = self.fife_model.getObject(str(object_id), "PARPG") 
     344            if not map_obj: 
     345                print ''.join(['Object with inst_id=', str(object_id),  
     346                               ' ns=PARPG', \ 
     347                               ' could not be found. Omitting...']) 
     348                continue 
     349 
     350            x_pos = agents[agent]["Position"][0] 
     351            y_pos = agents[agent]["Position"][1] 
     352            z_pos = agents[agent]["Position"][2] \ 
     353                        if len(agents[agent]["Position"]) == 3 else 0.0 
     354            stack_pos = agents[agent]["Stackposition"] if \ 
     355                            agents[agent].has_key("StackPosition") \ 
     356                            else None 
     357            inst = self.active_map.agent_layer.\ 
     358                            createInstance(map_obj, 
     359                                           fife.ExactModelCoordinate(x_pos,  
     360                                                                     y_pos,  
     361                                                                     z_pos), 
     362                                           agent) 
     363 
     364            inst.setId(agent) 
     365            rotation = agents[agent]["Rotation"] 
     366            inst.setRotation(rotation) 
     367 
     368            fife.InstanceVisual.create(inst) 
     369            if (stack_pos): 
     370                inst.get2dGfxVisual().setStackPosition(int(stack_pos)) 
     371 
     372            if (map_obj.getAction('default')): 
     373                target = fife.Location(self.active_map.agent_layer) 
     374                inst.act('default', target, True) 
     375                 
     376            inst_dict = {} 
     377            inst_dict["type"] = object_type 
     378            inst_dict["id"] = agent 
     379            inst_dict["xpos"] = x_pos 
     380            inst_dict["ypos"] = y_pos 
     381            inst_dict["gfx"] = object_id 
     382            inst_dict["is_open"] = parseBool(agents[agent]["Open"]) \ 
     383                                    if agents[agent].has_key("Open") \ 
     384                                    else False 
     385            inst_dict["locked"] = parseBool(agents[agent]["Locked"]) \ 
     386                                    if agents[agent].has_key("Locked") \ 
     387                                    else False 
     388            inst_dict["name"] = agents[agent]["ViewName"] 
     389            inst_dict["real_name"] = agents[agent]["RealName"] \ 
     390                                        if agents[agent].has_key("RealName") \ 
     391                                        else agents[agent]["ViewName"] 
     392            inst_dict["text"] = agents[agent]["Text"] \ 
     393                                        if agents[agent].has_key("Text") \ 
     394                                        else None 
     395            if self.dialogues.has_key(agent): 
     396                inst_dict["dialogue"] = self.dialogues[agent] 
     397            inst_dict["target_map_name"] = agents[agent]["TargetMap"] \ 
     398                                            if agents[agent].\ 
     399                                                has_key("TargetMap") \ 
     400                                            else None 
     401            inst_dict["target_x"] = agents[agent]["TargetPosition"][0] \ 
     402                                        if agents[agent].\ 
     403                                            has_key("TargetPosition") \ 
     404                                        else None 
     405            inst_dict["target_y"] = agents[agent]["TargetPosition"][1] \ 
     406                                        if agents[agent].\ 
     407                                            has_key("TargetPosition") \ 
     408                                        else None 
     409            if agents[agent].has_key("Inventory"): 
     410                inventory = Inventory() 
     411                inventory_objs = agents[agent]["Inventory"] 
     412                for inventory_obj in inventory_objs: 
     413                    self.createInventoryObject(inventory, 
     414                                               inventory_obj  
     415                                               ) 
     416                inst_dict["inventory"] = inventory 
     417 
     418 
     419                             
     420            self.createMapObject(self.active_map.agent_layer, inst_dict, inst) 
     421 
     422    def placePC(self): 
     423        """Places the PlayerCharacter on the map""" 
     424        agent = self.agents["all"]["PlayerCharacter"] 
     425        inst_id = "PlayerCharacter" 
     426        object_type = agent["ObjectType"] 
     427        object_id = agent["ObjectModel"] \ 
     428                                if agent.has_key("ObjectModel") \ 
     429                                else None 
     430        if object_id == None: 
     431            object_id = self.object_db[object_type]["gfx"] 
     432        map_obj = self.fife_model.getObject(str(object_id), "PARPG") 
     433        if not map_obj: 
     434            print ''.join(['Object with inst_id=', str(object_id),  
     435                           ' ns=PARPG', \ 
     436                           ' could not be found. Omitting...']) 
     437 
     438        x_pos = agent["Position"][0] 
     439        y_pos = agent["Position"][1] 
     440        z_pos = agent["Position"][2] if len(agent["Position"]) == 3 else 0.0 
     441        stack_pos = agent["Stackposition"] if \ 
     442                        agent.has_key("StackPosition") \ 
     443                        else None 
     444        inst = self.active_map.agent_layer.\ 
     445                        createInstance(map_obj, 
     446                                       fife.ExactModelCoordinate(x_pos,  
     447                                                                 y_pos,  
     448                                                                 z_pos), 
     449                                       inst_id) 
     450 
     451        inst.setId(inst_id) 
     452        rotation = agent["Rotation"] 
     453        inst.setRotation(rotation) 
     454 
     455        fife.InstanceVisual.create(inst) 
     456        if (stack_pos): 
     457            inst.get2dGfxVisual().setStackPosition(int(stack_pos)) 
     458 
     459        if (map_obj.getAction('default')): 
     460            target = fife.Location(self.active_map.agent_layer) 
     461            inst.act('default', target, True) 
     462             
     463        inst_dict = {} 
     464        inst_dict["type"] = object_type 
     465        inst_dict["id"] = inst_id 
     466        inst_dict["xpos"] = x_pos 
     467        inst_dict["ypos"] = y_pos 
     468        inst_dict["gfx"] = object_id 
     469        inst_dict["is_open"] = parseBool(agent["Open"]) \ 
     470                                if agent.has_key("Open") \ 
     471                                else False 
     472        inst_dict["locked"] = parseBool(agent["Locked"]) \ 
     473                                if agent.has_key("Locked") \ 
     474                                else False 
     475        inst_dict["name"] = agent["ViewName"] 
     476        inst_dict["real_name"] = agent["RealName"] \ 
     477                                    if agent.has_key("RealName") \ 
     478                                    else agent["ViewName"] 
     479        inst_dict["text"] = agent["Text"] \ 
     480                                    if agent.has_key("Text") \ 
     481                                    else None 
     482        if self.dialogues.has_key(inst_id): 
     483            inst_dict["dialogue"] = self.dialogues[inst_id] 
     484        inst_dict["target_map_name"] = agent["TargetMap"] \ 
     485                                        if agent.\ 
     486                                            has_key("TargetMap") \ 
     487                                        else None 
     488        inst_dict["target_x"] = agent["TargetPosition"][0] \ 
     489                                    if agent.\ 
     490                                        has_key("TargetPosition") \ 
     491                                    else None 
     492        inst_dict["target_y"] = agent["TargetPosition"][1] \ 
     493                                    if agent.\ 
     494                                        has_key("TargetPosition") \ 
     495                                    else None 
     496        if agent.has_key("Inventory"): 
     497            inventory = Inventory() 
     498            inventory_objs = agent["Inventory"] 
     499            for inventory_obj in inventory_objs: 
     500                self.createInventoryObject(inventory, 
     501                                           inventory_obj  
     502                                           ) 
     503            inst_dict["inventory"] = inventory 
     504 
     505 
     506                     
     507        self.createMapObject(self.active_map.agent_layer, inst_dict, inst) 
     508         
    310509        # create the PlayerCharacter agent 
    311510        self.active_map.addPC() 
    312511        self.game_state.PlayerCharacter.start() 
    313  
     512                       
    314513    def changeMap(self, map_name, target_position): 
    315514        """Registers for a map change on the next pump(). 
     
    364563        if layer is not None: 
    365564            extra['agent_layer'] = layer 
    366         extra['controller'] = self 
    367565        attributes = self.checkAttributes(attributes) 
    368566         
     
    444642            self.game_state.PlayerCharacter.walk(position) 
    445643         
    446     def teleportPlayer(self, position): 
    447         """Code called when the player should teleport to another location 
     644    def teleportAgent(self, agent, position): 
     645        """Code called when an agent should teleport to another location 
    448646           @type position: fife.ScreenPoint 
    449647           @param position: Screen position to teleport to 
    450648           @return: None""" 
    451         self.game_state.PlayerCharacter.teleport(position) 
     649        agent.teleport(position) 
     650        self.agents[agent.ID]["Position"] = position 
    452651 
    453652    def readObjectDB(self): 
     
    468667            if root.tag == "object": 
    469668                self.agent_import_files[root.attrib["id"]] = xml_file 
     669     
     670    def getDialogues(self): 
     671        """Searches the dialogue directory for dialogues 
     672        """ 
     673        files = locateFiles("*.yaml", self.dialogues_directory) 
     674        for dialogue_file in files: 
     675            dialogue_file = os.path.relpath(dialogue_file).replace("\\", "/") 
     676            dialogues = yaml.load_all(file(dialogue_file, "r")) 
     677            for dialogue in dialogues: 
     678                self.dialogues[dialogue["NPC"]] = dialogue 
  • branches/map_loading_change/game/scripts/gamescenecontroller.py

    r559 r560  
    2424import os 
    2525from objects.action import ChangeMapAction, ExamineBoxAction, OpenBoxAction, \ 
    26                             UnlockBoxAction, LockBoxAction, TalkAction 
     26                           UnlockBoxAction, LockBoxAction, TalkAction 
    2727 
    2828class GameSceneController(ControllerBase): 
     
    143143            tmp_active_map = self.model.active_map 
    144144            instances = tmp_active_map.cameras[tmp_active_map.my_cam_id].\ 
    145                             getMatchingInstances(scr_point, \ 
     145                            getMatchingInstances(scr_point, 
    146146                                                 tmp_active_map.agent_layer) 
    147147            info = None 
     
    170170 
    171171    def handleCommands(self): 
     172        """Check if a command is to be executed 
     173        """ 
    172174        if self.model.map_change: 
    173             self.model.loadMap(self.model.target_map_name) 
    174             self.model.teleport(self.model.target_position) 
     175            player_agent = self.model.active_map.\ 
     176                                agent_layer.getInstance("PlayerCharacter") 
     177            self.model.active_map.agent_layer.deleteInstance(player_agent) 
     178            self.model.loadMap(self.model.target_map_name)       
     179            player_char = self.model.game_state.PlayerCharacter 
     180            self.model.game_state.PlayerCharacter = None 
     181            pc_agent = self.model.agents["all"]["PlayerCharacter"]  
     182            pc_agent["GameMap"] = self.model.target_map_name  
     183            pc_agent["Position"] = self.model.target_position 
     184            backpack = player_char.inventory.items["backpack"] 
     185            inventory = [] 
     186            for index, item in backpack.items.iteritems(): 
     187                item_dict = item.__dict__ 
     188                item.prepareStateForSaving(item_dict) 
     189                item_dict["index"] = index 
     190                item_dict["type"] = type(item).__name__  
     191                inventory.append(item_dict) 
     192            for key, slot in player_char.inventory.items.iteritems(): 
     193                if key == "ready" or key == "backpack": 
     194                    continue 
     195                elif len(slot.items) > 0: 
     196                    item = slot.items[0] 
     197                    item_dict = item.__dict__ 
     198                    item.prepareStateForSaving(item_dict) 
     199                    item_dict["slot"] = key                                 
     200                    item_dict["type"] = type(item).__name__  
     201                    inventory.append(item_dict) 
     202                     
     203            pc_agent["Inventory"] = inventory 
     204            self.model.placeAgents() 
     205            self.model.placePC() 
    175206            self.model.map_change = False 
    176207            # The PlayerCharacter has an inventory, and also some  
     
    192223        # TODO: work more on this when we get NPCData and HeroData straightened 
    193224        # out 
    194         npc = self.model.game_state.getObjectById(npc_info.ID, \ 
    195                                             self.model.game_state.current_map_name) 
     225        npc = self.model.game_state.getObjectById(npc_info.ID, 
     226                                            self.model.game_state.\ 
     227                                                current_map_name) 
    196228        self.model.game_state.PlayerCharacter.approach([npc.getLocation().\ 
    197                                      getLayerCoordinates().x, \ 
     229                                     getLayerCoordinates().x, 
    198230                                     npc.getLocation().\ 
    199                                      getLayerCoordinates().y], \ 
     231                                     getLayerCoordinates().y], 
    200232                                    TalkAction(self.model, self.view, npc)) 
    201233 
     
    208240        actions = [] 
    209241        # note: ALWAYS check NPC's first! 
    210         obj = self.model.game_state.getObjectById(obj_id, \ 
    211                                             self.model.game_state.current_map_name) 
     242        obj = self.model.game_state.\ 
     243                        getObjectById(obj_id, 
     244                                      self.model.game_state.current_map_name) 
    212245         
    213246        if obj is not None: 
     
    218251            else: 
    219252                actions.append(["Examine", "Examine", 
    220                                 self.model.game_state.PlayerCharacter.approach, [obj.X, obj.Y], \ 
     253                                self.model.game_state.PlayerCharacter.approach,  
     254                                [obj.X, obj.Y], 
    221255                                ExamineBoxAction(self.model, self.view,  
    222256                                                 obj.name, obj.text)]) 
     
    224258                if obj.trueAttr("door"): 
    225259                    actions.append(["Change Map", "Change Map", 
    226                        self.model.game_state.PlayerCharacter.approach, [obj.X, obj.Y], \ 
    227                             ChangeMapAction(self.model, self.view 
    228                                             , obj.target_map_name, 
    229                                 obj.target_map, obj.target_pos)]) 
     260                       self.model.game_state.PlayerCharacter.approach,  
     261                       [obj.X, obj.Y], 
     262                       ChangeMapAction(self.model, self.view, 
     263                                       obj.target_map_name, 
     264                                       obj.target_pos)]) 
    230265                # is it a container? 
    231266                if obj.trueAttr("container"): 
    232267                    actions.append(["Open", "Open",  
    233                                     self.model.game_state.PlayerCharacter.approach, \ 
     268                                    self.model.game_state.\ 
     269                                        PlayerCharacter.approach, 
    234270                                    [obj.X, obj.Y], 
    235271                                    OpenBoxAction(self.model, self.view, obj)]) 
    236272                    actions.append(["Unlock", "Unlock",  
    237                                     self.model.game_state.PlayerCharacter.approach, \ 
     273                                    self.model.game_state.\ 
     274                                        PlayerCharacter.approach, 
    238275                                    [obj.X, obj.Y], 
    239276                                    UnlockBoxAction(obj)]) 
    240277                    actions.append(["Lock", "Lock",  
    241                                     self.model.game_state.PlayerCharacter.approach, \ 
     278                                    self.model.game_state.\ 
     279                                        PlayerCharacter.approach, 
    242280                                    [obj.X, obj.Y], 
    243281                                    LockBoxAction(obj)]) 
     
    270308        # uncomment to instrument 
    271309        # t0 = time.time() 
    272         self.view.highlightFrontObject(self.last_mousecoords) 
    273         self.view.refreshTopLayerTransparencies() 
     310        if self.model.active_map: 
     311            self.view.highlightFrontObject(self.last_mousecoords) 
     312            self.view.refreshTopLayerTransparencies() 
    274313        self.handleCommands() 
    275314        # print "%05f" % (time.time()-t0,) 
  • branches/map_loading_change/game/scripts/gamesceneview.py

    r558 r560  
    6060        """Fade or unfade TopLayer instances if the PlayerCharacter  
    6161        is under them.""" 
     62        if not self.model.active_map: 
     63            return 
     64 
    6265        # get the PlayerCharacter's screen coordinates 
    6366        camera = self.model.active_map.cameras[self.model.active_map.my_cam_id] 
     
    9093        """Highlights the object that is at the  
    9194        current mouse coordinates"""         
     95        if not self.model.active_map: 
     96            return 
    9297        if mouse_coords: 
    9398            front_obj = self.model.getObjectAtCoords(mouse_coords) 
  • branches/map_loading_change/game/scripts/objects/action.py

    r556 r560  
    2424class ChangeMapAction(Action): 
    2525    """A change map scheduled""" 
    26     def __init__(self, model, view, target_map_name, target_map_file , target_pos): 
     26    def __init__(self, model, view, target_map_name, target_pos): 
    2727        """Initiates a change of the position of the character 
    2828           possibly flagging a new map to be loaded. 
     
    3333           @type target_map_name: String 
    3434           @param target_map_name: Target map id  
    35            @type target_map_file: String 
    36            @param target_map_file: Target map filename 
    3735           @type target_pos: Tuple 
    3836           @param target_pos: (X, Y) coordinates on the target map. 
     
    4341        self.target_pos = target_pos 
    4442        self.target_map_name = target_map_name 
    45         self.target_map_file = target_map_file 
    4643 
    4744    def execute(self): 
  • branches/map_loading_change/game/scripts/objects/actors.py

    r553 r560  
    4040        self.state = None 
    4141        self.speed = 0 
     42        self.idle_counter = 1 
    4243     
    4344    def attachToLayer(self, agent_ID): 
     
    6465        return self.agent.getLocation().getLayerCoordinates().y 
    6566         
     67    def onNewMap(self, layer): 
     68        """Sets the agent onto the new layer.""" 
     69        if self.agent is not None: 
     70            self.agent.removeActionListener(self) 
     71             
     72        self.agent = layer.getInstance(self.parent.ID) 
     73        self.agent.addActionListener(self) 
     74        self.state = _AGENT_STATE_NONE 
     75        self.idle_counter = 1 
     76     
     77    def idle(self): 
     78        """@return: None""" 
     79        self.state = _AGENT_STATE_IDLE 
     80        self.agent.act('stand', self.agent.getFacingLocation()) 
     81 
    6682    def onInstanceActionFinished(self, instance, action): 
    6783        pass 
     
    94110            self.idle_counter = 1 
    95111        else: 
    96             self.idle_counter += 1 
    97              
    98     def onNewMap(self, layer): 
    99         """Sets the agent onto the new layer.""" 
    100         if self.agent is not None: 
    101             self.agent.removeActionListener(self) 
    102              
    103         self.agent = layer.getInstance(self.parent.ID) 
    104         self.agent.addActionListener(self) 
    105         self.state = _AGENT_STATE_NONE 
    106         self.idle_counter = 1 
    107      
    108     def idle(self): 
    109         """@return: None""" 
    110         self.state = _AGENT_STATE_IDLE 
    111         self.agent.act('stand', self.agent.getFacingLocation()) 
     112            self.idle_counter += 1             
    112113 
    113114class PlayerCharacter (GameObject, Living, CharStats): 
     
    285286    """NPC class""" 
    286287    def __init__(self, ID, agent_layer=None, name='NPC', \ 
    287                  text = 'A nonplayer character', inventory = None, **kwargs): 
     288                 text = 'A nonplayer character', inventory = None,  
     289                 real_name = 'NPC', dialogue = None, **kwargs): 
    288290        # init game object 
    289         GameObject.__init__(self, ID, name=name, **kwargs) 
     291        GameObject.__init__(self, ID, name=name, real_name=real_name, **kwargs) 
    290292        Living.__init__(self, **kwargs) 
    291293        Scriptable.__init__(self, **kwargs) 
     
    305307        self.layer_id = agent_layer.getId() 
    306308        self.createBehaviour(agent_layer)         
    307         self.dialogue = kwargs.get('dialogue') 
     309        self.dialogue = dialogue 
    308310         
    309311    def prepareStateForSaving(self, state): 
     
    327329        return self.behaviour.agent.getLocation() 
    328330     
     331    def teleport(self, location): 
     332        """Teleports a NPC instantly to the given location. 
     333           @type location: fife.Location 
     334           @param location: Target coordinates for PC. 
     335           @return: None""" 
     336        self.state = _AGENT_STATE_IDLE 
     337        self.behaviour.nextAction = None  
     338        self.behaviour.agent.setLocation(location) 
     339 
    329340    def wander(self, location): 
    330341        """Nice slow movement for random walking. 
  • branches/map_loading_change/game/scripts/objects/base.py

    r553 r560  
    5656class DynamicObject (object): 
    5757    """A base class that only supports dynamic attributes functionality""" 
    58     def __init__ (self, name="Dynamic object", image=None, **kwargs): 
     58    def __init__ (self, name="Dynamic object", real_name="Dynamic object", image=None, **kwargs): 
    5959        """Initialise minimalistic set of data 
    6060           @type name: String 
     
    6363           @param name: Filename of image to use in inventory""" 
    6464        self.name = name 
     65        self.real_name = real_name 
    6566        self.image = image 
    6667 
     
    9798       first class (left to right) inherited by any game object.""" 
    9899    def __init__ (self, ID, gfx = None, xpos = 0.0, ypos = 0.0, map_id = None,  
    99                   blocking=True, name="Generic object", text="Item description", 
     100                  blocking=True, name="Generic object", real_name="Generic object", text="Item description", 
    100101                  desc="Detailed description", **kwargs): 
    101102        """Set the basic values that are shared by all game objects. 
     
    117118           @param desc: A long description of the item that is displayed when it is examined 
    118119           """ 
    119         DynamicObject.__init__(self, name, **kwargs) 
     120        DynamicObject.__init__(self, name, real_name, **kwargs) 
    120121        self.ID = ID 
    121122        self.gfx = gfx or {} 
  • branches/map_loading_change/game/scripts/objects/composed.py

    r553 r560  
    8282        Carryable.__init__(self,**kwargs) 
    8383 
     84    def prepareStateForSaving(self, state): 
     85        """Prepares state for saving 
     86        @type state: dictionary 
     87        @param state: State of the object   
     88        """ 
     89        del state["in_container"] 
     90         
    8491class Door(GameObject, Lockable, Scriptable, Trappable): 
    8592    """Composite class that can be used to create doors on a map.""" 
    86     def __init__ (self, target_map_name = 'my-map', target_map = 'map/map.xml', 
     93    def __init__ (self, target_map_name = 'my-map', 
    8794                  target_x = 0.0, target_y = 0.0, **kwargs): 
    8895        GameObject.__init__(self, **kwargs) 
     
    9299        self.is_door = True 
    93100        self.target_map_name = target_map_name 
    94         self.target_map = target_map 
    95101        self.target_pos = (target_x, target_y) 
    96102        self.blocking = True 
  • branches/map_loading_change/game/scripts/objects/doors.py

    r477 r560  
    1818"""Containes classes defining concrete door game objects.""" 
    1919 
    20 __all__ = ["ShantyDoor",] 
     20__all__ = ["ShantyDoor", ] 
    2121 
    2222from composed import Door 
     
    2525    def __init__ (self, ID, name = 'Shanty Door', text = 'A door', 
    2626                   gfx = 'shanty-door', target_map_name = 'my-map', 
    27                    target_map = 'map.xml', target_x = 0.0, 
    28                    target_y = 0.0, **kwargs): 
     27                   target_x = 0.0, target_y = 0.0, **kwargs): 
    2928        Door.__init__(self, ID = ID, name = name, text = text, gfx = gfx, 
    3029                      target_map_name = target_map_name, 
    31                       target_map = target_map, target_x = target_x, 
     30                      target_x = target_x, 
    3231                      target_y = target_y, **kwargs) 
  • branches/map_loading_change/game/scripts/parpg.py

    r559 r560  
    107107        self.model.all_agents_file = self._setting.get("PARPG", "AllAgentsFile") 
    108108        self.model.readAllAgents() 
     109        self.model.dialogues_directory = self._setting.get("PARPG",  
     110                                                           "DialoguesDirectory") 
     111        self.model.getDialogues() 
    109112        self.view = gamesceneview.GameSceneView(self.engine, self.model) 
    110113        self.controller = gamescenecontroller.GameSceneController(self.engine,  
     
    117120                                            self.model) 
    118121        self.model.loadMap(str(self._setting.get("PARPG", "Map"))) 
     122        self.model.placeAgents() 
     123        self.model.placePC() 
    119124        pychan.init(self.engine, debug = True) 
    120125 
  • branches/map_loading_change/game/settings-dist.xml

    r559 r560  
    2828        <Setting name="AllAgentsFile" type = "str">maps/all_agents.yaml</Setting> 
    2929        <Setting name="AgentsDirectory" type="str">objects/</Setting> 
     30        <Setting name="DialoguesDirectory" type="str">dialogue/</Setting> 
    3031        <Setting name="PCSpeed" type="int">3</Setting> 
    3132   </Module> 
Note: See TracChangeset for help on using the changeset viewer.