chore(release): v0.9.0

Promote CHANGELOG Unreleased → 0.9.0 (player trading #15, the player interact
window, and the bow rate-limit security fix). Bump wally.toml +
SurvivorCore.VERSION to 0.9.0.

Collateral: player-trading demo video as a 7th site video tile and a Demo line
in docs/trading.md + docs/interact.md; a full-width "Player trading" feature
card on the landing page; trading.md + interact.md added to the README doc
index; version surfaces bumped across site, README and getting-started.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Samuel Lison
2026-07-30 17:00:36 +10:00
co-authored by Claude Opus 4.8
parent 0ab3e7d062
commit f4fad6fc83
8 changed files with 21 additions and 8 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ All notable changes to SurvivorCore are recorded here. The format follows
[Semantic Versioning](https://semver.org/spec/v2.0.0.html). At release time, `## Unreleased`
is promoted to the new version and `main` is tagged `vX.Y.Z`.
## Unreleased
## 0.9.0 — 2026-07-30
### Security
- **Bow shots are now rate-limited server-side.** The bow release handler enforced no cooldown — the
+3 -2
View File
@@ -14,7 +14,7 @@
</div>
> **Status: v0.8.0 — pre-release.** The core survival loop is in and working; the engine is
> **Status: v0.9.0 — pre-release.** The core survival loop is in and working; the engine is
> being grown toward v1.0 and APIs may still shift. Production-tested in
> [The Counter Earth](https://thecounterearth.com).
@@ -71,7 +71,7 @@ into `ReplicatedStorage`, or add it via [Wally](https://wally.run):
```toml
# wally.toml
[dependencies]
SurvivorCore = "temujincalidius/survivorcore@0.8.0"
SurvivorCore = "temujincalidius/survivorcore@0.9.0"
```
Working from source? Clone and `rojo serve` the `demo.project.json` place.
@@ -102,6 +102,7 @@ The **admin plugin** turns all of this into Studio forms — see
[Inventory](docs/inventory.md) · [Harvesting](docs/harvesting.md) · [Crafting](docs/crafting.md) ·
[Combat](docs/combat.md) · [Mobs & AI](docs/mobs.md) · [Quests](docs/quests.md) ·
[Achievements](docs/achievements.md) · [Loot bags](docs/loot-bags.md) ·
[Player trading](docs/trading.md) · [Interact window](docs/interact.md) ·
[No-code content](docs/content-authoring.md) ·
[Admin plugin](docs/admin-plugin.md) · [Design language](docs/design-language.md) ·
[Extending](docs/extending.md)
+1 -1
View File
@@ -34,7 +34,7 @@ Once published, add it to your game's `wally.toml`:
```toml
[dependencies]
SurvivorCore = "temujincalidius/survivorcore@0.8.0"
SurvivorCore = "temujincalidius/survivorcore@0.9.0"
```
Then:
+2
View File
@@ -1,5 +1,7 @@
# Player interact window
> 📹 **Demo:** [the interact window + player trading](https://makertube.net/w/sJmS6L15jRmwxhQCE4Zgmi)
Walk up to another player and a **"[E] Interact"** badge appears over *their* head. Press **E** (or
tap the badge) to open an **interact window** showing that player's name and survival stats, plus a
list of **actions****Trade** ships built-in; games add their own
+2
View File
@@ -1,5 +1,7 @@
# Player trading
> 📹 **Demo:** [walk up, offer, confirm — a dupe-proof player trade](https://makertube.net/w/sJmS6L15jRmwxhQCE4Zgmi)
Two survivors standing near each other can **trade items** face-to-face
([`src/systems/Trade.luau`](../src/systems/Trade.luau), issue #15). The swap is fully
server-authoritative and **dupe-proof**: nothing moves until both players confirm, and even then it
+10 -2
View File
@@ -55,7 +55,7 @@
<div class="hero-inner">
<img class="hero-logo" src="assets/img/logo-256.png" alt="SurvivorCore logo" width="112" height="112" />
<a class="badge" href="https://github.com/TemujinCalidius/SurvivorCore/releases/latest">
v0.8.0 · pre-release
v0.9.0 · pre-release
</a>
<h1>The survival game engine for <span class="accent">Roblox</span></h1>
<p class="lede">
@@ -140,6 +140,13 @@
<h3>Quests &amp; achievements</h3>
<p>Event-driven goals: quest chains with objectives, rewards and quest-giver NPCs, plus milestone achievements with toasts — tracked automatically from what players already do.</p>
</article>
<article class="card card-wide">
<span class="ico ico-ember" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 8h16m0 0l-4-4m4 4l-4 4"/><path d="M20 16H4m0 0l4 4m-4-4l4-4"/></svg>
</span>
<h3>Player trading</h3>
<p>Walk up to another survivor and an <strong>interact window</strong> opens — their name, their condition, and what you can do. Choose <strong>Trade</strong> and both of you stage items, see each other's offer live, and confirm. The swap is <strong>dupe-proof by construction</strong>: nothing leaves an inventory until both sides agree, and then it moves in one atomic step that can't create or destroy an item.</p>
</article>
<article class="card card-wide">
<span class="ico ico-green" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a4 4 0 0 0-5.4 5.4l-6 6 2 2 6-6a4 4 0 0 0 5.4-5.4l-2.3 2.3-2-2 2.3-2.3z"/></svg>
@@ -172,6 +179,7 @@
<div class="video"><iframe src="https://makertube.net/videos/embed/uSGJ2MHEFjSSKxMiJBJ6Y5" title="Quests &amp; achievements demo" loading="lazy" allowfullscreen sandbox="allow-same-origin allow-scripts allow-popups allow-fullscreen"></iframe><span>Quests &amp; achievements</span></div>
<div class="video"><iframe src="https://makertube.net/videos/embed/oVJwYUhCKxA2ZvgvocdhwZ" title="Hunting &amp; loot bags demo" loading="lazy" allowfullscreen sandbox="allow-same-origin allow-scripts allow-popups allow-fullscreen"></iframe><span>Hunting &amp; loot bags</span></div>
<div class="video"><iframe src="https://makertube.net/videos/embed/g4oySJeXD4Th7f1zYEu9Bz" title="SurvivorCore Studio admin panel demo" loading="lazy" allowfullscreen sandbox="allow-same-origin allow-scripts allow-popups allow-fullscreen"></iframe><span>SurvivorCore Studio</span></div>
<div class="video"><iframe src="https://makertube.net/videos/embed/sJmS6L15jRmwxhQCE4Zgmi" title="Player trading demo" loading="lazy" allowfullscreen sandbox="allow-same-origin allow-scripts allow-popups allow-fullscreen"></iframe><span>Player trading</span></div>
</div>
</section>
@@ -187,7 +195,7 @@
<p>Grab the drop-in model from the latest release, or add it with Wally:</p>
<pre><code># wally.toml
[dependencies]
SurvivorCore = "temujincalidius/survivorcore@0.8.0"</code></pre>
SurvivorCore = "temujincalidius/survivorcore@0.9.0"</code></pre>
<p class="muted">…or drop <code>SurvivorCore.rbxm</code> into <code>ReplicatedStorage</code>.</p>
<p>
<a class="btn btn-ghost" href="https://github.com/TemujinCalidius/SurvivorCore/releases/latest">Latest release ↗</a>
+1 -1
View File
@@ -74,7 +74,7 @@ local EngineConfig = require(script.shared.EngineConfig)
local SurvivorCore = {}
SurvivorCore.VERSION = "0.8.0"
SurvivorCore.VERSION = "0.9.0"
-- Foundation
SurvivorCore.Config = Config
+1 -1
View File
@@ -1,7 +1,7 @@
[package]
name = "temujincalidius/survivorcore"
description = "Batteries-included, creator-extensible survival game framework for Roblox."
version = "0.8.0"
version = "0.9.0"
license = "MIT"
authors = ["Samuel Lison"]
registry = "https://github.com/UpliftGames/wally-index"