Compare commits

...

3 Commits

Author SHA1 Message Date
kronic 4ae022c5ad Docs: session log Part H + roadmap — breakable clutter feel pass
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 22:16:02 -07:00
kronic 8c2bf3c37b Tuning: operator pixel-panel slider state from the art-look lap (master stays OFF)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 22:15:10 -07:00
kronic 53bc21143d Feel: breakable clutter reads as Hades-style barrels, one-hit pop
The BlightClutter destructible-ghost chain (per-room seeding, unified
DR-018-safe sweep, melee + projectile breaking, personal-inventory
drops) already existed end-to-end - the roadmap item's gap was FEEL:

- Visual: prefab Model mesh swapped SM_Env_Rock_Chunk_01 (read as
  scenery) -> SM_Prop_Barrel_01 (FantasyKingdom, same proven atlas
  material). Base-pivot barrel offset -1 on the Model child (scatter
  y=1 is the capsule plane - the base-pivot float gotcha).
- One-hit pop: prefab Remaining 8 -> 2 (both hit paths decrement by
  max(1,(int)ScrapPerHit)=2, so one swing/shot shatters); authoring
  default kept in sync.
- Density: MaxClutterPerRoom 6 -> 8.

Verified live: 8 barrels seeded in a combat room, grounded (screenshot);
an injected projectile through the real ResourceHarvestSystem sweep
popped one barrel in ONE hit (8 -> 7) and credited 2 Biomass; 466/466
EditMode, console clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 22:14:43 -07:00
6 changed files with 31 additions and 17 deletions
+3 -3
View File
@@ -27,7 +27,7 @@ Transform:
m_GameObject: {fileID: 1085570720822716955} m_GameObject: {fileID: 1085570720822716955}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: -1, z: 0}
m_LocalScale: {x: 1.5, y: 1.5, z: 1.5} m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
@@ -40,7 +40,7 @@ MeshFilter:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1085570720822716955} m_GameObject: {fileID: 1085570720822716955}
m_Mesh: {fileID: 4300000, guid: d8de5840b690b8c4cb783b65f1196981, type: 3} m_Mesh: {fileID: 4300000, guid: ad7e0b3cc539c4c4d9adbe26d67de586, type: 3}
--- !u!23 &2902084588362297385 --- !u!23 &2902084588362297385
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -175,7 +175,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6b1aa9b83194a2c41b940dd9532377f4, type: 3} m_Script: {fileID: 11500000, guid: 6b1aa9b83194a2c41b940dd9532377f4, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.BlightClutterAuthoring m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.BlightClutterAuthoring
Remaining: 8 Remaining: 2
ScrapPerHit: 2 ScrapPerHit: 2
HitRadius: 1 HitRadius: 1
Variant: 0 Variant: 0
@@ -14,7 +14,7 @@ namespace ProjectM.Authoring
public class BlightClutterAuthoring : MonoBehaviour public class BlightClutterAuthoring : MonoBehaviour
{ {
[Tooltip("Hit-points before the clutter shatters.")] [Tooltip("Hit-points before the clutter shatters.")]
[Min(1)] public int Remaining = 8; [Min(1)] public int Remaining = 2; // one-hit pop: both hit paths decrement by max(1,(int)ScrapPerHit)
[Tooltip("Scrap (Biomass) yielded per projectile hit — the 'minor scrap' trickle.")] [Tooltip("Scrap (Biomass) yielded per projectile hit — the 'minor scrap' trickle.")]
[Min(1f)] public float ScrapPerHit = 2f; [Min(1f)] public float ScrapPerHit = 2f;
@@ -35,7 +35,7 @@ namespace ProjectM.Server
public partial struct RoomFieldSystem : ISystem public partial struct RoomFieldSystem : ISystem
{ {
/// <summary>Max clutter pieces per room — cosmetic ghosts still cost relevancy, keep the dressing light.</summary> /// <summary>Max clutter pieces per room — cosmetic ghosts still cost relevancy, keep the dressing light.</summary>
const int MaxClutterPerRoom = 6; const int MaxClutterPerRoom = 8;
EntityQuery m_RoomTagged; EntityQuery m_RoomTagged;
+5 -5
View File
@@ -26,18 +26,18 @@ Material:
m_Ints: [] m_Ints: []
m_Floats: m_Floats:
- _Brightness: 1.1 - _Brightness: 1.1
- _ColorLevels: 12 - _ColorLevels: 27.561403
- _Contrast: 1.05 - _Contrast: 1.05
- _DepthEdgesEnabled: 1 - _DepthEdgesEnabled: 0
- _DepthThreshold: 0.08 - _DepthThreshold: 0.08
- _EdgeStrength: 1 - _EdgeStrength: 1
- _MasterEnabled: 0 - _MasterEnabled: 0
- _NormalEdgesEnabled: 1 - _NormalEdgesEnabled: 0
- _NormalThreshold: 1 - _NormalThreshold: 1
- _OutlineThickness: 1 - _OutlineThickness: 1
- _PixelHeight: 399.82455 - _PixelHeight: 501.22803
- _PixelateEnabled: 1 - _PixelateEnabled: 1
- _PosterizeEnabled: 1 - _PosterizeEnabled: 0
- _Saturation: 1.35 - _Saturation: 1.35
m_Colors: m_Colors:
- _OutlineColorInner: {r: 0, g: 0, b: 0, a: 1} - _OutlineColorInner: {r: 0, g: 0, b: 0, a: 1}
@@ -136,8 +136,9 @@ attacks/animations/effects**. Art direction deliberately UNDECIDED — lighting
later (sharpen/vignette/grade variants — backlog). Every later visual choice keys off clean dark-Synty. later (sharpen/vignette/grade variants — backlog). Every later visual choice keys off clean dark-Synty.
4. **Ambient motion layer (client-only, zero netcode):** foliage sway/rustle on walk-through, per-biome dust/embers/fog 4. **Ambient motion layer (client-only, zero netcode):** foliage sway/rustle on walk-through, per-biome dust/embers/fog
drift particles, critters that scatter, flags/banners. Biggest bang-per-effort for "not static". drift particles, critters that scatter, flags/banners. Biggest bang-per-effort for "not static".
5. **Breakable clutter with drops:** Hades-style urns/crates/Blight growths seeded per room; shatter on hit → small 5. ~~Breakable clutter with drops~~ **DONE (2026-07-09, `53bc21143`)** — the BlightClutter chain already
resource drops. Reuses the destructible-ghost + `BlightClutter` + pickup patterns — netcode-cheap. existed end-to-end (seeding/unified-sweep/drops); the gap was feel: barrels (SM_Prop_Barrel_01) replace the
rock chunk, ONE-hit pop (Remaining 8→2), density 6→8/room. Live-verified pop + drop credit.
6. **Attack distinctness:** every enemy kind + class ability gets a unique read — anim + VFX + effect shape (not more 6. **Attack distinctness:** every enemy kind + class ability gets a unique read — anim + VFX + effect shape (not more
hit-stop). Builds on the shipped Blender clip pipeline + sword-combo work; creature locomotion for monsters still hit-stop). Builds on the shipped Blender clip pipeline + sword-combo work; creature locomotion for monsters still
open from Phase 1.3. open from Phase 1.3.
@@ -189,13 +189,26 @@ console clean.
- Unity 6.5: `Scene.handle` int conversions are deprecated-as-error (key caches on `scene.path`); bare - Unity 6.5: `Scene.handle` int conversions are deprecated-as-error (key caches on `scene.path`); bare
`Time` in a `SystemBase` binds to the deprecated ECS `ComponentSystemBase.Time` (qualify `UnityEngine.Time`). `Time` in a `SystemBase` binds to the deprecated ECS `ComponentSystemBase.Time` (qualify `UnityEngine.Time`).
## Part H — breakable clutter feel pass (`53bc21143`)
Grounding revealed the roadmap item was ~90% BUILT already: the `BlightClutter` destructible-ghost chain
(per-room `RoomTag` seeding, the DR-018-safe UNIFIED node+clutter sweep, melee + projectile breaking,
personal-inventory drops with ledger spill) has existed since the expedition redesign — no design review
needed, zero netcode delta. The actual gap was FEEL: the visual was a rock chunk (read as scenery) taking
4 hits. Shipped: prefab mesh → `SM_Prop_Barrel_01` (FantasyKingdom, same proven atlas mat; Model child
offset 1 — scatter y=1 is the capsule plane, base-pivot props float there), `Remaining` 8→2 = ONE-hit pop
on both paths (`max(1,(int)ScrapPerHit)=2`), `MaxClutterPerRoom` 6→8. Verified live: 8 grounded barrels in
a combat room; an injected projectile through the real sweep popped one in ONE hit (8→7, 2 Biomass credited);
466/466; console clean. Also committed the operator's own F3-panel slider drags from the art-look lap
(`8c2bf3c37` — master stays OFF).
## Next-session intent ## Next-session intent
Phase 1.5 continues under the LOCKED clean dark-Synty look: **breakable clutter with drops** (Hades-style Phase 1.5 short-term wins remaining: **attack distinctness** (unique read per enemy kind + class ability —
urns/growths — destructible-ghost + pickup patterns, netcode-cheap) → attack distinctness. Also queued: anim + VFX + effect shape, on the Blender clip pipeline). Long-term 1.5 (hazards, destructible cover) =
re-enable curated base flora (barren hub) · retune arid brightness to taste (all knobs live) · long-term 1.5 adversarial design-review-first. Queued taste items: re-enable curated base flora (barren hub) · arid
items (hazards, destructible cover) need the adversarial design review first. Feel items for the operator's brightness · craters-as-blocks call · B5 split-panels smoke. Then Phase 1.7 boon overhaul (design review
next lap: ambient motion + dark look in motion, craters-as-blocks call, B5 split-panels smoke. required — replicated ability swaps).
Related: [[Iteration_2026-07_CoopHades]] · [[2026-07-07_Workflow_Consolidation]] · Related: [[Iteration_2026-07_CoopHades]] · [[2026-07-07_Workflow_Consolidation]] ·
[[2026-07-07_Expedition_Enemy_Stuck_Harvest_Feedback]] [[2026-07-07_Expedition_Enemy_Stuck_Harvest_Feedback]]