blocks_sound, blocks_movement)
cmd_TERRAIN.argtypes = 'char string bool bool bool'
+def cmd_TERRAIN_TAG(game, character, tag):
+ if not character in game.terrains:
+ raise GameError('terrain does not exist: %s' % character)
+ game.terrains[character].tags.add(tag)
+cmd_TERRAIN_TAG.argtypes = 'char string'
+
def cmd_ALL(game, msg, connection_id):
speaker = game.get_player(connection_id)
if not speaker:
int(terrain.blocks_light),
int(terrain.blocks_sound),
int(terrain.blocks_movement)))
+ if len(terrain.tags) > 0:
+ for tag in terrain.tags:
+ write(f, 'TERRAIN_TAG %s %s' % (quote(terrain.character),
+ quote(tag)))
for big_yx in [yx for yx in self.maps if self.maps[yx].modified]:
for y, line in self.maps[big_yx].lines():
write(f, 'MAP_LINE %s %5s %s' % (big_yx, y, quote(line)))
self.blocks_light = blocks_light
self.blocks_sound = blocks_sound
self.blocks_movement = blocks_movement
+ self.tags = set()
def lower_msg_by_volume(msg, volume, largest_audible_distance,
url_limits = []):
- import random
factor = largest_audible_distance / 4
lowered_msg = ''
in_url = False
+class ThingInstallable(Thing):
+ portable = True
+ installable = True
+
+ def install(self):
+ self.portable = False
+
+ def uninstall(self):
+ self.portable = True
+
+
+
class Thing_DoorSpawner(ThingSpawner):
child_type = 'Door'
-class Thing_Door(Thing):
+class Thing_Door(ThingInstallable):
symbol_hint = 'D'
blocks_movement = False
- portable = True
- installable = True
def open(self):
self.blocks_movement = False
self.blocks_sound = True
self.thing_char = '#'
- def install(self):
- self.portable = False
-
- def uninstall(self):
- self.portable = True
-
class Thing_Psychedelic(Thing):
self.full = False
def spin(self):
- import random
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
class ThingAnimate(Thing):
blocks_movement = True
- drunk = 0
- tripping = 0
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class Thing_Player(ThingAnimate):
symbol_hint = '@'
+ drunk = 0
+ tripping = 0
+ need_for_toilet = 0
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def proceed(self):
super().proceed()
- self.drunk -= 1
+ if self.drunk >= 0:
+ self.drunk -= 1
+ if self.tripping >= 0:
+ self.tripping -= 1
+ if self.need_for_toilet > 0:
+ self.need_for_toilet += 1
+ terrain = self.game.maps[self.position[0]][self.position[1]]
+ if terrain in self.game.terrains:
+ terrain_type = self.game.terrains[terrain]
+ if 'toilet' in terrain_type.tags:
+ self.send_msg('CHAT "You use the toilet. What a relief!"')
+ self.need_for_toilet = 0
+ if 10000 * random.random() < self.need_for_toilet / 100000:
+ self.send_msg('CHAT "You need to use a toilet."')
if self.drunk == 0:
self.send_msg('CHAT "You sober up."')
self.invalidate('fov')
self.game.changed = True
- self.tripping -= 1
+ self.need_for_toilet *= 2
+ self.need_for_toilet += 1
if self.tripping == 0:
self.send_msg('DEFAULT_COLORS')
self.send_msg('CHAT "You sober up."')
cmd_THING_MUSICPLAYER_PLAYLIST_ITEM, cmd_TERRAIN,
cmd_THING_BOTTLE_EMPTY, cmd_PLAYER_FACE,
cmd_GOD_PLAYER_FACE, cmd_GOD_PLAYER_HAT,
- cmd_GOD_PLAYERS_HAT_CHARS, cmd_PLAYER_HAT)
+ cmd_GOD_PLAYERS_HAT_CHARS, cmd_PLAYER_HAT,
+ cmd_TERRAIN_TAG)
from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE, Task_PICK_UP,
Task_DROP, Task_FLATTEN_SURROUNDINGS, Task_DOOR,
Task_INTOXICATE, Task_COMMAND, Task_INSTALL,
game.register_command(cmd_TURN)
game.register_command(cmd_MAP)
game.register_command(cmd_TERRAIN)
+game.register_command(cmd_TERRAIN_TAG)
game.register_command(cmd_MAP_LINE)
game.register_command(cmd_MAP_CONTROL_LINE)
game.register_command(cmd_MAP_CONTROL_PW)