X-Git-Url: https://harishankar.org/repos/?p=butaba-adventures.git;a=blobdiff_plain;f=maingame.py;h=431d44dd4d6fb6b1b9d14b3900fb67e04e5680b0;hp=02527db2d80bd5f2ffe3822f89a0b31f95e5580c;hb=4d50728c1454554fef2ad4841345d0c28101702d;hpb=0b36c3ccd4cb9cdf58fa5285366f023a8c931c61 diff --git a/maingame.py b/maingame.py index 02527db..431d44d 100644 --- a/maingame.py +++ b/maingame.py @@ -9,6 +9,7 @@ import butaba import utility import gameobjects import constants +import npcs class MainGame: @@ -56,6 +57,10 @@ class MainGame: self.img_butabaright = pygame.image.load (os.path.join ("sprite", "butaba-right.png")).convert () self.img_butabaright.set_colorkey (pygame.Color (0, 255, 0)) + # initialize NPC graphics + self.img_bulisa = pygame.image.load (os.path.join ("sprite", "bulisa.png")).convert () + self.img_bulisa.set_colorkey (pygame.Color (0, 255, 0)) + # set level data self.setup_levels () # set current level and position of our character @@ -80,6 +85,8 @@ class MainGame: potion2 = gameobjects.HealthPotion (5, 2, self.img_redpotion) potion3 = gameobjects.HealthPotion (5, 2, self.img_redpotion) + npc_bulisa = npcs.Bulisa (4, 3, self.img_bulisa, None) + chest1.objects = [ gold50, gold25, potion2, potion3, key2, gold10 ] # create the levels @@ -89,7 +96,7 @@ class MainGame: self.level1w = level.Level (cPickle.load (file ("levels/level1w.dat"))) self.level1e = level.Level (cPickle.load (file ("levels/level1e.dat")), - objects = [ key1, potion, chest2 ]) + objects = [ key1, potion, chest2 ], npcs = [ npc_bulisa ]) # set up the interaction between levels self.level1.levelright = self.level1e @@ -106,6 +113,8 @@ class MainGame: self.draw_level_background (self.currentlevel) # draw level objects self.draw_level_objects (self.currentlevel) + # draw the NPCs in the level + self.draw_level_npcs (self.currentlevel) # draw our character self.draw_butaba () # display the character's inventory @@ -221,8 +230,24 @@ class MainGame: notblock = self.interact_objects (level, objs) + # get npc at current location + current_npc = None + for npc in level.npcs: + if npc.row == row and npc.col == col: + current_npc = npc + break + + # npcs always block the tile. So return false if there is an NPC + # at the location + if current_npc is not None: + self.interact_npc (current_npc) + return False + return notblock + # interaction with npcs + def interact_npc (self, npc): + pass # interaction with objects def interact_objects (self, container, objs): @@ -236,7 +261,7 @@ class MainGame: notblock = False # if object can be picked up ask if obj.can_pickup is True: - ans = utility.ask_question (self.screen, "Found %s." % obj.text, ["Pick up", "Use", "Ignore"], self.img_menu) + ans = utility.ask_question (self.screen, "Found %s." % obj.text, ["Pick up", obj.use_str, "Ignore"], self.img_menu) # if the answer is "pick up" if ans == 1: self.pickup_object (container, obj) @@ -245,12 +270,20 @@ class MainGame: self.use_object (container, obj) # if it cannot be picked up, try to use it anyway else: - ans = utility.ask_question (self.screen, "Found %s." % obj.text, ["Use", "Ignore"], self.img_menu) + ans = utility.ask_question (self.screen, "Found %s." % obj.text, [obj.use_str, "Ignore"], self.img_menu) if ans == 1: self.use_object (container, obj) return notblock + # transfer an object from one container to another + # container must have an objects list + def transfer_object (self, source, obj, dest): + # remove object from source + source.objects.remove (obj) + # add object to destination + dest.objects.append (obj) + # picking up an object def pickup_object (self, container, obj): # only if object can be picked up, pick it up or use it @@ -260,9 +293,7 @@ class MainGame: self.status_message = "Cannot pick up item. Inventory full" else: # add item to inventory - self.butaba.objects.append (obj) - # remove from container - container.objects.remove (obj) + self.transfer_object (container, obj, self.butaba) self.status_message = "You picked up %s" % obj.text @@ -452,3 +483,10 @@ class MainGame: for obj in level.objects: if obj.image is not None: self.screen.blit (obj.image, (obj.col*48, obj.row*48)) + + + # Draw the NPCs in the level + def draw_level_npcs (self, level): + for npc in level.npcs: + if npc.image is not None: + self.screen.blit (npc.image, (npc.col*48, npc.row*48))