+ if self.draw_face and self.mode.name in {'chat', 'play'}:
+ draw_face_popup()
+
+ def pick_selectable(task_name):
+ try:
+ i = int(self.input_)
+ if i < 0 or i >= len(self.selectables):
+ self.log_msg('? invalid index, aborted')
+ else:
+ self.send('TASK:%s %s' % (task_name, self.selectables[i]))
+ except ValueError:
+ self.log_msg('? invalid index, aborted')
+ self.input_ = ''
+ self.switch_mode('play')
+
+ 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
+ self.log_msg(' ' + 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)))
+ else:
+ self.send('%s %s' % (command, quote(self.full_ascii_draw)))
+ self.full_ascii_draw = ""
+ self.ascii_draw_stage = 0
+ self.input_ = ""
+ self.switch_mode('edit')