full early game polished up, flavor text now properly capitalizes names

This commit is contained in:
2025-08-07 15:37:23 -07:00
parent 8f7f173108
commit 5c3d34aafa
7 changed files with 175 additions and 13 deletions

View File

@@ -93,6 +93,9 @@ function update_ui() {
page_elements["lbl_class"].innerHTML = gamestate["class"];
page_elements["lbl_xp"].innerHTML = gamestate["xp"];
page_elements["lbl_xp_next"].innerHTML = gamestate["xp_next"];
page_elements["lbl_level"].innerHTML = gamestate["level"];
page_elements["menu_enc_human"].value = gamestate["enc_human"];
page_elements["menu_enc_seagull"].value = gamestate["enc_seagull"];
}
var dev_toolbox_open = false;
@@ -128,18 +131,32 @@ function reward_xp(amount) {
}
}
async function steal_resource(resource, amount, itemstr) {
async function steal_resource(resource, target, amount, itemstr) {
var items = itemstr.split(",")
var stealdata = await fetch("/act/steal/" + resource, {method: "POST", body: JSON.stringify({gamestate: gamestate})})
var stealdata = await fetch(`/act/steal/${resource}/${target}`, {method: "POST", body: JSON.stringify({gamestate: gamestate})})
.then(res => { return res.json(); })
.catch(e => { throw e; });
if (stealdata["success"] && amount > 0) {
gamestate[resource] += amount;
reward_xp(2);
record_log("Stole " + resource + " from a human: " + items.join(", "));
record_log(`Stole ${resource} from a ${target}: ${items.join(", ")}`);
}
else { record_log("Didn't steal " + resource + " from a human"); }
else { record_log(`Didn't steal ${resource} from a ${target}`); }
}
async function recruit(amount) {
var stealdata = await fetch("/act/recruit", {method: "POST", body: JSON.stringify({gamestate: gamestate})})
.then(res => { return res.json(); })
.catch(e => { throw e; });
if (stealdata["success"] && amount > 0) {
gamestate["shinies"] -= amount;
reward_xp(5);
gamestate["colony"] += 1;
record_log("Successfully recruited a seagull into the colony");
}
else { record_log("The other gull wasn't impressed. Recruiting failed."); }
}
async function game_tick() {
@@ -193,24 +210,83 @@ async function game_tick() {
logstring += "</ol>\nWhat would you like to do?";
record_log_with_choices(logstring,
"Steal food", `steal_resource('food', ${total_food}, "${food_descs.toString()}")`,
"Steal shinies", `steal_resource('shinies', ${total_shinies}, "${shinies_descs.toString()}")`
"Steal food", `steal_resource('food', 'humans', ${total_food}, "${food_descs.toString()}")`,
"Steal shinies", `steal_resource('shinies', 'humans', ${total_shinies}, "${shinies_descs.toString()}")`
)
break;
case "steal-food":
record_log("You have encountered a human. Attempting to steal food.");
tickdata.items.food.forEach((item) => {
total_food += item["amount"];
food_descs.push(item["desc"]);
})
steal_resource("food", total_food, food_descs.toString());
steal_resource("food", "humans", total_food, food_descs.toString());
break;
case "steal-shinies":
record_log("You have encountered a human. Attempting to steal shinies.");
tickdata.items.shinies.forEach((item) => {
total_shinies += item["amount"];
shinies_descs.push(item["desc"]);
})
steal_resource("shinies", total_shinies, shinies_descs.toString());
steal_resource("shinies", "humans", total_shinies, shinies_descs.toString());
break;
default:
console.error("undefined action " + page_elements["menu_enc_human"]);
break;
}
} else if (tickdata["event_type"] == 11) { // ENCGULL
var total_food = 0;
var food_descs = [];
var total_shinies = 0;
var shinies_descs = [];
switch (page_elements["menu_enc_seagull"].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 seagull. It is carrying these resources:\n\n"
logstring += "<ol>\n"
if (total_food > 0) {
logstring += `<li><b>${total_food.toFixed(2)} food:</b> ${food_descs.join(", ")}</li>\n`;
}
if (total_shinies > 0) {
logstring += `<li><b>${total_shinies.toFixed(2)} shinies:</b> ${shinies_descs.join(", ")}</li>\n`;
}
logstring += "</ol>\nWhat would you like to do?";
record_log_with_choices(logstring,
"Recruit", `recruit(${tickdata.recruit_cost})`,
"Steal food", `steal_resource('food', 'seagulls', ${total_food}, "${food_descs.toString()}")`,
"Steal shinies", `steal_resource('shinies', 'seagulls', ${total_shinies}, "${shinies_descs.toString()}")`
)
break;
case "recruit":
recruit(tickdata.recruit_cost);
break
case "steal-food":
record_log("You have encountered a seagull. Attempting to steal food.");
tickdata.items.food.forEach((item) => {
total_food += item["amount"];
food_descs.push(item["desc"]);
})
steal_resource("food", "seagulls", total_food, food_descs.toString());
break;
case "steal-shinies":
record_log("You have encountered a seagull. Attempting to steal shinies.");
tickdata.items.shinies.forEach((item) => {
total_shinies += item["amount"];
shinies_descs.push(item["desc"]);
})
steal_resource("shinies", "seagulls", total_shinies, shinies_descs.toString());
break;
default:
console.error("undefined action " + page_elements["menu_enc_human"]);
@@ -244,6 +320,9 @@ else {
target = document;
}
function update_action(enc, value) {
gamestate[`enc_${enc}`] = value;
}
target.addEventListener(start_event, function (ev) {
page_elements["div_log"] = document.querySelector("#main-log");
@@ -259,9 +338,13 @@ target.addEventListener(start_event, function (ev) {
page_elements["lbl_tick"] = document.querySelector("#main-day-counter");
page_elements["lbl_xp"] = document.querySelector("#lbl-seagull-xp-current");
page_elements["lbl_xp_next"] = document.querySelector("#lbl-seagull-xp-next");
page_elements["lbl_level"] = document.querySelector("#lbl-seagull-lvl");
page_elements["menu_enc_human"] = document.querySelector("#menu-enc-human");
page_elements["menu_enc_seagull"] = document.querySelector("#menu-enc-seagull");
page_elements["menu_enc_human"].addEventListener("change", (ev) => {update_action("human", ev.target.value)})
page_elements["menu_enc_seagull"].addEventListener("change", (ev) => {update_action("seagull", ev.target.value)})
prepare_gamestate();
record_log("seagull game ver. " + ver_string);