home · contact · privacy
In clients, enter ASCII art line by line.
[plomrogue2] / rogue_chat.html
index d86eec5ee65d4c3e06f43b55ac351a22cb13f225..45a8525db70aa0b7c3c8e69e44a7ed61b3fb5e13 100644 (file)
@@ -718,6 +718,8 @@ let tui = {
   },
   offset: [0,0],
   map_lines: [],
+  ascii_draw_stage: 0,
+  full_ascii_draw: '',
   selectables: [],
   draw_face: false,
   init: function() {
@@ -911,6 +913,8 @@ let tui = {
         for (let [i, direction] of this.selectables.entries()) {
             this.log_msg(i + ': ' + direction);
         };
+    } else if (this.mode.name == 'enter_hat') {
+        this.log_msg('legal characters: ' + game.players_hat_chars);
     } else if (this.mode.name == 'command_thing') {
         server.send(['TASK:COMMAND', 'HELP']);
     } else if (this.mode.name == 'control_pw_pw') {
@@ -953,10 +957,14 @@ let tui = {
           if (t && t.protection) {
               this.inputEl.value = t.protection;
           }
-      } else if (this.mode.name == 'enter_face' && game.player.face) {
-          this.inputEl.value = game.player.face;
-      } else if (this.mode.name == 'enter_hat' && game.player.hat) {
-          this.inputEl.value = game.player.hat;
+      } else if (['enter_face', 'enter_hat'].includes(this.mode.name)) {
+          const start = this.ascii_draw_stage * 6;
+          const end = (this.ascii_draw_stage + 1) * 6;
+          if (this.mode.name == 'enter_face') {
+              this.inputEl.value = game.player.face.slice(start, end);
+          } else if (this.mode.name == 'enter_hat') {
+              this.inputEl.value = game.player.hat.slice(start, end);
+          }
       }
   },
   recalc_input_lines: function() {
@@ -1045,6 +1053,24 @@ let tui = {
       this.inputEl.value = "";
       this.switch_mode('play');
   },
+  enter_ascii_art: function(command) {
+      if (this.inputEl.value.length != 6) {
+          this.log_msg('? wrong input length, try again');
+          return;
+      }
+      this.log_msg('  ' + this.inputEl.value);
+      this.full_ascii_draw += this.inputEl.value;
+      this.ascii_draw_stage += 1;
+      if (this.ascii_draw_stage < 3) {
+          this.restore_input_values();
+      } else {
+          server.send([command, this.full_ascii_draw]);
+          this.full_ascii_draw = '';
+          this.ascii_draw_stage = 0;
+          this.inputEl.value = '';
+          this.switch_mode('edit');
+      }
+  },
   draw_map: function() {
     if (!game.turn_complete && this.map_lines.length == 0) {
         return;
@@ -1552,21 +1578,9 @@ tui.inputEl.addEventListener('keydown', (event) => {
         server.send(['LOGIN', tui.inputEl.value]);
         tui.inputEl.value = "";
     } else if (tui.mode.name == 'enter_face' && event.key == 'Enter') {
-        if (tui.inputEl.value.length != 18) {
-            tui.log_msg('? wrong input length, aborting');
-        } else {
-            server.send(['PLAYER_FACE', tui.inputEl.value]);
-        }
-        tui.inputEl.value = "";
-        tui.switch_mode('edit');
+        tui.enter_ascii_art('PLAYER_FACE');
     } else if (tui.mode.name == 'enter_hat' && event.key == 'Enter') {
-        if (tui.inputEl.value.length != 18) {
-            tui.log_msg('? wrong input length, aborting');
-        } else {
-            server.send(['PLAYER_HAT', tui.inputEl.value]);
-        }
-        tui.inputEl.value = "";
-        tui.switch_mode('edit');
+        tui.enter_ascii_art('PLAYER_HAT');
     } else if (tui.mode.name == 'command_thing' && event.key == 'Enter') {
         server.send(['TASK:COMMAND', tui.inputEl.value]);
         tui.inputEl.value = "";