From 53bc21143d7956616b23728541f3d451866e453f Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Thu, 9 Jul 2026 22:14:43 -0700 Subject: [PATCH] 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 --- Assets/_Project/Prefabs/BlightClutter.prefab | 6 +++--- .../Scripts/Authoring/Economy/BlightClutterAuthoring.cs | 2 +- Assets/_Project/Scripts/Server/Economy/RoomFieldSystem.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Assets/_Project/Prefabs/BlightClutter.prefab b/Assets/_Project/Prefabs/BlightClutter.prefab index f7db63a0a..80563f0e8 100644 --- a/Assets/_Project/Prefabs/BlightClutter.prefab +++ b/Assets/_Project/Prefabs/BlightClutter.prefab @@ -27,7 +27,7 @@ Transform: m_GameObject: {fileID: 1085570720822716955} serializedVersion: 2 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_ConstrainProportionsScale: 0 m_Children: [] @@ -40,7 +40,7 @@ MeshFilter: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1085570720822716955} - m_Mesh: {fileID: 4300000, guid: d8de5840b690b8c4cb783b65f1196981, type: 3} + m_Mesh: {fileID: 4300000, guid: ad7e0b3cc539c4c4d9adbe26d67de586, type: 3} --- !u!23 &2902084588362297385 MeshRenderer: m_ObjectHideFlags: 0 @@ -175,7 +175,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6b1aa9b83194a2c41b940dd9532377f4, type: 3} m_Name: m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.BlightClutterAuthoring - Remaining: 8 + Remaining: 2 ScrapPerHit: 2 HitRadius: 1 Variant: 0 diff --git a/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs b/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs index ec0886032..3270abd3d 100644 --- a/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs +++ b/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs @@ -14,7 +14,7 @@ namespace ProjectM.Authoring public class BlightClutterAuthoring : MonoBehaviour { [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.")] [Min(1f)] public float ScrapPerHit = 2f; diff --git a/Assets/_Project/Scripts/Server/Economy/RoomFieldSystem.cs b/Assets/_Project/Scripts/Server/Economy/RoomFieldSystem.cs index 730c0fa84..ae5676f9a 100644 --- a/Assets/_Project/Scripts/Server/Economy/RoomFieldSystem.cs +++ b/Assets/_Project/Scripts/Server/Economy/RoomFieldSystem.cs @@ -35,7 +35,7 @@ namespace ProjectM.Server public partial struct RoomFieldSystem : ISystem { /// Max clutter pieces per room — cosmetic ghosts still cost relevancy, keep the dressing light. - const int MaxClutterPerRoom = 6; + const int MaxClutterPerRoom = 8; EntityQuery m_RoomTagged;