home · contact · privacy
In clients, enter ASCII art line by line.
[plomrogue2] / rogue_chat_curses.py
index 41ad640d509a123774d47033e182156d664af583..ebefc1025eddf63a2a30c6e4e27ab3983239ff76 100755 (executable)
@@ -582,6 +582,8 @@ class TUI:
         self.fov = ''
         self.flash = False
         self.map_lines = []
+        self.ascii_draw_stage = 0
+        self.full_ascii_draw = ''
         self.offset = YX(0,0)
         curses.wrapper(self.loop)
 
@@ -652,10 +654,13 @@ class TUI:
         elif self.mode.name == 'admin_thing_protect':
             if hasattr(self.thing_selected, 'protection'):
                 self.input_ = self.thing_selected.protection
-        elif self.mode.name == 'enter_face':
-            self.input_ = self.game.player.face
-        elif self.mode.name == 'enter_hat':
-            self.input_ = self.game.player.hat
+        elif self.mode.name in {'enter_face', 'enter_hat'}:
+            start = self.ascii_draw_stage * 6
+            end = (self.ascii_draw_stage + 1) * 6
+            if self.mode.name == 'enter_face':
+                self.input_ = self.game.player.face[start:end]
+            elif self.mode.name == 'enter_hat':
+                self.input_ = self.game.player.hat[start:end]
 
     def send_tile_control_command(self):
         self.send('SET_TILE_CONTROL %s %s' %
@@ -1091,6 +1096,22 @@ class TUI:
             self.input_ = ''
             self.switch_mode('play')
 
+        def enter_ascii_art(command):
+            if len(self.input_) != 6:
+                self.log_msg('? wrong input length, try again')
+                return
+            self.log_msg('  ' + self.input_)
+            self.full_ascii_draw += self.input_
+            self.ascii_draw_stage += 1
+            if self.ascii_draw_stage < 3:
+                self.restore_input_values()
+            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')
+
         action_descriptions = {
             'move': 'move',
             'flatten': 'flatten surroundings',
@@ -1192,19 +1213,9 @@ class TUI:
                 self.send('LOGIN ' + quote(self.input_))
                 self.input_ = ""
             elif self.mode.name == 'enter_face' and key == '\n':
-                if len(self.input_) != 18:
-                    self.log_msg('? wrong input length, aborting')
-                else:
-                    self.send('PLAYER_FACE %s' % quote(self.input_))
-                self.input_ = ""
-                self.switch_mode('edit')
+                enter_ascii_art('PLAYER_FACE')
             elif self.mode.name == 'enter_hat' and key == '\n':
-                if len(self.input_) != 18:
-                    self.log_msg('? wrong input length, aborting')
-                else:
-                    self.send('PLAYER_HAT %s' % quote(self.input_))
-                self.input_ = ""
-                self.switch_mode('edit')
+                enter_ascii_art('PLAYER_HAT')
             elif self.mode.name == 'take_thing' and key == '\n':
                 pick_selectable('PICK_UP')
             elif self.mode.name == 'drop_thing' and key == '\n':