changeset 549:b7f912705adb

Fishmonger now mongers fish.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 10 Apr 2011 01:14:14 +0200
parents 366e58e8d057
children ebd51cb1d672
files data/game.json data/levels/fishmonger_house.json data/npcs/fishmonger.json skaapsteker/levelscene.py skaapsteker/sprites/base.py skaapsteker/sprites/enemies.py skaapsteker/sprites/npcs.py
diffstat 7 files changed, 38 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/data/game.json	Sun Apr 10 01:09:37 2011 +0200
+++ b/data/game.json	Sun Apr 10 01:14:14 2011 +0200
@@ -19,6 +19,7 @@
         "masks_destroyed": false,
         "fire_started_on_road": false,
         "cannon_destroyed": false,
+        "fishmonger_demons_killed": 0,
         "all_fishmonger_demons_dead": false,
         "kanedas_agreement_disrupted": false,
         "final_battle_lost": false,
--- a/data/levels/fishmonger_house.json	Sun Apr 10 01:09:37 2011 +0200
+++ b/data/levels/fishmonger_house.json	Sun Apr 10 01:14:14 2011 +0200
@@ -21,21 +21,21 @@
         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
     ],
     "enemies": [
-        {"type": "PatrollingOni", "pos": [2, 7], "direction": "right" },
-        {"type": "PatrollingOni", "pos": [45, 7], "direction": "right" },
-        {"type": "PatrollingOni", "pos": [37, 10], "direction": "left" },
-        {"type": "FlyingOni", "pos": [8, 2], "direction": "left" },
-        {"type": "FlyingOni", "pos": [20, 2], "direction": "right" },
-        {"type": "FlyingOni", "pos": [27, 2], "direction": "left" },
-        {"type": "FlyingOni", "pos": [39, 2], "direction": "right" },
-        {"type": "RedOni", "pos": [6, 5], "direction": "left" },
-        {"type": "RedOni", "pos": [5, 9], "direction": "right" },
-        {"type": "RedOni", "pos": [14, 3], "direction": "left" },
-        {"type": "RedOni", "pos": [15, 7], "direction": "right" },
-        {"type": "RedOni", "pos": [33, 3], "direction": "left" },
-        {"type": "RedOni", "pos": [32, 7], "direction": "right" },
-        {"type": "RedOni", "pos": [41, 5], "direction": "left" },
-        {"type": "RedOni", "pos": [42, 9], "direction": "right" }
+        {"type": "PatrollingOni", "pos": [2, 7], "direction": "right", "fishmonger_count": true },
+        {"type": "PatrollingOni", "pos": [45, 7], "direction": "right", "fishmonger_count": true },
+        {"type": "PatrollingOni", "pos": [37, 10], "direction": "left", "fishmonger_count": true },
+        {"type": "FlyingOni", "pos": [8, 2], "direction": "left", "fishmonger_count": true },
+        {"type": "FlyingOni", "pos": [20, 2], "direction": "right", "fishmonger_count": true },
+        {"type": "FlyingOni", "pos": [27, 2], "direction": "left", "fishmonger_count": true },
+        {"type": "FlyingOni", "pos": [39, 2], "direction": "right", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [6, 5], "direction": "left", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [5, 9], "direction": "right", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [14, 3], "direction": "left", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [15, 7], "direction": "right", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [33, 3], "direction": "left", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [32, 7], "direction": "right", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [41, 5], "direction": "left", "fishmonger_count": true },
+        {"type": "RedOni", "pos": [42, 9], "direction": "right", "fishmonger_count": true }
     ],
     "doorways": {
         "starting": {"type": "Doorway", "pos": [10, 10], "facing": "right", "leadsto": "market.to_fishmonger_house"}
--- a/data/npcs/fishmonger.json	Sun Apr 10 01:09:37 2011 +0200
+++ b/data/npcs/fishmonger.json	Sun Apr 10 01:14:14 2011 +0200
@@ -1,10 +1,12 @@
 {
     "start" : {
+        "text": "Help! I am beset by demons!",
         "events" : [
-            { "matches" : "world.missions.all_fishmonger_demons_dead", "next": "state.saved" }
+            { "matches" : "world.missions.fishmonger_demons_killed >= 15", "next": "state.saved" }
         ]
     },
     "saved" : {
+        "on_entry": "world.missions.all_fishmonger_demons_dead = True",
         "text" : "Thank the deities, I am saved! If you ever need some fish, my fox friend, I’m your man.",
         "auto_next": "state.salmon"
     },
@@ -13,5 +15,6 @@
         "auto_next": "state.happy"
     },
     "happy" : {
+        "on_entry": "drop_item('salmon')"
     }
 }
\ No newline at end of file
--- a/skaapsteker/levelscene.py	Sun Apr 10 01:09:37 2011 +0200
+++ b/skaapsteker/levelscene.py	Sun Apr 10 01:14:14 2011 +0200
@@ -13,7 +13,7 @@
 from . import physics
 from . import constants
 from . import data
-from .sprites import player
+from .sprites import player, base
 from .widgets.text import Text
 from .widgets.bubble import DialogueWidget, NotificationWidget
 
@@ -58,6 +58,9 @@
             self._tails[tail] = (grey_image, image)
 
         for sprite in self._level.sprites:
+            # XXX: NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO!
+            if isinstance(sprite, base.Monster):
+                sprite.world = game_state.world
             self._world.add(sprite)
         npcs_and_items = game_state.create_sprites(self._level.name)
         self._npcs = dict((s.name, s) for s in npcs_and_items if hasattr(s, 'dsm'))
--- a/skaapsteker/sprites/base.py	Sun Apr 10 01:09:37 2011 +0200
+++ b/skaapsteker/sprites/base.py	Sun Apr 10 01:14:14 2011 +0200
@@ -159,6 +159,9 @@
         self._done_attack = False
         self.setup(**opts)
 
+    def setup(self, fishmonger_count=False):
+        self.fishmonger_count = fishmonger_count
+
     def collided_player(self, player):
         self.start_attack(player)
 
@@ -212,6 +215,8 @@
         if self.health <= 0:
             AddSpriteEvent.post(Skeleton(self.rect.midbottom))
             self.kill()
+            if self.fishmonger_count:
+                self.world.missions.fishmonger_demons_killed += 1
 
 class PatrollingMonster(Monster):
     """Monster that collides with horizontal geography"""
@@ -276,6 +281,7 @@
 
     def setup(self, name, world, dsm, state, facing=None):
         self.name = name
+        self.world = world
         self.dsm = dialogue.DSM(name, world, dsm, state)
         self._me = getattr(world.npcs, self.name)
         self.facing = facing
--- a/skaapsteker/sprites/enemies.py	Sun Apr 10 01:09:37 2011 +0200
+++ b/skaapsteker/sprites/enemies.py	Sun Apr 10 01:14:14 2011 +0200
@@ -16,7 +16,8 @@
                 ('right', lambda x: transform.flip(x, True, False))),
                 }
 
-    def setup(self, direction):
+    def setup(self, direction, **opts):
+        super(RedOni, self).setup(**opts)
         self.facing = direction
 
     def start_attack(self, player):
@@ -43,8 +44,8 @@
 
     patrol_velocity = (0, 200)
 
-    def setup(self, direction):
-        PatrollingOni.setup(self, direction)
+    def setup(self, **opts):
+        super(PatrollingOni, self).setup(**opts)
         self.heading = 'up'
 
     def update(self):
--- a/skaapsteker/sprites/npcs.py	Sun Apr 10 01:09:37 2011 +0200
+++ b/skaapsteker/sprites/npcs.py	Sun Apr 10 01:14:14 2011 +0200
@@ -96,6 +96,10 @@
         ("standing", r"^.*_standing.png$"),
     ]
 
+    def setup(self, **opts):
+        super(FishMonger, self).setup(**opts)
+        self.world.missions.fishmonger_demons_killed = 0
+
 
 class Maneki(NPC):
     image_dir = 'sprites/maneki neko'