Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da29308522 | ||
|
|
79061d8572 | ||
|
|
1f67d58b92 |
@@ -114,6 +114,66 @@ phases M2.0-M2.7).
|
||||
game icon on the .exe (rcedit), Linux, and the update check below.
|
||||
- **Updates**: the game (and a dedicated server) needs to notice when a new
|
||||
version is out, download what's needed and install it. See below.
|
||||
- **A single-player web version** (Paul, Nov 2026: after the playtest):
|
||||
play straight from the download page, with "Download for the full game
|
||||
and multiplayer" beside it. Godot's web export, single-threaded, on the
|
||||
Compatibility renderer (WebGL 2). What we found (0.6.1):
|
||||
- *The look:* rendered with that renderer (`build/web_look/`, from
|
||||
`tools/site/shots.gd` run with `--rendering-method gl_compatibility`),
|
||||
it's still clearly the game, but harsher: no volumetric fog or haze,
|
||||
no SSAO/SSIL (darker, sharper shadows), deeper greens. Night and fire
|
||||
light hold up. **The sea renders flat white**: `shaders/water.gdshader`
|
||||
needs a Compatibility path. Ordinary distance fog would bring some
|
||||
atmosphere back; grass density and tree counts likely need a lower
|
||||
setting for browsers (speed not measured yet).
|
||||
- *Single-player only:* browsers can't use ENet (UDP), and can't start
|
||||
the Host Game or per-land server processes. Joining from a browser
|
||||
would mean a WebSocket transport on the server, served over wss://
|
||||
(a certificate per server): a separate, bigger job, if ever.
|
||||
- *Saves* go in the browser's storage (IndexedDB): kept, but per browser
|
||||
and lost if site data is cleared. Maybe an export/import button.
|
||||
- *Input:* the pointer lock needs a click, and Esc releases it in the
|
||||
browser, so the pause menu needs another key too (P).
|
||||
- *Size and hosting:* the engine (godot.wasm, 39.5 MB) plus the game data
|
||||
(about 22 MB) download first, then cache. Cloudflare Pages refuses files
|
||||
over 25 MiB, so the .wasm has to live elsewhere (the Gitea release, or
|
||||
another host) or be split.
|
||||
- *Size of the job:* one step to build it and see how it runs, another to
|
||||
fix the water, tune the graphics and controls, and put it on the page.
|
||||
- **Cloud saves** (Paul, Nov 2026: with the web version, and useful before
|
||||
it, desktop to desktop): carry a single-player world between the desktop
|
||||
game and the browser, **both ways**.
|
||||
- *In the game:* pause menu **Save to cloud** (a cloud name and a password
|
||||
the first time; after that it can upload on each save: autosave, sleep,
|
||||
quit); title screen **Load from cloud** (name and password, pick a
|
||||
world, it downloads and you carry on). What travels: the world folder
|
||||
(`meta.json`, `world.json`), its explored map (`maps/`), and which of
|
||||
Old Tam's tips you've seen. Not online worlds (they live on their server).
|
||||
- *Size:* a world is 8-32 KB on disk, a few KB compressed: uploads are
|
||||
instant and storage is next to free.
|
||||
- *Where:* a Cloudflare Worker beside the site (`/api/...`), saves in R2
|
||||
(or D1). Free tier is plenty. (Paul's own server would do, but is one
|
||||
more service to keep running.)
|
||||
- *Safety:* passwords never stored, only a salted hash (PBKDF2, WebCrypto
|
||||
in the Worker); HTTPS only; wrong guesses lock a name out for a while;
|
||||
a size cap and a world count per name. Option: encrypt the save with
|
||||
the password in the game before upload, so the server holds only
|
||||
ciphertext (but a forgotten password loses the cloud copy; the local
|
||||
copy is unaffected).
|
||||
- *Playing in two places:* each upload carries a counter. If the cloud's
|
||||
copy is newer than the one you last downloaded, the game asks ("The
|
||||
cloud has a newer save (from the web, 20 minutes ago): use that, or
|
||||
keep this one?") instead of overwriting it.
|
||||
- *Versions:* the same save format on desktop and web; a save from a
|
||||
newer version than the game says so rather than loading it badly.
|
||||
- *Size of the job:* one step for the Worker and storage (with tests), one
|
||||
for the game side (name and password, the buttons, the newer-copy
|
||||
question). Paul creates the Worker and its storage in his Cloudflare
|
||||
account; the code and setup steps come with it.
|
||||
- **Later, maybe:** Android tablets (Nov 2026: left for now). Most input is
|
||||
already named actions, so a touch layer (stick, look, contextual buttons)
|
||||
is possible; the Mobile renderer has the same lost effects as the web, and
|
||||
a tablet can join but not host (no server processes).
|
||||
|
||||
### Updates (to design with the packaged builds)
|
||||
Needed because every network change bumps the protocol (12 as of P5), and
|
||||
|
||||
@@ -95,7 +95,7 @@ weather_wind={
|
||||
|
||||
[cinderwild]
|
||||
|
||||
updates/feed="https://git.psbailey.uk/api/v1/repos/Admin/Emberwild/releases/latest"
|
||||
updates/feed="https://git.psbailey.uk/api/v1/repos/Admin/Cinderwild/releases/latest"
|
||||
|
||||
[rendering]
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ extends RefCounted
|
||||
## crash or an error: the pause menu shows where it is and opens its folder,
|
||||
## to attach the file to the issue.
|
||||
|
||||
const REPO := "https://git.psbailey.uk/Admin/Emberwild"
|
||||
const REPO := "https://git.psbailey.uk/Admin/Cinderwild"
|
||||
|
||||
## An autoload (Net, Updates), looked up at run time: this script is also
|
||||
## loaded by tests that start before the autoloads are compiled in.
|
||||
|
||||
@@ -43,7 +43,7 @@ func _body() -> void:
|
||||
|
||||
print("the link")
|
||||
var url: String = BugReport.issue_url(w)
|
||||
check(url.begins_with("https://git.psbailey.uk/Admin/Emberwild/issues/new?title=Bug%3A%20&body="), "a new issue on the Cinderwild repo")
|
||||
check(url.begins_with("https://git.psbailey.uk/Admin/Cinderwild/issues/new?title=Bug%3A%20&body="), "a new issue on the Cinderwild repo")
|
||||
check(url.length() < 4000, "short enough for any browser (%d characters)" % url.length())
|
||||
var body := url.get_slice("&body=", 1).uri_decode()
|
||||
var ver: String = String(ProjectSettings.get_setting("application/config/version"))
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
# Applications). It's read from the environment, never from the command line.
|
||||
|
||||
cd "$(dirname "$0")/.." || exit 1
|
||||
API=${API:-https://git.psbailey.uk/api/v1/repos/Admin/Emberwild}
|
||||
API=${API:-https://git.psbailey.uk/api/v1/repos/Admin/Cinderwild}
|
||||
[ -n "$GITEA_TOKEN" ] || { echo "set GITEA_TOKEN first: read -s GITEA_TOKEN && export GITEA_TOKEN"; exit 1; }
|
||||
[ -f build/version.json ] || { echo "no build/version.json: run tools/export.sh first"; exit 1; }
|
||||
VERSION=$(python3 -c "import json; print(json.load(open('build/version.json'))['version'])")
|
||||
|
||||
@@ -430,7 +430,7 @@ The music follows what's happening: calm by day, a night theme after dark, a sto
|
||||
|
||||
### Reporting a bug
|
||||
|
||||
**Report a bug** in the pause menu opens a new issue on Cinderwild's [Gitea page](https://git.psbailey.uk/Admin/Emberwild/issues) in your browser, already filled in with your version, computer, mode, land, the in-game time and where you are. Say what happened and how to make it happen again, then press **Create Issue** (you'll need to be signed in there). Nothing is sent from the game itself. **Copy the details** puts the same details on your clipboard instead, and **Show the log file** opens the folder with `godot.log`: attach it for a crash or an error.
|
||||
**Report a bug** in the pause menu opens a new issue on Cinderwild's [Gitea page](https://git.psbailey.uk/Admin/Cinderwild/issues) in your browser, already filled in with your version, computer, mode, land, the in-game time and where you are. Say what happened and how to make it happen again, then press **Create Issue** (you'll need to be signed in there). Nothing is sent from the game itself. **Copy the details** puts the same details on your clipboard instead, and **Show the log file** opens the folder with `godot.log`: attach it for a crash or an error.
|
||||
|
||||
### Updates
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# Rebuild it after each release (the links name the version).
|
||||
|
||||
cd "$(dirname "$0")/../.." || exit 1
|
||||
REPO=${REPO:-https://git.psbailey.uk/Admin/Emberwild}
|
||||
REPO=${REPO:-https://git.psbailey.uk/Admin/Cinderwild}
|
||||
SITE=${SITE:-https://cinderwild.psbailey.uk} # (where the page is served: for link previews)
|
||||
SHOTS="meadow hut wolves winter cove treasure crabs"
|
||||
[ -f build/version.json ] || { echo "no build/version.json: run tools/export.sh first"; exit 1; }
|
||||
|
||||
Reference in New Issue
Block a user