Samuel LisonandClaude Opus 4.8 78f99a0667 fix: loot-bag owner beacon race + looting while dead
- Beacon: LootBagDropped fired the same frame the bag was created, so the
  Instance reference arrived as nil on the client (not yet replicated) and the
  owner beacon silently never appeared. The fire is now delayed 0.5s.
- Dead looting: collect() never verified the collector was alive, so a corpse
  lying next to its own bag could scoop everything back before respawning.
  The server now rejects dead collectors (isAlive gate, Harvesting pattern).

Live verification note: the running Studio session executed stale bytecode
(old collect granted loot to a dead player even though the new source was
synced) — verified source-in-place; behavior verification needs a Studio
restart, which CI/release artifacts are unaffected by.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:55:55 +10:00
2026-07-06 14:37:07 +10:00

SurvivorCore

SurvivorCore

A batteries-included, creator-extensible survival game engine for Roblox.

Release CI License: MIT

🌐 Website · 📖 Docs · 📹 Demo · ⬇ Releases

Status: v0.5.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.

What it is

SurvivorCore gives you the mechanics of a survival game — without dictating your content. You bring the items, world and art; the engine wires up the behavior, the UI, and the no-code authoring tools. If you know Roblox Studio, you can build a survival game.

  • Survival stats & HUD — health, energy, hunger, thirst, fatigue, blood, poison; ticking, draining, and biting back, on a clean restyleable HUD.
  • Inventory, hotbar & crafting — slots + carry-weight, a 9-slot hotbar, equipment, and hand crafting in a tabbed, drag-and-drop menu — server-authoritative.
  • Gathering — tag any mesh Gatherable: hold-E or tool-swing, per-hit yields, and reaction hooks (a reed sways; a tree fells and leaves a stump).
  • Combat — melee & bow — click to swing, or aim a bow and loose arrows that arc under real weight. One server-validated combat:hit / combat:kill schema.
  • Mobs & AI — a shared FSM substrate: hostile mobs chase & attack, passive animals flee. Behavior is data — a mob's faction picks the profile.
  • Quests & achievements — event-driven goals: quest chains with objectives, rewards and quest-giver NPCs, plus milestone achievements with toasts — both tracked automatically from what players already do (gather, craft, fight).
  • Hunting & loot bags — slain animals leave butcherable carcasses (knife required, real yields); player death drops everything into a lootable bag with a countdown — get back to it before it's gone.
  • No-code admin plugin — create items, weapons, ammo and mobs from a Studio form (damage, range, arrow curve, weight, aggro, leash) and drop them into the world. No scripting.

Everything is content-free by design, server-authoritative, and restyleable — the UI is real Instances driven by attributes, and every default is overridable.

Quickstart

local SurvivorCore = require(ReplicatedStorage.SurvivorCore)

-- register content from code (or author it no-code in the admin plugin)
SurvivorCore.Items.register({ id = "berry", name = "Wild Berries", stack = 20 })
SurvivorCore.Mobs.register({ id = "husk", faction = "hostile", health = 60 })

SurvivorCore.start()  -- boots stats, inventory, gathering, crafting, combat, mobs…

The built-in HUD loader calls SurvivorCore.startClient() for you.

Install — drop SurvivorCore.rbxm from a Release into ReplicatedStorage, or add it via Wally:

# wally.toml
[dependencies]
SurvivorCore = "temujincalidius/survivorcore@0.5.0"

Working from source? Clone and rojo serve the demo.project.json place.

Creator-owned, no code

Build any mesh, tag it with a component, set attributes — no engine-side definition needed:

Tag Set It becomes
Gatherable Resource = "oak_tree" a harvestable node (item/HP/tool/yield from the def)
Mob MobType = "husk" a creature that runs the AI FSM

For game-specific flourish (a tree that physically fells, a custom death effect), hook the engine lifecycle instead of forking it:

SurvivorCore.Gather.onReaction("oak_tree", "depleted", function(ctx) fellTrunk(ctx.instance) end)
SurvivorCore.Hooks.on("combat:kill", function(ctx) awardXp(ctx.attacker) end)

The admin plugin turns all of this into Studio forms — see docs/admin-plugin.md and docs/content-authoring.md.

Docs

Architecture · Survival stats + HUD · Inventory · Harvesting · Crafting · Combat · Mobs & AI · Quests · Achievements · Loot bags · No-code content · Admin plugin · Design language · Extending

Project layout

src/
  init.luau          -- SurvivorCore root: .start() / .startClient() + the public API
  foundation/        -- Config, Assets, EventBridge, Hooks, Reactions, Registry
  registries/        -- Items, Recipes, Resources, Stats, Mobs, …
  components/         -- creator-facing tag/attribute components (Gatherable, Mob)
  systems/           -- Inventory, Harvesting, Crafting, Combat, Mobs, SurvivalStats…
  client/            -- HUD + UI binders, combat/harvest input
plugin/              -- the Studio admin plugin (separate Rojo tree)
demo/                -- a runnable demo place that consumes the engine
site/                -- the landing page (deployed to GitHub Pages)
docs/                -- documentation

Sponsor

SurvivorCore is free and open source. If it's useful — or you just want to help the engine grow — support development via GitHub Sponsors. 💛

License

MIT © 2026 Samuel Lison

S
Description
No description provided
Readme MIT
3 MiB
Languages
Luau 96.1%
HTML 2.5%
CSS 1.4%