Mercurial > fujo
changeset 92:0a4ad5e48fb5
add confusion
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 05 Jan 2014 23:50:15 +0100 |
| parents | ac80417b0ead |
| children | d9f826cdf023 |
| files | fujo/behaviors.py fujo/game.py fujo/items.py fujo/level.py fujo/mobs.py |
| diffstat | 5 files changed, 52 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/fujo/behaviors.py Sun Jan 05 23:33:30 2014 +0100 +++ b/fujo/behaviors.py Sun Jan 05 23:50:15 2014 +0100 @@ -41,9 +41,43 @@ if possible: random.shuffle(possible) d = possible[0] - self.mob.do_walk(level, d) + self.mob.do_walk(level, d) + return True + + +@Behavior.register +class Confused(Wander): + priority = 200 + + def __init__(self, confused=None): + super(Confused, self).__init__() + self.confused = confused + + def act(self, level): + self.mob.label('???') + self.confused -= 1 + if self.confused <= 0: + self.mob.del_behavior(self) + return super(Confused, self).act(level) + + def item_picked(self, level, thing): return True + def mob_attacked(self, level, mob, damage): + return True + + def wound(self, damage): + self.mob.del_behavior(self) + + def save(self): + data = super(Confused, self).save() + data['confused'] = self.confused + return data + + def load(self, data): + super(Confused, self).load(data) + self.confused = data['confused'] + @Behavior.register class Hide(Behavior): @@ -84,11 +118,9 @@ return True def wound(self, damage): - self.mob.label('?!') self.mob.del_behavior(self) def item_thrown(self, level, item): - self.mob.label('?!') self.mob.del_behavior(self) def item_picked(self, level, thing): @@ -155,6 +187,7 @@ super(Excitable, self).load(data) self.raging = data['raging'] + @Behavior.register class Coward(Behavior): def mob_attacked(self, level, mob, damage): @@ -202,8 +235,13 @@ @Behavior.register +class Hunting(Rage): + priority = 0 + + +@Behavior.register class Panic(Behavior): - priority = 101 + priority = 102 def __init__(self, afraid=None): super(Panic, self).__init__()
--- a/fujo/game.py Sun Jan 05 23:33:30 2014 +0100 +++ b/fujo/game.py Sun Jan 05 23:50:15 2014 +0100 @@ -14,7 +14,7 @@ def __init__(self): self.display = display.Display() self.status_window = window.Message( - (-1, self.display.size[1] - 27, 272, 32), []) + (1, self.display.size[1] - 29, 272, 32), []) self.display.windows.add(self.status_window) self.player = None
--- a/fujo/items.py Sun Jan 05 23:33:30 2014 +0100 +++ b/fujo/items.py Sun Jan 05 23:50:15 2014 +0100 @@ -256,6 +256,7 @@ def throw(self, level, pos, mob, steps, direction): super(TeleportSpell, self).throw(level, pos, mob, steps, direction) if mob: + mob.add_behavior(behaviors.Confused(10)) for pos in level.empty: if not level.is_blocked(pos): break @@ -278,9 +279,10 @@ def throw(self, level, pos, mob, steps, direction): super(KnowledgeSpell, self).throw(level, pos, mob, steps, direction) if mob: - return - for row in level.explored: - row[:] = [1] * len(row) + mob.add_behavior(behaviors.Confused(10)) + else: + for row in level.explored: + row[:] = [1] * len(row) @Item.register class SoothingSpell(Spell):
--- a/fujo/level.py Sun Jan 05 23:33:30 2014 +0100 +++ b/fujo/level.py Sun Jan 05 23:50:15 2014 +0100 @@ -131,7 +131,8 @@ mob = self.mobs.get(pos) if mob == self: mob = None - mob.item_thrown(self, item) + if mob: + mob.item_thrown(self, item) item.throw(self, pos, mob, steps, direction) def populate(self):
--- a/fujo/mobs.py Sun Jan 05 23:33:30 2014 +0100 +++ b/fujo/mobs.py Sun Jan 05 23:50:15 2014 +0100 @@ -230,7 +230,7 @@ def init_behaviors(self): self.add_behavior(behaviors.Coward()) self.add_behavior(behaviors.Hostile()) - self.add_behavior(behaviors.Rage()) + self.add_behavior(behaviors.Hunting()) @Mob.register @@ -293,4 +293,4 @@ def init_behaviors(self): self.add_behavior(behaviors.Sleep(random.randint(0, 5))) self.add_behavior(behaviors.Hostile()) - self.add_behavior(behaviors.Rage()) + self.add_behavior(behaviors.Hunting())
