X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=rogue_chat_curses.py;h=b80a52ae28180d793b0b8d7276baa6f2b0802acf;hb=c44edaea10aa907301a47f19e492f1d869d528d9;hp=0a5ced7a0692c27b9211f9f57e7ac752b29fe447;hpb=6cc83951670f2022bd22cbf0728ebb4c25479c4d;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 0a5ced7..b80a52a 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -87,6 +87,12 @@ def cmd_THING_NAME(game, thing_id, name): t.name = name cmd_THING_NAME.argtypes = 'int:nonneg string' +def cmd_THING_CHAR(game, thing_id, c): + t = game.get_thing(thing_id) + if t: + t.player_char = c +cmd_THING_CHAR.argtypes = 'int:nonneg char' + def cmd_MAP(game, geometry, size, content): map_geometry_class = globals()['MapGeometry' + geometry] game.map_geometry = map_geometry_class(size) @@ -164,6 +170,10 @@ def cmd_THING_TYPE(game, thing_type, symbol_hint): game.thing_types[thing_type] = symbol_hint cmd_THING_TYPE.argtypes = 'string char' +def cmd_TERRAIN(game, terrain_char, terrain_desc): + game.terrains[terrain_char] = terrain_desc +cmd_TERRAIN.argtypes = 'char string' + def cmd_PONG(game): pass cmd_PONG.argtypes = '' @@ -183,6 +193,8 @@ class Game(GameBase): self.register_command(cmd_THING) self.register_command(cmd_THING_TYPE) self.register_command(cmd_THING_NAME) + self.register_command(cmd_THING_CHAR) + self.register_command(cmd_TERRAIN) self.register_command(cmd_MAP) self.register_command(cmd_MAP_CONTROL) self.register_command(cmd_PORTAL) @@ -197,6 +209,7 @@ class Game(GameBase): self.player_id = -1 self.info_db = {} self.portals = {} + self.terrains = {} def get_string_options(self, string_option_type): if string_option_type == 'map_geometry': @@ -257,6 +270,8 @@ class TUI: 'switch_to_study': '?', 'switch_to_edit': 'm', 'flatten': 'F', + 'take_thing': 'z', + 'drop_thing': 'u', 'toggle_map_mode': 'M', 'hex_move_upleft': 'w', 'hex_move_upright': 'e', @@ -302,7 +317,9 @@ class TUI: self.socket_thread.start() self.disconnected = False self.game.thing_types = {} + self.game.terrains = {} self.socket.send('TASKS') + self.socket.send('TERRAINS') self.socket.send('THING_TYPES') self.switch_mode('login') except ConnectionRefusedError: @@ -440,12 +457,19 @@ class TUI: pos_i = self.explorer.y * self.game.map_geometry.size.x + self.explorer.x info = 'outside field of view' if self.game.fov[pos_i] == '.': - info = 'TERRAIN: %s\n' % self.game.map_content[pos_i] + terrain_char = self.game.map_content[pos_i] + terrain_desc = '?' + if terrain_char in self.game.terrains: + terrain_desc = self.game.terrains[terrain_char] + info = 'TERRAIN: "%s" / %s\n' % (terrain_char, terrain_desc) for t in self.game.things: if t.position == self.explorer: - info += 'THING: %s' % t.type_ + info += 'THING: %s / %s' % (t.type_, + self.game.thing_types[t.type_]) + if hasattr(t, 'player_char'): + info += t.player_char if hasattr(t, 'name'): - info += ' (name: %s)' % t.name + info += ' (%s)' % t.name info += '\n' if self.explorer in self.game.portals: info += 'PORTAL: ' + self.game.portals[self.explorer] + '\n' @@ -490,22 +514,29 @@ class TUI: for y in range(self.game.map_geometry.size.y): start = self.game.map_geometry.size.x * y end = start + self.game.map_geometry.size.x - map_lines_split += [list(map_content[start:end])] + map_lines_split += [[c + ' ' for c in map_content[start:end]]] if self.map_mode == 'terrain': + used_positions = [] for t in self.game.things: symbol = self.game.thing_types[t.type_] - map_lines_split[t.position.y][t.position.x] = symbol + meta_char = ' ' + if hasattr(t, 'player_char'): + meta_char = t.player_char + if t.position in used_positions: + meta_char = '+' + map_lines_split[t.position.y][t.position.x] = symbol + meta_char + used_positions += [t.position] if self.mode.shows_info: - map_lines_split[self.explorer.y][self.explorer.x] = '?' + map_lines_split[self.explorer.y][self.explorer.x] = '??' map_lines = [] if type(self.game.map_geometry) == MapGeometryHex: indent = 0 for line in map_lines_split: - map_lines += [indent*' ' + ' '.join(line)] + map_lines += [indent*' ' + ''.join(line)] indent = 0 if indent else 1 else: for line in map_lines_split: - map_lines += [' '.join(line)] + map_lines += [''.join(line)] window_center = YX(int(self.size.y / 2), int(self.window_width / 2)) player = self.game.get_thing(self.game.player_id) @@ -533,6 +564,10 @@ class TUI: content += "Available actions:\n" if 'MOVE' in self.game.tasks: content += "[%s] – move player\n" % ','.join(self.movement_keys) + if 'PICK_UP' in self.game.tasks: + content += "[%s] – take thing under player\n" % self.keys['take_thing'] + if 'DROP' in self.game.tasks: + content += "[%s] – drop carried thing\n" % self.keys['drop_thing'] if 'FLATTEN_SURROUNDINGS' in self.game.tasks: content += "[%s] – flatten player's surroundings\n" % self.keys['flatten'] content += 'Other modes available from here:\n' @@ -721,6 +756,10 @@ class TUI: elif key == self.keys['flatten'] and\ 'FLATTEN_SURROUNDINGS' in self.game.tasks: self.send('TASK:FLATTEN_SURROUNDINGS ' + quote(self.password)) + elif key == self.keys['take_thing'] and 'PICK_UP' in self.game.tasks: + self.send('TASK:PICK_UP') + elif key == self.keys['drop_thing'] and 'DROP' in self.game.tasks: + self.send('TASK:DROP') elif key in self.movement_keys and 'MOVE' in self.game.tasks: self.send('TASK:MOVE ' + self.movement_keys[key]) elif self.mode == self.mode_edit: