Commit Graph
114 Commits
Author SHA1 Message Date
Samuel Lison 5dd316afad Merge pull request #85 from TemujinCalidius/feat/admin-studio
feat: SurvivorCore Studio — Engine Config editor, content overrides, window/sidebar rework
2026-07-07 12:41:01 +10:00
Samuel LisonandClaude Opus 4.8 3349738779 fix: address adversarial-review findings across engine + plugin
Engine: quest overrides with objective*/reward* fields on nested code quests
now WARN at boot (they merge nothing — QuestData prefers nested tables);
EngineConfig + ConfigAdmin reject non-finite numbers (inf/nan).

Plugin: Config group panels auto-size (fixed-height math clipped the last row
of big groups — Theme group lost its Bold font row); Stats panels get the gap
math right; the Engine Config explainer page now REBUILDS the window when the
engine appears (the old hint was impossible — pages were assembled once at
plugin load); create() refuses ids that already have an override (mirror
guard); failed Create/Override reasons render under the create row; rejected
config edits report in the footer; explicit navigation cancels a pending
debounced search jump; the mount-time page restore no longer clobbers the
saved last-page setting during an engine-less session; undo/redo refresh
skips while typing in one of the plugin's own text boxes; search results past
the 50-cap no longer render empty category headers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 12:39:56 +10:00
Samuel LisonandClaude Opus 4.8 40bf167318 docs: SurvivorCore Studio + Engine Config + overrides docs, CHANGELOG Unreleased
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 12:16:11 +10:00
Samuel LisonandClaude Opus 4.8 91c7a87f89 feat(plugin): SurvivorCore Studio — floating window, sidebar nav, search, Engine Config editor, roster overrides (#11, #21, #40)
New shell: Theme (shared visual system), Nav (rail + lazy router + badges),
OverviewPage, SearchPage (global editable results), SpawnHelpers; init.server
restructured around data-driven pages with last-page persistence and
undo/redo-aware refresh. Widget: floating 660×580 (min 480×380), new ID
SurvivorCoreStudio. ConfigAdmin/-Ui: deltas-only editor pages for all 11
engine Config sections incl. Theme colors (R,G,B + swatch) and fonts.
ContentAdmin/-Ui: per-category pages over the merged roster; + Override
entries (blank = inherit) tuning code-registered defs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 12:07:48 +10:00
Samuel LisonandClaude Opus 4.8 c661832485 feat(engine): SurvivorCoreEngineConfig no-code tuning layer + Registry.applyOverrides (#21, #40)
EngineConfig: schema for all 11 Config sections (~94 typed fields incl. color3/font),
deltas-only persisted instance applied at start()/startClient() before systems boot.
Registry.applyOverrides + SurvivorCoreContent/Overrides loading: field-merge deltas onto
already-registered (incl. code-registered) defs, pre-scan/pre-publish.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 11:57:59 +10:00
Samuel Lison 5cd6b263d1 Merge pull request #84 from TemujinCalidius/main
sync: v0.7.0 video docs → dev
2026-07-07 11:53:46 +10:00
Samuel Lison e4486426ca Merge pull request #83 from TemujinCalidius/docs/v0.7.0-video
docs: v0.7.0 hunting/loot-bags demo video
2026-07-07 11:53:04 +10:00
Samuel LisonandClaude Opus 4.8 8bd929a1d4 docs: add v0.7.0 hunting/loot-bags demo video + site video grid tile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 11:52:19 +10:00
Samuel Lison 8ddb7f8a24 Merge pull request #81 from TemujinCalidius/main
sync: v0.7.4 → dev
2026-07-06 15:41:40 +10:00
Samuel Lison 7877e88f3a Merge pull request #80 from TemujinCalidius/dev
release: v0.7.4 → main
v0.7.4
2026-07-06 15:40:56 +10:00
Samuel Lison ea9baf62e8 Merge pull request #79 from TemujinCalidius/release/v0.7.4
chore(release): v0.7.4
2026-07-06 15:40:05 +10:00
Samuel LisonandClaude Opus 4.8 51426d6e3a chore(release): v0.7.4
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 15:39:19 +10:00
Samuel Lison f5d8cdf968 Merge pull request #78 from TemujinCalidius/fix/beacon-latest-bag
fix: beacon follows the owner's newest bag
2026-07-06 15:39:15 +10:00
Samuel LisonandClaude Opus 4.8 44c0f8e25c fix: beacon follows the owner's newest bag; older bags never clear it
Dying again mid corpse-run drops a second bag (old + new coexist in the world,
each on its own 5-minute timer) and re-points the owner's beacon at the new
one. Previously the OLDER bag's later despawn/looting fired the unscoped
beacon-clear and wiped the beam pointing at the newer bag. LootBags now tracks
each owner's latest bag and only its destruction clears the beacon.

docs/loot-bags.md: documented the multi-bag + beacon-follows-newest behavior.

Live-verified: two coexisting bags, beacon on the newest; looting the OLD bag
left the beacon untouched; looting the NEW bag cleared it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 15:38:26 +10:00
Samuel Lison f6a26ddd30 Merge pull request #76 from TemujinCalidius/main
sync: v0.7.3 → dev
2026-07-06 15:34:14 +10:00
Samuel Lison aafa144a03 Merge pull request #75 from TemujinCalidius/dev
release: v0.7.3 → main
v0.7.3
2026-07-06 15:33:32 +10:00
Samuel Lison f6edd14214 Merge pull request #74 from TemujinCalidius/release/v0.7.3
chore(release): v0.7.3
2026-07-06 15:32:41 +10:00
Samuel LisonandClaude Opus 4.8 9ccd667e5b chore(release): v0.7.3
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 15:31:54 +10:00
Samuel Lison 771534a544 Merge pull request #73 from TemujinCalidius/fix/lootbag-streaming
fix: loot bag + beacon vanished on respawn (StreamingEnabled)
2026-07-06 15:31:50 +10:00
Samuel LisonandClaude Opus 4.8 ee77ca9816 fix: loot bag + beacon vanished on respawn under StreamingEnabled
Root cause: with StreamingEnabled (the new-place default), respawning away
from the death spot let Roblox evict the bag from the owner's client — the
bag looked deleted, and the local Destroying event fired, permanently killing
the beacon (server bag was fine all along).

- The bag is now a Model set PersistentPerPlayer for its owner
  (AddPersistentPlayer) — it never streams out of the owner's view.
- The beacon is position-driven plain data: no Instance in the remote, so no
  replication race (the 0.5s delay hack is gone) and no streaming fragility.
- The beam clears on an explicit server nil-fire when the bag is truly
  emptied/expired (plus a lifetime fallback), not on replica Destroying.

Live-verified (fresh bytecode confirmed via bag ClassName): beacon appears
instantly, survives respawn, bag stays visible to the owner, loot restores
everything, beam clears on empty.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 15:31:01 +10:00
Samuel Lison 1b3eea714a Merge pull request #71 from TemujinCalidius/main
sync: v0.7.2 → dev
2026-07-06 14:59:12 +10:00
Samuel Lison e6ae4f4800 Merge pull request #70 from TemujinCalidius/dev
release: v0.7.2 → main
v0.7.2
2026-07-06 14:58:29 +10:00
Samuel Lison 1e2c6a43ac Merge pull request #69 from TemujinCalidius/release/v0.7.2
chore(release): v0.7.2
2026-07-06 14:57:36 +10:00
Samuel LisonandClaude Opus 4.8 52d9aea26b chore(release): v0.7.2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:56:50 +10:00
Samuel Lison 23e07ef6fb Merge pull request #68 from TemujinCalidius/fix/lootbag-beacon-dead-loot
fix: loot-bag owner beacon race + looting while dead
2026-07-06 14:56:47 +10:00
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
Samuel Lison 015dc60a8e Merge pull request #66 from TemujinCalidius/main
sync: v0.7.1 → dev
2026-07-06 14:39:29 +10:00
Samuel Lison 2aae8d9db7 Merge pull request #65 from TemujinCalidius/dev
release: v0.7.1 → main
v0.7.1
2026-07-06 14:38:46 +10:00
Samuel Lison 92a8773239 Merge pull request #64 from TemujinCalidius/release/v0.7.1
chore(release): v0.7.1
2026-07-06 14:37:54 +10:00
Samuel LisonandClaude Opus 4.8 75f3a009db chore(release): v0.7.1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:37:07 +10:00
Samuel Lison dae3face26 Merge pull request #63 from TemujinCalidius/fix/ghost-tools-spawn-safety
fix: ghost tools from unowned hotbar pins + demo spawn safety
2026-07-06 14:37:03 +10:00
Samuel LisonandClaude Opus 4.8 96dc0799ad fix: ghost tools from unowned hotbar pins + inert-pin dim + demo spawn safety
- ToolEquip: possession gate — a pin is only a pointer; never equip an item
  the player doesn't carry (a stale/seeded pin without a backing stack could
  conjure a usable ghost Tool).
- Hotbar UI: dim a pinned icon to 0.45 (the Crafting-tab convention) when the
  player owns none of the item, so an inert pin reads as inert.
- Demo: husks spawn beyond aggro+wander reach of the spawn point — no more
  farming fresh players before they pick up a weapon.

Verified live in Studio: a war_bow pin with zero carried refuses to equip and
renders dimmed; owned pins equip normally at full opacity.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:36:12 +10:00
Samuel Lison 5ccdf19849 Merge pull request #62 from TemujinCalidius/main
sync: v0.7.0 release → dev
2026-07-06 14:09:50 +10:00
Samuel Lison 1c764aa16a Merge pull request #60 from TemujinCalidius/dev
release: v0.7.0 → main
v0.7.0
2026-07-06 14:08:27 +10:00
Samuel Lison 688b89d0a6 Merge pull request #59 from TemujinCalidius/release/v0.7.0
chore(release): v0.7.0
2026-07-06 14:07:29 +10:00
Samuel LisonandClaude Opus 4.8 c74e1c3509 chore(release): v0.7.0
Promote CHANGELOG Unreleased → 0.7.0 and bump wally.toml. (VERSION already
0.7.0 in src/init.luau.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:06:40 +10:00
Samuel Lison 82706c88d8 Merge pull request #58 from TemujinCalidius/feat/hunting-lootbags
feat: hunting/butchering + death loot bags (#13, #19)
2026-07-06 14:06:36 +10:00
Samuel LisonandClaude Opus 4.8 9951e09a3f feat: hunting/butchering + death loot bags (#13, #19)
Hunting & butchering (#13): mob defs gain flat carcass fields (carcassItem/Hp/
Tool/YieldMin/Max/Seconds); a slain mob leaves a butcherable CARCASS that is a
tagged Gatherable — the whole harvesting pipeline (tool gate, per-hit yields,
HP bar, gather:* hooks, progression counters) is reused as the butcher flow.
Carcass looks come from SurvivorCoreContent.Carcasses.<mobType>; reactions key
on "<mobType>_carcass"; fields editable in the admin Mobs editor. Gatherable
gains generic PromptText/PromptObject attributes.

Death loot bags (#19, TCE port): dying drops inventory AND worn equipment
(config-toggleable) into an anchored ground-clamped bag — IntValue contents,
instant-loot prompt for anyone, floating countdown, owner-only beacon, death
toast, LifetimeSeconds despawn. Pickup is loss-proof: equipment restores to
empty slots first (satchel re-grows capacity before stacks), the rest grants
up-to-fit and the remainder stays bagged. New player:died lifecycle → deaths
counters via Progression; lootbag:dropped/collected hooks; TCE respawn camera
fix. New Inventory APIs: getEquipment, clearAll (capacity-safe order), addUpTo,
restoreEquip.

Fixed: ToolEquip forces CanBeDropped=false on cloned creator templates.

Demo: stone_knife + raw_meat (risky raw: Hunger -25, Poison +8), boar carcass,
multi-objective hunt_boar quest, hunter/butcher/hard_way achievements. Docs:
mobs.md butchering section + loot-bags.md; CHANGELOG; site card copy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 14:05:22 +10:00
Samuel Lison 991d1b0d80 Merge pull request #57 from TemujinCalidius/main
sync: v0.6.0 video docs → dev
2026-07-03 18:39:35 +10:00
Samuel Lison 83e7c293eb Merge pull request #56 from TemujinCalidius/docs/v0.6.0-video
docs: v0.6.0 demo video + site video grid refresh
2026-07-03 18:38:44 +10:00
Samuel LisonandClaude Opus 4.8 ce676fa4d5 docs: add v0.6.0 quests/achievements demo video + refresh site video grid
Wire the demo video (makertube uSGJ2MHEFjSSKxMiJBJ6Y5) into quests.md,
achievements.md, content-authoring.md and admin-plugin.md, and feature it in
the landing page's video grid (replacing the oldest embed; that video stays
linked from docs/inventory.md).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 18:37:58 +10:00
Samuel Lison 9937f8d641 Merge pull request #55 from TemujinCalidius/main
sync: v0.6.0 release → dev
2026-07-03 15:31:30 +10:00
Samuel Lison 6623e1c0bd Merge pull request #53 from TemujinCalidius/dev
release: v0.6.0 → main
v0.6.0
2026-07-03 15:29:47 +10:00
Samuel Lison f71685e8fd Merge pull request #52 from TemujinCalidius/release/v0.6.0
chore(release): v0.6.0
2026-07-03 15:28:58 +10:00
Samuel LisonandClaude Opus 4.8 a8f1114f81 fix(release): promote the section heading, not the header prose
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 15:28:12 +10:00
Samuel LisonandClaude Opus 4.8 4a4b54a723 chore(release): v0.6.0
Promote CHANGELOG Unreleased → 0.6.0 and bump wally.toml. (SurvivorCore.VERSION
is already 0.6.0 in src/init.luau.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 15:27:54 +10:00
Samuel Lison 8445d66dab Merge pull request #51 from TemujinCalidius/feat/quests-achievements
feat: quests + achievements — goals & progression (#10)
2026-07-03 15:27:28 +10:00
Samuel LisonandClaude Opus 4.8 9caa888369 feat: quests + achievements — the goals & progression release (#10)
Quests (#10): a Quests registry + server runtime — objectives (gather/craft/
kill/use × count, blank target = any) and rewards, autoStart + requires chains
(completing a prerequisite auto-starts dependents), optional turn-in at a
tagged QuestGiver (component + prompt). Rewards are never lost: a full
inventory parks the quest as ready and the grant retries on inventory change.
Quests menu tab (L) with per-objective progress bars; QuestLog JSON attribute
replicates state; quest:started/progress/completed/blocked via Hooks + bus.

Achievements: an always-on runtime for the existing registry, ported
architecturally from TCE. A shared Progression layer translates bus events
into auto-derived counters (gathers_reed, crafts_total, kills_husk, …) so a
def is just { key, name, counter, threshold } — flat in code and no-code.
Unlock-once + toast + Achievements tab (J) with progress bars.

Toasts: themed top-right notification queue (Notify remote + Toasts.show).

No-code: admin plugin gains Quests (single-objective + "+ Quest giver" drop)
and Achievements (counter/threshold) editors; the engine loads both from
SurvivorCoreContent. Demo: a 3-quest chain + 4 achievements + a giver post.

Fixed: registerPanel now ADOPTS a template-scaffolded tab (hides the
placeholder, builds into the authored frame) instead of silently no-opping —
this replaces the Quests/Achievements "coming soon" placeholders.

EventBridge parity: gather:*, craft:* and item:use now also cross the bus.
Changed: rojo 7.6.1 → 7.7.0 (rokit pin; CI follows; gate verified).

Docs: quests.md + achievements.md (new), content-authoring/admin-plugin/
extending/README updated, CHANGELOG Unreleased, site feature card.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 15:26:19 +10:00
Samuel Lison 0892bf948e Merge pull request #50 from TemujinCalidius/main
sync: landing page polish → dev
2026-07-01 09:35:03 +10:00
Samuel Lison d8996930f4 Merge pull request #49 from TemujinCalidius/fix/landing-polish
docs(site): UI screenshot, Get Started overflow fix, Sponsor link
2026-07-01 09:33:35 +10:00