X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/balance?a=blobdiff_plain;f=rogue_chat_curses.py;h=15f59bf5d915bd13d8b3c5fafe1f761440854cd8;hb=ba09978e0179406218f052ed29690f1f7c508920;hp=89c841140edc871c4108d91c6bb3b5f389599e0a;hpb=c7a3af00680ba0449310bbb7336a187dd4ed6bcf;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 89c8411..15f59bf 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -49,7 +49,7 @@ mode_helps = { 'enter_face': { 'short': 'enter your face', 'intro': '@ enter face line (enter nothing to abort):', - 'long': 'Draw your face as ASCII art. The string you enter must be 9 characters long, and will be divided on display into three lines of three characters each, from top to bottom..' + 'long': 'Draw your face as ASCII art. The string you enter must be 18 characters long, and will be divided on display into 3 lines of 6 characters each, from top to bottom..' }, 'write': { 'short': 'change terrain', @@ -199,7 +199,7 @@ def cmd_PLAYER_ID(game, player_id): game.player_id = player_id cmd_PLAYER_ID.argtypes = 'int:nonneg' -def cmd_THING(game, yx, thing_type, protection, thing_id, portable): +def cmd_THING(game, yx, thing_type, protection, thing_id, portable, commandable): t = game.get_thing(thing_id) if not t: t = ThingBase(game, thing_id) @@ -208,7 +208,8 @@ def cmd_THING(game, yx, thing_type, protection, thing_id, portable): t.type_ = thing_type t.protection = protection t.portable = portable -cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type char int:nonneg bool' + t.commandable = commandable +cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type char int:nonneg bool bool' def cmd_THING_NAME(game, thing_id, name): t = game.get_thing(thing_id) @@ -220,6 +221,11 @@ def cmd_THING_FACE(game, thing_id, face): t.face = face cmd_THING_FACE.argtypes = 'int:pos string' +def cmd_THING_HAT(game, thing_id, hat): + t = game.get_thing(thing_id) + t.hat = hat +cmd_THING_HAT.argtypes = 'int:pos string' + def cmd_THING_CHAR(game, thing_id, c): t = game.get_thing(thing_id) t.thing_char = c @@ -304,9 +310,9 @@ def cmd_THING_INSTALLED(game, thing_id): game.get_thing(thing_id).installed = True cmd_THING_INSTALLED.argtypes = 'int:pos' -def cmd_THING_CARRYING(game, thing_id): - game.get_thing(thing_id).carrying = True -cmd_THING_CARRYING.argtypes = 'int:pos' +def cmd_THING_CARRYING(game, thing_id, carried_id): + game.get_thing(thing_id).carrying = game.get_thing(carried_id) +cmd_THING_CARRYING.argtypes = 'int:pos int:pos' def cmd_TERRAIN(game, terrain_char, terrain_desc): game.terrains[terrain_char] = terrain_desc @@ -343,6 +349,7 @@ class Game(GameBase): self.register_command(cmd_THING_NAME) self.register_command(cmd_THING_CHAR) self.register_command(cmd_THING_FACE) + self.register_command(cmd_THING_HAT) self.register_command(cmd_THING_CARRYING) self.register_command(cmd_THING_INSTALLED) self.register_command(cmd_TERRAIN) @@ -449,7 +456,7 @@ class TUI: "command_thing", "take_thing"] self.mode_play.available_actions = ["move", "drop_thing", "teleport", "door", "consume", - "install"] + "install", "wear"] self.mode_study.available_modes = ["chat", "play", "admin_enter", "edit"] self.mode_study.available_actions = ["toggle_map_mode", "move_explorer"] self.mode_admin.available_modes = ["admin_thing_protect", "control_pw_type", @@ -498,6 +505,7 @@ class TUI: 'consume': 'C', 'door': 'D', 'install': 'I', + 'wear': 'W', 'help': 'h', 'toggle_map_mode': 'L', 'toggle_tile_draw': 'm', @@ -613,10 +621,16 @@ class TUI: if self.mode and self.mode.name == 'control_tile_draw': self.log_msg('@ finished tile protection drawing.') self.tile_draw = False + player = self.game.get_thing(self.game.player_id) + if mode_name == 'command_thing' and\ + (not hasattr(player, 'carrying') or not player.carrying.commandable): + self.log_msg('? not carrying anything commandable') + self.flash = True + self.switch_mode('play') + return if mode_name == 'admin_enter' and self.is_admin: mode_name = 'admin' elif mode_name in {'name_thing', 'admin_thing_protect'}: - player = self.game.get_thing(self.game.player_id) thing = None for t in [t for t in self.game.things if t.position == player.position and t.id_ != player.id_]: @@ -665,6 +679,9 @@ class TUI: if t.portable and t.position in select_range] if len(self.selectables) == 0: self.log_msg('none') + self.flash = True + self.switch_mode('play') + return else: for i in range(len(self.selectables)): t = self.selectables[i] @@ -708,10 +725,14 @@ class TUI: if protection == '.': protection = 'none' info_to_cache += ' / protection: %s\n' % protection + if hasattr(t, 'hat'): + info_to_cache += t.hat[0:6] + '\n' + info_to_cache += t.hat[6:12] + '\n' + info_to_cache += t.hat[12:18] + '\n' if hasattr(t, 'face'): - info_to_cache += t.face[0:3] + '\n' - info_to_cache += t.face[3:6] + '\n' - info_to_cache += t.face[6:9] + '\n' + info_to_cache += t.face[0:6] + '\n' + info_to_cache += t.face[6:12] + '\n' + info_to_cache += t.face[12:18] + '\n' terrain_char = self.game.map_content[pos_i] terrain_desc = '?' if terrain_char in self.game.terrains: @@ -975,6 +996,7 @@ class TUI: 'toggle_map_mode': 'toggle map view', 'toggle_tile_draw': 'toggle protection character drawing', 'install': '(un-)install', + 'wear': '(un-)wear', 'door': 'open/close', 'consume': 'consume', } @@ -985,6 +1007,7 @@ class TUI: 'drop_thing': 'DROP', 'door': 'DOOR', 'install': 'INSTALL', + 'wear': 'WEAR', 'move': 'MOVE', 'command': 'COMMAND', 'consume': 'INTOXICATE', @@ -1056,7 +1079,7 @@ class TUI: self.send('LOGIN ' + quote(self.input_)) self.input_ = "" elif self.mode.name == 'enter_face' and key == '\n': - if len(self.input_) != 9: + if len(self.input_) != 18: self.log_msg('? wrong input length, aborting') else: self.send('PLAYER_FACE %s' % quote(self.input_)) @@ -1074,9 +1097,8 @@ class TUI: self.input_ = '' self.switch_mode('play') elif self.mode.name == 'command_thing' and key == '\n': - if task_action_on('command'): - self.send('TASK:COMMAND ' + quote(self.input_)) - self.input_ = "" + self.send('TASK:COMMAND ' + quote(self.input_)) + self.input_ = "" elif self.mode.name == 'control_pw_pw' and key == '\n': if self.input_ == '': self.log_msg('@ aborted') @@ -1166,6 +1188,8 @@ class TUI: self.send('TASK:INTOXICATE') elif key == self.keys['install'] and task_action_on('install'): self.send('TASK:INSTALL') + elif key == self.keys['wear'] and task_action_on('wear'): + self.send('TASK:WEAR') elif key == self.keys['teleport']: player = self.game.get_thing(self.game.player_id) if player.position in self.game.portals: