X-Git-Url: https://plomlompom.com/repos/day?a=blobdiff_plain;f=rogue_chat_nocanvas_monochrome.html;h=c0ee072d7d634fcd2872cdf0c41f0b099a801b31;hb=884b4b8d9c18896569c5e741f90a6ee67f8db8b2;hp=1e3653bb0df50eab39df6f6b52b4ff213dfab588;hpb=35a30b2b2579f5cac20ba94cd5e162d11fd283ee;p=plomrogue2
diff --git a/rogue_chat_nocanvas_monochrome.html b/rogue_chat_nocanvas_monochrome.html
index 1e3653b..c0ee072 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 {
@@ -520,12 +546,18 @@ let tui = {
},
draw_help: function() {
let movement_keys_desc = Object.keys(this.movement_keys).join(',');
- let content = this.mode.name + " mode help (hit any key to disappear)\n\n" + this.mode.help_intro + "\n\n";
+ let content = this.mode.name + " mode help\n\n" + this.mode.help_intro + "\n\n";
if (this.mode == mode_play) {
content += "Available actions:\n";
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';
}
@@ -661,7 +693,6 @@ let explorer = {
if (target) {
this.position = target
this.query_info();
- tui.full_refresh();
} else {
terminal.blink_screen();
};
@@ -682,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 += " (name: " + t.name_ + ")";
}
info += "\n";
}
@@ -726,18 +764,11 @@ tui.inputEl.addEventListener('input', (event) => {
tui.inputEl.value = tui.inputEl.value.slice(0, max_length);
};
tui.recalc_input_lines();
- tui.full_refresh();
} else if (tui.mode == mode_edit && tui.inputEl.value.length > 0) {
server.send(["TASK:WRITE", tui.inputEl.value[0], tui.password]);
tui.switch_mode(mode_play);
- } else if (tui.mode == mode_teleport) {
- if (['Y', 'y'].includes(tui.inputEl.value[0])) {
- server.reconnect_to(tui.teleport_target);
- } else {
- tui.log_msg("@ teleportation aborted");
- tui.switch_mode(mode_play);
- }
}
+ tui.full_refresh();
}, false);
tui.inputEl.addEventListener('keydown', (event) => {
tui.show_help = false;
@@ -748,10 +779,8 @@ tui.inputEl.addEventListener('keydown', (event) => {
tui.show_help = true;
tui.empty_input();
tui.restore_input_values();
- tui.full_refresh();
} else if (!tui.mode.has_input_prompt && event.key == tui.keys.help) {
tui.show_help = true;
- tui.full_refresh();
} else if (tui.mode == mode_login && event.key == 'Enter') {
tui.login_name = tui.inputEl.value;
server.send(['LOGIN', tui.inputEl.value]);
@@ -789,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');
}
@@ -812,7 +835,6 @@ tui.inputEl.addEventListener('keydown', (event) => {
server.send(['ALL', tui.inputEl.value]);
}
tui.empty_input();
- tui.full_refresh();
} else if (tui.mode == mode_play) {
if (event.key === tui.keys.switch_to_chat) {
event.preventDefault();
@@ -829,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]]);
@@ -853,9 +881,9 @@ tui.inputEl.addEventListener('keydown', (event) => {
} else {
tui.map_mode = 'terrain';
}
- tui.full_refresh();
};
}
+ tui.full_refresh();
}, false);
rows_selector.addEventListener('input', function() {
@@ -887,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);