cmd_MAP_CONTROL.argtypes = 'string'
def cmd_GAME_STATE_COMPLETE(game):
- if game.tui.mode.name == 'post_login_wait':
- game.tui.switch_mode('play')
game.turn_complete = True
game.tui.do_refresh = True
game.tui.info_cached = None
+ game.player = game.get_thing(game.player_id)
+ if game.tui.mode.name == 'post_login_wait':
+ game.tui.switch_mode('play')
cmd_GAME_STATE_COMPLETE.argtypes = ''
def cmd_PORTAL(game, position, msg):
self.annotations = {}
self.portals = {}
self.terrains = {}
+ self.player = None
def get_string_options(self, string_option_type):
if string_option_type == 'map_geometry':
"command_thing", "take_thing",
"drop_thing"]
self.mode_play.available_actions = ["move", "teleport", "door", "consume",
- "install", "wear"]
+ "install", "wear", "spin"]
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",
'door': 'D',
'install': 'I',
'wear': 'W',
+ 'spin': 'S',
'help': 'h',
'toggle_map_mode': 'L',
'toggle_tile_draw': 'm',
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):
+ (not self.game.player.carrying or
+ not self.game.player.carrying.commandable):
self.log_msg('? not carrying anything commandable')
self.flash = True
self.switch_mode('play')
return
+ if mode_name == 'drop_thing' and not self.game.player.carrying:
+ self.log_msg('? not carrying anything droppable')
+ 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'}:
thing = None
- for t in [t for t in self.game.things if t.position == player.position
- and t.id_ != player.id_]:
+ for t in [t for t in self.game.things
+ if t.position == self.game.player.position
+ and t.id_ != self.game.player.id_]:
thing = t
break
if not thing:
elif self.mode.name != 'edit':
self.map_mode = 'terrain + things'
if self.mode.shows_info or self.mode.name == 'control_tile_draw':
- player = self.game.get_thing(self.game.player_id)
- self.explorer = YX(player.position.y, player.position.x)
+ self.explorer = YX(self.game.player.position.y,
+ self.game.player.position.x)
if self.mode.is_single_char_entry:
self.show_help = True
if len(self.mode.intro_msg) > 0:
self.log_msg('@ enter username')
elif self.mode.name == 'take_thing':
self.log_msg('Portable things in reach for pick-up:')
- player = self.game.get_thing(self.game.player_id)
- select_range = [player.position,
- player.position + YX(0,-1),
- player.position + YX(0, 1),
- player.position + YX(-1, 0),
- player.position + YX(1, 0)]
+ select_range = [self.game.player.position,
+ self.game.player.position + YX(0,-1),
+ self.game.player.position + YX(0, 1),
+ self.game.player.position + YX(-1, 0),
+ self.game.player.position + YX(1, 0)]
if type(self.game.map_geometry) == MapGeometryHex:
- if player.position.y % 2:
- select_range += [player.position + YX(-1, 1),
- player.position + YX(1, 1)]
+ if self.game.player.position.y % 2:
+ select_range += [self.game.player.position + YX(-1, 1),
+ self.game.player.position + YX(1, 1)]
else:
- select_range += [player.position + YX(-1, -1),
- player.position + YX(1, -1)]
+ select_range += [self.game.player.position + YX(-1, -1),
+ self.game.player.position + YX(1, -1)]
self.selectables = [t.id_ for t in self.game.things
if t.portable and t.position in select_range]
if len(self.selectables) == 0:
draw_thing(t, used_positions)
for t in [t for t in self.game.things if t.type_ == 'Player']:
draw_thing(t, used_positions)
- player = self.game.get_thing(self.game.player_id)
if self.mode.shows_info or self.mode.name == 'control_tile_draw':
map_lines_split[self.explorer.y][self.explorer.x] = '??'
elif self.map_mode != 'terrain + things':
- map_lines_split[player.position.y][player.position.x] = '??'
+ map_lines_split[self.game.player.position.y]\
+ [self.game.player.position.x] = '??'
self.map_lines = []
if type(self.game.map_geometry) == MapGeometryHex:
indent = 0
self.map_lines += [''.join(line)]
window_center = YX(int(self.size.y / 2),
int(self.window_width / 2))
- center = player.position
+ center = self.game.player.position
if self.mode.shows_info or self.mode.name == 'control_tile_draw':
center = self.explorer
center = YX(center.y, center.x * 2)
'wear': '(un-)wear',
'door': 'open/close',
'consume': 'consume',
+ 'spin': 'spin',
}
action_tasks = {
'move': 'MOVE',
'command': 'COMMAND',
'consume': 'INTOXICATE',
+ 'spin': 'SPIN',
}
curses.curs_set(False) # hide cursor
self.do_refresh = True
except curses.error:
continue
- self.show_help = False
+ keycode = None
+ if len(key) == 1:
+ keycode = ord(key)
if key == 'KEY_RESIZE':
reset_screen_size()
elif self.mode.has_input_prompt and key == 'KEY_BACKSPACE':
self.input_ = self.input_[:-1]
- elif self.mode.has_input_prompt and key == '\n' and self.input_ == ''\
- and self.mode.name in {'chat', 'command_thing', 'take_thing',
- 'drop_thing', 'admin_enter'}:
- if self.mode.name != 'chat':
+ elif (((not self.mode.is_intro) and keycode == 27) # Escape
+ or (self.mode.has_input_prompt and key == '\n'
+ and self.input_ == ''\
+ and self.mode.name in {'chat', 'command_thing',
+ 'take_thing', 'drop_thing',
+ 'admin_enter'})):
+ if self.mode.name not in {'chat', 'play', 'study', 'edit'}:
self.log_msg('@ aborted')
self.switch_mode('play')
elif self.mode.has_input_prompt and key == '\n' and self.input_ == '/help':
self.send('TASK:INSTALL')
elif key == self.keys['wear'] and task_action_on('wear'):
self.send('TASK:WEAR')
+ elif key == self.keys['spin'] and task_action_on('spin'):
+ self.send('TASK:SPIN')
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]
+ if self.game.player.position in self.game.portals:
+ self.host = self.game.portals[self.game.player.position]
self.reconnect()
else:
self.flash = True