X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=rogue_chat.html;h=653a7034e672d3b2d96e262c146d9b1d2d679e3f;hb=b5440b01de1253e7741d2d48f56557f269943263;hp=6738e40755be0cd82ce284532dd8535c63672e5f;hpb=abdf5480bbe91b559dbf213b162cd23d25de033f;p=plomrogue2 diff --git a/rogue_chat.html b/rogue_chat.html index 6738e40..653a703 100644 --- a/rogue_chat.html +++ b/rogue_chat.html @@ -69,6 +69,7 @@ terminal rows: + @@ -104,6 +105,7 @@ terminal rows:
  • (un-)wear:
  • +
  • @@ -171,7 +173,12 @@ let mode_helps = { 'enter_face': { 'short': 'enter your face', 'intro': '@ enter face line (enter nothing to abort):', - 'long': 'Draw your face as ASCII art. The string you enter must be 18 characters long, and will be divided on display into 3 lines of 6 characters each, from top to bottom..' + 'long': 'Draw your face as ASCII art. The string you enter must be 18 characters long, and will be divided on display into 3 lines of 6 characters each, from top to bottom. Eat cookies to extend the ASCII characters available for drawing.' + }, + 'enter_hat': { + 'short': 'enter your hat', + 'intro': '@ enter hat line (enter nothing to abort):', + 'long': 'Draw your hat as ASCII art. The string you enter must be 18 characters long, and will be divided on display into 3 lines of 6 characters each, from top to bottom..' }, 'write': { 'short': 'change terrain', @@ -536,6 +543,7 @@ let server = { explorer.info_cached = false; game.things = game.things_new; game.player = game.things[game.player_id]; + game.players_hat_chars = game.players_hat_chars_new; game.turn_complete = true; if (tui.mode.name == 'post_login_wait') { tui.switch_mode('play'); @@ -551,6 +559,8 @@ let server = { tui.log_msg('#MUSICPLAYER: ' + tokens[1], 1); } else if (tokens[0] === 'PLAYER_ID') { game.player_id = parseInt(tokens[1]); + } else if (tokens[0] === 'PLAYERS_HAT_CHARS') { + game.players_hat_chars_new = tokens[1]; } else if (tokens[0] === 'LOGIN_OK') { this.send(['GET_GAMESTATE']); tui.switch_mode('post_login_wait'); @@ -688,6 +698,7 @@ let tui = { mode_take_thing: new Mode('take_thing', true), mode_drop_thing: new Mode('drop_thing', true), mode_enter_face: new Mode('enter_face', true), + mode_enter_hat: new Mode('enter_hat', true), mode_admin_enter: new Mode('admin_enter', true), mode_admin: new Mode('admin'), mode_control_pw_pw: new Mode('control_pw_pw', true), @@ -707,6 +718,8 @@ let tui = { }, offset: [0,0], map_lines: [], + ascii_draw_stage: 0, + full_ascii_draw: '', selectables: [], draw_face: false, init: function() { @@ -724,11 +737,10 @@ let tui = { this.mode_control_tile_draw.available_actions = ["toggle_tile_draw"]; this.mode_edit.available_modes = ["write", "annotate", "portal", "name_thing", "password", "chat", "study", "play", - "admin_enter", "enter_face"] + "admin_enter", "enter_face", "enter_hat"] this.mode_edit.available_actions = ["move", "flatten", "install", "toggle_map_mode"] this.inputEl = document.getElementById("input"); - this.inputEl.focus(); this.switch_mode('waiting_for_server'); this.recalc_input_lines(); this.height_header = this.height_turn_line + this.height_mode_line; @@ -784,15 +796,15 @@ let tui = { } this.draw_face = false; this.tile_draw = false; - if (mode_name == 'command_thing' && (!game.player.carrying - || !game.player.carrying.commandable)) { + if (mode_name == 'command_thing' && (!game.player.carrying + || !game.player.carrying.commandable)) { return fail('not carrying anything commandable', 'play'); - }; - if (mode_name == 'take_thing' && game.player.carrying) { + } else if (mode_name == 'take_thing' && game.player.carrying) { return fail('already carrying something', 'play'); - }; - if (mode_name == 'drop_thing' && !game.player.carrying) { + } else if (mode_name == 'drop_thing' && !game.player.carrying) { return fail('not carrying anything droppable', 'play'); + } else if (mode_name == 'enter_hat' && !game.player.hat) { + return fail('not wearing hat to edit', 'edit'); } if (mode_name == 'admin_enter' && this.is_admin) { mode_name = 'admin'; @@ -821,9 +833,6 @@ let tui = { } else if (this.mode.name != "edit") { this.map_mode = 'terrain + things'; }; - if (this.mode.has_input_prompt || this.mode.is_single_char_entry) { - this.inputEl.focus(); - } if (game.player_id in game.things && (this.mode.shows_info || this.mode.name == 'control_tile_draw')) { explorer.position = game.player.position; } @@ -904,6 +913,8 @@ let tui = { for (let [i, direction] of this.selectables.entries()) { this.log_msg(i + ': ' + direction); }; + } else if (this.mode.name == 'enter_hat') { + this.log_msg('legal characters: ' + game.players_hat_chars); } else if (this.mode.name == 'command_thing') { server.send(['TASK:COMMAND', 'HELP']); } else if (this.mode.name == 'control_pw_pw') { @@ -946,6 +957,14 @@ let tui = { if (t && t.protection) { this.inputEl.value = t.protection; } + } else if (['enter_face', 'enter_hat'].includes(this.mode.name)) { + const start = this.ascii_draw_stage * 6; + const end = (this.ascii_draw_stage + 1) * 6; + if (this.mode.name == 'enter_face') { + this.inputEl.value = game.player.face.slice(start, end); + } else if (this.mode.name == 'enter_hat') { + this.inputEl.value = game.player.hat.slice(start, end); + } } }, recalc_input_lines: function() { @@ -1034,6 +1053,24 @@ let tui = { this.inputEl.value = ""; this.switch_mode('play'); }, + enter_ascii_art: function(command) { + if (this.inputEl.value.length != 6) { + this.log_msg('? wrong input length, try again'); + return; + } + this.log_msg(' ' + this.inputEl.value); + this.full_ascii_draw += this.inputEl.value; + this.ascii_draw_stage += 1; + if (this.ascii_draw_stage < 3) { + this.restore_input_values(); + } else { + server.send([command, this.full_ascii_draw]); + this.full_ascii_draw = ''; + this.ascii_draw_stage = 0; + this.inputEl.value = ''; + this.switch_mode('edit'); + } + }, draw_map: function() { if (!game.turn_complete && this.map_lines.length == 0) { return; @@ -1326,6 +1363,7 @@ let game = { this.map_size_new = [0,0]; this.portals = {}; this.portals_new = {}; + this.players_hat_chars = ""; }, get_thing_temp: function(id_, create_if_not_found=false) { if (id_ in game.things_new) { @@ -1540,13 +1578,9 @@ tui.inputEl.addEventListener('keydown', (event) => { server.send(['LOGIN', tui.inputEl.value]); tui.inputEl.value = ""; } else if (tui.mode.name == 'enter_face' && event.key == 'Enter') { - if (tui.inputEl.value.length != 18) { - tui.log_msg('? wrong input length, aborting'); - } else { - server.send(['PLAYER_FACE', tui.inputEl.value]); - } - tui.inputEl.value = ""; - tui.switch_mode('edit'); + tui.enter_ascii_art('PLAYER_FACE'); + } else if (tui.mode.name == 'enter_hat' && event.key == 'Enter') { + tui.enter_ascii_art('PLAYER_HAT'); } else if (tui.mode.name == 'command_thing' && event.key == 'Enter') { server.send(['TASK:COMMAND', tui.inputEl.value]); tui.inputEl.value = ""; @@ -1716,12 +1750,12 @@ 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("terminal").onclick = function() { - tui.inputEl.focus(); -}; document.getElementById("help").onclick = function() { tui.show_help = true; tui.full_refresh();