home · contact · privacy
On name thing prohibition, switch back to edit mode; disappear help in curses client...
[plomrogue2] / rogue_chat.html
index ebe64f2041fe4a4f755da1bea1a670185c23cdc2..51e8078611bf510f5c4656f7724f3dfecaf643a0 100644 (file)
@@ -454,7 +454,6 @@ let server = {
         this.url = url;
         this.websocket = new WebSocket(this.url);
         this.websocket.onopen = function(event) {
-            server.connected = true;
             game.thing_types = {};
             game.terrains = {};
             server.send(['TASKS']);
@@ -464,7 +463,6 @@ let server = {
             tui.switch_mode('login');
         };
         this.websocket.onclose = function(event) {
-            server.connected = false;
             tui.switch_mode('waiting_for_server');
             tui.log_msg("@ server disconnected :(");
         };
@@ -532,11 +530,13 @@ let server = {
             game.map_control = tokens[1]
         } else if (tokens[0] === 'GAME_STATE_COMPLETE') {
             game.turn_complete = true;
+            game.player = game.things[game.player_id];
+            explorer.info_cached = false;
             if (tui.mode.name == 'post_login_wait') {
                 tui.switch_mode('play');
+            } else {
+                tui.full_refresh();
             }
-            explorer.info_cached = false;
-            tui.full_refresh();
         } else if (tokens[0] === 'CHAT') {
              tui.log_msg('# ' + tokens[1], 1);
         } else if (tokens[0] === 'REPLY') {
@@ -763,22 +763,26 @@ let tui = {
       return game.tasks.includes(this.action_tasks[action]);
   },
   switch_mode: function(mode_name) {
+
+    function fail(msg, return_mode) {
+        tui.log_msg('? ' + msg);
+        terminal.blink_screen();
+        this.switch_mode(return_mode);
+    }
+
     if (this.mode && this.mode.name == 'control_tile_draw') {
         tui.log_msg('@ finished tile protection drawing.')
     }
     this.tile_draw = false;
-    const player = game.things[game.player_id];
-    if (mode_name == 'command_thing' && (!player.carrying || !player.carrying.commandable)) {
-        this.log_msg('? not carrying anything commandable');
-        terminal.blink_screen();
-        this.switch_mode('play');
-        return;
+      if (mode_name == 'command_thing' && (!game.player.carrying
+                                           || !game.player.carrying.commandable)) {
+        return fail('not carrying anything commandable', 'play');
     };
-    if (mode_name == 'drop_thing' && (!player.carrying)) {
-        this.log_msg('? not carrying anything droppable');
-        terminal.blink_screen();
-        this.switch_mode('play');
-        return;
+    if (mode_name == 'take_thing' && game.player.carrying) {
+        return fail('already carrying something', 'play');
+    };
+    if (mode_name == 'drop_thing' && !game.player.carrying) {
+        return fail('not carrying anything droppable', 'play');
     }
     if (mode_name == 'admin_enter' && this.is_admin) {
         mode_name = 'admin';
@@ -789,16 +793,14 @@ let tui = {
                 continue;
             }
             let t = game.things[t_id];
-            if (player.position[0] == t.position[0]
-                && player.position[1] == t.position[1]) {
+            if (game.player.position[0] == t.position[0]
+                && game.player.position[1] == t.position[1]) {
                 thing_id = t_id;
                 break;
             }
         }
         if (!thing_id) {
-            terminal.blink_screen();
-            this.log_msg('? not standing over thing');
-            return;
+            return fail('not standing over thing', 'fail');
         } else {
             this.selected_thing_id = thing_id;
         }
@@ -813,7 +815,7 @@ let tui = {
         this.inputEl.focus();
     }
     if (game.player_id in game.things && (this.mode.shows_info || this.mode.name == 'control_tile_draw')) {
-        explorer.position = game.things[game.player_id].position;
+        explorer.position = game.player.position;
     }
     this.inputEl.value = "";
     this.restore_input_values();
@@ -850,9 +852,8 @@ let tui = {
         this.show_help = true;
     } else if (this.mode.name == 'take_thing') {
         this.log_msg("Portable things in reach for pick-up:");
-        const player = game.things[game.player_id];
-        const y = player.position[0]
-        const x = player.position[1]
+        const y = game.player.position[0]
+        const x = game.player.position[1]
         let select_range = [y.toString() + ':' + x.toString(),
                             (y + 0).toString() + ':' + (x - 1).toString(),
                             (y + 0).toString() + ':' + (x + 1).toString(),
@@ -1044,8 +1045,9 @@ let tui = {
         };
         map_lines_split.push(line);
         if (this.map_mode == 'terrain + annotations') {
-            for (const coordinate of explorer.info_hints) {
-                map_lines_split[coordinate[0]][coordinate[1]] = 'A ';
+            for (const [coordinate, _] of Object.entries(explorer.annotations)) {
+                const yx = coordinate.split(',')
+                map_lines_split[yx[0]][yx[1]] = 'A ';
             }
         } else if (this.map_mode == 'terrain + things') {
             for (const p in game.portals) {
@@ -1082,11 +1084,10 @@ let tui = {
                 }
             };
         }
-        let player = game.things[game.player_id];
         if (tui.mode.shows_info || tui.mode.name == 'control_tile_draw') {
             map_lines_split[explorer.position[0]][explorer.position[1]] = '??';
         } else if (tui.map_mode != 'terrain + things') {
-            map_lines_split[player.position[0]][player.position[1]] = '??';
+            map_lines_split[game.player.position[0]][game.player.position[1]] = '??';
         }
         this.map_lines = []
         if (game.map_geometry == 'Square') {
@@ -1105,7 +1106,7 @@ let tui = {
             };
         }
         let window_center = [terminal.rows / 2, this.window_width / 2];
-        let center_position = [player.position[0], player.position[1]];
+        let center_position = [game.player.position[0], game.player.position[1]];
         if (tui.mode.shows_info || tui.mode.name == 'control_tile_draw') {
             center_position = [explorer.position[0], explorer.position[1]];
         }
@@ -1327,9 +1328,8 @@ let game = {
         return target;
     },
     teleport: function() {
-        let player = this.get_thing(game.player_id);
-        if (player.position in this.portals) {
-            server.reconnect_to(this.portals[player.position]);
+        if (game.player.position in this.portals) {
+            server.reconnect_to(this.portals[game.player.position]);
         } else {
             terminal.blink_screen();
             tui.log_msg('? not standing on portal')
@@ -1660,13 +1660,13 @@ for (let key_selector of key_selectors) {
     }, false);
 }
 window.setInterval(function() {
-    if (server.connected) {
+    if (server.websocket.readyState == 1) {
         server.send(['PING']);
-    } else {
+    } else if (server.websocket.readyState != 0) {
         server.reconnect_to(server.url);
         tui.log_msg('@ attempting reconnect …')
     }
-}, 5000);
+}, 1000);
 window.setInterval(function() {
     let val = "?";
     let span_decoration = "none";