pass # we assume socket will be known as dead by now
def cmd_TURN(game, n):
- game.annotations = {}
game.turn = n
- game.things = []
- game.portals = {}
game.turn_complete = False
- game.fov = ''
cmd_TURN.argtypes = 'int:nonneg'
+def cmd_PSEUDO_FOV_WIPE(game):
+ game.portals_new = {}
+ game.annotations_new = {}
+ game.things_new = []
+cmd_PSEUDO_FOV_WIPE.argtypes = ''
+
def cmd_LOGIN_OK(game):
game.tui.switch_mode('post_login_wait')
game.tui.send('GET_GAMESTATE')
cmd_PLAYER_ID.argtypes = 'int:nonneg'
def cmd_THING(game, yx, thing_type, protection, thing_id, portable, commandable):
- t = game.get_thing(thing_id)
+ t = game.get_thing_temp(thing_id)
if not t:
t = ThingBase(game, thing_id)
- game.things += [t]
+ game.things_new += [t]
t.position = yx
t.type_ = thing_type
t.protection = protection
cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type char int:nonneg bool bool'
def cmd_THING_NAME(game, thing_id, name):
- t = game.get_thing(thing_id)
+ t = game.get_thing_temp(thing_id)
t.name = name
cmd_THING_NAME.argtypes = 'int:pos string'
def cmd_THING_FACE(game, thing_id, face):
- t = game.get_thing(thing_id)
+ t = game.get_thing_temp(thing_id)
t.face = face
cmd_THING_FACE.argtypes = 'int:pos string'
def cmd_THING_HAT(game, thing_id, hat):
- t = game.get_thing(thing_id)
+ t = game.get_thing_temp(thing_id)
t.hat = hat
cmd_THING_HAT.argtypes = 'int:pos string'
def cmd_THING_CHAR(game, thing_id, c):
- t = game.get_thing(thing_id)
+ t = game.get_thing_temp(thing_id)
t.thing_char = c
cmd_THING_CHAR.argtypes = 'int:pos char'
def cmd_MAP(game, geometry, size, content):
map_geometry_class = globals()['MapGeometry' + geometry]
- game.map_geometry = map_geometry_class(size)
- game.map_content = content
+ game.map_geometry_new = map_geometry_class(size)
+ game.map_content_new = content
if type(game.map_geometry) == MapGeometrySquare:
game.tui.movement_keys = {
game.tui.keys['square_move_up']: 'UP',
cmd_MAP.argtypes = 'string:map_geometry yx_tuple:pos string'
def cmd_FOV(game, content):
- game.fov = content
+ game.fov_new = content
cmd_FOV.argtypes = 'string'
def cmd_MAP_CONTROL(game, content):
- game.map_control_content = content
+ game.map_control_content_new = content
cmd_MAP_CONTROL.argtypes = 'string'
def cmd_GAME_STATE_COMPLETE(game):
- game.turn_complete = True
game.tui.do_refresh = True
game.tui.info_cached = None
+ game.things = game.things_new
+ game.portals = game.portals_new
+ game.annotations = game.annotations_new
+ game.fov = game.fov_new
+ game.map_geometry = game.map_geometry_new
+ game.map_content = game.map_content_new
+ game.map_control_content = game.map_control_content_new
game.player = game.get_thing(game.player_id)
+ game.turn_complete = True
if game.tui.mode.name == 'post_login_wait':
game.tui.switch_mode('play')
cmd_GAME_STATE_COMPLETE.argtypes = ''
def cmd_PORTAL(game, position, msg):
- game.portals[position] = msg
+ game.portals_new[position] = msg
cmd_PORTAL.argtypes = 'yx_tuple:nonneg string'
def cmd_PLAY_ERROR(game, msg):
cmd_ARGUMENT_ERROR.argtypes = 'string'
def cmd_ANNOTATION(game, position, msg):
- game.annotations[position] = msg
+ game.annotations_new[position] = msg
if game.tui.mode.shows_info:
game.tui.do_refresh = True
cmd_ANNOTATION.argtypes = 'yx_tuple:nonneg string'
cmd_THING_TYPE.argtypes = 'string char'
def cmd_THING_INSTALLED(game, thing_id):
- game.get_thing(thing_id).installed = True
+ game.get_thing_temp(thing_id).installed = True
cmd_THING_INSTALLED.argtypes = 'int:pos'
def cmd_THING_CARRYING(game, thing_id, carried_id):
- game.get_thing(thing_id).carrying = game.get_thing(carried_id)
+ game.get_thing_temp(thing_id).carrying = game.get_thing(carried_id)
cmd_THING_CARRYING.argtypes = 'int:pos int:pos'
def cmd_TERRAIN(game, terrain_char, terrain_desc):
turn_complete = False
tasks = {}
thing_types = {}
+ things_new = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.register_command(cmd_REPLY)
self.register_command(cmd_PLAYER_ID)
self.register_command(cmd_TURN)
+ self.register_command(cmd_PSEUDO_FOV_WIPE)
self.register_command(cmd_THING)
self.register_command(cmd_THING_TYPE)
self.register_command(cmd_THING_NAME)
self.map_content = ''
self.player_id = -1
self.annotations = {}
+ self.annotations_new = {}
self.portals = {}
+ self.portals_new = {}
self.terrains = {}
self.player = None
f.argtypes = self.commands[command_name].argtypes
return f
+ def get_thing_temp(self, id_):
+ for thing in self.things_new:
+ if id_ == thing.id_:
+ return thing
+ return None
+
class Mode:
def __init__(self, name, has_input_prompt=False, shows_info=False,
'MODE: %s – %s' % (self.mode.short_desc, help))
def draw_map():
- if not self.game.turn_complete and len(self.map_lines) == 0:
+ if (not self.game.turn_complete) and len(self.map_lines) == 0:
return
if self.game.turn_complete:
map_lines_split = []
def draw_face_popup():
t = self.game.get_thing(self.draw_face)
- if not t:
+ if not t or not hasattr(t, 'face'):
self.draw_face = False
return
start_x = self.window_width - 10
+ t_char = ' '
+ if hasattr(t, 'thing_char'):
+ t_char = t.thing_char
def draw_body_part(body_part, end_y):
- safe_addstr(end_y - 4, start_x, ' ________ ')
+ safe_addstr(end_y - 4, start_x, ' _[ @' + t_char + ' ]_ ')
safe_addstr(end_y - 3, start_x, '| |')
safe_addstr(end_y - 2, start_x, '| ' + body_part[0:6] + ' |')
safe_addstr(end_y - 1, start_x, '| ' + body_part[6:12] + ' |')