X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=rogue_chat_curses.py;h=1d327727c3fee4ede955321459c9e1d85b11656b;hb=5d3c2a69f040a8e4e0538a1fe7f64948aede0e0a;hp=fd28049072a3fc62e9a310872ef242b935f91e68;hpb=c3ada0bf213337ff2c97e2f33bbf6e6dbedaea38;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index fd28049..1d32772 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -187,8 +187,6 @@ def cmd_LOGIN_OK(game): game.tui.switch_mode('post_login_wait') game.tui.send('GET_GAMESTATE') game.tui.log_msg('@ welcome!') - game.tui.log_msg('@ hint: see top of terminal for how to get help.') - game.tui.log_msg('@ hint: enter study mode to understand your environment.') cmd_LOGIN_OK.argtypes = '' def cmd_ADMIN_OK(game): @@ -623,6 +621,7 @@ class TUI: self.disconnected = False self.game.thing_types = {} self.game.terrains = {} + self.is_admin = False time.sleep(0.1) # give potential SSL negotation some time … self.socket.send('TASKS') self.socket.send('TERRAINS') @@ -706,6 +705,8 @@ class TUI: self.log_msg('@ finished tile protection drawing.') self.draw_face = False self.tile_draw = False + self.ascii_draw_stage = 0 + self.full_ascii_draw = '' if mode_name == 'command_thing' and\ (not self.game.player.carrying or not self.game.player.carrying.commandable): @@ -806,8 +807,9 @@ class TUI: self.restore_input_values() def set_default_colors(self): - curses.init_color(1, 1000, 1000, 1000) - curses.init_color(2, 0, 0, 0) + if curses.can_change_color(): + curses.init_color(7, 1000, 1000, 1000) + curses.init_color(0, 0, 0, 0) self.do_refresh = True def set_random_colors(self): @@ -816,8 +818,9 @@ class TUI: import random return int(offset + random.random()*375) - curses.init_color(1, rand(625), rand(625), rand(625)) - curses.init_color(2, rand(0), rand(0), rand(0)) + if curses.can_change_color(): + curses.init_color(7, rand(625), rand(625), rand(625)) + curses.init_color(0, rand(0), rand(0), rand(0)) self.do_refresh = True def get_info(self): @@ -940,7 +943,8 @@ class TUI: self.size = YX(*stdscr.getmaxyx()) self.size = self.size - YX(self.size.y % 4, 0) self.size = self.size - YX(0, self.size.x % 4) - self.window_width = int(self.size.x / 2) + self.left_window_width = min(52, int(self.size.x / 2)) + self.right_window_width = self.size.x - self.left_window_width def recalc_input_lines(): if not self.mode.has_input_prompt: @@ -948,7 +952,7 @@ class TUI: else: self.input_lines = msg_into_lines_of_width(input_prompt + self.input_ + '█', - self.window_width) + self.right_window_width) def move_explorer(direction): target = self.game.map_geometry.move_yx(self.explorer, direction) @@ -963,41 +967,41 @@ class TUI: def draw_history(): lines = [] for line in self.log: - lines += msg_into_lines_of_width(line, self.window_width) + lines += msg_into_lines_of_width(line, self.right_window_width) lines.reverse() height_header = 2 max_y = self.size.y - len(self.input_lines) for i in range(len(lines)): if (i >= max_y - height_header): break - safe_addstr(max_y - i - 1, self.window_width, lines[i]) + safe_addstr(max_y - i - 1, self.left_window_width, lines[i]) def draw_info(): info = 'MAP VIEW: %s\n%s' % (self.map_mode, self.get_info()) - lines = msg_into_lines_of_width(info, self.window_width) + lines = msg_into_lines_of_width(info, self.right_window_width) height_header = 2 for i in range(len(lines)): y = height_header + i if y >= self.size.y - len(self.input_lines): break - safe_addstr(y, self.window_width, lines[i]) + safe_addstr(y, self.left_window_width, lines[i]) def draw_input(): y = self.size.y - len(self.input_lines) for i in range(len(self.input_lines)): - safe_addstr(y, self.window_width, self.input_lines[i]) + safe_addstr(y, self.left_window_width, self.input_lines[i]) y += 1 def draw_stats(): stats = 'ENERGY: %s BLADDER: %s' % (self.game.energy, self.game.bladder_pressure) - safe_addstr(0, self.window_width, stats) + safe_addstr(0, self.left_window_width, stats) def draw_mode(): help = "hit [%s] for help" % self.keys['help'] if self.mode.has_input_prompt: help = "enter /help for help" - safe_addstr(1, self.window_width, + safe_addstr(1, self.left_window_width, 'MODE: %s – %s' % (self.mode.short_desc, help)) def draw_map(): @@ -1054,7 +1058,7 @@ class TUI: for line in map_lines_split: self.map_lines += [''.join(line)] window_center = YX(int(self.size.y / 2), - int(self.window_width / 2)) + int(self.left_window_width / 2)) center = self.game.player.position if self.mode.shows_info or self.mode.name == 'control_tile_draw': center = self.explorer @@ -1067,7 +1071,7 @@ class TUI: map_y = max(0, self.offset.y) map_x = max(0, self.offset.x) while term_y < self.size.y and map_y < len(self.map_lines): - to_draw = self.map_lines[map_y][map_x:self.window_width + self.offset.x] + to_draw = self.map_lines[map_y][map_x:self.left_window_width + self.offset.x] safe_addstr(term_y, term_x, to_draw) term_y += 1 map_y += 1 @@ -1078,7 +1082,7 @@ class TUI: self.draw_face = False return - start_x = self.window_width - 10 + start_x = self.left_window_width - 10 def draw_body_part(body_part, end_y): safe_addstr(end_y - 3, start_x, '----------') safe_addstr(end_y - 2, start_x, '| ' + body_part[0:6] + ' |') @@ -1116,16 +1120,16 @@ class TUI: content += self.mode.list_available_modes(self) for i in range(self.size.y): safe_addstr(i, - self.window_width * (not self.mode.has_input_prompt), - ' ' * self.window_width) + self.left_window_width * (not self.mode.has_input_prompt), + ' ' * self.left_window_width) lines = [] for line in content.split('\n'): - lines += msg_into_lines_of_width(line, self.window_width) + lines += msg_into_lines_of_width(line, self.right_window_width) for i in range(len(lines)): if i >= self.size.y: break safe_addstr(i, - self.window_width * (not self.mode.has_input_prompt), + self.left_window_width * (not self.mode.has_input_prompt), lines[i]) def draw_screen(): @@ -1236,10 +1240,14 @@ class TUI: 'dance': 'DANCE', } - curses.curs_set(False) # hide cursor + curses.curs_set(0) # hide cursor curses.start_color() self.set_default_colors() - curses.init_pair(1, 1, 2) + curses.init_pair(1, 7, 0) + if not curses.can_change_color(): + self.log_msg('@ unfortunately, your terminal does not seem to ' + 'support re-definition of colors; you might miss out ' + 'on some color effects') stdscr.timeout(10) reset_screen_size() self.explorer = YX(0, 0) @@ -1307,7 +1315,7 @@ class TUI: self.restore_input_values() elif self.mode.has_input_prompt and key != '\n': # Return key self.input_ += key - max_length = self.window_width * self.size.y - len(input_prompt) - 1 + max_length = self.right_window_width * self.size.y - len(input_prompt) - 1 if len(self.input_) > max_length: self.input_ = self.input_[:max_length] elif key == self.keys['help'] and not self.mode.is_single_char_entry: