X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=rogue_chat_curses.py;h=18977d2cd4b13e3867f1d52d55fff745143398d1;hb=63170d5dd0c58026021d5fb747c596bead34417d;hp=22ebc01aa526831a9c077c1e7f49bb19e213982d;hpb=884b4b8d9c18896569c5e741f90a6ee67f8db8b2;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 22ebc01..18977d2 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -129,10 +129,6 @@ def cmd_GAME_STATE_COMPLETE(game): game.tui.switch_mode('play') if game.tui.mode.shows_info: game.tui.query_info() - player = game.get_thing(game.player_id) - if player.position in game.portals: - game.tui.teleport_target_host = game.portals[player.position] - game.tui.switch_mode('teleport') game.turn_complete = True game.tui.do_refresh = True cmd_GAME_STATE_COMPLETE.argtypes = '' @@ -142,7 +138,8 @@ def cmd_PORTAL(game, position, msg): cmd_PORTAL.argtypes = 'yx_tuple:nonneg string' def cmd_PLAY_ERROR(game, msg): - game.tui.flash() + game.tui.log_msg('? ' + msg) + game.tui.flash = True game.tui.do_refresh = True cmd_PLAY_ERROR.argtypes = 'string' @@ -170,6 +167,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 = '' @@ -190,6 +191,7 @@ class Game(GameBase): 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) @@ -204,6 +206,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': @@ -243,7 +246,6 @@ class TUI: self.mode_waiting_for_server = self.Mode('waiting_for_server', 'Waiting for a server response.', is_intro=True) self.mode_login = self.Mode('login', 'Pick your player name.', has_input_prompt=True, is_intro=True) self.mode_post_login_wait = self.Mode('post_login_wait', 'Waiting for a server response.', is_intro=True) - self.mode_teleport = self.Mode('teleport', 'Follow the instructions to re-connect and log-in to another server, or enter anything else to abort.', has_input_prompt=True) self.mode_password = self.Mode('password', 'This mode allows you to change the password that you send to authorize yourself for editing password-protected map tiles. Hit return to confirm and leave.', has_input_prompt=True) self.game = Game() self.game.tui = self @@ -266,6 +268,7 @@ class TUI: 'flatten': 'F', 'take_thing': 'z', 'drop_thing': 'u', + 'teleport': 'p', 'toggle_map_mode': 'M', 'hex_move_upleft': 'w', 'hex_move_upright': 'e', @@ -288,11 +291,9 @@ class TUI: self.force_instant_connect = True self.input_lines = [] self.fov = '' + self.flash = False curses.wrapper(self.loop) - def flash(self): - curses.flash() - def connect(self): def handle_recv(msg): @@ -311,7 +312,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: @@ -372,9 +375,6 @@ class TUI: self.send('LOGIN ' + quote(self.login_name)) else: self.log_msg('@ enter username') - elif self.mode.name == 'teleport': - self.log_msg("@ May teleport to %s" % (self.teleport_target_host)), - self.log_msg("@ Enter 'YES!' to enthusiastically affirm."); self.restore_input_values() def loop(self, stdscr): @@ -429,7 +429,7 @@ class TUI: self.explorer = target self.query_info() else: - self.flash() + self.flash = True def draw_history(): lines = [] @@ -449,7 +449,11 @@ 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 / %s' % (t.type_, @@ -457,7 +461,7 @@ class TUI: 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' @@ -504,6 +508,8 @@ class TUI: end = start + self.game.map_geometry.size.x map_lines_split += [[c + ' ' for c in map_content[start:end]]] if self.map_mode == 'terrain': + for p in self.game.portals.keys(): + map_lines_split[p.y][p.x] = 'P ' used_positions = [] for t in self.game.things: symbol = self.game.thing_types[t.type_] @@ -558,6 +564,7 @@ class TUI: 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 += '[%s] – teleport to other space\n' % self.keys['teleport'] content += 'Other modes available from here:\n' content += '[%s] – chat mode\n' % self.keys['switch_to_chat'] content += '[%s] – study mode\n' % self.keys['switch_to_study'] @@ -627,6 +634,9 @@ class TUI: else: self.send('PING') last_ping = now + if self.flash: + curses.flash() + self.flash = False if self.do_refresh: draw_screen() self.do_refresh = False @@ -681,13 +691,6 @@ class TUI: self.send('NICK ' + quote(tokens[1])) else: self.log_msg('? need login name') - #elif self.input_.startswith('/msg'): - # tokens = self.input_.split(maxsplit=2) - # if len(tokens) == 3: - # self.send('QUERY %s %s' % (quote(tokens[1]), - # quote(tokens[2]))) - # else: - # self.log_msg('? need message target and message') else: self.log_msg('? unknown command') else: @@ -707,14 +710,6 @@ class TUI: quote(self.password))) self.input_ = "" self.switch_mode('play') - elif self.mode == self.mode_teleport and key == '\n': - if self.input_ == 'YES!': - self.host = self.teleport_target_host - self.reconnect() - else: - self.log_msg('@ teleport aborted') - self.switch_mode('play') - self.input_ = '' elif self.mode == self.mode_study: if key == self.keys['switch_to_chat']: self.switch_mode('chat') @@ -748,10 +743,19 @@ class TUI: self.send('TASK:PICK_UP') elif key == self.keys['drop_thing'] and 'DROP' in self.game.tasks: self.send('TASK:DROP') + elif key == self.keys['teleport']: + player = self.game.get_thing(self.game.player_id) + if player.position in self.game.portals: + self.host = self.game.portals[player.position] + self.reconnect() + else: + self.flash = True + self.log_msg('? not standing on portal') 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: self.send('TASK:WRITE %s %s' % (key, quote(self.password))) self.switch_mode('play') -TUI('localhost:5000') +#TUI('localhost:5000') +TUI('wss://plomlompom.com/rogue_chat/')