X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=rogue_chat.html;h=82bfbed97fd8902e48aca9e86bb8ec3e15c109eb;hb=2dc444966037a42b51ed190ab0eab88a09c0282a;hp=35dc5d4aa812e88907dcdc80348f12e04b0476f2;hpb=feb0ffb7c7523ddee0cbd685cbc9c2e768a56cbd;p=plomrogue2 diff --git a/rogue_chat.html b/rogue_chat.html index 35dc5d4..82bfbed 100644 --- a/rogue_chat.html +++ b/rogue_chat.html @@ -16,7 +16,7 @@ terminal rows:

-
+
 

button controls for hard-to-remember keybindings

@@ -54,6 +54,7 @@ terminal rows: + @@ -101,6 +102,7 @@ terminal rows:
  • flatten surroundings:
  • teleport:
  • spin: +
  • dance:
  • open/close:
  • consume:
  • install: @@ -262,6 +264,7 @@ let key_descriptions = { 'install': '(un-)install', 'wear': '(un-)wear', 'spin': 'spin', + 'dance': 'dance', 'toggle_map_mode': 'toggle map view', 'toggle_tile_draw': 'toggle protection character drawing', 'hex_move_upleft': 'up-left', @@ -485,11 +488,13 @@ let server = { let tokens = parser.tokenize(event.data); if (tokens[0] === 'TURN') { game.turn_complete = false; - game.turn = parseInt(tokens[1]); } else if (tokens[0] === 'OTHER_WIPE') { game.portals_new = {}; explorer.annotations_new = {}; game.things_new = []; + } else if (tokens[0] === 'STATS') { + game.bladder_pressure_new = parseInt(tokens[1]) + game.energy_new = parseInt(tokens[2]) } else if (tokens[0] === 'THING') { let t = game.get_thing_temp(tokens[4], true); t.position = parser.parse_yx(tokens[1]); @@ -546,6 +551,8 @@ let server = { game.things = game.things_new; game.player = game.things[game.player_id]; game.players_hat_chars = game.players_hat_chars_new; + game.bladder_pressure = game.bladder_pressure_new + game.energy = game.energy_new game.turn_complete = true; if (tui.mode.name == 'post_login_wait') { tui.switch_mode('play'); @@ -566,6 +573,9 @@ let server = { } else if (tokens[0] === 'LOGIN_OK') { this.send(['GET_GAMESTATE']); tui.switch_mode('post_login_wait'); + tui.log_msg('@ welcome!') + tui.log_msg('@ hint: see top of terminal for how to get help.') + tui.log_msg('@ hint: enter study mode to understand your environment.') } else if (tokens[0] === 'DEFAULT_COLORS') { terminal.set_default_colors(); } else if (tokens[0] === 'RANDOM_COLORS') { @@ -717,6 +727,7 @@ let tui = { 'command': 'COMMAND', 'consume': 'INTOXICATE', 'spin': 'SPIN', + 'dance': 'DANCE', }, offset: [0,0], map_lines: [], @@ -728,13 +739,13 @@ let tui = { this.mode_play.available_modes = ["chat", "study", "edit", "admin_enter", "command_thing", "take_thing", "drop_thing"] this.mode_play.available_actions = ["move", "teleport", "door", "consume", - "wear", "spin"]; + "wear", "spin", "dance"]; this.mode_study.available_modes = ["chat", "play", "admin_enter", "edit"] this.mode_study.available_actions = ["toggle_map_mode", "move_explorer"]; this.mode_admin.available_modes = ["admin_thing_protect", "control_pw_type", "control_tile_type", "chat", "study", "play", "edit"] - this.mode_admin.available_actions = ["move"]; + this.mode_admin.available_actions = ["move", "toggle_map_mode"]; this.mode_control_tile_draw.available_modes = ["admin_enter"] this.mode_control_tile_draw.available_actions = ["toggle_tile_draw"]; this.mode_edit.available_modes = ["write", "annotate", "portal", "name_thing", @@ -802,7 +813,7 @@ let tui = { || !game.player.carrying.commandable)) { return fail('not carrying anything commandable'); } else if (mode_name == 'name_thing' && !game.player.carrying) { - return fail('not carrying anything to re-name'); + return fail('not carrying anything to re-name', 'edit'); } else if (mode_name == 'admin_thing_protect' && !game.player.carrying) { return fail('not carrying anything to protect') } else if (mode_name == 'take_thing' && game.player.carrying) { @@ -861,29 +872,45 @@ let tui = { this.log_msg("Portable things in reach for pick-up:"); 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(), - (y - 1).toString() + ':' + (x).toString(), - (y + 1).toString() + ':' + (x).toString()]; - if (game.map_geometry == 'Hex') { + let directed_moves = { + 'HERE': [0, 0], 'LEFT': [0, -1], 'RIGHT': [0, 1] + } + if (game.map_geometry == 'Square') { + directed_moves['UP'] = [-1, 0]; + directed_moves['DOWN'] = [1, 0]; + } else if (game.map_geometry == 'Hex') { if (y % 2) { - select_range.push((y - 1).toString() + ':' + (x + 1).toString()); - select_range.push((y + 1).toString() + ':' + (x + 1).toString()); + directed_moves['UPLEFT'] = [-1, 0]; + directed_moves['UPRIGHT'] = [-1, 1]; + directed_moves['DOWNLEFT'] = [1, 0]; + directed_moves['DOWNRIGHT'] = [1, 1]; } else { - select_range.push((y - 1).toString() + ':' + (x - 1).toString()); - select_range.push((y + 1).toString() + ':' + (x - 1).toString()); + directed_moves['UPLEFT'] = [-1, -1]; + directed_moves['UPRIGHT'] = [-1, 0]; + directed_moves['DOWNLEFT'] = [1, -1]; + directed_moves['DOWNRIGHT'] = [1, 0]; } - }; + } + console.log(directed_moves); + let select_range = {}; + for (const direction in directed_moves) { + const move = directed_moves[direction]; + select_range[direction] = [y + move[0], x + move[1]]; + } this.selectables = []; - for (const t_id in game.things) { - const t = game.things[t_id]; - if (select_range.includes(t.position[0].toString() - + ':' + t.position[1].toString()) - && t.portable) { - this.selectables.push(t_id); + let directions = []; + for (const direction in select_range) { + for (const t_id in game.things) { + const t = game.things[t_id]; + const position = select_range[direction]; + if (t.portable + && t.position[0] == position[0] + && t.position[1] == position[1]) { + this.selectables.push(t_id); + directions.push(direction); + } } - }; + } if (this.selectables.length == 0) { this.log_msg('none'); terminal.blink_screen(); @@ -892,7 +919,8 @@ let tui = { } else { for (let [i, t_id] of this.selectables.entries()) { const t = game.things[t_id]; - this.log_msg(i + ': ' + explorer.get_thing_info(t)); + const direction = directions[i]; + this.log_msg(i + ' ' + direction + ': ' + explorer.get_thing_info(t)); } } } else if (this.mode.name == 'drop_thing') { @@ -969,10 +997,11 @@ let tui = { }; inner_links[y].push([url_start_x, end_x, url]); }; - const matches = msg.matchAll(/https?:\/\/[^\s]+/g) let link_data = {}; let url_ends = []; - for (const match of matches) { + const regexp = RegExp('https?://[^\\s]+', 'g'); + let match; + while ((match = regexp.exec(msg)) !== null) { const url = match[0]; const url_start = match.index; const url_end = match.index + match[0].length; @@ -1040,9 +1069,13 @@ let tui = { this.switch_mode('play'); }, enter_ascii_art: function(command) { - if (this.inputEl.value.length != 6) { - this.log_msg('? wrong input length, must be 6; try again'); + if (this.inputEl.value.length > 6) { + this.log_msg('? wrong input length, must be max 6; try again'); return; + } else if (this.inputEl.value.length < 6) { + while (this.inputEl.value.length < 6) { + this.inputEl.value += ' '; + } } this.log_msg(' ' + this.inputEl.value); this.full_ascii_draw += this.inputEl.value; @@ -1192,10 +1225,10 @@ let tui = { } terminal.write(0, this.window_width, 'MODE: ' + this.mode.short_desc + ' – ' + help); }, - draw_turn_line: function(n) { - if (game.turn_complete) { - terminal.write(1, this.window_width, 'TURN: ' + game.turn); - } + draw_stats_line: function(n) { + terminal.write(1, this.window_width, + 'ENERGY: ' + game.energy + + ' BLADDER: ' + game.bladder_pressure); }, draw_history: function() { let log_display_lines = []; @@ -1310,7 +1343,7 @@ let tui = { this.draw_input(); } else { this.draw_map(); - this.draw_turn_line(); + this.draw_stats_line(); this.draw_mode_line(); if (this.mode.shows_info) { this.draw_info(); @@ -1350,6 +1383,8 @@ let game = { this.portals = {}; this.portals_new = {}; this.players_hat_chars = ""; + this.bladder_pressure = 0; + this.bladder_pressure_new = 0; }, get_thing_temp: function(id_, create_if_not_found=false) { if (id_ in game.things_new) { @@ -1659,6 +1694,8 @@ tui.inputEl.addEventListener('keydown', (event) => { server.send(["TASK:WEAR"]); } else if (event.key === tui.keys.spin && tui.task_action_on('spin')) { server.send(["TASK:SPIN"]); + } else if (event.key === tui.keys.dance && tui.task_action_on('dance')) { + server.send(["TASK:DANCE"]); } else if (event.key in tui.movement_keys && tui.task_action_on('move')) { server.send(['TASK:MOVE', tui.movement_keys[event.key]]); } else if (event.key === tui.keys.teleport) { @@ -1683,6 +1720,8 @@ tui.inputEl.addEventListener('keydown', (event) => { } else if (tui.mode.name == 'admin') { if (tui.mode.mode_switch_on_key(event)) { null; + } else if (event.key == tui.keys.toggle_map_mode) { + tui.toggle_map_mode(); } else if (event.key in tui.movement_keys && tui.task_action_on('move')) { server.send(['TASK:MOVE', tui.movement_keys[event.key]]); }; @@ -1735,7 +1774,10 @@ window.setInterval(function() { }, 1000); window.setInterval(function() { if (document.activeElement.tagName.toLowerCase() != 'input') { + const scroll_x = window.scrollX; + const scroll_y = window.scrollY; tui.inputEl.focus(); + window.scrollTo(scroll_x, scroll_y); }; }, 100); document.getElementById("help").onclick = function() { @@ -1774,6 +1816,9 @@ document.getElementById("wear").onclick = function() { document.getElementById("spin").onclick = function() { server.send(['TASK:SPIN']); }; +document.getElementById("dance").onclick = function() { + server.send(['TASK:DANCE']); +}; document.getElementById("teleport").onclick = function() { game.teleport(); };