for i in range(len(self.selectables)):
self.log_msg(str(i) + ': ' + self.selectables[i])
elif self.mode.name == 'enter_design':
- self.log_msg('@ The design you enter must be %s lines of max %s '
- 'characters width each'
- % (self.game.player.carrying.design[0].y,
- self.game.player.carrying.design[0].x))
if self.game.player.carrying.type_ == 'Hat':
+ self.log_msg('@ The design you enter must be %s lines of max %s '
+ 'characters width each'
+ % (self.game.player.carrying.design[0].y,
+ self.game.player.carrying.design[0].x))
self.log_msg('@ Legal characters: ' + self.game.players_hat_chars)
self.log_msg('@ (Eat cookies to extend the ASCII characters available for drawing.)')
+ else:
+ self.log_msg('@ Width of first line determines maximum width for remaining design')
+ self.log_msg('@ Finish design by entering an empty line (multiple space characters do not count as empty)')
elif self.mode.name == 'command_thing':
self.send('TASK:COMMAND ' + quote('HELP'))
elif self.mode.name == 'control_pw_pw':
else:
for t in self.game.things:
if t.position == self.explorer:
- info_to_cache += 'THING: %s' % self.get_thing_info(t)
- protection = t.protection
- if protection == '.':
- protection = 'none'
- info_to_cache += ' / protection: %s\n' % protection
- if hasattr(t, 'hat'):
- info_to_cache += t.hat[0:6] + '\n'
- info_to_cache += t.hat[6:12] + '\n'
- info_to_cache += t.hat[12:18] + '\n'
- if hasattr(t, 'face'):
- info_to_cache += t.face[0:6] + '\n'
- info_to_cache += t.face[6:12] + '\n'
- info_to_cache += t.face[12:18] + '\n'
- if hasattr(t, 'design'):
- line_length = t.design[0].x
- lines = []
- for i in range(t.design[0].y):
- start = i * line_length
- end = (i + 1) * line_length
- lines += [t.design[1][start:end]]
- if t.type_ == 'Sign':
- info_to_cache += '-' * (line_length + 4) + '\n'
- for line in lines:
- info_to_cache += '| %s |\n' % line
- info_to_cache += '-' * (line_length + 4) + '\n'
- else:
- for line in lines:
- info_to_cache += '%s\n' % line
+ info_to_cache += '%s' % self.get_thing_info(t, True)
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_to_cache += 'TERRAIN: "%s" / %s\n' % (terrain_char,
+ info_to_cache += 'TERRAIN: %s (%s' % (terrain_char,
terrain_desc)
protection = self.game.map_control_content[pos_i]
- if protection == '.':
- protection = 'unprotected'
- info_to_cache += 'PROTECTION: %s\n' % protection
+ if protection != '.':
+ info_to_cache += '/protection:%s' % protection
+ info_to_cache += ')\n'
if self.explorer in self.game.portals:
info_to_cache += 'PORTAL: ' +\
self.game.portals[self.explorer] + '\n'
- else:
- info_to_cache += 'PORTAL: (none)\n'
if self.explorer in self.game.annotations:
info_to_cache += 'ANNOTATION: ' +\
self.game.annotations[self.explorer]
self.info_cached = info_to_cache
return self.info_cached
- def get_thing_info(self, t):
- info = '%s / %s' %\
- (t.type_, self.game.thing_types[t.type_])
+ def get_thing_info(self, t, detailed=False):
+ info = ''
+ if detailed:
+ info += '- '
+ info += self.game.thing_types[t.type_]
if hasattr(t, 'thing_char'):
info += t.thing_char
if hasattr(t, 'name'):
- info += ' (%s)' % t.name
+ info += ': %s' % t.name
+ info += ' (%s' % t.type_
if hasattr(t, 'installed'):
- info += ' / installed'
+ info += '/installed'
+ if t.type_ == 'Bottle':
+ if t.thing_char == '_':
+ info += '/empty'
+ elif t.thing_char == '~':
+ info += '/full'
+ if detailed:
+ protection = t.protection
+ if protection != '.':
+ info += '/protection:%s' % protection
+ info += ')\n'
+ if hasattr(t, 'hat') or hasattr(t, 'face'):
+ info += '----------\n'
+ if hasattr(t, 'hat'):
+ info += '| %s |\n' % t.hat[0:6]
+ info += '| %s |\n' % t.hat[6:12]
+ info += '| %s |\n' % t.hat[12:18]
+ if hasattr(t, 'face'):
+ info += '| %s |\n' % t.face[0:6]
+ info += '| %s |\n' % t.face[6:12]
+ info += '| %s |\n' % t.face[12:18]
+ info += '----------\n'
+ if hasattr(t, 'design'):
+ line_length = t.design[0].x
+ lines = []
+ for i in range(t.design[0].y):
+ start = i * line_length
+ end = (i + 1) * line_length
+ lines += [t.design[1][start:end]]
+ info += '-' * (line_length + 4) + '\n'
+ for line in lines:
+ info += '| %s |\n' % line
+ info += '-' * (line_length + 4) + '\n'
+ else:
+ info += ')'
return info
def loop(self, stdscr):
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, ' _[ @' + t_char + ' ]_ ')
- safe_addstr(end_y - 3, start_x, '| |')
+ 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] + ' |')
safe_addstr(end_y, start_x, '| ' + body_part[12:18] + ' |')
if hasattr(t, 'face'):
- draw_body_part(t.face, self.size.y - 2)
+ draw_body_part(t.face, self.size.y - 3)
if hasattr(t, 'hat'):
- draw_body_part(t.hat, self.size.y - 5)
- safe_addstr(self.size.y - 1, start_x, '| |')
+ draw_body_part(t.hat, self.size.y - 6)
+ safe_addstr(self.size.y - 2, start_x, '----------')
+ name = t.name[:]
+ if len(name) > 6:
+ name = name[:6] + '…'
+ safe_addstr(self.size.y - 1, start_x,
+ '@%s:%s' % (t.thing_char, name))
def draw_help():
content = "%s help\n\n%s\n\n" % (self.mode.short_desc,
self.input_ = ''
self.switch_mode('play')
- def enter_ascii_art(command, height, width, with_pw=False):
- if len(self.input_) > width:
- self.log_msg('? wrong input length, '
+ def enter_ascii_art(command, height, width,
+ with_pw=False, with_size=False):
+ if with_size and self.ascii_draw_stage == 0:
+ width = len(self.input_)
+ if width > 36:
+ self.log_msg('? input too long, must be max 36; try again')
+ # TODO: move max width mechanism server-side
+ return
+ old_size = self.game.player.carrying.design[0]
+ if width != old_size.x:
+ # TODO: save remaining design?
+ self.game.player.carrying.design[1] = ''
+ self.game.player.carrying.design[0] = YX(old_size.y, width)
+ elif len(self.input_) > width:
+ self.log_msg('? input too long, '
'must be max %s; try again' % width)
return
- if len(self.input_) < width:
- self.input_ += ' ' * (width - len(self.input_))
self.log_msg(' ' + self.input_)
- self.full_ascii_draw += self.input_
+ if with_size and self.input_ in {'', ' '}\
+ and self.ascii_draw_stage > 0:
+ height = self.ascii_draw_stage
+ else:
+ if with_size:
+ height = self.ascii_draw_stage + 2
+ if len(self.input_) < width:
+ self.input_ += ' ' * (width - len(self.input_))
+ self.full_ascii_draw += self.input_
+ if with_size:
+ old_size = self.game.player.carrying.design[0]
+ self.game.player.carrying.design[0] = YX(height, old_size.x)
self.ascii_draw_stage += 1
if self.ascii_draw_stage < height:
self.restore_input_values()
else:
+ if with_pw and with_size:
+ self.send('%s_SIZE %s %s' % (command, YX(height, width),
+ quote(self.password)))
if with_pw:
self.send('%s %s %s' % (command, quote(self.full_ascii_draw),
quote(self.password)))
elif self.mode.name == 'enter_face' and key == '\n':
enter_ascii_art('PLAYER_FACE', 3, 6)
elif self.mode.name == 'enter_design' and key == '\n':
- enter_ascii_art('THING_DESIGN',
- self.game.player.carrying.design[0].y,
- self.game.player.carrying.design[0].x, True)
+ if self.game.player.carrying.type_ == 'Hat':
+ enter_ascii_art('THING_DESIGN',
+ self.game.player.carrying.design[0].y,
+ self.game.player.carrying.design[0].x, True)
+ else:
+ enter_ascii_art('THING_DESIGN',
+ self.game.player.carrying.design[0].y,
+ self.game.player.carrying.design[0].x,
+ True, True)
elif self.mode.name == 'take_thing' and key == '\n':
pick_selectable('PICK_UP')
elif self.mode.name == 'drop_thing' and key == '\n':