home · contact · privacy
Greatly reduce FOV on drunkenness.
[plomrogue2] / plomrogue / things.py
index 67a3807fc939b88df98716d61392065d2511e496..a5d38897205282e51fb29ba23333c72fded7b02a 100644 (file)
@@ -145,6 +145,11 @@ class Thing_Bottle(Thing):
     symbol_hint = 'B'
     portable = True
     full = True
+    thing_char = '~'
+
+    def empty(self):
+        self.thing_char = '_'
+        self.full = False
 
 
 
@@ -158,7 +163,6 @@ class Thing_MusicPlayer(Thing):
     symbol_hint = 'R'
     commandable = True
     portable = True
-    playlist = []
     repeat = True
     next_song_start = datetime.datetime.now()
     playlist_index = 0
@@ -167,6 +171,7 @@ class Thing_MusicPlayer(Thing):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.next_song_start = datetime.datetime.now()
+        self.playlist = []
 
     def proceed(self):
         if (not self.playing) or len(self.playlist) == 0:
@@ -250,6 +255,30 @@ class Thing_MusicPlayer(Thing):
 
 
 
+class Thing_BottleDeposit(Thing):
+    bottle_counter = 0
+    symbol_hint = 'O'
+
+    def proceed(self):
+        if self.bottle_counter >= 3:
+            self.bottle_counter = 0
+            t = self.game.thing_types['MusicPlayer'](self.game,
+                                                     position=self.position)
+            self.game.things += [t]
+            self.sound('BOTTLE DEPOSITOR',
+                       'here is a gift as a reward for ecological consciousness –'
+                       'use "command thing" on it to learn more!')
+            self.game.changed = True
+
+    def accept(self):
+        self.bottle_counter += 1
+        self.sound('BOTTLE DEPOSITOR',
+                   'thanks for this empty bottle – deposit %s more for a gift!' %
+                   (3 - self.bottle_counter))
+
+
+
+
 class ThingAnimate(Thing):
     blocking = True
     drunk = 0
@@ -305,8 +334,9 @@ class ThingAnimate(Thing):
         if self._fov:
             return self._fov
         fov_map_class = self.game.map_geometry.fov_map_class
+        fov_radius = 3 if self.drunk > 0 else 12
         self._fov = fov_map_class(self.game.things, self.game.maps, self.position,
-                                  12, self.game.get_map)
+                                  fov_radius, self.game.get_map)
         return self._fov
 
     def fov_test(self, big_yx, little_yx):