X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=rogue_chat.html;h=27ae875da3b449e37f64ddecb5d241e667526980;hb=ea5ddf2c37571f3fb0ed486cd4a4294b82c54b54;hp=0e20ebca41b1bc563a7bc3481247b557fd4ad8ed;hpb=0f1e35f5f1a318d6e3e610085babd46946ad3600;p=plomrogue2 diff --git a/rogue_chat.html b/rogue_chat.html index 0e20ebc..27ae875 100644 --- a/rogue_chat.html +++ b/rogue_chat.html @@ -57,6 +57,7 @@ keyboard input/control: + @@ -99,6 +100,7 @@ keyboard input/control:
  • drop thing:
  • open/close:
  • consume: +
  • install:
  • @@ -150,7 +152,7 @@ let mode_helps = { }, 'take_thing': { 'short': 'take thing', - 'intro': '', + 'intro': 'Pick up a thing in reach by entering its index number. Enter nothing to abort.', 'long': 'You see a list of things which you could pick up. Enter the target thing\'s index, or, to leave, nothing.' }, 'admin_thing_protect': { @@ -196,7 +198,7 @@ let mode_helps = { 'chat': { 'short': 'chat', 'intro': '', - 'long': '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:' + 'long': '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:\n\n/nick NAME – re-name yourself to NAME' }, 'login': { 'short': 'login', @@ -236,6 +238,7 @@ let key_descriptions = { 'drop_thing': 'drop thing', 'door': 'open/close', 'consume': 'consume', + 'install': 'install', 'toggle_map_mode': 'toggle map view', 'toggle_tile_draw': 'toggle protection character drawing', 'hex_move_upleft': 'up-left', @@ -471,6 +474,7 @@ let server = { t.position = parser.parse_yx(tokens[1]); t.type_ = tokens[2]; t.protection = tokens[3]; + t.portable = parseInt(tokens[5]); } else if (tokens[0] === 'THING_NAME') { let t = game.get_thing(tokens[1], false); if (t) { @@ -488,6 +492,16 @@ let server = { tui.mode_take_thing.legal = game.tasks.includes('PICK_UP'); } else if (tokens[0] === 'THING_TYPE') { game.thing_types[tokens[1]] = tokens[2] + } else if (tokens[0] === 'THING_CARRYING') { + let t = game.get_thing(tokens[1], false); + if (t) { + t.carrying = true; + }; + } else if (tokens[0] === 'THING_INSTALLED') { + let t = game.get_thing(tokens[1], false); + if (t) { + t.installed = true; + }; } else if (tokens[0] === 'TERRAIN') { game.terrains[tokens[1]] = tokens[2] } else if (tokens[0] === 'MAP') { @@ -659,6 +673,7 @@ let tui = { 'drop_thing': 'DROP', 'move': 'MOVE', 'door': 'DOOR', + 'install': 'INSTALL', 'command': 'COMMAND', 'consume': 'INTOXICATE', }, @@ -666,11 +681,10 @@ let tui = { map_lines: [], selectables: [], init: function() { - this.mode_chat.available_modes = ["play", "study", "edit", "admin_enter"] this.mode_play.available_modes = ["chat", "study", "edit", "admin_enter", "command_thing", "take_thing"] this.mode_play.available_actions = ["move", "drop_thing", - "teleport", "door", "consume"]; + "teleport", "door", "consume", "install"]; 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", @@ -801,14 +815,30 @@ let tui = { } else if (this.mode.is_single_char_entry) { this.show_help = true; } else if (this.mode.name == 'take_thing') { - this.log_msg("selectable things:"); + 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] + 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') { + if (y % 2) { + select_range.push((y - 1).toString() + ':' + (x + 1).toString()); + select_range.push((y + 1).toString() + ':' + (x + 1).toString()); + } else { + select_range.push((y - 1).toString() + ':' + (x - 1).toString()); + select_range.push((y + 1).toString() + ':' + (x - 1).toString()); + } + }; this.selectables = []; for (const t_id in game.things) { const t = game.things[t_id]; - if (t.position[0] == player.position[0] - && t.position[1] == player.position[1] - && t != player && t.type_ != 'Player') { + if (select_range.includes(t.position[0].toString() + + ':' + t.position[1].toString()) + && t.portable) { this.selectables.push([t_id, t]); } }; @@ -979,6 +1009,9 @@ let tui = { if (used_positions.includes(t.position.toString())) { meta_char = '+'; }; + if (t.carrying) { + meta_char = '$'; + } map_lines_split[t.position[0]][t.position[1]] = symbol + meta_char; used_positions.push(t.position.toString()); } @@ -1104,13 +1137,7 @@ let tui = { movement_keys_desc = Object.keys(this.movement_keys).join(','); } let content = this.mode.short_desc + " help\n\n" + this.mode.help_intro + "\n\n"; - if (this.mode.name == 'chat') { - content += '/nick NAME – re-name yourself to NAME\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'; - content += '/' + this.keys.switch_to_edit + ' or /edit – switch to world edit mode\n'; - content += '/' + this.keys.switch_to_admin_enter + ' or /admin – switch to admin mode\n'; - } else if (this.mode.available_actions.length > 0) { + if (this.mode.available_actions.length > 0) { content += "Available actions:\n"; for (let action of this.mode.available_actions) { if (Object.keys(this.action_tasks).includes(action)) { @@ -1333,12 +1360,15 @@ let explorer = { get_thing_info: function(t) { const symbol = game.thing_types[t.type_]; let info = t.type_ + " / " + symbol; - if (t.thing_char) { - info += t.thing_char; - }; - if (t.name_) { - info += " (" + t.name_ + ")"; - } + if (t.thing_char) { + info += t.thing_char; + }; + if (t.name_) { + info += " (" + t.name_ + ")"; + } + if (t.installed) { + info += " / installed"; + } return info; }, annotate: function(msg) { @@ -1378,7 +1408,15 @@ tui.inputEl.addEventListener('keydown', (event) => { if (event.key == 'Enter') { event.preventDefault(); } - if (tui.mode.has_input_prompt && event.key == 'Enter' && tui.inputEl.value == '/help') { + if (tui.mode.has_input_prompt && event.key == 'Enter' + && tui.inputEl.value.length == 0 + && ['chat', 'command_thing', 'take_thing', + 'admin_enter'].includes(tui.mode.name)) { + if (tui.mode.name != 'chat') { + tui.log_msg('@ aborted'); + } + tui.switch_mode('play'); + } else if (tui.mode.has_input_prompt && event.key == 'Enter' && tui.inputEl.value == '/help') { tui.show_help = true; tui.inputEl.value = ""; tui.restore_input_values(); @@ -1390,23 +1428,16 @@ tui.inputEl.addEventListener('keydown', (event) => { server.send(['LOGIN', tui.inputEl.value]); tui.inputEl.value = ""; } else if (tui.mode.name == 'command_thing' && event.key == 'Enter') { - if (tui.inputEl.value.length == 0) { - tui.log_msg('@ aborted'); - tui.switch_mode('play'); - } else if (tui.task_action_on('command')) { + if (tui.task_action_on('command')) { server.send(['TASK:COMMAND', tui.inputEl.value]); tui.inputEl.value = ""; } } else if (tui.mode.name == 'take_thing' && event.key == 'Enter') { - if (tui.inputEl.value.length == 0) { - tui.log_msg('@ aborted'); + const i = parseInt(tui.inputEl.value); + if (isNaN(i) || i < 0 || i >= tui.selectables.length) { + tui.log_msg('? invalid index, aborted'); } else { - const i = parseInt(tui.inputEl.value); - if (isNaN(i) || i < 0 || i >= tui.selectables.length) { - tui.log_msg('? invalid index, aborted'); - } else { - server.send(['TASK:PICK_UP', tui.selectables[i][0]]); - } + server.send(['TASK:PICK_UP', tui.selectables[i][0]]); } tui.inputEl.value = ""; tui.switch_mode('play'); @@ -1469,15 +1500,7 @@ tui.inputEl.addEventListener('keydown', (event) => { let tokens = parser.tokenize(tui.inputEl.value); if (tokens.length > 0 && tokens[0].length > 0) { if (tui.inputEl.value[0][0] == '/') { - if (tokens[0].slice(1) == 'play' || tokens[0][1] == tui.keys.switch_to_play) { - tui.switch_mode('play'); - } else if (tokens[0].slice(1) == 'study' || tokens[0][1] == tui.keys.switch_to_study) { - tui.switch_mode('study'); - } else if (tokens[0].slice(1) == 'edit' || tokens[0][1] == tui.keys.switch_to_edit) { - tui.switch_mode('edit'); - } else if (tokens[0].slice(1) == 'admin' || tokens[0][1] == tui.keys.switch_to_admin_enter) { - tui.switch_mode('admin_enter'); - } else if (tokens[0].slice(1) == 'nick') { + if (tokens[0].slice(1) == 'nick') { if (tokens.length > 1) { server.send(['NICK', tokens[1]]); } else { @@ -1502,6 +1525,8 @@ tui.inputEl.addEventListener('keydown', (event) => { server.send(["TASK:INTOXICATE"]); } else if (event.key === tui.keys.door && tui.task_action_on('door')) { server.send(["TASK:DOOR"]); + } else if (event.key === tui.keys.install && tui.task_action_on('install')) { + server.send(["TASK:INSTALL"]); } 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) { @@ -1621,6 +1646,9 @@ document.getElementById("door").onclick = function() { document.getElementById("consume").onclick = function() { server.send(['TASK:INTOXICATE']); }; +document.getElementById("install").onclick = function() { + server.send(['TASK:INSTALL']); +}; document.getElementById("teleport").onclick = function() { game.teleport(); };