flavor text, autosaves

This commit is contained in:
Nicole O'Connor 2023-02-24 12:39:18 -08:00
parent 3c05ef8552
commit 55525a5235
7 changed files with 243 additions and 8 deletions

View File

@ -21,7 +21,8 @@ RUN apk del rustup gcc musl-dev
FROM base AS app FROM base AS app
RUN mkdir -p /lib/wordlist RUN mkdir -p /lib/wordlist
COPY ext/imsky/wordlists /lib/wordlist COPY ext/imsky/wordlists /lib/wordlist
#RUN python /lib/wordlist/render.py -o rant /app/rant/wordlist.rant RUN mkdir -p /app/rant
RUN python /lib/wordlist/render.py -o rant /app/rant/wordlist.rant
# installing app # installing app
COPY app /app COPY app /app

View File

@ -1,8 +1,22 @@
import os
import sys
import flask import flask
app = flask.Flask("seagull-game", root_path="/app") app = flask.Flask("seagull-game", root_path="/app")
orig_url_for = app.url_for
def url_for_override(endpoint, *posargs, _anchor=None, _method=None, _scheme=None, _external=None, self=app, **values):
if endpoint == "static":
# bandaid for #1
if not os.path.exists("/app/static/" + values["filename"]):
sys.stderr.write("WARN:: requested {0} from local file, but it doesn't exist in this container. Redirecting to CDN...\n".format(values["filename"]))
sys.stderr.flush()
return "https://cdn.otl-hga.net/seagull/" + values["filename"]
return orig_url_for(endpoint, *posargs, _anchor=_anchor, _method=_method, _scheme=_scheme, _external=_external, **values)
app.url_for = url_for_override
base_context = {} base_context = {}
base_context_live = False base_context_live = False
@ -23,9 +37,9 @@ def render_base_context():
base_context["seagull_pic"] = "https://cdn.otl-hga.net/seagull/image/seagull.jpg" base_context["seagull_pic"] = "https://cdn.otl-hga.net/seagull/image/seagull.jpg"
else: # dev, serve files from here else: # dev, serve files from here
print(base_domain) print(base_domain)
base_context["styles"] = [flask.url_for("static", filename="css/seagull.css")] base_context["styles"] = [app.url_for("static", filename="css/seagull.css")]
base_context["scripts"] = [flask.url_for("static", filename="js/seagull.js")] base_context["scripts"] = [app.url_for("static", filename="js/seagull.js")]
base_context["seagull_pic"] = flask.url_for("static", filename="image/seagull.jpg") base_context["seagull_pic"] = app.url_for("static", filename="image/seagull.jpg")
base_context_live = True base_context_live = True

View File

@ -1,8 +1,13 @@
import json import json
import random import random
import subprocess
from . import core from . import core
def generate_flavor_text():
proc_rant = subprocess.run(["rant", "/app/rant/flavor.rant"], capture_output=True)
return proc_rant.stdout.decode()
@core.app.route("/tick") @core.app.route("/tick")
def tick(): def tick():
return random.choices([json.dumps({"code": 200, "event_type": 0}), json.dumps({"code": 200, "event_type": 1, "log": "The server chose a flavor text event, which hasn't been fully implemented yet."})], weights=[16, 1])[0] return random.choices([json.dumps({"code": 200, "event_type": 0}), json.dumps({"code": 200, "event_type": 1, "log": generate_flavor_text()})], weights=[16, 1])[0]

26
app/rant/flavor.rant Normal file
View File

@ -0,0 +1,26 @@
@require "wordlist"
{
You meet {
a `[pick: <wordlist/nouns/birds>] |
`{
[pick: <wordlist/names/people/butlers>] |
[pick: <wordlist/names/people/computing>] |
[pick: <wordlist/names/people/founders>] |
[pick: <wordlist/names/streets/chicago>] |
[pick: <wordlist/names/streets/newyork>] |
[pick: <wordlist/names/surnames/english>] |
[pick: <wordlist/names/surnames/irish>] |
[pick: <wordlist/names/surnames/scottish>]
} the `[pick: <wordlist/nouns/birds>]
}. {
It completely ignores you. |
You have a polite conversation about birdly affairs. |
It scoffs and flies away.
}
|
You encounter a human and attempt to steal their `{
[pick: <wordlist/nouns/food>] |
[pick: <wordlist/nouns/fast_food>]
}.
}

172
app/rant/wordlist.rant Normal file

File diff suppressed because one or more lines are too long

View File

@ -24,7 +24,7 @@
<div id="side-seagull-stats"> <div id="side-seagull-stats">
<p id="side-seagull-lvl">Lv 1 LoadError</p> <p id="side-seagull-lvl">Lv 1 LoadError</p>
<p id="side-seagull-misc"> <p id="side-seagull-misc">
Colony: 1337<br /> Colony: <span id="lbl-seagull-colony">1337</span><br />
Shinies: 420<br /> Shinies: 420<br />
</p> </p>
</div> </div>

View File

@ -3,10 +3,14 @@ const sleep = ms => new Promise(r => setTimeout(r, ms)); // sleep(int ms)
var page_elements = {}; var page_elements = {};
var gamestate = {}; var gamestate = {};
var ticks_since_last_save = 0;
const gamestate_default = { const gamestate_default = {
"statever": "1",
"tick": 1, "tick": 1,
"name": "Nameless" "name": "Nameless",
"level": 1,
"autosave": 35
}; };
function prepare_gamestate() { function prepare_gamestate() {
@ -42,6 +46,9 @@ var tick_meter_running = true;
async function game_tick() { async function game_tick() {
gamestate["tick"] += 1; gamestate["tick"] += 1;
ticks_since_last_save += 1;
// temp
page_elements["lbl_colony"].innerHTML = ticks_since_last_save;
page_elements["lbl_tick"].innerHTML = gamestate["tick"]; page_elements["lbl_tick"].innerHTML = gamestate["tick"];
var tickdata = await fetch("/tick") var tickdata = await fetch("/tick")
.then(res => { .then(res => {
@ -66,6 +73,15 @@ async function game_tick() {
//await sleep(12000); //await sleep(12000);
//game_tick(); //game_tick();
} }
// sanity check
if (!("autosave" in gamestate)) {
gamestate["autosave"] = 35;
}
if (ticks_since_last_save % gamestate["autosave"] == 0 && ticks_since_last_save != 0) {
save_game();
ticks_since_last_save = 0;
}
} }
document.addEventListener("DOMContentLoaded", function (ev) { document.addEventListener("DOMContentLoaded", function (ev) {
@ -73,6 +89,7 @@ document.addEventListener("DOMContentLoaded", function (ev) {
page_elements["div_name"] = document.querySelector("#side-seagull-name"); page_elements["div_name"] = document.querySelector("#side-seagull-name");
page_elements["div_name_editor"] = document.querySelector("#side-seagull-name-editor"); page_elements["div_name_editor"] = document.querySelector("#side-seagull-name-editor");
page_elements["lbl_name"] = document.querySelector("#lbl-seagull-name"); page_elements["lbl_name"] = document.querySelector("#lbl-seagull-name");
page_elements["lbl_colony"] = document.querySelector("#lbl-seagull-colony");
page_elements["edt_name"] = document.querySelector("#edt-seagull-name"); page_elements["edt_name"] = document.querySelector("#edt-seagull-name");
page_elements["lbl_tick"] = document.querySelector("#main-day-counter"); page_elements["lbl_tick"] = document.querySelector("#main-day-counter");