changeset 179:a7cdf8458edd

ichiro and hattori, plus stuff for querying npc state from the world
author Adrianna Pińska <adrianna.pinska@gmail.com>
date Wed, 06 Apr 2011 19:39:46 +0200
parents 164c30a7b776
children 7ccf365e28ea
files data/npcs/hattori.json data/npcs/ichiro.json skaapsteker/dialogue.py
diffstat 3 files changed, 96 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/npcs/hattori.json	Wed Apr 06 19:39:46 2011 +0200
@@ -0,0 +1,38 @@
+{
+    "start" : {
+        "text" : "Ichiro, there is nothing to fear. Uesugi will light the signal fire if they come close.",
+        "events" : [
+            { "matches" : "world.npc_is('ichiro', 'prepared')", "next": "state.wait" }
+        ]
+    },
+    "wait" : {
+        "text" : "There’s nothing more for us to do but sit and wait. Sasuke will arrive with our cannon in a while. We can’t take on the entire Hayashi clan without it.",
+        "events" : [
+            { "matches" : "world.npc_is('ichiro', 'sitting')", "next": "state.relax" }
+        ]
+    },
+    "relax" : {
+        "text" : "Relax! You’re with me, the most fearsome katana in the East. We’re not moving from this spot until we have to. Besides, I need to meditate.",
+        "events" : [
+            { "matches" : "world.npc_is('ichiro', 'but')", "next": "state.omm" }
+        ]
+    },
+    "omm" : {
+        "text" : "Ommmmm...",
+        "events" : [
+            { "matches" : "world.npc_is('ichiro', 'wakeup')", "next": "state.letsgo" }
+        ]
+    },
+    "letsgo" : {
+        "text" : "Ha- huh? Uesugi’s fire! Let’s go!",
+        "events" : [
+            { "matches" : "world.npc_is('ichiro', 'cannon')", "next": "state.attack" }
+        ]
+    },
+    "attack" : {
+        "text" : "It will have to catch up. Attack!",
+        "auto_next": "state.gone"
+    },
+    "gone" : {
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/npcs/ichiro.json	Wed Apr 06 19:39:46 2011 +0200
@@ -0,0 +1,46 @@
+{
+    "start" : {
+        "text" : "I’m telling you, Hattori. The Hayashi clan will arrive any minute now.",
+        "events" : [
+            { "matches" : "world.npc_is('hattori', 'start')", "next": "state.prepared" }
+        ]
+    },
+    "prepared" : {
+        "text" : "It doesn’t hurt to be prepared.",
+        "events" : [
+            { "matches" : "world.npc_is('hattori', 'wait')", "next": "state.sitting" }
+        ]
+    },
+    "sitting" : {
+        "text" : "I just don’t like sitting out in the open like this.",
+        "events" : [
+            { "matches" : "world.npc_is('hattori', 'relax')", "next": "state.but" }
+        ]
+    },
+    "but" : {
+        "text" : "But-",
+        "events" : [
+            { "matches" : "world.npc_is('hattori', 'omm')", "next": "state.sigh" }
+        ]
+    },
+    "sigh" : {
+        "text" : "Sigh.",
+        "events" : [
+            { "matches" : "world.fire_started()", "next": "state.wakeup" }
+        ]
+    },
+    "wakeup" : {
+        "text" : "Hattori, wake up! Look! Smoke coming over the rise.",
+        "events" : [
+            { "matches" : "world.npc_is('hattori', 'letsgo')", "next": "state.cannon" }
+        ]
+    },
+    "cannon" : {
+        "text" : "What about the cannon?",
+        "events" : [
+            { "matches" : "world.npc_is('hattori', 'attack')", "next": "state.gone" }
+        ]
+    },
+    "gone" : {
+    }
+}
--- a/skaapsteker/dialogue.py	Wed Apr 06 19:47:12 2011 +0200
+++ b/skaapsteker/dialogue.py	Wed Apr 06 19:39:46 2011 +0200
@@ -15,11 +15,12 @@
            Something to allow states to introspect the game state with.
        """
 
-    def __init__(self, json_filename, world):
+    def __init__(self, npc_name, world):
         self.world = world
+        world.npcs[npc_name] = self
         self.state = "start"
         self.states = AttrDict()
-        src = json.loads(data.load(json_filename).read())
+        src = json.loads(data.load('npcs/' + npc_name + '.json').read())
         for state, state_src in src.iteritems():
             pseudo_path = [json_filename, state]
             self.states[state] = DsmState(state, state_src, pseudo_path)
@@ -124,6 +125,10 @@
         self._fox_is_shapeshifted = False
         self._fox_is_disguised = False
 
+        self._fire_started = False
+
+        self.npcs = {}
+
     def fox_has_tea(self):
         return self._fox_has_tea
 
@@ -133,3 +138,8 @@
     def fox_is_disguised(self):
         return self._fox_is_disguised
 
+    def fire_started(self):
+        return self._fire_started
+
+    def npc_is(self, npc_name, state):
+        return self.npcs[npc_name].state == state