-e!/usr/bin/env python3
+#!/usr/bin/env python3
import curses
import queue
import threading
pass
cmd_PONG.argtypes = ''
+def cmd_DEFAULT_COLORS(game):
+ game.tui.set_default_colors()
+cmd_DEFAULT_COLORS.argtypes = ''
+
+def cmd_RANDOM_COLORS(game):
+ game.tui.set_random_colors()
+cmd_RANDOM_COLORS.argtypes = ''
+
class Game(GameBase):
turn_complete = False
tasks = {}
self.register_command(cmd_PLAY_ERROR)
self.register_command(cmd_TASKS)
self.register_command(cmd_FOV)
+ self.register_command(cmd_DEFAULT_COLORS)
+ self.register_command(cmd_RANDOM_COLORS)
self.map_content = ''
self.player_id = -1
self.info_db = {}
import json
self.mode_play.available_modes = ["chat", "study", "edit", "admin_enter"]
self.mode_play.available_actions = ["move", "take_thing", "drop_thing",
- "teleport", "door"]
+ "teleport", "door", "consume"]
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",
'take_thing': 'z',
'drop_thing': 'u',
'teleport': 'p',
+ 'consume': 'C',
'door': 'D',
'help': 'h',
'toggle_map_mode': 'L',
self.input_ = ""
self.restore_input_values()
+ def set_default_colors(self):
+ curses.init_color(1, 1000, 1000, 1000)
+ curses.init_color(2, 0, 0, 0)
+ self.do_refresh = True
+
+ def set_random_colors(self):
+
+ def rand(offset):
+ 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))
+ self.do_refresh = True
+
def loop(self, stdscr):
import datetime
def safe_addstr(y, x, line):
if y < self.size.y - 1 or x + len(line) < self.size.x:
- stdscr.addstr(y, x, line)
+ stdscr.addstr(y, x, line, curses.color_pair(1))
else: # workaround to <https://stackoverflow.com/q/7063128>
cut_i = self.size.x - x - 1
cut = line[:cut_i]
last_char = line[cut_i]
- stdscr.addstr(y, self.size.x - 2, last_char)
+ stdscr.addstr(y, self.size.x - 2, last_char, curses.color_pair(1))
stdscr.insstr(y, self.size.x - 2, ' ')
- stdscr.addstr(y, x, cut)
+ stdscr.addstr(y, x, cut, curses.color_pair(1))
def handle_input(msg):
command, args = self.parser.parse(msg)
def draw_screen():
stdscr.clear()
+ stdscr.bkgd(' ', curses.color_pair(1))
recalc_input_lines()
if self.mode.has_input_prompt:
draw_input()
'toggle_map_mode': 'toggle map view',
'toggle_tile_draw': 'toggle protection character drawing',
'door': 'open/close',
+ 'consume': 'consume',
}
action_tasks = {
'drop_thing': 'DROP',
'door': 'DOOR',
'move': 'MOVE',
+ 'consume': 'INTOXICATE',
}
curses.curs_set(False) # hide cursor
- curses.use_default_colors()
+ curses.start_color()
+ self.set_default_colors()
+ curses.init_pair(1, 1, 2)
stdscr.timeout(10)
reset_screen_size()
self.explorer = YX(0, 0)
self.send('TASK:DROP')
elif key == self.keys['door'] and task_action_on('door'):
self.send('TASK:DOOR')
+ elif key == self.keys['consume'] and task_action_on('consume'):
+ self.send('TASK:INTOXICATE')
elif key == self.keys['teleport']:
player = self.game.get_thing(self.game.player_id)
if player.position in self.game.portals: