Changeset 130


Ignore:
Timestamp:
06/13/09 07:43:28 (10 years ago)
Author:
maximinus_parpg
Message:

Added new functionality.
Right-click on a door to go to a new map.

Location:
trunk/PARPG
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/PARPG/maps/map_objects.xml

    r129 r130  
    2121            carry="1" contain="0" text="An old battery"></object> 
    2222    <!-- There can be a number of doors, which serve as transition triggers --> 
    23     <object display="True" gfx="shanty-door" xpos="-2.0" ypos="6.0" 
    24             id="sh-door" carry="0" contain="0" text="Door"></object> 
     23    <door display="True" gfx="shanty-door" xpos="-2.0" ypos="6.0" 
     24          id="sh-door" carry="0" contain="0" text="Door" map="map2"></door> 
    2525    <!-- There can be any number of 'teleport tiles', or tiles that move the 
    2626         PC around (perhaps the map name could be stored here) --> 
  • trunk/PARPG/scripts/engine.py

    r128 r130  
    3434# of the original mapfile. 
    3535 
     36class MapDoor: 
     37    """A MapDoor is an item that when clicked transports the player to 
     38       another map""" 
     39    def __init__(self, name, new_map): 
     40        self.id = name 
     41        self.map = "maps/"+new_map+".xml" 
     42 
    3643class Engine: 
    3744    """Engine holds the logic for the game 
     
    4653        self.npcs = [] 
    4754        self.objects = [] 
     55        self.doors = [] 
    4856        self.tele_tiles = [] 
    4957 
     
    8189        self.addObjects(cur_handler.objects) 
    8290        self.addTeleTiles(cur_handler.tele_tiles) 
     91        self.addDoors(cur_handler.doors) 
    8392        return True 
    8493 
     
    118127            self.tele_tiles.append(TeleTile(i[0], i[1], i[2], layer)) 
    119128 
     129    def addDoors(self, doors): 
     130        """Add all the doors to the map as well 
     131           As an object they have already been added""" 
     132        for i in doors: 
     133            self.doors.append(MapDoor(i[0], i[1])) 
     134 
    120135    def objectActive(self, ident): 
    121136        """Given the objects ID, pass back the object if it is active, 
     
    142157                # keep it simple for now 
    143158                actions.append(("Talk",None)) 
    144                 actions.append(("Attack",None)) 
     159                actions.append(("Attack",None))      
     160        # is it a door? 
     161        for i in self.doors: 
     162            if(obj_id == i.id): 
     163                # load the new map 
     164                self.loadMap(str(i.map)) 
    145165        # is it in our objects? 
    146166        for i in self.objects: 
  • trunk/PARPG/scripts/objLoader.py

    r128 r130  
    2828        self.objects = [] 
    2929        self.npcs = [] 
     30        self.doors = [] 
    3031        self.tele_tiles = [] 
    3132     
     
    3435        return make_parser() 
    3536     
     37    def getObject(self, attrs): 
     38        """Grab the object details from the XML""" 
     39        try: 
     40            display = attrs.getValue("display") 
     41            if(display == "True"): 
     42                xpos = attrs.getValue("xpos") 
     43                ypos = attrs.getValue("ypos") 
     44            else: 
     45                owner = attrs.getValue("owner") 
     46            gfx = attrs.getValue("gfx") 
     47            ident = attrs.getValue("id") 
     48            text = attrs.getValue("text") 
     49            contain = attrs.getValue("contain") 
     50            carry = attrs.getValue("carry") 
     51        except(KeyError): 
     52            sys.stderr.write("Error: Data missing in object definition\n") 
     53            sys.exit(False) 
     54        # now we have the data, save it for later 
     55        if(display == "True"): 
     56            self.objects.append([True, xpos, ypos, gfx, ident, 
     57                                 text, contain, carry]) 
     58        else: 
     59            self.objects.append([False, gfx, ident, text, 
     60                                 owner, contain, carry]) 
     61   
    3662    def startElement(self, name, attrs): 
    3763        """Called every time we meet a new element in the XML file""" 
     
    6692        elif(name == "object"): 
    6793            # same old same old 
     94            self.getObject(attrs) 
     95        elif(name == "door"): 
     96            # firstly, add the object 
     97            self.getObject(attrs) 
     98            # then save the other data 
    6899            try: 
    69                 display = attrs.getValue("display") 
    70                 if(display == "True"): 
    71                     xpos = attrs.getValue("xpos") 
    72                     ypos = attrs.getValue("ypos") 
    73                 else: 
    74                     owner = attrs.getValue("owner") 
    75                 gfx = attrs.getValue("gfx") 
    76                 ident = attrs.getValue("id") 
    77                 text = attrs.getValue("text") 
    78                 contain = attrs.getValue("contain") 
    79                 carry = attrs.getValue("carry") 
     100                new_map = attrs.getValue("map") 
    80101            except(KeyError): 
    81                 sys.stderr.write("Error: Data missing in object definition\n") 
     102                sys.stderr.write("Error: Door has no map!\n") 
    82103                sys.exit(False) 
    83             # now we have the data, save it for later 
    84             if(display == "True"): 
    85                 self.objects.append([True, xpos, ypos, gfx, ident, 
    86                                      text, contain, carry]) 
    87             else: 
    88                 self.objects.append([False, gfx, ident, text, 
    89                                      owner, contain, carry]) 
    90         elif name == "tele_tile": 
     104            # format is [id,map_name] 
     105            self.doors.append([self.objects[-1][4],new_map]) 
     106        elif(name == "tele_tile"): 
    91107            try: 
    92108                target = attrs.getValue("target") 
     
    97113            except(KeyError): 
    98114                sys.stderr.write("Error: Data missing in \ 
    99                         tele_tile definition\n") 
     115                                  tele_tile definition\n") 
    100116                sys.exit(False) 
    101117            self.tele_tiles.append([target, tuple([int(xpos), int(ypos)]), \ 
Note: See TracChangeset for help on using the changeset viewer.