48 Commits

Author SHA1 Message Date
Paul Bailey
40f5e25c41 Version 0.3.1 2026-11-06 14:05:24 +00:00
Paul Bailey
eaeb841c1d Lights to place indoors (tallow candle, torch stand); docs brought up to date; the journey plan; sticky teleports in net tests; protocol 15 2026-11-06 13:56:43 +00:00
Paul Bailey
5f40fa3f7b Version 0.3.0 2026-11-06 11:58:27 +00:00
Paul Bailey
4b2e687188 Uses for every material (clay jar, bedroll, pelt rug, fang necklace, bear cloak, pemmican, bait), Q to drop, K/M bag rows on 1-8, help pages; protocol 14 2026-11-06 11:49:42 +00:00
Paul Bailey
5778d61763 Version 0.2.1 2026-11-06 00:12:53 +00:00
Paul Bailey
787d8d1d65 Old Tam speaks (Kokoro); CC0 birdsong, crickets and owls; no plants through floors; menu and marker fixes 2026-11-06 00:03:59 +00:00
Paul Bailey
0550a4daa0 tools/publish_release.sh: create the Gitea release, upload and verify 2026-11-05 21:06:33 +00:00
Paul Bailey
a33fbd5d88 Version 0.2.0 2026-11-05 21:04:08 +00:00
Paul Bailey
caa611fac6 Audio: mood music, ambience, sound effects and creature voices (Kenney CC0 + synthesised); protocol 13 2026-11-05 21:03:54 +00:00
Paul Bailey
2a9d47630e Trailer: encode standard-range yuv420p so Safari and QuickTime play it 2026-11-05 19:37:24 +00:00
Paul Bailey
1d0008d34b Trailer tool (Movie Maker + ffmpeg) and a static download page built per release 2026-11-05 19:31:33 +00:00
Paul Bailey
608c66ea54 Update feed: the repo is now Admin/Emberwild 2026-11-05 19:15:05 +00:00
Paul Bailey
6ab72f2c05 Update check: version feed from the git server's releases, title-screen banner, clearer version refusals 2026-11-05 16:56:11 +00:00
Paul Bailey
a8eaf0d12e Packaged builds: macOS (universal, ad-hoc signed) and Windows, tools/export.sh 2026-11-05 16:40:47 +00:00
Paul Bailey
bd7d10a829 T4: Old Tam's tips in normal worlds, with a setting 2026-11-05 16:22:38 +00:00
Paul Bailey
73d27f1dcb Tutorial design: T3 on hold until worldlets 2026-11-05 15:08:58 +00:00
Paul Bailey
dbcc6f6e59 Tutorial: Old Tam's hut outline beside the fire, pieces snap into it 2026-11-05 15:01:59 +00:00
Paul Bailey
f93ebe1bea T2 tutorial: all five chapters with Old Tam, scripted dusk and demo wolf, rabbits for the hunt, title-screen Tutorial entry, pause-menu skip/leave, goodbye card; full bot playthrough test 2026-11-05 14:43:00 +00:00
Paul Bailey
5b5dd3d609 T1 tutorial: Actions events, the Guide autoload, chapter 1 with Old Tam the hermit, guide panel and marker, saved progress; roadmap: auto-update plan 2026-11-05 14:14:32 +00:00
Paul Bailey
e03411ffdb P5 the Old Stag: standing stones and altar, three-phase boss with charges, stun window, spirit wolves and stomps; antler pickaxe and trophy; group scaling and credit for every fighter; online 3-player test (protocol 12) 2026-11-05 13:39:06 +00:00
Paul Bailey
3389ec9a21 P4 hazards: food spoilage with rot speed setting, smoking rack and salt, food poisoning, harsher blizzards, hard winters with lake ice, lightning on trees, snow on roofs (protocol 11) 2026-11-05 11:49:13 +00:00
Paul Bailey
657c3140fe Plan: P4/P5 decisions (lightning hits trees only, server-set rot speed, Old Stag in, antler pickaxe stats) 2026-11-05 09:29:55 +00:00
Paul Bailey
9528f91e47 P3 thieves and barrow: crows and foxes steal food left out; the barrow with its guards, coffin loot and key pieces; blunt club vs bone (protocol 10) 2026-11-05 09:23:31 +00:00
Paul Bailey
96aac29606 P3 bear: one bear per island raids unattended food, palisades and closed huts keep it out, warns then charges, hide/fat/meat, fur rug (Cozy), death saved (protocol 8) 2026-11-05 07:51:07 +00:00
Paul Bailey
fc58c8d0e1 P3 alpha: wolf moon every 7th night, the alpha breaks wooden doors, iron-banded door, broken-door repair, alpha pelt and cloak (protocol 7) 2026-11-05 01:40:52 +00:00
Paul Bailey
411bfef34a P2 stone: stonecutter, cut stone, stone floors/walls/pillars/stairs/windows/doorway, hearth; wooden stairs, windows, posts, palisade and gate; stone support rules 2026-11-05 01:14:07 +00:00
Paul Bailey
24c280d885 P1 iron: nuggets, ore, clay, kiln, smelter, forge, iron tools and arrows, lantern, tool wear and repair 2026-11-05 00:31:07 +00:00
Paul Bailey
ab1f417c32 M2.7: Host Game, backups, launchd/systemd samples, hosting and Tailscale guide 2026-11-04 23:19:00 +00:00
Paul Bailey
2ab79b68c6 M2.6: server rules (PvP, raiding, locks and friends, death penalty, difficulty, wolf grace), chat, admin commands, server console 2026-11-04 22:54:40 +00:00
Paul Bailey
47fc116839 Crafting tabs (tools, weapons, cooking, building...); panel fits at 1280x720; steadier smoothness test 2026-11-04 22:01:54 +00:00
Paul Bailey
a211fe4c63 M2.5: wildlife, wolves, hunting, fishing and sleeping on the server 2026-11-04 21:25:10 +00:00
Paul Bailey
26be17b05f Progression plan: iron, stone building, new adversaries (docs/PROGRESSION_DESIGN.md) 2026-11-04 20:50:42 +00:00
Paul Bailey
35a656e996 M2.4: the server decides online (characters, inventory, stats, death, owned graves, per-player saves); death screen with Respawn after 3 s 2026-11-04 19:18:31 +00:00
Paul Bailey
8e8f10eb96 Tutorial world plan (docs/TUTORIAL_DESIGN.md), roadmap updated 2026-11-04 18:17:26 +00:00
Paul Bailey
c87b241b29 play.sh to start the game; Godot checks shared with run_server.sh 2026-11-04 18:12:56 +00:00
Paul Bailey
80786ab796 Wild flax: fibre plants in meadows and by the lake (2 fibre each) 2026-11-04 18:12:56 +00:00
Paul Bailey
0c18b6d49e M2.3: the shared world (trees, pickups, pieces, chests, fires, doors, graves, clock on the server) 2026-11-04 18:12:49 +00:00
Paul Bailey
74cbf96458 Wolf den search steps into the valley when the rim is steep everywhere 2026-11-04 16:02:40 +00:00
Paul Bailey
d489bb57ed Rename the game to Emberwild (data copied from the old folder) 2026-11-04 15:45:10 +00:00
Paul Bailey
ae2592822e Server launcher and start-up checks for other machines
- server/run_server.sh: checks Godot is 4.7+, imports a fresh copy once
  (the class cache in .godot/ isn't in git), then starts the server
- The dedicated server refuses to start, with a clear reason, on Godot
  older than 4.7 or when the game's scripts failed to load, instead of
  claiming to listen
- tests/run_all.sh imports a fresh copy first
- Setup doc: 4.7+ (not 4.3+), importing a fresh copy, running a server
2026-11-04 15:34:28 +00:00
Paul Bailey
d0f473e57b M2.2: player bodies, name tags, shared island and checked movement
- Joining loads the server's island (seed, spawn, clock); the server
  generates the same terrain from its seed and keeps a world clock that
  pauses when empty
- Other players are procedural low-poly characters in their chosen colours
  with name tags (hidden by walls, fading with distance), walk/run/swim
  animation and held items
- Movement: local and instant, sent at 20 Hz stamped with the sender's
  clock; the server refuses impossible moves (speed, rising, leaving the
  island, underground) and sends the player back; flagged respawns allowed
- Avatars drawn 100 ms behind and interpolated, with brief extrapolation
- Online: no pausing, player list in the Esc menu, Disconnect back to the
  title (with the reason); animals off and world changes local-only until
  M2.3-M2.5, shown on the HUD
- test_net_world: real server + walking and cheating bots at 100 ms +/-
  30 ms simulated latency (27 checks)
2026-11-04 15:08:14 +00:00
Paul Bailey
f62f71658f M2.1: dedicated server, joining, identity handshake, names, lobby
- Net autoload: headless dedicated server (--server) on UDP 24242 via ENet,
  server.json preferences (flags override per run, never saved), reserved
  names in names.json
- Identity: RSA-2048 key per install (Godot has no Ed25519), player id =
  key hash, challenge/response so ids can't be faked; profile with name
  and limited appearance (tunic, hair, beard)
- Server refuses bans, allowlist misses, duplicate logins, bad or taken
  names, wrong passwords, old protocol versions and a full server, each
  with a clear reason; first player on a new server becomes admin
- Title screen: Profile, Join Game, and a lobby with server info, rules
  and who's online
- test_net_lobby: real headless server + bot processes over UDP (38
  checks); --exit-with so test servers never outlive the test
2026-11-04 13:40:27 +00:00
Paul Bailey
89683e78fd M2 multiplayer plan: hosting, identity and names, server rules, phases
Decisions: UDP 24242, limited appearance in v1, global chat only, pause
when empty, first player to join becomes admin (for now).
2026-11-04 13:08:14 +00:00
Paul Bailey
4630ea5d44 Fish per water type in data/fish.json; worldlets design
- data/fish.json: fish, weights, dawn/dusk odds, bite timing and minimum
  depth per water type; ItemDB.define_water() registers them
- world.water_at(x, z) answers lake / sea / dry land; the float uses it,
  so a worldlet with a sea only needs a "sea" entry
- Clear messages for shallow water and water with nothing to catch
- Lake fish: more of them, bigger, nearer the shore, jumping with splash rings
- docs/WORLDLETS_DESIGN.md: proposal for data-defined world types
2026-11-04 11:41:04 +00:00
Paul Bailey
f174221268 Wolves with a den, fishing, and a mixed diet
Wolves
- Den: a boulder cave at the foot of the rim, sited from the seed (away
  from the sea and spawn, mouth toward the valley, clearing in front)
- Grace period: no wolves days 1-2; they move in on day 3 and howl; hunting
  from night 4; pack of 2, 3 from day 6, 4 from day 9; replaced by day
- Wary pack hunters: circle and dart in one at a time; a lit campfire is a
  safe zone, a torch makes them hesitate, walls block bites (line of
  sight); hit one and the pack turns; hurt wolves flee; a lone wolf is
  timid; by day they defend the den; home at dawn
- Glowing eyes, synthesised howls, can't sleep with wolves prowling
- Wolf pelt and Wolf Cloak (+25 warmth)
- Animals take a committed detour around obstacles

Fishing
- Fishing rod (workbench); cast a float onto the lake, 1.5 s to land a bite
- Perch and rarer trout; faster bites at dawn/dusk and in rain; grill them
- Visible fish near the shore that jump with splash rings

Mixed diet
- Foods belong to meat, fish or greens; each level runs down over ~1.5 days
- One group low: no healing; two low: Malnourished (health drains);
  all three good: Balanced diet (heal x1.5); HUD diet bars; saved

Tests: test_wolves and test_fishing_diet; run_all.sh covers 9 suites
2026-11-04 11:32:16 +00:00
Paul Bailey
67bf85523d M1d: creatures, hunting, weapons, food buffs and the hide cloak
- Rabbits, deer and boars with procedural meshes and animated legs, a
  state machine (idle/wander/flee/charge/dead) and heightmap steering that
  avoids water, cliffs, the world edge, trees and buildings
- Spawner keeps a habitat-based budget around the player (6/4/3)
- Melee needs a weapon or tool (club, spear, axe, pickaxe); box sweep hits
- Wooden spear (thrust or throw) and crude bow with draw-scaled arrows;
  projectiles stick in the world as saved pickups
- Carcasses: E to butcher for meat, hide and embedded arrows
- Boars charge and gore when hit; hurt flash and a brief healing pause
- Cooked meat gives Well fed (faster stamina and healing); buffs saved
- Hide cloak: wear for warmth, saved, goes in the grave on death
- Feathers as meadow pickups (appended, existing save ids unchanged)
- New test_creatures_combat suite; run_all.sh gets a per-suite time limit
2026-11-04 10:55:44 +00:00
Paul Bailey
fed96ef118 M1c: weather, snap building, shelter, beds and regrowth
- Seeded weather (clear/cloudy/rain/storm, snow and blizzards on cold days
  and above the snowline), lightning, synthesised rain/wind/thunder sound
- Rain/snow particles stopped by roofs; wet ground, settled snow and wind
  via global shader uniforms
- Snap-together wood floor, wall, door, roof and gable with structural
  support, collapse and X to dismantle
- Shelter detection: dry under a roof, warmer and Rested inside with a fire;
  rain burns an uncovered campfire faster
- Bed sets the spawn point and lets you sleep through the night
- Trees, boulders and ground pickups regrow; timers saved
- Grass cleared under floors; shorter HUD hint
- New test_weather_building suite (62 checks) and tests/run_all.sh, which
  also fails on script errors
2026-11-04 10:16:41 +00:00
Paul Bailey
fc7eb3cfed M1b: survival stats, day/night, fire fuel, cooking, foraging, torches, death + grave
- Health, stamina, hunger, warmth and wet with HUD bars, status tags and clock
- 20-minute day/night cycle with moon, stars and lit clouds
- Campfire fuel (2 min start, 15 min max), heat radius, cooking needs a lit fire
- Berry bushes (regrow 10 min), mushrooms, roasted mushroom, torch
- Stamina costs for sprint, jump and harvest hits
- Death respawns at island start and leaves a grave bag
- Saves include stats, time of day, fire fuel, regrowth timers and graves
- New test_survival_stats suite; tests fail if a script error aborts them
2026-11-04 01:19:41 +00:00
340 changed files with 32630 additions and 238 deletions

8
.gitignore vendored
View File

@@ -3,7 +3,7 @@
.import/ .import/
*.import *.import
export.cfg export.cfg
export_presets.cfg # (export_presets.cfg is kept: signing passwords live in .godot/export_credentials.cfg)
# Exported builds # Exported builds
/build/ /build/
@@ -18,3 +18,9 @@ Thumbs.db
# Editor # Editor
*.tmp *.tmp
# Cloudflare wrangler cache (tools/site deploys)
.wrangler/
# Kokoro TTS environment (tools/voice/make_voice.sh sets it up)
tools/voice/.venv/

View File

@@ -16,7 +16,18 @@ addon SDK with guard rails.
## Status ## Status
See `docs/ROADMAP.md` for milestones and `docs/ARCHITECTURE.md` for the design. See `docs/ROADMAP.md` for milestones and `docs/ARCHITECTURE.md` for the design.
Current milestone: **M0 — playable single-player world skeleton** (scaffolding on disk; needs Godot 4 installed to open & run). **Emberwild 0.3.0** is released (download page and player guide:
https://emberwild-95k.pages.dev, builds on the Gitea releases). Built so far:
- M0-M1: the island, survival, crafting, building, weather, wildlife, hunting, fishing.
- M2: self-hosted multiplayer (Host Game, dedicated servers, rules, chat, admin).
- P1-P5 (`docs/PROGRESSION_DESIGN.md`): iron, stone building, the wolf moon and
alpha, the bear, crows and foxes, the barrow, hazards, the Old Stag. P6: a use
for every material, lights to place, dropping items, bag rows on the hotbar.
- T1, T2, T4 (`docs/TUTORIAL_DESIGN.md`): the tutorial with Old Tam (spoken),
and his tips in normal worlds.
- M4 so far: packaged builds, the update check, music, ambience, sound effects
and creature voices (`assets/audio/CREDITS.md`), the trailer and help pages.
Next: the worldlets and the journey between them (`docs/WORLDLETS_DESIGN.md`).
## Requirements ## Requirements
- **Godot 4.3+** (standard build; no C# needed — this project uses GDScript). - **Godot 4.3+** (standard build; no C# needed — this project uses GDScript).
@@ -34,6 +45,34 @@ godot --path .
godot --headless --path . -- --server godot --headless --path . -- --server
``` ```
## Packaged builds
```bash
tools/export.sh # build/Emberwild-<version>-macos.zip and -windows.zip
tools/export.sh macOS # or just one ("macOS" / "Windows")
```
Needs the Godot export templates for your Godot version (Editor > Manage
Export Templates). The version number is `application/short_version` in
`export_presets.cfg`.
- **Mac:** a universal .app, ad-hoc signed but not notarised. On another Mac,
the first launch needs right-click > Open (or System Settings > Privacy &
Security > Open Anyway).
- **Windows:** unzip and run `Emberwild.exe` (keep `Emberwild.pck` beside
it). It's unsigned, so SmartScreen says "Windows protected your PC":
More info > Run anyway.
- A packaged copy is also a dedicated server:
`Emberwild.app/Contents/MacOS/Emberwild --headless -- --server` (Mac) or
`Emberwild.exe --headless -- --server` (Windows). Saves and settings live in
the same user folder as a copy run from source.
## Trailer and download page
```bash
tools/trailer/make_trailer.sh # build/Emberwild-trailer.mp4: recorded in-game (Movie Maker), needs ffmpeg
tools/site/make_site.sh # build/site/: index.html + poster.jpg + trailer.mp4 for the current release
```
The page's download links point at the Gitea release named in
`build/version.json`, so rebuild it after each `tools/export.sh` release.
Gitea doesn't serve HTML pages: copy `build/site/` to any static web host.
## Layout ## Layout
``` ```
project.godot Godot project definition project.godot Godot project definition

54
assets/audio/CREDITS.md Normal file
View File

@@ -0,0 +1,54 @@
# Audio credits
Everything here is CC0 (public domain): free to use, change and ship, with
no attribution required. Credit is given anyway.
## Kenney (CC0)
`sfx/kenney/` holds sounds from three of Kenney's packs, renamed:
- **RPG Audio**: creaks, doors, cloth, leather, knife, metal clicks
- **Impact Sounds**: wood, mining, plank, punch and soft impacts; footsteps
on grass, snow, wood and concrete
- **Interface Sounds**: open, close, tick and confirmation chimes
https://kenney.nl/assets/rpg-audio,
https://kenney.nl/assets/impact-sounds,
https://kenney.nl/assets/interface-sounds:
"License: (Creative Commons Zero, CC0)
http://creativecommons.org/publicdomain/zero/1.0/". Thank you, Kenney.
Which file is which is listed in `KENNEY` in `tools/audio/make_audio.py`,
which also re-copies them (`--kenney <folder with the unzipped packs>`).
## SamsterBirdies (CC0)
`ambience/birds.ogg` is from "Bird ambience. Coniferous forest dawn chorus."
by SamsterBirdies (https://freesound.org/people/SamsterBirdies/sounds/745273/,
License: Creative Commons 0): its first 90 s (kept in
`tools/audio/sources/birds_samsterbirdies_745273.ogg`), softened a little and
made into a seamless loop by `tools/audio/make_audio.py birds`. Thank you.
## OwlStorm (CC0)
`ambience/crickets.ogg` is "Night Crickets Ambience on Rural Property" by
OwlStorm (https://freesound.org/people/OwlStorm/sounds/320145/, License:
Creative Commons 0; the preview is in `tools/audio/sources/`), with the low
rumble taken out and made into a seamless loop by
`tools/audio/make_audio.py crickets`. Thank you.
## Breviceps (CC0)
`ambience/owl_0.ogg` and `owl_1.ogg` are the two hoots in "Owl Hoot" by
Breviceps (https://freesound.org/people/Breviceps/sounds/465697/, License:
Creative Commons 0; the preview is in `tools/audio/sources/`), cut at 0.12 s
and 2.65 s (leaving out the short sound between them), then levelled. Thank you.
## Old Tam's voice
`voice/` is spoken by **Kokoro** (Kokoro-82M by hexgrad, Apache-2.0,
https://huggingface.co/hexgrad/Kokoro-82M) with its British "George" voice,
made a little older (deeper, slower, warmer) by `tools/voice/make_voice.py`.
The recordings are generated from our own text; rebuild them with
`tools/voice/make_voice.sh` after changing any line.
## Emberwild's own (CC0)
`music/`, `ambience/` and `sfx/synth/` are synthesised from scratch by
`tools/audio/make_audio.py` (no samples): the five music tracks (calm,
night, storm, danger, boss), the fire crackle, the creature voices, and the
swings, eating, splashes, the fishing reel and bite, the bow, the hurt thump
and death. Released under CC0 like the rest of this folder.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/audio/music/boss.ogg Normal file

Binary file not shown.

BIN
assets/audio/music/calm.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More