+class Thing_PsychedelicSpawner(ThingSpawner):
+ symbol_hint = 'P'
+ child_type = 'Psychedelic'
+
+
+
+class Thing_Bottle(Thing):
+ symbol_hint = 'B'
+ portable = True
+ full = True
+ thing_char = '~'
+ spinnable = True
+
+ def empty(self):
+ self.thing_char = '_'
+ self.full = False
+
+ def spin(self):
+ all_players = [t for t in self.game.things if t.type_ == 'Player']
+ # TODO: refactor with ThingPlayer.prepare_multiprocessible_fov_stencil
+ # and ThingPlayer.fov_test
+ fov_radius = 12
+ light_blockers = self.game.get_light_blockers()
+ obstacles = [t.position for t in self.game.things if t.blocks_light]
+ fov = FovMap(light_blockers, obstacles, self.game.maps,
+ self.position, fov_radius, self.game.get_map)
+ fov.init_terrain()
+ visible_players = []
+ for p in all_players:
+ test_position = fov.target_yx(p.position[0], p.position[1])
+ if fov.inside(test_position) and fov[test_position] == '.':
+ visible_players += [p]
+ if len(visible_players) == 0:
+ self.sound('BOTTLE', 'no visible players in spin range')
+ pick = random.choice(visible_players)
+ self.sound('BOTTLE', 'BOTTLE picks: ' + pick.name)
+
+
+
+class Thing_BottleSpawner(ThingSpawner):
+ child_type = 'Bottle'
+
+
+
+class Thing_Hat(Thing):
+ symbol_hint = 'H'
+ portable = True
+ design = ' +--+ ' + ' | | ' + '======'
+ spinnable = True
+
+ def spin(self):
+ new_design = ''
+ new_design += self.design[12]
+ new_design += self.design[13]
+ new_design += self.design[6]
+ new_design += self.design[7]
+ new_design += self.design[0]
+ new_design += self.design[1]
+ new_design += self.design[14]
+ new_design += self.design[15]
+ new_design += self.design[8]
+ new_design += self.design[9]
+ new_design += self.design[2]
+ new_design += self.design[3]
+ new_design += self.design[16]
+ new_design += self.design[17]
+ new_design += self.design[10]
+ new_design += self.design[11]
+ new_design += self.design[4]
+ new_design += self.design[5]
+ self.design = ''.join(new_design)
+
+
+
+class Thing_HatRemixer(Thing):
+ symbol_hint = 'H'
+
+ def accept(self, hat):
+ import string
+ new_design = ''
+ legal_chars = string.ascii_letters + string.digits + string.punctuation + ' '
+ for i in range(18):
+ new_design += random.choice(list(legal_chars))
+ hat.design = new_design
+ self.sound('HAT REMIXER', 'remixing a hat …')
+ self.game.changed = True
+ self.game.record_change(self.position, 'other')