</div>
<script>
"use strict";
-let websocket_location = "wss://plomlompom.com/rogue_chat/";
+//let websocket_location = "wss://plomlompom.com/rogue_chat/";
+let websocket_location = "ws://localhost:8000/";
let rows_selector = document.getElementById("n_rows");
let cols_selector = document.getElementById("n_cols");
this.websocket = new WebSocket(this.url);
this.websocket.onopen = function(event) {
server.connected = true;
+ game.thing_types = {};
server.send(['TASKS']);
+ server.send(['THING_TYPES']);
tui.log_msg("@ server connected! :)");
tui.switch_mode(mode_login);
};
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] === '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') {
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);
if (this.map_mode == 'terrain') {
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_];
+ map_lines_split[t.position[0]][t.position[1]] = symbol;
};
}
if (tui.mode.shows_info) {
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';
}
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 @";
+ info += "THING: " + t.type_;
if (t.name_) {
- info += ": " + t.name_;
+ info += " (name: " + t.name_ + ")";
}
info += "\n";
}
} 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) == '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');
}