X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=rogue_chat_nocanvas_monochrome.html;h=971677687357b5d54a51701005a4fed4ec0b6d08;hb=06c3b773099e2264831d5f4b4650eadb9290b296;hp=e5bef1aa4d8a55ea2450874ab81def6e346b078b;hpb=6bf479a40acf55042c5ea4834701d09073af172c;p=plomrogue2 diff --git a/rogue_chat_nocanvas_monochrome.html b/rogue_chat_nocanvas_monochrome.html index e5bef1a..9716776 100644 --- a/rogue_chat_nocanvas_monochrome.html +++ b/rogue_chat_nocanvas_monochrome.html @@ -23,6 +23,8 @@ move down-left (hex grid):
help:
flatten surroundings:
+take thing under player:
+drop carried thing:
switch to chat mode:
switch to play mode:
switch to study mode:
@@ -175,20 +177,20 @@ let server = { this.url = url; this.websocket = new WebSocket(this.url); this.websocket.onopen = function(event) { - window.setInterval(function() { server.send(['PING']) }, 30000); - this.send('TASKS'); + server.connected = true; + game.thing_types = {}; + server.send(['TASKS']); + server.send(['THING_TYPES']); tui.log_msg("@ server connected! :)"); tui.switch_mode(mode_login); }; this.websocket.onclose = function(event) { + server.connected = false; + tui.switch_mode(mode_waiting_for_server); tui.log_msg("@ server disconnected :("); - tui.log_msg("@ hint: try the '/reconnect' command"); }; this.websocket.onmessage = this.handle_event; }, - reconnect: function() { - this.reconnect_to(this.url); - }, reconnect_to: function(url) { this.websocket.close(); this.init(url); @@ -203,17 +205,31 @@ 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] === 'THING_CHAR') { + let t = game.get_thing(tokens[1], false); + if (t) { + t.player_char = 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(); game.map_size = parser.parse_yx(tokens[2]); game.map = tokens[3] + } else if (tokens[0] === 'FOV') { + game.fov = tokens[1] } else if (tokens[0] === 'MAP_CONTROL') { game.map_control = tokens[1] } else if (tokens[0] === 'GAME_STATE_COMPLETE') { @@ -253,7 +269,7 @@ let server = { } else if (tokens[0] === 'GAME_ERROR') { tui.log_msg('? game error: ' + tokens[1]); } else if (tokens[0] === 'PONG') { - console.log('PONG'); + ; } else { tui.log_msg('? unhandled input: ' + event.data); } @@ -297,7 +313,7 @@ class Mode { let mode_waiting_for_server = new Mode('waiting_for_server', 'Waiting for a server response.', false, false, true); let mode_login = new Mode('login', 'Pick your player name.', true, false, true); let mode_post_login_wait = new Mode('waiting for game world', 'Waiting for a server response.', false, false, true); -let mode_chat = new Mode('chat', 'This mode allows you to engage in chit-chat with other users. Any line you enter into the input prompt that does not start with a "/" will be sent to all users. Lines that start with a "/" are used for commands like:', true, false); +let mode_chat = new Mode('chat', 'This mode allows you to engage in chit-chat with other users. Any line you enter into the input prompt that does not start with a "/" will be sent out to nearby players – but barriers and distance will reduce what they can read, so stand close to them to ensure they get your message. Lines that start with a "/" are used for commands like:', true, false); let mode_annotate = new Mode('annotate', 'This mode allows you to add/edit a comment on the tile you are currently standing on (provided your map editing password authorizes you so). Hit Return to leave.', true, true); let mode_play = new Mode('play', 'This mode allows you to interact with the map.', false, false); let mode_study = new Mode('study', 'This mode allows you to study the map and its tiles in detail. Move the question mark over a tile, and the right half of the screen will show detailed information on it.', false, true); @@ -434,27 +450,37 @@ let tui = { line = []; j = 0; }; - line.push(map_content[i]); + line.push(map_content[i] + ' '); }; map_lines_split.push(line); if (this.map_mode == 'terrain') { + let used_positions = []; 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_]; + let meta_char = ' '; + if (t.player_char) { + meta_char = t.player_char; + } + if (used_positions.includes(t.position.toString())) { + meta_char = '+'; + }; + map_lines_split[t.position[0]][t.position[1]] = symbol + meta_char; + used_positions.push(t.position.toString()); }; } if (tui.mode.shows_info) { - map_lines_split[explorer.position[0]][explorer.position[1]] = '?'; + map_lines_split[explorer.position[0]][explorer.position[1]] = '??'; } let map_lines = [] if (game.map_geometry == 'Square') { for (let line_split of map_lines_split) { - map_lines.push(line_split.join(' ')); + map_lines.push(line_split.join('')); }; } else if (game.map_geometry == 'Hex') { let indent = 0 for (let line_split of map_lines_split) { - map_lines.push(' '.repeat(indent) + line_split.join(' ')); + map_lines.push(' '.repeat(indent) + line_split.join('')); if (indent == 0) { indent = 1; } else { @@ -526,6 +552,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"; } @@ -545,7 +577,7 @@ let tui = { content += '[' + this.keys.switch_to_play + '] – play mode\n'; } else if (this.mode == mode_chat) { content += '/nick NAME – re-name yourself to NAME\n'; - content += '/msg USER TEXT – send TEXT to USER\n'; + //content += '/msg USER TEXT – send TEXT to USER\n'; content += '/' + this.keys.switch_to_play + ' or /play – switch to play mode\n'; content += '/' + this.keys.switch_to_study + ' or /study – switch to study mode\n'; } @@ -681,15 +713,22 @@ let explorer = { server.send(["GET_ANNOTATION", unparser.to_yx(explorer.position)]); }, get_info: function() { - let info = ""; let position_i = this.position[0] * game.map_size[1] + this.position[1]; + if (game.fov[position_i] != '.') { + return 'outside field of view'; + }; + let info = ""; info += "TERRAIN: " + game.map[position_i] + "\n"; 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 @"; + let symbol = game.thing_types[t.type_]; + info += "THING: " + t.type_ + " / " + symbol; + if (t.player_char) { + info += t.player_char; + }; if (t.name_) { - info += ": " + t.name_; + info += " (" + t.name_ + ")"; } info += "\n"; } @@ -779,19 +818,13 @@ tui.inputEl.addEventListener('keydown', (event) => { } else { tui.log_msg('? need new name'); } - } else if (tokens[0].slice(1) == 'msg') { - if (tokens.length > 2) { - let msg = tui.inputEl.value.slice(token_starts[2]); - server.send(['QUERY', tokens[1], msg]); - } else { - tui.log_msg('? need message target and message'); - } - } else if (tokens[0].slice(1) == 'reconnect') { - if (tokens.length > 1) { - server.reconnect_to(tokens[1]); - } else { - server.reconnect(); - } + //} else if (tokens[0].slice(1) == 'msg') { + // if (tokens.length > 2) { + // let msg = tui.inputEl.value.slice(token_starts[2]); + // server.send(['QUERY', tokens[1], msg]); + // } else { + // tui.log_msg('? need message target and message'); + // } } else { tui.log_msg('? unknown command'); } @@ -818,6 +851,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]]); @@ -876,5 +915,13 @@ window.setInterval(function() { tui.inputEl.focus(); } }, 100); +window.setInterval(function() { + if (server.connected) { + server.send(['PING']); + } else { + server.reconnect_to(server.url); + tui.log_msg('@ attempting reconnect …') + } +}, 5000);