6 Commits
Author SHA1 Message Date
Samuel LisonandClaude Opus 4.8 5ab855fa1b feat(ui): inventory, hotbar & tabbed menu UI (#7, #9, #3)
Server-authoritative slots+weight inventory, a 9-slot hotbar (keys 1-9),
equipment slots, and a restyleable tabbed menu (functional Inventory +
Character Sheet; Codex/Achievements/Quests scaffolded), built the engine's
way: authored ScreenGui templates + attribute-discovering binders, with a
zero-setup fallback.

- Drag-and-drop is driven by a per-frame cursor poll (immune to the grid
  ScrollingFrame that swallows InputChanged) with GUI-inset-corrected drop
  hit-testing so releases land on the actual slot.
- Menu key defaults to Tab; the engine frees it by disabling the CoreGui
  player roster (ReclaimCoreKeys) and moves the chat to bottom-left so it
  clears the top-left HUD (Chat config). Toggle ignores focused TextBoxes.
- Consumables apply onConsume via the stat-effects layer + fire item:use;
  gather yields flow into the inventory; pickups auto-pin to the hotbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 17:06:54 +10:00
Samuel LisonandClaude Opus 4.8 69bbf12be9 feat(hud): ship free default stat icons (visible in Studio Edit)
Owner relaxed the asset side of the content-free rule — assets in this repo are
free to use — so the engine now ships its generated HUD icons as defaults instead
of leaving blank slots. Two wins: the HUD is iconed out of the box, and the icons
render in Studio's EDIT view (no Play needed), so you can author/tune the HUD and
see the real thing — or edit it straight from the Explorer.

- StatDefs.luau: each of the 7 stats carries an `icon` default. Putting it here
  (not as a per-bar HUD attribute) keeps the admin-panel/config override working —
  a per-bar attribute would shadow it. resolveIcon: per-bar attr > config/def.icon
  (now the shipped id) > Assets > "".
- assets/hud/SurvivalHud.model.json: bake each bar's child `Icon` ImageLabel
  (Image + Visible=true) so it shows in edit mode; the Credits counter (no StatDefs
  entry) also gets a per-bar `Icon` attribute to drive its runtime resolution.
- Retire demo/client/HudIcons.client.luau (+ its demo.project.json mount): the
  runtime icon-assigning script is now redundant.
- Relax the docs/PR-template "content-free" wording to "design-free": free default
  ART may ship (overridable per stat); game-specific DESIGN (items/recipes/lore)
  still never ships. Updated design-language, survival-stats, CONTRIBUTING.
- CHANGELOG: record default icons + add the missing admin-plugin entry; note CI
  now builds all three Rojo targets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 19:02:39 +10:00
Samuel LisonandClaude Opus 4.8 30ee904840 Make stat fill-direction engine-owned (fix afflictions still filling wrong)
`invert` and `dangerHigh` are stat semantics, not owner tuning — but they were in
the SurvivalStatsConfig instance's override map, so a stale/place-saved instance
(carrying the old Invert=true) overrode the corrected engine default and kept
Poison/Hunger/Thirst filling the wrong way. Removed both from STUDIO_ATTR_MAP and
stopped shipping them on the config template, so the engine always owns them and a
stale instance can never freeze a bug across an update. Per-bar `Invert` attribute
remains for a deliberate one-off display flip.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:15:46 +10:00
Samuel LisonandClaude Opus 4.8 5ec10553b6 Fix affliction bars (empty when safe) + add a HUD credits readout
The bar fill now shows the RAW stat value by default, so afflictions
(Hunger/Thirst/Fatigue/Poison) read empty when you're fine and fill UP as they
worsen — fixing Poison showing a full green bar at 0/100. A new `dangerHigh`
flag (true for those four) drives the warning color toward the correct end, so
warnings still fire near danger; `invert` remains an optional depleting-bar look.
Threaded dangerHigh through StatDefs/StatConfig + the SurvivalStatsConfig template.

Adds a bar-less "counter" to the binder (a GuiObject with a `Counter` attribute +
a `Value` label) and a Credits readout in the HUD header bound to a `Credits`
Player attribute (grouped like "1,234"); the demo seeds a sample value.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:02:18 +10:00
Samuel LisonandClaude Opus 4.8 c51e4b899b Redesign survival HUD: panel, collapsible view, numeric values, icon slots
Wraps the bars in a dark translucent Panel and splits them into a Primary group
(Health, Energy — always shown) and a Collapsible group (the other five) toggled
by a chevron button, wired generically in the binder via name/attribute/tag so the
owner can re-group by drag-and-drop. Each bar gains an optional Value label
(configurable fraction/percent/value/none) and a blank, hidden Icon ImageLabel
(resolved from a per-bar attribute, the stat config, or Assets "StatIcons" — the
engine still ships zero asset ids). Sets IgnoreGuiInset=false so the HUD clears the
Roblox topbar. Adds icon/valueFormat fields through StatDefs/StatConfig + the config
template, and a silent Assets.tryGet for the icon hot path. The fallback HUD matches.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 13:59:32 +10:00
Samuel LisonandClaude Opus 4.8 649ff0c192 Add survival-stats engine + designer-editable HUD
Server tick (src/systems/SurvivalStats) simulates per-stat drain/regen stored as
Player Attributes, which auto-replicate so the client HUD (src/client/Hud) binds
reactively via GetAttributeChangedSignal — no RemoteEvents. Stats are defined in
src/stats/StatDefs and resolved through three layers (defaults < Config.override <
a Studio SurvivalStatsConfig instance) by src/stats/StatConfig, so owners retune
rates with no code.

The HUD is a real, designer-editable ScreenGui in StarterGui, authored as
diff-friendly JSON (assets/hud/SurvivalHud.model.json); bars bind by a `Stat`
attribute + a `Fill` child, so re-texturing needs zero code. It ships for every
distribution: the demo/Rojo source mount it, the drop-in .rbxm bundles it under a
Templates folder and start()/installHud() deploys it, and HudFallback guarantees a
HUD always appears. Adds the engine's first client layer (startClient()).

Allow committing *.rbxmx/model templates (.gitignore) and skip the CI-fetched
globalTypes.d.luau in selene.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 13:30:12 +10:00