home · contact · privacy
Add item picking and dropping.
[plomrogue2] / rogue_chat_nocanvas_monochrome.html
index e699a96efee25a3f51970df37916bc3e69eba425..f978421590815a40877f704e13001bc72631c6e3 100644 (file)
@@ -23,6 +23,8 @@ move down-left (hex grid): <input id="key_hex_move_downleft" type="text" value="
 move left (hex grid): <input id="key_hex_move_left" type="text" value="a" /><br />
 help: <input id="key_help" type="text" value="h" /><br />
 flatten surroundings: <input id="key_flatten" type="text" value="F" /><br />
+take thing under player: <input id="key_take_thing" type="text" value="z" /><br />
+drop carried thing: <input id="key_drop_thing" type="text" value="u" /><br />
 switch to chat mode: <input id="key_switch_to_chat" type="text" value="t" /><br />
 switch to play mode: <input id="key_switch_to_play" type="text" value="p" /><br />
 switch to study mode: <input id="key_switch_to_study" type="text" value="?" /><br />
@@ -177,7 +179,9 @@ let server = {
         this.websocket = new WebSocket(this.url);
         this.websocket.onopen = function(event) {
             server.connected = true;
+            game.thing_types = {};
             server.send(['TASKS']);
+            server.send(['THING_TYPES']);
             tui.log_msg("@ server connected! :)");
             tui.switch_mode(mode_login);
         };
@@ -202,12 +206,19 @@ let server = {
             game.things = {};
             game.portals = {};
             game.turn = parseInt(tokens[1]);
-        } else if (tokens[0] === 'THING_POS') {
-            game.get_thing(tokens[1], true).position = parser.parse_yx(tokens[2]);
+        } else if (tokens[0] === 'THING') {
+            let t = game.get_thing(tokens[3], true);
+            t.position = parser.parse_yx(tokens[1]);
+            t.type_ = tokens[2];
         } else if (tokens[0] === 'THING_NAME') {
-            game.get_thing(tokens[1], true).name_ = tokens[2];
+            let t = game.get_thing(tokens[1], false);
+            if (t) {
+                t.name_ = tokens[2];
+            };
         } else if (tokens[0] === 'TASKS') {
             game.tasks = tokens[1].split(',')
+        } else if (tokens[0] === 'THING_TYPE') {
+            game.thing_types[tokens[1]] = tokens[2]
         } else if (tokens[0] === 'MAP') {
             game.map_geometry = tokens[1];
             tui.init_keys();
@@ -441,7 +452,8 @@ let tui = {
     if (this.map_mode == 'terrain') {
         for (const thing_id in game.things) {
             let t = game.things[thing_id];
-            map_lines_split[t.position[0]][t.position[1]] = '@';
+            let symbol = game.thing_types[t.type_];
+            map_lines_split[t.position[0]][t.position[1]] = symbol;
         };
     }
     if (tui.mode.shows_info) {
@@ -527,6 +539,12 @@ let tui = {
           if (game.tasks.includes('MOVE')) {
               content += "[" + movement_keys_desc + "] – move player\n";
           }
+          if (game.tasks.includes('PICK_UP')) {
+              content += "[" + this.keys.take_thing + "] – take thing under player\n";
+          }
+          if (game.tasks.includes('DROP')) {
+              content += "[" + this.keys.drop_thing + "] – drop carried thing\n";
+          }
           if (game.tasks.includes('FLATTEN_SURROUNDINGS')) {
               content += "[" + tui.keys.flatten + "] – flatten player's surroundings\n";
           }
@@ -691,9 +709,9 @@ let explorer = {
         for (let t_id in game.things) {
              let t = game.things[t_id];
              if (t.position[0] == this.position[0] && t.position[1] == this.position[1]) {
-                 info += "PLAYER @";
+                 info += "THING: " + t.type_;
                  if (t.name_) {
-                     info += ": " + t.name_;
+                     info += " (name: " + t.name_ + ")";
                  }
                  info += "\n";
              }
@@ -816,6 +834,12 @@ tui.inputEl.addEventListener('keydown', (event) => {
           } else if (event.key === tui.keys.flatten
                      && game.tasks.includes('FLATTEN_SURROUNDINGS')) {
               server.send(["TASK:FLATTEN_SURROUNDINGS", tui.password]);
+          } else if (event.key === tui.keys.take_thing
+                     && game.tasks.includes('PICK_UP')) {
+              server.send(["TASK:PICK_UP"]);
+          } else if (event.key === tui.keys.drop_thing
+                     && game.tasks.includes('DROP')) {
+              server.send(["TASK:DROP"]);
           } else if (event.key in tui.movement_keys
                      && game.tasks.includes('MOVE')) {
               server.send(['TASK:MOVE', tui.movement_keys[event.key]]);