const ver_numeric = 0; const ver_string = "pre alpha"; const sleep = ms => new Promise(r => setTimeout(r, ms)); // sleep(int ms) var page_elements = {}; var gamestate = {}; var ticks_since_last_save = 0; const gamestate_default = { "statever": "1", "tick": 1, "name": "Nameless", "class": "Seaglet", "level": 1, "shinies": 0, "colony": 1, "food": 0, "autosave": 35, "story_beat": 0, "xp": 0, "xp_next": 50, "enc_human": "pause", "enc_seagull": "pause" }; var bool_log_alt = false function record_log(text) { const div_logrow = document.createElement("div"); if (bool_log_alt) { div_logrow.className = "log-line"; } else { div_logrow.className = "log-line-alt"; } bool_log_alt = !bool_log_alt; const div_logtick = document.createElement("div"); div_logtick.className = "log-tick" div_logtick.innerHTML = "Day " + gamestate["tick"]; div_logrow.append(div_logtick); const div_logmsg = document.createElement("div"); div_logmsg.innerHTML = text; div_logmsg.className = "log-msg"; div_logrow.append(div_logmsg); page_elements["div_log"].append(div_logrow); } function record_log_with_choices() { const div_logrow = document.createElement("div"); if (bool_log_alt) { div_logrow.className = "log-line"; } else { div_logrow.className = "log-line-alt"; } bool_log_alt = !bool_log_alt; const div_logtick = document.createElement("div"); div_logtick.className = "log-tick" div_logtick.innerHTML = "Day " + gamestate["tick"]; div_logrow.append(div_logtick); const div_logdata = document.createElement("div"); const div_logmsg = document.createElement("div"); div_logmsg.innerHTML = arguments[0]; div_logmsg.className = "log-msg"; div_logdata.append(div_logmsg); const div_logactions = document.createElement("div"); div_logactions.className = "log-button-row"; for (var i = 1; i < arguments.length; i += 2) { console.log(i) var label = arguments[i]; var callback = arguments[i+1]; var btn_action = document.createElement("button"); btn_action.innerHTML = label; btn_action.setAttribute("onclick", callback + "; tick_meter_running = true;"); div_logactions.append(btn_action); } div_logdata.append(div_logactions); div_logrow.append(div_logdata); page_elements["div_log"].append(div_logrow); tick_meter_running = false; } function update_ui() { page_elements["lbl_name"].innerHTML = gamestate["name"]; page_elements["lbl_tick"].innerHTML = gamestate["tick"]; page_elements["lbl_colony"].innerHTML = gamestate["colony"]; page_elements["lbl_shinies"].innerHTML = gamestate["shinies"]; page_elements["lbl_food"].innerHTML = gamestate["food"]; page_elements["lbl_xp"].innerHTML = gamestate["xp"]; page_elements["lbl_xp_next"].innerHTML = gamestate["xp_next"]; } var dev_toolbox_open = false; function dev_toolbox(open) { if (open != dev_toolbox_open) { if (open) { var div_toolbox = document.createElement("div"); page_elements["div_toolbox"] = div_toolbox; div_toolbox.setAttribute("id", "dev_toolbox"); fetch("/dev/get-toolbox") .then((response) => response.text()) .then((resp) => {div_toolbox.innerHTML = resp}) page_elements["div_sidebar"].appendChild(div_toolbox); } else { var div_toolbox = page_elements["div_toolbox"]; page_elements["div_sidebar"].removeChild(div_toolbox); div_toolbox.remove() delete page_elements["div_toolbox"]; } } dev_toolbox_open = open; } async function steal_resource(resource, amount, items) { var stealdata = await fetch("/act/steal/" + resource, {method: "POST", body: JSON.stringify({gamestate: gamestate})}) .then(res => { return res.json(); }) .catch(e => { throw e; }); if (stealdata["success"]) { gamestate[resource] += amount; record_log("Stole " + resource + " from a human: " + items.join(", ")); } else { record_log("Didn't steal " + resource + " from a human"); } } async function game_tick() { gamestate["tick"] += 1; ticks_since_last_save += 1; page_elements["lbl_tick"].innerHTML = gamestate["tick"]; var tickdata = await fetch("/tick") .then(res => { json = res.json() console.log(json) return json }) .catch(e => { throw e; }); console.log(JSON.stringify(tickdata)); if (tickdata["code"] != 200) { console.error("Non-200 tick code: " + tickdata["code"]); return; } if (tickdata["event_type"] == 0) { // pass } else if (tickdata["event_type"] == 1) { // Flavor event - no gameplay effect, but occasionally says something fun. record_log(tickdata["log"]); } else if (tickdata["event_type"] == 10) { // ENCHUMAN var total_food = 0; var food_descs = []; var total_shinies = 0; var shinies_descs = []; switch (page_elements["menu_enc_human"].value) { case "pause": tickdata.items.food.forEach((item) => { total_food += item["amount"]; food_descs.push(item["desc"]); }) tickdata.items.shinies.forEach((item) => { total_shinies += item["amount"]; shinies_descs.push(item["desc"]); }) var logstring = "You have encountered a human. It is carrying these resources:\n\n" logstring += "