diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index d03b1eb1f..32e5c6d24 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -300,11 +300,161 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 05cce10c53c896f4495809af7a45bbe1, type: 3} +--- !u!1001 &31640740 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1377777665210604, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Large_01 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.x + value: 1.206606 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.y + value: 1.206606 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.z + value: 1.206606 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.x + value: 18.37555 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.y + value: -0.24460566 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.z + value: -7.898832 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.w + value: -0.7632346 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.y + value: 0.64612144 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64291721749898990, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} +--- !u!4 &31640741 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + m_PrefabInstance: {fileID: 31640740} + m_PrefabAsset: {fileID: 0} --- !u!4 &33351401 stripped Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} m_PrefabInstance: {fileID: 1586549396} m_PrefabAsset: {fileID: 0} +--- !u!1001 &97540468 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1377777665210604, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Large_01 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.x + value: 1.9260464 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.y + value: 1.9260464 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.z + value: 1.9260464 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.x + value: -21.76654 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.y + value: -0.20285705 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.z + value: 0.98781997 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.w + value: -0.53167087 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.y + value: 0.8469511 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64291721749898990, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} +--- !u!4 &97540469 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + m_PrefabInstance: {fileID: 97540468} + m_PrefabAsset: {fileID: 0} --- !u!1001 &105756304 PrefabInstance: m_ObjectHideFlags: 0 @@ -551,11 +701,160 @@ Transform: m_CorrespondingSourceObject: {fileID: 4187809934485044, guid: 6053e238c2ee3e4499318f9353b3587f, type: 3} m_PrefabInstance: {fileID: 1197997996} m_PrefabAsset: {fileID: 0} +--- !u!1001 &181553265 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 730252060280928521, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Large_02 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalScale.x + value: 1.5601281 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalScale.y + value: 1.5601281 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalScale.z + value: 1.5601281 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalPosition.x + value: -22.888794 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalPosition.y + value: 0.070076674 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalPosition.z + value: -8.365644 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.w + value: -0.99341094 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.y + value: 0.11460687 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} +--- !u!4 &181553266 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + m_PrefabInstance: {fileID: 181553265} + m_PrefabAsset: {fileID: 0} --- !u!4 &199324086 stripped Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} m_PrefabInstance: {fileID: 1743526479} m_PrefabAsset: {fileID: 0} +--- !u!1001 &201196474 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1992658005843624, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_Name + value: SM_Env_Debris_Shell_03 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalScale.x + value: 0.873196 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalScale.y + value: 0.873196 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalScale.z + value: 0.873196 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalPosition.x + value: -8.736267 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalPosition.z + value: 13.386649 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.w + value: -0.3349352 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9422412 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64995994884802106, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} +--- !u!4 &201196475 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + m_PrefabInstance: {fileID: 201196474} + m_PrefabAsset: {fileID: 0} --- !u!1001 &204955655 PrefabInstance: m_ObjectHideFlags: 0 @@ -1782,6 +2081,81 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} +--- !u!1001 &464125004 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1603465440411664, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_03 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalScale.x + value: 0.6476241 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalScale.y + value: 0.6476241 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalScale.z + value: 0.6476241 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalPosition.x + value: -8.395508 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalPosition.z + value: 2.0232775 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.w + value: -0.7547534 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.y + value: 0.6560086 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64582245301021946, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 52dd948aee398dd43a762ccad8615550, type: 3} +--- !u!4 &464125005 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + m_PrefabInstance: {fileID: 464125004} + m_PrefabAsset: {fileID: 0} --- !u!1 &476566464 GameObject: m_ObjectHideFlags: 0 @@ -1896,6 +2270,81 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &499265665 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1902721522172972, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Rock_01 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalScale.x + value: 1.3828586 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalScale.y + value: 1.3828586 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalScale.z + value: 1.3828586 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalPosition.x + value: -13.040649 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalPosition.y + value: -0.27100924 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalPosition.z + value: -16.55513 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.w + value: 0.14171518 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9899075 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64946518047812334, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} +--- !u!4 &499265666 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + m_PrefabInstance: {fileID: 499265665} + m_PrefabAsset: {fileID: 0} --- !u!1001 &515680011 PrefabInstance: m_ObjectHideFlags: 0 @@ -1953,6 +2402,103 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: ff256aac7fa51c54db71970879315bcc, type: 3} +--- !u!1 &519977895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519977896} + - component: {fileID: 519977897} + m_Layer: 0 + m_Name: BlightLight_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &519977896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519977895} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4, y: 4, z: -6.9282036} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 880568272} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &519977897 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519977895} + m_Enabled: 1 + serializedVersion: 13 + m_Type: 2 + m_Color: {r: 1, g: 0.45, b: 0.15, a: 1} + m_Intensity: 8 + m_Range: 22 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 0.5, y: 0.5} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShapeRadius: 0.025 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &589391703 stripped Transform: m_CorrespondingSourceObject: {fileID: 4712475898776088, guid: 8feb2335a05b64642a1d35a6a73cb21c, type: 3} @@ -2020,6 +2566,80 @@ Transform: m_CorrespondingSourceObject: {fileID: 4419796514499596, guid: c444ce6e54943f64a895431df8872a52, type: 3} m_PrefabInstance: {fileID: 597549882} m_PrefabAsset: {fileID: 0} +--- !u!1001 &632367165 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1932470098912232, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_Name + value: SM_Env_Rubble_Pile_02 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalScale.x + value: 1.0421975 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalScale.y + value: 1.0421975 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalScale.z + value: 1.0421975 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalPosition.x + value: 6.909851 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalPosition.z + value: -10.796866 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.w + value: 0.15828289 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.y + value: 0.98739386 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c1d4883f15067244090c89d0470f582e, type: 3} +--- !u!4 &632367166 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + m_PrefabInstance: {fileID: 632367165} + m_PrefabAsset: {fileID: 0} --- !u!1001 &642522565 PrefabInstance: m_ObjectHideFlags: 0 @@ -2134,6 +2754,81 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} +--- !u!1001 &656548408 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1001403720033590, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Rock_02 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalScale.x + value: 1.4442236 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalScale.y + value: 1.4442236 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalScale.z + value: 1.4442236 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalPosition.x + value: 0.6191406 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalPosition.z + value: 4.213597 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99981374 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.y + value: 0.019299958 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64158074740369186, guid: 532691fd02556f1418e733023af81ff4, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 532691fd02556f1418e733023af81ff4, type: 3} +--- !u!4 &656548409 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + m_PrefabInstance: {fileID: 656548408} + m_PrefabAsset: {fileID: 0} --- !u!1001 &665877661 PrefabInstance: m_ObjectHideFlags: 0 @@ -2377,6 +3072,80 @@ Transform: m_CorrespondingSourceObject: {fileID: 4419796514499596, guid: c444ce6e54943f64a895431df8872a52, type: 3} m_PrefabInstance: {fileID: 768690052} m_PrefabAsset: {fileID: 0} +--- !u!1001 &778379678 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1932470098912232, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_Name + value: SM_Env_Rubble_Pile_02 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalScale.x + value: 1.3039367 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalScale.y + value: 1.3039367 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalScale.z + value: 1.3039367 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalPosition.x + value: 3.9229126 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalPosition.z + value: 9.952322 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99522215 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.y + value: 0.09763659 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c1d4883f15067244090c89d0470f582e, type: 3} +--- !u!4 &778379679 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4161982788704624, guid: c1d4883f15067244090c89d0470f582e, type: 3} + m_PrefabInstance: {fileID: 778379678} + m_PrefabAsset: {fileID: 0} --- !u!1001 &779875073 PrefabInstance: m_ObjectHideFlags: 0 @@ -2506,6 +3275,81 @@ Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} m_PrefabInstance: {fileID: 1502865365} m_PrefabAsset: {fileID: 0} +--- !u!1001 &814330849 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1020409335811022, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Rock_03 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalScale.x + value: 1.3637474 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalScale.y + value: 1.3637474 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalScale.z + value: 1.3637474 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalPosition.x + value: -2.8360596 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalPosition.y + value: 0.10493693 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalPosition.z + value: -22.118822 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.w + value: 0.63904876 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.y + value: 0.76916623 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64898504429392932, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} +--- !u!4 &814330850 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + m_PrefabInstance: {fileID: 814330849} + m_PrefabAsset: {fileID: 0} --- !u!4 &815918317 stripped Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} @@ -2802,6 +3646,211 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 04c79e9d6b44d414c9decaeab2c70bd7, type: 3} +--- !u!1 &880568271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 880568272} + m_Layer: 0 + m_Name: BlightfieldDecor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &880568272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 880568271} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1000, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1289548732} + - {fileID: 1801729304} + - {fileID: 1828243974} + - {fileID: 1961989419} + - {fileID: 2017195157} + - {fileID: 97540469} + - {fileID: 181553266} + - {fileID: 499265666} + - {fileID: 814330850} + - {fileID: 929500483} + - {fileID: 31640741} + - {fileID: 2054873987} + - {fileID: 778379679} + - {fileID: 656548409} + - {fileID: 201196475} + - {fileID: 464125005} + - {fileID: 1028030748} + - {fileID: 632367166} + - {fileID: 1192950713} + - {fileID: 945017677} + - {fileID: 1987953219} + - {fileID: 2140281342} + - {fileID: 1417177571} + - {fileID: 519977896} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &929500482 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1875134094539988, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_05 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalScale.x + value: 1.609426 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalScale.y + value: 1.609426 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalScale.z + value: 1.609426 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalPosition.x + value: 12.105713 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalPosition.y + value: 0.17450684 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalPosition.z + value: -15.238239 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.w + value: -0.5952713 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.y + value: 0.8035248 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64506568800459372, guid: 20bc67712a091434d92900911e095610, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 20bc67712a091434d92900911e095610, type: 3} +--- !u!4 &929500483 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + m_PrefabInstance: {fileID: 929500482} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &945017676 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1992658005843624, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_Name + value: SM_Env_Debris_Shell_03 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalScale.x + value: 1.0519621 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalScale.y + value: 1.0519621 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalScale.z + value: 1.0519621 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalPosition.x + value: 13.913391 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalPosition.z + value: -3.2237246 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.w + value: -0.8871611 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.y + value: 0.46146 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64995994884802106, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} +--- !u!4 &945017677 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4726155600239176, guid: 838127bc699769f468c9980c3e69a2fb, type: 3} + m_PrefabInstance: {fileID: 945017676} + m_PrefabAsset: {fileID: 0} --- !u!1001 &958570640 PrefabInstance: m_ObjectHideFlags: 0 @@ -2948,6 +3997,80 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2b4f4c6dd9003ab49ac2cb68ebc4a3b4, type: 3} +--- !u!1001 &1028030747 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1509757525593370, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_Name + value: SM_Env_Rubble_Pile_01 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalScale.x + value: 0.8600454 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalScale.y + value: 0.8600454 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalScale.z + value: 0.8600454 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalPosition.x + value: -3.6062622 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalPosition.z + value: -12.038607 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.w + value: 0.5842025 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.y + value: 0.8116079 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} +--- !u!4 &1028030748 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + m_PrefabInstance: {fileID: 1028030747} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1063208323 PrefabInstance: m_ObjectHideFlags: 0 @@ -3235,6 +4358,81 @@ Transform: m_CorrespondingSourceObject: {fileID: 4419796514499596, guid: c444ce6e54943f64a895431df8872a52, type: 3} m_PrefabInstance: {fileID: 1164522506} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1192950712 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1001403720033590, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Rock_02 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalScale.x + value: 1.1906765 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalScale.y + value: 1.1906765 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalScale.z + value: 1.1906765 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalPosition.x + value: 3.5583496 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalPosition.z + value: 6.3782125 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9738287 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.y + value: 0.22728346 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64158074740369186, guid: 532691fd02556f1418e733023af81ff4, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 532691fd02556f1418e733023af81ff4, type: 3} +--- !u!4 &1192950713 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4324354463149252, guid: 532691fd02556f1418e733023af81ff4, type: 3} + m_PrefabInstance: {fileID: 1192950712} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1197997996 PrefabInstance: m_ObjectHideFlags: 0 @@ -3359,6 +4557,81 @@ Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} m_PrefabInstance: {fileID: 443178377} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1289548731 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1377777665210604, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Large_01 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.x + value: 2.091068 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.y + value: 2.091068 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalScale.z + value: 2.091068 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.x + value: 20.624512 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.y + value: 0.02192238 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalPosition.z + value: 0.84569496 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.w + value: 0.70409614 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.y + value: 0.71010464 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64291721749898990, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} +--- !u!4 &1289548732 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4559487955210936, guid: dcd709e04d3ab2341ab8df4db98c0892, type: 3} + m_PrefabInstance: {fileID: 1289548731} + m_PrefabAsset: {fileID: 0} --- !u!4 &1314311430 stripped Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} @@ -3667,6 +4940,103 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} +--- !u!1 &1417177570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1417177571} + - component: {fileID: 1417177572} + m_Layer: 0 + m_Name: BlightLight_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1417177571 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1417177570} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4, y: 4, z: 6.928203} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 880568272} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &1417177572 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1417177570} + m_Enabled: 1 + serializedVersion: 13 + m_Type: 2 + m_Color: {r: 1, g: 0.45, b: 0.15, a: 1} + m_Intensity: 8 + m_Range: 22 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 0.5, y: 0.5} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShapeRadius: 0.025 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1458587405 stripped Transform: m_CorrespondingSourceObject: {fileID: 4712475898776088, guid: 8feb2335a05b64642a1d35a6a73cb21c, type: 3} @@ -4414,6 +5784,155 @@ Transform: m_CorrespondingSourceObject: {fileID: 4649104567197904, guid: 049ba413acf1dae40a25c7020b124049, type: 3} m_PrefabInstance: {fileID: 725743147} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1801729303 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 730252060280928521, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Large_02 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalScale.x + value: 1.3375992 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalScale.y + value: 1.3375992 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalScale.z + value: 1.3375992 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalPosition.x + value: 13.454407 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalPosition.y + value: -0.06970629 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalPosition.z + value: 15.570124 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9862607 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.y + value: 0.16519621 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} +--- !u!4 &1801729304 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 730252060281087273, guid: 9b7cc76107dac2f41afe2ec0d289607b, type: 3} + m_PrefabInstance: {fileID: 1801729303} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1828243973 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1902721522172972, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Rock_01 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalScale.x + value: 1.8647041 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalScale.y + value: 1.8647041 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalScale.z + value: 1.8647041 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalPosition.x + value: 4.6346436 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalPosition.y + value: -0.14726818 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalPosition.z + value: 23.2906 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.w + value: 0.12879658 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.y + value: 0.991671 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64946518047812334, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} +--- !u!4 &1828243974 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4805849824941938, guid: 04510a9b75554b4499ab7aa4628e2c4c, type: 3} + m_PrefabInstance: {fileID: 1828243973} + m_PrefabAsset: {fileID: 0} --- !u!4 &1836750681 stripped Transform: m_CorrespondingSourceObject: {fileID: 4551663751907116, guid: ff256aac7fa51c54db71970879315bcc, type: 3} @@ -4615,6 +6134,81 @@ Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} m_PrefabInstance: {fileID: 410729436} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1961989418 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1020409335811022, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_Rock_03 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalScale.x + value: 1.203835 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalScale.y + value: 1.203835 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalScale.z + value: 1.203835 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalPosition.x + value: -7.182007 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalPosition.y + value: 0.12052983 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalPosition.z + value: 21.473177 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.w + value: 0.98505414 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.y + value: 0.17224516 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64898504429392932, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} +--- !u!4 &1961989419 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4015516187493062, guid: d5a6d7c2811ecba41be9ea2f957da0d6, type: 3} + m_PrefabInstance: {fileID: 1961989418} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1979595507 PrefabInstance: m_ObjectHideFlags: 0 @@ -4677,6 +6271,81 @@ Transform: m_CorrespondingSourceObject: {fileID: 4448267237869828, guid: ae8a07d8f8f6c28428b661a2a622cc7c, type: 3} m_PrefabInstance: {fileID: 1979595507} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1987953218 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1603465440411664, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_03 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalScale.x + value: 1.2522547 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalScale.y + value: 1.2522547 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalScale.z + value: 1.2522547 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalPosition.x + value: 2.635437 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalPosition.z + value: 9.110771 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.w + value: 0.6741815 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.y + value: 0.7385657 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64582245301021946, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 52dd948aee398dd43a762ccad8615550, type: 3} +--- !u!4 &1987953219 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4578236554591518, guid: 52dd948aee398dd43a762ccad8615550, type: 3} + m_PrefabInstance: {fileID: 1987953218} + m_PrefabAsset: {fileID: 0} --- !u!4 &1989703630 stripped Transform: m_CorrespondingSourceObject: {fileID: 4901797596438614, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} @@ -4910,6 +6579,81 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} +--- !u!1001 &2017195156 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1875134094539988, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_Name + value: SM_Env_Asteroid_05 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalScale.x + value: 1.7503953 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalScale.y + value: 1.7503953 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalScale.z + value: 1.7503953 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalPosition.x + value: -15.722412 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00963223 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalPosition.z + value: 16.327326 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.w + value: -0.16476478 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9863329 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 64506568800459372, guid: 20bc67712a091434d92900911e095610, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 20bc67712a091434d92900911e095610, type: 3} +--- !u!4 &2017195157 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4116898488729126, guid: 20bc67712a091434d92900911e095610, type: 3} + m_PrefabInstance: {fileID: 2017195156} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2042350916 PrefabInstance: m_ObjectHideFlags: 0 @@ -4967,6 +6711,80 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c55cddf0517aed545bedf9b927124c15, type: 3} +--- !u!1001 &2054873986 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 880568272} + m_Modifications: + - target: {fileID: 1509757525593370, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_Name + value: SM_Env_Rubble_Pile_01 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalScale.x + value: 1.1408615 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalScale.y + value: 1.1408615 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalScale.z + value: 1.1408615 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalPosition.x + value: -8.99292 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalPosition.y + value: -0.2 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalPosition.z + value: -7.7102656 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9592722 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.y + value: 0.28248343 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} +--- !u!4 &2054873987 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4735852258688644, guid: 6236ec84190c0814ab0ac43a78f9e145, type: 3} + m_PrefabInstance: {fileID: 2054873986} + m_PrefabAsset: {fileID: 0} --- !u!4 &2057633735 stripped Transform: m_CorrespondingSourceObject: {fileID: 4848944301153572, guid: 05cce10c53c896f4495809af7a45bbe1, type: 3} @@ -5176,6 +6994,103 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0af7253adfe9a6c4ca7be0a1573f3c77, type: 3} +--- !u!1 &2140281341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2140281342} + - component: {fileID: 2140281343} + m_Layer: 0 + m_Name: BlightLight_0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2140281342 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140281341} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 8, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 880568272} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &2140281343 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140281341} + m_Enabled: 1 + serializedVersion: 13 + m_Type: 2 + m_Color: {r: 1, g: 0.45, b: 0.15, a: 1} + m_Intensity: 8 + m_Range: 22 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 0.5, y: 0.5} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShapeRadius: 0.025 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -5194,3 +7109,4 @@ SceneRoots: - {fileID: 476566468} - {fileID: 2009335287} - {fileID: 384552428} + - {fileID: 880568272} diff --git a/Assets/Screenshots/screenshot-20260604-153301.png b/Assets/Screenshots/screenshot-20260604-153301.png new file mode 100644 index 000000000..7749a3a16 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260604-153301.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b71790b8ce0cf0f84be75121b932e795733ef69e1be91cfa599753e1f6d17573 +size 387517 diff --git a/Assets/Screenshots/screenshot-20260604-153301.png.meta b/Assets/Screenshots/screenshot-20260604-153301.png.meta new file mode 100644 index 000000000..b5e5743b1 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260604-153301.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 05d147603b5475a4db60d133ff96efbd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/screenshot-20260604-213953.png b/Assets/Screenshots/screenshot-20260604-213953.png new file mode 100644 index 000000000..8ecba0077 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260604-213953.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:275b2bf9cb4a83a6141bd3f4ce679ce7378e7ef79a9f3afb4550b1ca8fbf8047 +size 139529 diff --git a/Assets/Screenshots/screenshot-20260604-213953.png.meta b/Assets/Screenshots/screenshot-20260604-213953.png.meta new file mode 100644 index 000000000..8fc8fa4aa --- /dev/null +++ b/Assets/Screenshots/screenshot-20260604-213953.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: c48fa3f0c43a1dd4c86973898ff25c99 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Screenshots/screenshot-20260604-214200.png b/Assets/Screenshots/screenshot-20260604-214200.png new file mode 100644 index 000000000..7260f6c77 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260604-214200.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6993200782987239832348ad4da7840c59d306729619ba4587a1b1583f50b25a +size 155174 diff --git a/Assets/Screenshots/screenshot-20260604-214200.png.meta b/Assets/Screenshots/screenshot-20260604-214200.png.meta new file mode 100644 index 000000000..8c9fd1b06 --- /dev/null +++ b/Assets/Screenshots/screenshot-20260604-214200.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 8d7fc182a6b916c49b59b3a54cf53d49 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Materials/M_Aether_Ordered.mat b/Assets/_Project/Materials/M_Aether_Ordered.mat new file mode 100644 index 000000000..ab30ece25 --- /dev/null +++ b/Assets/_Project/Materials/M_Aether_Ordered.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-341605702001916123 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: M_Aether_Ordered + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0.2 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.55 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.06, g: 0.2, b: 0.26, a: 1} + - _Color: {r: 0.059999965, g: 0.19999996, b: 0.25999996, a: 1} + - _EmissionColor: {r: 0.2, g: 1.8, b: 2.4, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/_Project/Materials/M_Aether_Ordered.mat.meta b/Assets/_Project/Materials/M_Aether_Ordered.mat.meta new file mode 100644 index 000000000..8973feafa --- /dev/null +++ b/Assets/_Project/Materials/M_Aether_Ordered.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a2c9e498b0fb1d41aa9504f4f843185 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Materials/M_Aether_Wild.mat b/Assets/_Project/Materials/M_Aether_Wild.mat new file mode 100644 index 000000000..20e80e53d --- /dev/null +++ b/Assets/_Project/Materials/M_Aether_Wild.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: M_Aether_Wild + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0.15 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.35 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.45, g: 0.16, b: 0.06, a: 1} + - _Color: {r: 0.45, g: 0.15999997, b: 0.059999965, a: 1} + - _EmissionColor: {r: 3, g: 1, b: 0.25, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &8700211274686457953 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/_Project/Materials/M_Aether_Wild.mat.meta b/Assets/_Project/Materials/M_Aether_Wild.mat.meta new file mode 100644 index 000000000..501ba701f --- /dev/null +++ b/Assets/_Project/Materials/M_Aether_Wild.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7f75fad709aa7b41bce85721cccd020 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/BlightClutter.prefab b/Assets/_Project/Prefabs/BlightClutter.prefab new file mode 100644 index 000000000..98bfb2d00 --- /dev/null +++ b/Assets/_Project/Prefabs/BlightClutter.prefab @@ -0,0 +1,149 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3885353946372160549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3572766465862231365} + - component: {fileID: 3909651526955663392} + - component: {fileID: 3320445911748035220} + - component: {fileID: 9053853372340598254} + - component: {fileID: 6834786618115927220} + - component: {fileID: 1664972900393443061} + m_Layer: 0 + m_Name: BlightClutter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3572766465862231365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2.5, y: 2.5, z: 2.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3909651526955663392 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Mesh: {fileID: 4300000, guid: abc00000000010690097314383055197, type: 3} +--- !u!23 &3320445911748035220 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e7f75fad709aa7b41bce85721cccd020, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &9053853372340598254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c16549610bfe4458aa9389201d072bb6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Entities.Hybrid::Unity.Entities.Hybrid.Baking.LinkedEntityGroupAuthoring +--- !u!114 &6834786618115927220 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c79d771cedb4794bf100ce60df5f764, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.NetCode.Authoring.Hybrid::Unity.NetCode.GhostAuthoringComponent + HasOwner: 0 + SupportAutoCommandTarget: 1 + TrackInterpolationDelay: 0 + GhostGroup: 0 + UsePreSerialization: 0 + UseSingleBaseline: 0 + RollbackPredictedSpawnedGhostState: 0 + RollbackPredictionOnStructuralChanges: 1 + DefaultGhostMode: 0 + SupportedGhostModes: 3 + OptimizationMode: 0 + Importance: 1 + MaxSendRate: 0 + prefabId: 8565e5eb00679fb45b8b7dac1e2ae9f3 +--- !u!114 &1664972900393443061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6b1aa9b83194a2c41b940dd9532377f4, type: 3} + m_Name: + m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.BlightClutterAuthoring + Remaining: 8 + ScrapPerHit: 2 + HitRadius: 1 + Variant: 0 diff --git a/Assets/_Project/Prefabs/BlightClutter.prefab.meta b/Assets/_Project/Prefabs/BlightClutter.prefab.meta new file mode 100644 index 000000000..54c054f60 --- /dev/null +++ b/Assets/_Project/Prefabs/BlightClutter.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ffeddcc4482c0f44880dc9a555884dd +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/Pylon.prefab b/Assets/_Project/Prefabs/Pylon.prefab new file mode 100644 index 000000000..167b3f1bc --- /dev/null +++ b/Assets/_Project/Prefabs/Pylon.prefab @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3885353946372160549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3572766465862231365} + - component: {fileID: 3909651526955663392} + - component: {fileID: 3320445911748035220} + - component: {fileID: 9053853372340598254} + - component: {fileID: 6834786618115927220} + - component: {fileID: 7685488391646220227} + m_Layer: 0 + m_Name: Pylon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3572766465862231365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2.5, y: 2.5, z: 2.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3909651526955663392 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Mesh: {fileID: 4300000, guid: abc00000000010690097314383055197, type: 3} +--- !u!23 &3320445911748035220 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9a2c9e498b0fb1d41aa9504f4f843185, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &9053853372340598254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c16549610bfe4458aa9389201d072bb6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Entities.Hybrid::Unity.Entities.Hybrid.Baking.LinkedEntityGroupAuthoring +--- !u!114 &6834786618115927220 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c79d771cedb4794bf100ce60df5f764, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.NetCode.Authoring.Hybrid::Unity.NetCode.GhostAuthoringComponent + HasOwner: 0 + SupportAutoCommandTarget: 1 + TrackInterpolationDelay: 0 + GhostGroup: 0 + UsePreSerialization: 0 + UseSingleBaseline: 0 + RollbackPredictedSpawnedGhostState: 0 + RollbackPredictionOnStructuralChanges: 1 + DefaultGhostMode: 0 + SupportedGhostModes: 3 + OptimizationMode: 0 + Importance: 1 + MaxSendRate: 0 + prefabId: +--- !u!114 &7685488391646220227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f03349205fb1fe43bf6aaff14fce0b7, type: 3} + m_Name: + m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.StructureAuthoring + Kind: 6 diff --git a/Assets/_Project/Prefabs/Pylon.prefab.meta b/Assets/_Project/Prefabs/Pylon.prefab.meta new file mode 100644 index 000000000..8eef5bec2 --- /dev/null +++ b/Assets/_Project/Prefabs/Pylon.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7d0637ef90f120a4c9e2ba637dfc00af +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/Wall.prefab b/Assets/_Project/Prefabs/Wall.prefab new file mode 100644 index 000000000..a5fd2dae2 --- /dev/null +++ b/Assets/_Project/Prefabs/Wall.prefab @@ -0,0 +1,168 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3885353946372160549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3572766465862231365} + - component: {fileID: 3909651526955663392} + - component: {fileID: 3320445911748035220} + - component: {fileID: 9053853372340598254} + - component: {fileID: 6834786618115927220} + - component: {fileID: 8793146551006314905} + - component: {fileID: 7779358222264100756} + m_Layer: 0 + m_Name: Wall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3572766465862231365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2.5, y: 2.5, z: 2.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3909651526955663392 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Mesh: {fileID: 4300000, guid: abc00000000010690097314383055197, type: 3} +--- !u!23 &3320445911748035220 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9a2c9e498b0fb1d41aa9504f4f843185, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &9053853372340598254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c16549610bfe4458aa9389201d072bb6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Entities.Hybrid::Unity.Entities.Hybrid.Baking.LinkedEntityGroupAuthoring +--- !u!114 &6834786618115927220 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c79d771cedb4794bf100ce60df5f764, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.NetCode.Authoring.Hybrid::Unity.NetCode.GhostAuthoringComponent + HasOwner: 0 + SupportAutoCommandTarget: 1 + TrackInterpolationDelay: 0 + GhostGroup: 0 + UsePreSerialization: 0 + UseSingleBaseline: 0 + RollbackPredictedSpawnedGhostState: 0 + RollbackPredictionOnStructuralChanges: 1 + DefaultGhostMode: 0 + SupportedGhostModes: 3 + OptimizationMode: 0 + Importance: 1 + MaxSendRate: 0 + prefabId: +--- !u!114 &8793146551006314905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f03349205fb1fe43bf6aaff14fce0b7, type: 3} + m_Name: + m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.StructureAuthoring + Kind: 5 +--- !u!65 &7779358222264100756 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3885353946372160549} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.58636487, y: 0.600076, z: 0.9781774} + m_Center: {x: 0, y: 0, z: 0.083845735} diff --git a/Assets/_Project/Prefabs/Wall.prefab.meta b/Assets/_Project/Prefabs/Wall.prefab.meta new file mode 100644 index 000000000..a566ad1a8 --- /dev/null +++ b/Assets/_Project/Prefabs/Wall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1e321aea244cc484f99c1cdd68cb01c4 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Authoring/Building/StructureAuthoring.cs b/Assets/_Project/Scripts/Authoring/Building/StructureAuthoring.cs new file mode 100644 index 000000000..390f3e359 --- /dev/null +++ b/Assets/_Project/Scripts/Authoring/Building/StructureAuthoring.cs @@ -0,0 +1,35 @@ +using ProjectM.Simulation; +using Unity.Entities; +using UnityEngine; + +namespace ProjectM.Authoring +{ + /// + /// Generic authoring for a non-functional build-structure ghost prefab (Wall / Pylon) — duplicate + /// Turret.prefab so the ownerless interpolated GhostAuthoringComponent on PlacedStructure.Type comes free, + /// then swap TurretAuthoring for this. Bakes ONLY {Type=} + /// (no stats, so TurretFireSystem ignores it). BuildPlaceSystem overrides Cell + + /// LastProcessedTick and adds RegionTag{Base} at placement. is a byte (StructureType.*) to + /// dodge the cross-assembly enum-in-Burst hazard and the MCP enum-drop gotcha. + /// + public class StructureAuthoring : MonoBehaviour + { + [Tooltip("StructureType byte: 5 = Wall, 6 = Pylon (do NOT use 1-4: Turret + reserved M7 automation).")] + public byte Kind = StructureType.Wall; + + private class StructureBaker : Baker + { + public override void Bake(StructureAuthoring authoring) + { + var entity = GetEntity(authoring, TransformUsageFlags.Dynamic); + AddComponent(entity, new PlacedStructure + { + Type = authoring.Kind, + Cell = default, + NextTick = 0u, + LastProcessedTick = 0u, + }); + } + } + } +} diff --git a/Assets/_Project/Scripts/Authoring/Building/StructureAuthoring.cs.meta b/Assets/_Project/Scripts/Authoring/Building/StructureAuthoring.cs.meta new file mode 100644 index 000000000..090a937b9 --- /dev/null +++ b/Assets/_Project/Scripts/Authoring/Building/StructureAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3f03349205fb1fe43bf6aaff14fce0b7 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Authoring/Building/StructureCatalogAuthoring.cs b/Assets/_Project/Scripts/Authoring/Building/StructureCatalogAuthoring.cs index 7c735852f..61eb006bb 100644 --- a/Assets/_Project/Scripts/Authoring/Building/StructureCatalogAuthoring.cs +++ b/Assets/_Project/Scripts/Authoring/Building/StructureCatalogAuthoring.cs @@ -20,6 +20,18 @@ namespace ProjectM.Authoring [Tooltip("Ore cost to build a turret.")] [Min(0)] public int TurretCostOre = 10; + [Tooltip("Wall structure ghost prefab (StructureAuthoring{Wall} + GhostAuthoring).")] + public GameObject WallPrefab; + + [Tooltip("Ore cost to build a wall.")] + [Min(0)] public int WallCostOre = 4; + + [Tooltip("Pylon cosmetic-beacon ghost prefab (StructureAuthoring{Pylon} + GhostAuthoring).")] + public GameObject PylonPrefab; + + [Tooltip("Ore cost to build a pylon.")] + [Min(0)] public int PylonCostOre = 2; + private class StructureCatalogBaker : Baker { public override void Bake(StructureCatalogAuthoring authoring) @@ -38,6 +50,28 @@ namespace ProjectM.Authoring CostAmount = authoring.TurretCostOre, }); } + if (authoring.WallPrefab != null) + { + buf.Add(new StructureCatalogEntry + { + Type = StructureType.Wall, + Prefab = GetEntity(authoring.WallPrefab, TransformUsageFlags.Dynamic), + CostResourceId = ResourceId.Ore, + CostAmount = authoring.WallCostOre, + }); + } + + if (authoring.PylonPrefab != null) + { + buf.Add(new StructureCatalogEntry + { + Type = StructureType.Pylon, + Prefab = GetEntity(authoring.PylonPrefab, TransformUsageFlags.Dynamic), + CostResourceId = ResourceId.Ore, + CostAmount = authoring.PylonCostOre, + }); + } + } } } diff --git a/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs b/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs new file mode 100644 index 000000000..ec0886032 --- /dev/null +++ b/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs @@ -0,0 +1,45 @@ +using ProjectM.Simulation; +using Unity.Entities; +using UnityEngine; + +namespace ProjectM.Authoring +{ + /// + /// Authoring for a Blight-clutter ghost prefab (ownerless interpolated — duplicate from ResourceNode.prefab + /// so the GhostAuthoringComponent comes free). Bakes + + /// (reused for the harvest/clear sweep) + {Expedition} so GhostRelevancy scopes it to + /// expedition players. The field spawner overrides Variant (round-robin) + Position per instance. Defaults are + /// inline here (mirrors ResourceNodeAuthoring), not in Tuning. + /// + public class BlightClutterAuthoring : MonoBehaviour + { + [Tooltip("Hit-points before the clutter shatters.")] + [Min(1)] public int Remaining = 8; + + [Tooltip("Scrap (Biomass) yielded per projectile hit — the 'minor scrap' trickle.")] + [Min(1f)] public float ScrapPerHit = 2f; + + [Tooltip("Hit radius (world units) for the clear sweep.")] + [Min(0f)] public float HitRadius = 1.0f; + + [Tooltip("Default visual variant (the spawner round-robins this per piece).")] + public byte Variant = 0; + + private class BlightClutterBaker : Baker + { + public override void Bake(BlightClutterAuthoring authoring) + { + var entity = GetEntity(authoring, TransformUsageFlags.Dynamic); + AddComponent(entity, new BlightClutter + { + Remaining = authoring.Remaining, + Variant = authoring.Variant, + ScrapResourceId = ResourceId.Biomass, + ScrapPerHit = authoring.ScrapPerHit, + }); + AddComponent(entity, new HitRadius { Value = authoring.HitRadius }); + AddComponent(entity, new RegionTag { Region = RegionId.Expedition }); + } + } + } +} diff --git a/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs.meta b/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs.meta new file mode 100644 index 000000000..2f30adfe6 --- /dev/null +++ b/Assets/_Project/Scripts/Authoring/Economy/BlightClutterAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6b1aa9b83194a2c41b940dd9532377f4 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Authoring/Economy/ClutterFieldSpawnerAuthoring.cs b/Assets/_Project/Scripts/Authoring/Economy/ClutterFieldSpawnerAuthoring.cs new file mode 100644 index 000000000..ce4ecdf70 --- /dev/null +++ b/Assets/_Project/Scripts/Authoring/Economy/ClutterFieldSpawnerAuthoring.cs @@ -0,0 +1,39 @@ +using ProjectM.Simulation; +using Unity.Entities; +using UnityEngine; + +namespace ProjectM.Authoring +{ + /// + /// Authoring for the baked singleton (mirrors ResourceFieldSpawnerAuthoring). + /// Place once in the gameplay subscene and assign the Blight-clutter ghost prefab; ExpeditionFieldSystem + /// scatters the clutter each expedition alongside the resource field. Carries no transform. + /// + public class ClutterFieldSpawnerAuthoring : MonoBehaviour + { + [Tooltip("Blight-clutter ghost prefab. Must carry BlightClutterAuthoring + a GhostAuthoringComponent (ownerless, interpolated).")] + public GameObject ClutterPrefab; + + [Tooltip("Number of clutter pieces per expedition.")] + [Min(1)] public int Count = 14; + + [Tooltip("Scatter radius (world units) around the expedition origin.")] + [Min(1f)] public float Radius = 14f; + + private class ClutterFieldSpawnerBaker : Baker + { + public override void Bake(ClutterFieldSpawnerAuthoring authoring) + { + var entity = GetEntity(authoring, TransformUsageFlags.None); + AddComponent(entity, new ClutterFieldSpawner + { + Prefab = authoring.ClutterPrefab != null + ? GetEntity(authoring.ClutterPrefab, TransformUsageFlags.Dynamic) + : Entity.Null, + Count = authoring.Count, + Radius = authoring.Radius, + }); + } + } + } +} diff --git a/Assets/_Project/Scripts/Authoring/Economy/ClutterFieldSpawnerAuthoring.cs.meta b/Assets/_Project/Scripts/Authoring/Economy/ClutterFieldSpawnerAuthoring.cs.meta new file mode 100644 index 000000000..ed8041dcc --- /dev/null +++ b/Assets/_Project/Scripts/Authoring/Economy/ClutterFieldSpawnerAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 02623cc30f984104b88a75782bf0dd07 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs b/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs index fc0c758f9..303ef413b 100644 --- a/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs +++ b/Assets/_Project/Scripts/Client/Building/BuildSendSystem.cs @@ -30,6 +30,12 @@ namespace ProjectM.Client /// EDITOR / execute_code hook: queue a turret placement at a specific cell. public static void PlaceTurret(int cellX, int cellZ) => PlaceStructure(StructureType.Turret, cellX, cellZ); + /// EDITOR / execute_code hook: queue a wall placement at a specific cell. + public static void PlaceWall(int cellX, int cellZ) => PlaceStructure(StructureType.Wall, cellX, cellZ); + + /// EDITOR / execute_code hook: queue a pylon placement at a specific cell. + public static void PlacePylon(int cellX, int cellZ) => PlaceStructure(StructureType.Pylon, cellX, cellZ); + /// EDITOR / execute_code hook: queue an ability-damage upgrade. public static void UpgradeAbility() => s_PendingUpgrades++; #endif @@ -49,6 +55,10 @@ namespace ProjectM.Client { if (keyboard.bKey.wasPressedThisFrame && TryGetLocalPlayerCell(out int2 cell)) SendBuild(connection, StructureType.Turret, cell.x, cell.y); + if (keyboard.vKey.wasPressedThisFrame && TryGetLocalPlayerCell(out int2 wcell)) + SendBuild(connection, StructureType.Wall, wcell.x, wcell.y); + if (keyboard.nKey.wasPressedThisFrame && TryGetLocalPlayerCell(out int2 pcell)) + SendBuild(connection, StructureType.Pylon, pcell.x, pcell.y); if (keyboard.uKey.wasPressedThisFrame) SendUpgrade(connection); } diff --git a/Assets/_Project/Scripts/Client/Presentation/WorldFeedbackSystem.cs b/Assets/_Project/Scripts/Client/Presentation/WorldFeedbackSystem.cs new file mode 100644 index 000000000..f1e6c82ea --- /dev/null +++ b/Assets/_Project/Scripts/Client/Presentation/WorldFeedbackSystem.cs @@ -0,0 +1,226 @@ +using System.Collections.Generic; +using ProjectM.Simulation; +using Unity.Entities; +using Unity.Mathematics; +using Unity.NetCode; +using Unity.Transforms; +using UnityEngine; + +namespace ProjectM.Client +{ + /// + /// Client-only WORLD JUICE for harvesting resource nodes + smashing Blight clutter. A managed presentation + /// system (SystemBase, main thread, NO Burst) in that REACTS to + /// replicated state — it never runs simulation. Each frame it edge-detects every node/clutter ghost's + /// replicated Remaining: a decrease spawns a small tinted chip burst + soft SFX; a despawn (the server + /// destroyed it — depletion or shatter) spawns a clear burst + SFX, and clutter adds a camera punch (the + /// "carve through the frontier" smash). A PROXIMITY GATE suppresses the prune VFX unless the despawned + /// entity's last position was near the local player, so the region-transit despawn storm at +1000 X stays + /// silent off-camera (GhostRelevancy drops every expedition ghost at once when the player walks home). + /// Procedural particles + procedural SFX (mirrors CombatFeedbackSystem; self-contained); knobs live in + /// . Never destroys a ghost — GhostDespawnSystem owns despawn; we only OBSERVE. + /// + [WorldSystemFilter(WorldSystemFilterFlags.ClientSimulation)] + [UpdateInGroup(typeof(PresentationSystemGroup))] + public partial class WorldFeedbackSystem : SystemBase + { + struct Cache { public int Remaining; public float3 Pos; public bool IsClutter; public Color Tint; } + + readonly Dictionary _cache = new(); + readonly HashSet _seen = new(); + readonly List _stale = new(); + + Transform _fxRoot; + ParticleSystem _chipFx; + ParticleSystem _clearFx; + AudioClip _chipClip; + AudioClip _clearClip; + + protected override void OnCreate() + { + _chipClip = MakeClip("harvest_chip", 900f, 1400f, 0.06f, 0.30f); + _clearClip = MakeClip("clutter_clear", 420f, 90f, 0.22f, 0.50f); + } + + protected override void OnStartRunning() + { + if (_fxRoot != null) return; + _fxRoot = new GameObject("~WorldFeedbackFX").transform; + var mat = MakeParticleMaterial(); + _chipFx = MakeBurst("HarvestChips", mat, new Color(2.6f, 1.9f, 0.7f), 0.10f, 5f, 0.30f, 256); + _clearFx = MakeBurst("ClutterClear", mat, new Color(3.0f, 1.1f, 0.25f), 0.16f, 7f, 0.45f, 512); + } + + protected override void OnDestroy() + { + if (_fxRoot != null) Object.Destroy(_fxRoot.gameObject); + } + + protected override void OnUpdate() + { + if (!WorldFeelConfig.Enabled) { _cache.Clear(); return; } + + // Complete predicted/interpolation jobs writing these before the main-thread reads. + EntityManager.CompleteDependencyBeforeRO(); + EntityManager.CompleteDependencyBeforeRO(); + EntityManager.CompleteDependencyBeforeRO(); + + // Local player position (for the proximity gate). + bool haveLocal = false; + float3 localPos = default; + foreach (var xf in SystemAPI.Query>().WithAll()) + { + localPos = xf.ValueRO.Position; + haveLocal = true; + } + + _seen.Clear(); + + // Resource nodes — chip on depletion. + foreach (var (node, xf, e) in + SystemAPI.Query, RefRO>().WithEntityAccess()) + { + _seen.Add(e); + Observe(e, node.ValueRO.Remaining, xf.ValueRO.Position, false, TintForResource(node.ValueRO.ResourceId)); + } + + // Blight clutter — chip on damage. + foreach (var (clutter, xf, e) in + SystemAPI.Query, RefRO>().WithEntityAccess()) + { + _seen.Add(e); + Observe(e, clutter.ValueRO.Remaining, xf.ValueRO.Position, true, WorldFeelConfig.WildTint); + } + + // Prune: a despawn = the server destroyed it (node depleted / clutter shattered). Gate on proximity so + // a region-transit despawn storm (every expedition ghost dropped at once, far at +1000 X) stays silent. + if (_cache.Count != _seen.Count) + { + _stale.Clear(); + foreach (var kv in _cache) + if (!_seen.Contains(kv.Key)) _stale.Add(kv.Key); + + float rangeSq = WorldFeelConfig.ProximityRange * WorldFeelConfig.ProximityRange; + for (int i = 0; i < _stale.Count; i++) + { + var c = _cache[_stale[i]]; + if (haveLocal && math.distancesq(c.Pos, localPos) <= rangeSq) + { + EmitTinted(_clearFx, (Vector3)c.Pos + Vector3.up * 0.6f, WorldFeelConfig.ClearBurstCount, c.Tint); + PlayClip(_clearClip, (Vector3)c.Pos, WorldFeelConfig.ClearSfxVolume); + if (c.IsClutter) + { + PrototypeCameraRig.PunchFov(WorldFeelConfig.ClearFovKick, 90f); + PrototypeCameraRig.AddShake(WorldFeelConfig.ClearShake); + } + } + _cache.Remove(_stale[i]); + } + } + } + + void Observe(Entity e, int remaining, float3 pos, bool isClutter, Color tint) + { + if (_cache.TryGetValue(e, out var prev) && remaining < prev.Remaining) + { + EmitTinted(_chipFx, (Vector3)pos + Vector3.up * 0.6f, WorldFeelConfig.ChipBurstCount, tint); + PlayClip(_chipClip, (Vector3)pos, WorldFeelConfig.ChipSfxVolume); + } + _cache[e] = new Cache { Remaining = remaining, Pos = pos, IsClutter = isClutter, Tint = tint }; + } + + static Color TintForResource(byte resourceId) + { + if (resourceId == ResourceId.Ore) return WorldFeelConfig.OreTint; + if (resourceId == ResourceId.Biomass) return WorldFeelConfig.BiomassTint; + return WorldFeelConfig.WildTint; // Aether + default + } + + // ---- procedural particles + SFX (mirrors CombatFeedbackSystem; self-contained) ---- + + static void EmitTinted(ParticleSystem ps, Vector3 pos, int count, Color tint) + { + if (ps == null) return; + var main = ps.main; + main.startColor = tint; + ps.transform.position = pos; + ps.Emit(count); + } + + static Material MakeParticleMaterial() + { + Shader sh = Shader.Find("Sprites/Default"); + if (sh == null) sh = Shader.Find("Universal Render Pipeline/Particles/Unlit"); + if (sh == null) sh = Shader.Find("Unlit/Color"); + return new Material(sh) { name = "WorldFeedbackParticle" }; + } + + ParticleSystem MakeBurst(string name, Material mat, Color color, float size, float speed, float life, int max) + { + var go = new GameObject(name); + go.transform.SetParent(_fxRoot, false); + var ps = go.AddComponent(); + + var main = ps.main; + main.loop = false; + main.playOnAwake = false; + main.startLifetime = life; + main.startSpeed = speed; + main.startSize = size; + main.startColor = color; + main.maxParticles = max; + main.gravityModifier = 0.25f; + main.simulationSpace = ParticleSystemSimulationSpace.World; + + var emission = ps.emission; + emission.enabled = false; // manual Emit(count) + + var shape = ps.shape; + shape.enabled = true; + shape.shapeType = ParticleSystemShapeType.Sphere; + shape.radius = 0.10f; + + var colOverLife = ps.colorOverLifetime; + colOverLife.enabled = true; + var grad = new Gradient(); + grad.SetKeys( + new[] { new GradientColorKey(Color.white, 0f), new GradientColorKey(Color.white, 1f) }, + new[] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(0f, 1f) }); + colOverLife.color = new ParticleSystem.MinMaxGradient(grad); + + var sizeOverLife = ps.sizeOverLifetime; + sizeOverLife.enabled = true; + sizeOverLife.size = new ParticleSystem.MinMaxCurve(1f, AnimationCurve.Linear(0f, 1f, 1f, 0.2f)); + + var renderer = ps.GetComponent(); + renderer.material = mat; + renderer.renderMode = ParticleSystemRenderMode.Billboard; + return ps; + } + + static AudioClip MakeClip(string name, float f0, float f1, float dur, float vol) + { + const int rate = 44100; + int len = Mathf.Max(16, (int)(dur * rate)); + var clip = AudioClip.Create(name, len, 1, rate, false); + var data = new float[len]; + float phase = 0f; + for (int i = 0; i < len; i++) + { + float t = i / (float)len; + float env = Mathf.Exp(-5f * t); + float freq = Mathf.Lerp(f0, f1, t); + phase += 2f * Mathf.PI * freq / rate; + data[i] = Mathf.Sin(phase) * env * vol; + } + clip.SetData(data, 0); + return clip; + } + + static void PlayClip(AudioClip clip, Vector3 pos, float vol) + { + if (clip == null) return; + AudioSource.PlayClipAtPoint(clip, pos, vol); + } + } +} diff --git a/Assets/_Project/Scripts/Client/Presentation/WorldFeedbackSystem.cs.meta b/Assets/_Project/Scripts/Client/Presentation/WorldFeedbackSystem.cs.meta new file mode 100644 index 000000000..9a0deea8a --- /dev/null +++ b/Assets/_Project/Scripts/Client/Presentation/WorldFeedbackSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 470fdf29ccc332d42bb93e0b1e249dfb \ No newline at end of file diff --git a/Assets/_Project/Scripts/Client/Presentation/WorldFeelConfig.cs b/Assets/_Project/Scripts/Client/Presentation/WorldFeelConfig.cs new file mode 100644 index 000000000..da3db64fa --- /dev/null +++ b/Assets/_Project/Scripts/Client/Presentation/WorldFeelConfig.cs @@ -0,0 +1,61 @@ +using UnityEngine; + +namespace ProjectM.Client +{ + /// + /// Live-tunable knobs for the client-only WORLD-FEEDBACK slice (harvesting nodes + smashing Blight clutter). + /// A static bridge (mirrors ) so values can be poked at runtime via MCP execute_code + /// without a recompile (e.g. ProjectM.Client.WorldFeelConfig.ClearFovKick = 1.2f;). Read ONLY by + /// (managed, main-thread). NEVER read from a [BurstCompile] system + /// (managed-static + Color-in-Burst hazards). re-stamps on play-enter via + /// [RuntimeInitializeOnLoadMethod] because statics survive fast-enter-playmode reloads (else a poked value + /// leaks across play-enters). + /// + public static class WorldFeelConfig + { + /// Master gate for harvest/clear feedback. + public static bool Enabled; + + /// Particle burst when a node/clutter loses hit-points (a chip). + public static int ChipBurstCount; + /// Particle burst when a node depletes / clutter shatters (the clear). + public static int ClearBurstCount; + + /// Soft SFX volume on a chip. + public static float ChipSfxVolume; + /// SFX volume on a shatter / deplete. + public static float ClearSfxVolume; + + /// Camera FOV kick (deg) when clutter shatters near the player — the satisfying smash. 0 = off. + public static float ClearFovKick; + /// Camera shake when clutter shatters near the player. + public static float ClearShake; + + /// Only fire prune VFX when the despawned entity's last position is within this distance of the + /// local player, so a region-transit despawn storm at +1000 X stays silent off-camera. + public static float ProximityRange; + + /// Tint for wild-Aether clutter shatter + Aether-node chips (HDR orange, pushes past bloom). + public static Color WildTint; + /// Tint for Ore-node chips (HDR amber). + public static Color OreTint; + /// Tint for Biomass-node chips (HDR sickly green). + public static Color BiomassTint; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + public static void ResetDefaults() + { + Enabled = true; + ChipBurstCount = 6; + ClearBurstCount = 18; + ChipSfxVolume = 0.30f; + ClearSfxVolume = 0.55f; + ClearFovKick = 0.8f; + ClearShake = 0.12f; + ProximityRange = 40f; + WildTint = new Color(3.0f, 1.1f, 0.25f); + OreTint = new Color(2.6f, 1.9f, 0.7f); + BiomassTint = new Color(0.9f, 2.4f, 0.8f); + } + } +} diff --git a/Assets/_Project/Scripts/Client/Presentation/WorldFeelConfig.cs.meta b/Assets/_Project/Scripts/Client/Presentation/WorldFeelConfig.cs.meta new file mode 100644 index 000000000..895eaacc2 --- /dev/null +++ b/Assets/_Project/Scripts/Client/Presentation/WorldFeelConfig.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1d6f72b25a2a1d14e988b5999e029c5c \ No newline at end of file diff --git a/Assets/_Project/Scripts/Server/Economy/ExpeditionFieldSystem.cs b/Assets/_Project/Scripts/Server/Economy/ExpeditionFieldSystem.cs index 45b2957f7..c47e6912d 100644 --- a/Assets/_Project/Scripts/Server/Economy/ExpeditionFieldSystem.cs +++ b/Assets/_Project/Scripts/Server/Economy/ExpeditionFieldSystem.cs @@ -12,10 +12,13 @@ namespace ProjectM.Server /// counts players whose server-only is the Expedition region, and on the /// empty->occupied edge (a new sortie) bumps and scatters /// resource-node ghosts (seeded by the epoch) around the expedition - /// origin, each RegionTag{Expedition}; on the occupied->empty edge (the LAST player left) it destroys every - /// node. So the field lives as long as anyone is out there, not on a global timer. Plain server - /// SimulationSystemGroup. Server-authoritative; clients despawn nodes via GhostDespawnSystem. Per-epoch - /// reproducible (the seed is the monotonic int epoch, compared by equality — never tick math, never 0). + /// origin — PLUS, if a singleton is present, + /// Blight-clutter ghosts (seeded DISTINCTLY so clutter and nodes don't + /// co-locate, Variant round-robined), each RegionTag{Expedition}; on the occupied->empty edge (the LAST + /// player left) it destroys every node AND every clutter piece. So the field lives as long as anyone is out + /// there, not on a global timer. Plain server SimulationSystemGroup. Server-authoritative; clients despawn + /// ghosts via GhostDespawnSystem. Per-epoch reproducible (the seed is the monotonic int epoch, compared by + /// equality — never tick math, never 0). /// [BurstCompile] [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] @@ -80,14 +83,42 @@ namespace ProjectM.Server rn.ResourceId = (byte)(ResourceId.Aether + (byte)(i % 3)); ecb.SetComponent(node, rn); } + + // Blight clutter (OPTIONAL singleton): scatter alongside the nodes with a DISTINCT seed so the + // two fields don't co-locate. Round-robin Variant for client visual variety. + if (SystemAPI.TryGetSingleton(out var clutterSpawner) + && clutterSpawner.Prefab != Entity.Null) + { + var clutterXform = SystemAPI.GetComponent(clutterSpawner.Prefab); + var prefabClutter = SystemAPI.GetComponent(clutterSpawner.Prefab); + var crng = new Random((uint)math.max(1, runtime.ExpeditionEpoch * 2 + 1)); + int ccount = math.max(1, clutterSpawner.Count); + for (int i = 0; i < ccount; i++) + { + var piece = ecb.Instantiate(clutterSpawner.Prefab); + + float ang = crng.NextFloat(0f, math.PI * 2f); + float rad = clutterSpawner.Radius * math.sqrt(crng.NextFloat(0f, 1f)); + var xform = clutterXform; + xform.Position = origin + new float3(math.cos(ang) * rad, 0f, math.sin(ang) * rad); + ecb.SetComponent(piece, xform); + + var bc = prefabClutter; + bc.Variant = (byte)(i % 3); + ecb.SetComponent(piece, bc); + } + } + runtime.LastSpawnedEpoch = runtime.ExpeditionEpoch; } - // DESTROY: the last player left the expedition — clear the whole field. + // DESTROY: the last player left the expedition — clear the whole field (nodes + clutter). if (wasOccupied && !occupied) { foreach (var (rn, e) in SystemAPI.Query>().WithEntityAccess()) ecb.DestroyEntity(e); + foreach (var (bc, e) in SystemAPI.Query>().WithEntityAccess()) + ecb.DestroyEntity(e); } runtime.PrevExpeditionOccupied = (byte)(occupied ? 1 : 0); diff --git a/Assets/_Project/Scripts/Server/Economy/ResourceHarvestSystem.cs b/Assets/_Project/Scripts/Server/Economy/ResourceHarvestSystem.cs index 5082420af..f0ffe7683 100644 --- a/Assets/_Project/Scripts/Server/Economy/ResourceHarvestSystem.cs +++ b/Assets/_Project/Scripts/Server/Economy/ResourceHarvestSystem.cs @@ -9,18 +9,21 @@ using Unity.Transforms; namespace ProjectM.Server { /// - /// Server-only resource harvest: sweeps each surviving projectile's this-tick travel segment against - /// resource-node ghosts and deposits of the node's - /// into the GLOBAL resource ledger (the CycleDirector's - /// buffer, resolved via — NEVER - /// GetSingleton<StorageEntry>, which would collide with the base storage container). Runs in the plain - /// server SimulationSystemGroup [UpdateAfter(PredictedSimulationSystemGroup)] — after - /// ProjectileDamageSystem has already consumed Health-target hits and range-expired projectiles, so this - /// only sees true survivors. The swept segment is reconstructed from - /// (written by ProjectileMoveSystem in the fixed-step group), so it is tunnelling-safe WITHOUT depending on - /// this plain group's variable-frame DeltaTime. A node hit by two projectiles in one tick deposits twice - /// but is destroyed exactly once. Relies on the asserted ~1000-unit base/expedition coordinate gap so a - /// base projectile can never geometrically reach an expedition node. + /// Server-only resource harvest + Blight-clutter clearing: sweeps each surviving projectile's this-tick travel + /// segment against a UNIFIED target set of resource-node ghosts AND Blight-clutter ghosts, deposits the hit + /// target's yield into the GLOBAL resource ledger (the CycleDirector's buffer, + /// resolved via — NEVER GetSingleton<StorageEntry>, which would collide with + /// the base storage container) and decrements its Remaining; the target despawns at <= 0. Nodes deposit + /// @ HarvestPerHit; clutter deposits + /// @ ScrapPerHit (a small "minor scrap" trickle — carving through the frontier). UNIFYING the two into one sweep + /// is a CORRECTNESS requirement: two separate sweeps would each DestroyEntity a projectile that overlaps a node + /// AND a clutter piece — a double DestroyEntity throws at ECB playback. Runs in the plain server + /// SimulationSystemGroup [UpdateAfter(PredictedSimulationSystemGroup)] — after ProjectileDamageSystem has + /// consumed Health-target hits and range-expired projectiles, so this only sees true survivors. The swept + /// segment is reconstructed from (written by ProjectileMoveSystem in the + /// fixed-step group), so it is tunnelling-safe WITHOUT depending on this plain group's variable-frame DeltaTime. + /// A target hit by two projectiles in one tick deposits twice but is destroyed exactly once. Relies on the + /// asserted ~1000-unit base/expedition coordinate gap so a base projectile can never reach an expedition target. /// [BurstCompile] [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] @@ -34,7 +37,6 @@ namespace ProjectM.Server public void OnCreate(ref SystemState state) { state.RequireForUpdate(); - state.RequireForUpdate(); state.RequireForUpdate(); } @@ -44,26 +46,43 @@ namespace ProjectM.Server var ledgerEntity = SystemAPI.GetSingletonEntity(); var ledger = SystemAPI.GetBuffer(ledgerEntity); - // Snapshot all nodes once this tick. - var nodeEntities = new NativeList(Allocator.Temp); - var nodePos = new NativeList(Allocator.Temp); - var nodeRadius = new NativeList(Allocator.Temp); - var nodeRemaining = new NativeList(Allocator.Temp); - var nodeResource = new NativeList(Allocator.Temp); - var nodePerHit = new NativeList(Allocator.Temp); + // Snapshot all harvest/clear targets (nodes + clutter) once this tick into a UNIFIED set. + var tgtEntity = new NativeList(Allocator.Temp); + var tgtPos = new NativeList(Allocator.Temp); + var tgtRadius = new NativeList(Allocator.Temp); + var tgtRemaining = new NativeList(Allocator.Temp); + var tgtYieldId = new NativeList(Allocator.Temp); + var tgtYieldPerHit = new NativeList(Allocator.Temp); + var tgtVariant = new NativeList(Allocator.Temp); + var tgtIsClutter = new NativeList(Allocator.Temp); foreach (var (xform, hr, node, e) in SystemAPI.Query, RefRO, RefRO>().WithEntityAccess()) { - nodeEntities.Add(e); - nodePos.Add(xform.ValueRO.Position.xz); - nodeRadius.Add(hr.ValueRO.Value); - nodeRemaining.Add(node.ValueRO.Remaining); - nodeResource.Add(node.ValueRO.ResourceId); - nodePerHit.Add(node.ValueRO.HarvestPerHit); + tgtEntity.Add(e); + tgtPos.Add(xform.ValueRO.Position.xz); + tgtRadius.Add(hr.ValueRO.Value); + tgtRemaining.Add(node.ValueRO.Remaining); + tgtYieldId.Add(node.ValueRO.ResourceId); + tgtYieldPerHit.Add(node.ValueRO.HarvestPerHit); + tgtVariant.Add(0); + tgtIsClutter.Add(false); } - var destroyed = new NativeArray(nodeEntities.Length, Allocator.Temp); + foreach (var (xform, hr, clutter, e) in + SystemAPI.Query, RefRO, RefRO>().WithEntityAccess()) + { + tgtEntity.Add(e); + tgtPos.Add(xform.ValueRO.Position.xz); + tgtRadius.Add(hr.ValueRO.Value); + tgtRemaining.Add(clutter.ValueRO.Remaining); + tgtYieldId.Add(clutter.ValueRO.ScrapResourceId); + tgtYieldPerHit.Add(clutter.ValueRO.ScrapPerHit); + tgtVariant.Add(clutter.ValueRO.Variant); + tgtIsClutter.Add(true); + } + + var destroyed = new NativeArray(tgtEntity.Length, Allocator.Temp); var ecb = new EntityCommandBuffer(Allocator.Temp); foreach (var (xform, proj, projEntity) in @@ -77,27 +96,34 @@ namespace ProjectM.Server int bestIdx = -1; float bestT = float.MaxValue; - for (int i = 0; i < nodeEntities.Length; i++) + bool overlappedCleared = false; // struck a target a sibling projectile already cleared THIS tick + for (int i = 0; i < tgtEntity.Length; i++) { - if (destroyed[i]) continue; - float2 tp = nodePos[i]; + float2 tp = tgtPos[i]; float t = segLenSq > 1e-8f ? math.saturate(math.dot(tp - segStart, seg) / segLenSq) : 0f; float2 closest = segStart + t * seg; - float hitDist = nodeRadius[i] + k_ProjectileRadius; - if (math.distancesq(tp, closest) <= hitDist * hitDist && t < bestT) - { - bestT = t; - bestIdx = i; - } + float hitDist = tgtRadius[i] + k_ProjectileRadius; + if (math.distancesq(tp, closest) > hitDist * hitDist) + continue; + if (destroyed[i]) { overlappedCleared = true; continue; } + if (t < bestT) { bestT = t; bestIdx = i; } } if (bestIdx < 0) + { + // No LIVE target on the segment. If the shot still overlapped a target a sibling projectile + // cleared this same tick, consume it anyway (a hit always spends the shot); else it's a miss. + if (overlappedCleared) + ecb.DestroyEntity(projEntity); continue; + } - int amount = (int)nodePerHit[bestIdx]; - StorageMath.Deposit(ledger, nodeResource[bestIdx], amount); - int rem = nodeRemaining[bestIdx] - amount; - nodeRemaining[bestIdx] = rem; + // A positive baked yield must always make progress: a raw (int) truncation of a sub-1.0 per-hit + // value would deposit 0 AND never decrement Remaining -> an immortal target that silently eats shots. + int amount = math.max(1, (int)tgtYieldPerHit[bestIdx]); + StorageMath.Deposit(ledger, tgtYieldId[bestIdx], amount); + int rem = tgtRemaining[bestIdx] - amount; + tgtRemaining[bestIdx] = rem; ecb.DestroyEntity(projEntity); if (rem <= 0) @@ -105,17 +131,27 @@ namespace ProjectM.Server if (!destroyed[bestIdx]) { destroyed[bestIdx] = true; - ecb.DestroyEntity(nodeEntities[bestIdx]); + ecb.DestroyEntity(tgtEntity[bestIdx]); } } + else if (tgtIsClutter[bestIdx]) + { + // Persist the decremented Remaining (replicated GhostField) so depletion carries across ticks. + SystemAPI.SetComponent(tgtEntity[bestIdx], new BlightClutter + { + Remaining = rem, + Variant = tgtVariant[bestIdx], + ScrapResourceId = tgtYieldId[bestIdx], + ScrapPerHit = tgtYieldPerHit[bestIdx], + }); + } else { - // Persist the decremented Remaining (replicated GhostField) so depletion carries across ticks. - SystemAPI.SetComponent(nodeEntities[bestIdx], new ResourceNode + SystemAPI.SetComponent(tgtEntity[bestIdx], new ResourceNode { - ResourceId = nodeResource[bestIdx], + ResourceId = tgtYieldId[bestIdx], Remaining = rem, - HarvestPerHit = nodePerHit[bestIdx], + HarvestPerHit = tgtYieldPerHit[bestIdx], }); } } @@ -123,12 +159,14 @@ namespace ProjectM.Server ecb.Playback(state.EntityManager); ecb.Dispose(); destroyed.Dispose(); - nodeEntities.Dispose(); - nodePos.Dispose(); - nodeRadius.Dispose(); - nodeRemaining.Dispose(); - nodeResource.Dispose(); - nodePerHit.Dispose(); + tgtEntity.Dispose(); + tgtPos.Dispose(); + tgtRadius.Dispose(); + tgtRemaining.Dispose(); + tgtYieldId.Dispose(); + tgtYieldPerHit.Dispose(); + tgtVariant.Dispose(); + tgtIsClutter.Dispose(); } } } diff --git a/Assets/_Project/Scripts/Simulation/Building/StructureComponents.cs b/Assets/_Project/Scripts/Simulation/Building/StructureComponents.cs index f674df8ab..851373867 100644 --- a/Assets/_Project/Scripts/Simulation/Building/StructureComponents.cs +++ b/Assets/_Project/Scripts/Simulation/Building/StructureComponents.cs @@ -17,6 +17,10 @@ namespace ProjectM.Simulation public const byte Harvester = 2; public const byte Fabricator = 3; public const byte Conveyor = 4; + // World-pass structural/cosmetic build-out (additive; these byte values keep PlacedStructure.Type's + // [GhostField] serializer identical — no re-bake of existing ghosts). Do NOT reuse 2-4 (M7 automation). + public const byte Wall = 5; + public const byte Pylon = 6; } /// diff --git a/Assets/_Project/Scripts/Simulation/Economy/BlightClutter.cs b/Assets/_Project/Scripts/Simulation/Economy/BlightClutter.cs new file mode 100644 index 000000000..c73ad38cf --- /dev/null +++ b/Assets/_Project/Scripts/Simulation/Economy/BlightClutter.cs @@ -0,0 +1,33 @@ +using Unity.Entities; +using Unity.NetCode; + +namespace ProjectM.Simulation +{ + /// + /// Destructible "Blight clutter" scattered across the expedition frontier — an ownerless INTERPOLATED ghost + /// (region-tagged Expedition; the sibling) that clients see and smash. The + /// server-only ResourceHarvestSystem sweeps projectiles against it UNIFIED with node harvesting (so an + /// overlapping projectile is consumed exactly once — two separate sweeps would double-DestroyEntity the + /// projectile and throw at ECB playback). Each hit deposits of + /// (a small trickle — "juice + minor scrap", no gating) into the GLOBAL + /// resource ledger and decrements ; the clutter despawns at <= 0. + /// / are [GhostField] so clients can show depletion + pick a smash + /// visual; / are baked, server-only. Distinct from + /// so it carries its own visuals, scatter density and client "clear" feedback while + /// reusing the exact, tunnel-safe harvest hit-test. + /// + public struct BlightClutter : IComponentData + { + /// Remaining hit-points; the clutter despawns when this reaches 0. + [GhostField] public int Remaining; + + /// Visual variant id (the client picks a mesh/tint; round-robined by the field spawner). + [GhostField] public byte Variant; + + /// Scrap resource yielded per hit (baked; server-only) — see (Biomass). + public byte ScrapResourceId; + + /// Scrap units yielded per projectile hit (baked; server-only). + public float ScrapPerHit; + } +} diff --git a/Assets/_Project/Scripts/Simulation/Economy/BlightClutter.cs.meta b/Assets/_Project/Scripts/Simulation/Economy/BlightClutter.cs.meta new file mode 100644 index 000000000..60b2b6c93 --- /dev/null +++ b/Assets/_Project/Scripts/Simulation/Economy/BlightClutter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: dd7823b664bb48e4e89d64439997d147 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Simulation/Economy/ClutterFieldSpawner.cs b/Assets/_Project/Scripts/Simulation/Economy/ClutterFieldSpawner.cs new file mode 100644 index 000000000..5f7b4ab2a --- /dev/null +++ b/Assets/_Project/Scripts/Simulation/Economy/ClutterFieldSpawner.cs @@ -0,0 +1,24 @@ +using Unity.Entities; + +namespace ProjectM.Simulation +{ + /// + /// Baked singleton holding the Blight-clutter ghost prefab + field shape. ExpeditionFieldSystem reads it + /// (alongside ) to scatter clutter ghosts within + /// of the expedition origin on the SAME empty->occupied epoch edge as the resource + /// field (seeded distinctly so clutter and nodes don't co-locate), and clears them on occupied->empty. + /// OPTIONAL — if the singleton is absent, ExpeditionFieldSystem simply skips clutter. Mirrors + /// ; carries no transform. + /// + public struct ClutterFieldSpawner : IComponentData + { + /// Baked Blight-clutter ghost prefab to instantiate. + public Entity Prefab; + + /// Number of clutter pieces to scatter per expedition. + public int Count; + + /// Scatter radius (world units) around the expedition region origin. + public float Radius; + } +} diff --git a/Assets/_Project/Scripts/Simulation/Economy/ClutterFieldSpawner.cs.meta b/Assets/_Project/Scripts/Simulation/Economy/ClutterFieldSpawner.cs.meta new file mode 100644 index 000000000..c5eb07097 --- /dev/null +++ b/Assets/_Project/Scripts/Simulation/Economy/ClutterFieldSpawner.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 22d21ff4c74c22443ba94c88db9ec099 \ No newline at end of file diff --git a/Assets/_Project/Subscenes/Gameplay.unity b/Assets/_Project/Subscenes/Gameplay.unity index 8255f51d9..3603998ae 100644 --- a/Assets/_Project/Subscenes/Gameplay.unity +++ b/Assets/_Project/Subscenes/Gameplay.unity @@ -129,6 +129,7 @@ GameObject: m_Component: - component: {fileID: 17637047} - component: {fileID: 17637046} + - component: {fileID: 17637048} m_Layer: 0 m_Name: ResourceFieldSpawner m_TagString: Untagged @@ -166,6 +167,21 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &17637048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17637045} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02623cc30f984104b88a75782bf0dd07, type: 3} + m_Name: + m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.ClutterFieldSpawnerAuthoring + ClutterPrefab: {fileID: 3885353946372160549, guid: 6ffeddcc4482c0f44880dc9a555884dd, type: 3} + Count: 14 + Radius: 14 --- !u!1 &236770150 GameObject: m_ObjectHideFlags: 0 @@ -304,6 +320,10 @@ MonoBehaviour: m_EditorClassIdentifier: ProjectM.Authoring::ProjectM.Authoring.StructureCatalogAuthoring TurretPrefab: {fileID: 3885353946372160549, guid: 5459c9edea89bd94fa6f5043ae00eb40, type: 3} TurretCostOre: 10 + WallPrefab: {fileID: 3885353946372160549, guid: 1e321aea244cc484f99c1cdd68cb01c4, type: 3} + WallCostOre: 4 + PylonPrefab: {fileID: 3885353946372160549, guid: 7d0637ef90f120a4c9e2ba637dfc00af, type: 3} + PylonCostOre: 2 --- !u!4 &380046995 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/_Project/Tests/EditMode/ResourceHarvestSystemTests.cs b/Assets/_Project/Tests/EditMode/ResourceHarvestSystemTests.cs index 7dfa3e541..2637812d2 100644 --- a/Assets/_Project/Tests/EditMode/ResourceHarvestSystemTests.cs +++ b/Assets/_Project/Tests/EditMode/ResourceHarvestSystemTests.cs @@ -113,5 +113,117 @@ namespace ProjectM.Tests Assert.IsTrue(em.Exists(proj), "A projectile that hits no node survives (no destroy-on-miss)."); } } + + static Entity MakeClutter(EntityManager em, float3 pos, float hitRadius, int remaining, float scrapPerHit) + { + var e = em.CreateEntity(); + em.AddComponentData(e, LocalTransform.FromPosition(pos)); + em.AddComponentData(e, new HitRadius { Value = hitRadius }); + em.AddComponentData(e, new BlightClutter { Remaining = remaining, Variant = 0, ScrapResourceId = ResourceId.Biomass, ScrapPerHit = scrapPerHit }); + return e; + } + + [Test] + public void Clutter_Hit_Deposits_Scrap_Decrements_And_Consumes_Projectile() + { + var (world, group, ledger) = MakeWorld("ClutterHit"); + using (world) + { + var em = world.EntityManager; + var clutter = MakeClutter(em, new float3(10, 1, 10), hitRadius: 1f, remaining: 8, scrapPerHit: 2f); + var proj = MakeProjectile(em, new float3(10, 1, 10), new float2(1, 0), lastStep: 5f); + + group.Update(); + + Assert.AreEqual(2, LedgerCount(em, ledger, ResourceId.Biomass), "Smashing clutter deposits ScrapPerHit Biomass."); + Assert.AreEqual(6, em.GetComponentData(clutter).Remaining, "Clutter Remaining decrements by the scrap amount."); + Assert.IsTrue(em.Exists(clutter), "Clutter with hit-points left survives."); + Assert.IsFalse(em.Exists(proj), "The smashing projectile is consumed."); + } + } + + [Test] + public void Clutter_Two_Projectiles_Shatter_It_At_Most_Once() + { + var (world, group, ledger) = MakeWorld("ClutterShatter"); + using (world) + { + var em = world.EntityManager; + var clutter = MakeClutter(em, new float3(10, 1, 10), hitRadius: 1f, remaining: 3, scrapPerHit: 2f); + var p1 = MakeProjectile(em, new float3(10, 1, 10), new float2(1, 0), lastStep: 5f); + var p2 = MakeProjectile(em, new float3(10, 1, 10), new float2(0, 1), lastStep: 5f); + + group.Update(); + + Assert.AreEqual(4, LedgerCount(em, ledger, ResourceId.Biomass), "Both hits deposit scrap, even though the second over-clears."); + Assert.IsFalse(em.Exists(clutter), "Shattered clutter is destroyed exactly once (a double destroy would throw at playback)."); + Assert.IsFalse(em.Exists(p1)); + Assert.IsFalse(em.Exists(p2)); + } + } + + [Test] + public void Overlapping_Node_And_Clutter_Consume_Projectile_Once_Hitting_Nearest() + { + var (world, group, ledger) = MakeWorld("OverlapNearest"); + using (world) + { + var em = world.EntityManager; + // Segment runs +X from x=0 (segStart = pos - dir*lastStep) to x=10 (pos). Clutter at x=4 is nearer + // along the segment (t=0.4) than the node at x=9 (t=0.9), so the unified best-t sweep hits clutter. + var clutter = MakeClutter(em, new float3(4, 1, 0), hitRadius: 1f, remaining: 100, scrapPerHit: 2f); + var node = MakeNode(em, new float3(9, 1, 0), hitRadius: 1f, resourceId: ResourceId.Ore, remaining: 100, perHit: 25f); + var proj = MakeProjectile(em, new float3(10, 1, 0), new float2(1, 0), lastStep: 10f); + + group.Update(); + + Assert.AreEqual(2, LedgerCount(em, ledger, ResourceId.Biomass), "The nearest target (clutter) is harvested."); + Assert.AreEqual(0, LedgerCount(em, ledger, ResourceId.Ore), "The farther target (node) is NOT hit — one projectile, one target."); + Assert.AreEqual(98, em.GetComponentData(clutter).Remaining); + Assert.AreEqual(100, em.GetComponentData(node).Remaining, "Node untouched."); + Assert.IsFalse(em.Exists(proj), "The projectile is consumed exactly once (no double-destroy across the two target types)."); + } + } + + [Test] + public void Fractional_ScrapPerHit_Still_Deposits_And_Depletes_Never_Immortal() + { + var (world, group, ledger) = MakeWorld("FractionalScrap"); + using (world) + { + var em = world.EntityManager; + // A sub-1.0 per-hit yield must NOT truncate to 0 (that would make the target immortal + eat shots). + var clutter = MakeClutter(em, new float3(10, 1, 10), hitRadius: 1f, remaining: 2, scrapPerHit: 0.5f); + var proj = MakeProjectile(em, new float3(10, 1, 10), new float2(1, 0), lastStep: 5f); + + group.Update(); + + Assert.AreEqual(1, LedgerCount(em, ledger, ResourceId.Biomass), "A positive sub-1.0 yield deposits at least 1 (math.max(1, (int)...))."); + Assert.AreEqual(1, em.GetComponentData(clutter).Remaining, "Remaining decrements by at least 1, so depletion always progresses."); + Assert.IsTrue(em.Exists(clutter), "Still alive after one hit (2 -> 1), not immortal."); + Assert.IsFalse(em.Exists(proj), "The projectile is consumed."); + } + } + + [Test] + public void Second_Projectile_On_A_SameTick_Cleared_Target_Is_Consumed_Without_Double_Deposit() + { + var (world, group, ledger) = MakeWorld("SameTickCleared"); + using (world) + { + var em = world.EntityManager; + // Both projectiles overlap one clutter that the FIRST hit shatters (remaining == scrapPerHit). + var clutter = MakeClutter(em, new float3(10, 1, 10), hitRadius: 1f, remaining: 2, scrapPerHit: 2f); + var p1 = MakeProjectile(em, new float3(10, 1, 10), new float2(1, 0), lastStep: 5f); + var p2 = MakeProjectile(em, new float3(10, 1, 10), new float2(0, 1), lastStep: 5f); + + group.Update(); + + Assert.AreEqual(2, LedgerCount(em, ledger, ResourceId.Biomass), "Only the first hit deposits; the second strikes the already-cleared spot (no double-deposit)."); + Assert.IsFalse(em.Exists(clutter), "The clutter is shattered exactly once."); + Assert.IsFalse(em.Exists(p1), "First projectile consumed (harvested)."); + Assert.IsFalse(em.Exists(p2), "Second projectile is still consumed — a hit always spends the shot, even on a same-tick-cleared target."); + } + } } } diff --git a/CLAUDE.md b/CLAUDE.md index e92c2f0fe..2279bb997 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -71,7 +71,7 @@ Long-form originals + the milestone each came from: `Docs/Vault/_Meta/CLAUDE_Bui - **The player is a Unity Character Controller kinematic character** (NOT a dynamic Rigidbody — `PlayerMoveSystem`/`PlayerPlanarConstraintSystem` were deleted; the DR-006 predicted-physics infra is kept). `PlayerControlSystem` maps input → `CharacterControl`; `CharacterProcessor` collide-and-slides in the relocated `KinematicCharacterPhysicsUpdateGroup`. CC 1.4.2 API = `IKinematicCharacterProcessor` + `KinematicCharacterDataAccess` + static `KinematicCharacterUtilities.Update_*` (verify shape with `unity_reflect`, don't assume the legacy aspect). - **`KinematicCharacterUtilities.BakeCharacter` aborts if the GameObject has a `Rigidbody`** and needs uniform (1,1,1) scale. **`CharacterInterpolation` must be PredictedClient-only** (register a `DefaultVariantSystemBase` stripping it from server + interpolated prefabs) — else double-interp on remotes. **Do NOT copy the CC sample's global `LocalTransform → DontSerializeVariant`** (project-wide; breaks the non-character ghosts that rely on stock `LocalTransform` replication). - **Top-down CC config:** `SnapToGround=false`, `InterpolateRotation=false` (rotation owned by `PlayerAimSystem`), `SimulateDynamicBody=false`; gravity handled by feeding `float3.zero` to `Update_GroundPushing`. -- **Hit/area tests must be SWEPT, not point checks** — a point distance check tunnels through a target when the per-tick step exceeds the target radius (high speed *or* tick-batching). Test the segment traversed this tick. **In a PLAIN `SimulationSystemGroup` system do NOT use `SystemAPI.Time.DeltaTime`** (it's the wall-frame delta, not the fixed step) — store the per-tick step on the projectile (`Projectile.LastStep`, written in the fixed-step group) and rebuild the segment as `cur - dir*LastStep`. A node hit by N projectiles in one tick: `ecb.DestroyEntity` **at-most-once** (destroyed-bitset; a double destroy throws at Playback). +- **Hit/area tests must be SWEPT, not point checks** — a point distance check tunnels through a target when the per-tick step exceeds the target radius (high speed *or* tick-batching). Test the segment traversed this tick. **In a PLAIN `SimulationSystemGroup` system do NOT use `SystemAPI.Time.DeltaTime`** (it's the wall-frame delta, not the fixed step) — store the per-tick step on the projectile (`Projectile.LastStep`, written in the fixed-step group) and rebuild the segment as `cur - dir*LastStep`. A node hit by N projectiles in one tick: `ecb.DestroyEntity` **at-most-once** (destroyed-bitset; a double destroy throws at Playback). **When TWO target types share one projectile pass (resource nodes + Blight clutter), UNIFY the sweep into one best-target loop + one shared destroyed-bitset** — separate sweep systems each `DestroyEntity` a projectile that overlaps both → double-destroy at Playback (DR-018). **A float per-hit yield cast `(int)` that ALSO gates despawn is an immortal-sink footgun:** a sub-1.0 value → `(int)`=0 → no deposit AND no `Remaining` decrement, yet the shot is still consumed → an unkillable target that silently eats projectiles. Guard with `math.max(1,(int)yield)` in the consumer **and** `[Min(1f)]` on the authoring (the node path had it; the clutter sibling didn't). ### Build / structures / grid - **Build-grid math must be deterministic + integer-stable:** corner-origin, center-returning, **half-open** cell bounds, `math.floor` (not truncation — negatives). Lock `CellSize`/`PlotSize` as a coordinate space once (`BaseGridMath`, EditMode-tested) — changing them invalidates placed structures. diff --git a/Docs/Vault/02_Game_Design/Systems_Index.md b/Docs/Vault/02_Game_Design/Systems_Index.md index 8a51e74b7..399d26372 100644 --- a/Docs/Vault/02_Game_Design/Systems_Index.md +++ b/Docs/Vault/02_Game_Design/Systems_Index.md @@ -2,7 +2,7 @@ tags: - design - index -updated: 2026-05-29 +updated: 2026-06-04 permalink: gamevault/02-game-design/systems-index --- @@ -42,6 +42,12 @@ One design doc per gameplay system, linked here. Each should state: purpose, com - **Systems:** `EnemyAISystem` (server-only, **plain `SimulationSystemGroup`**, `[UpdateAfter(PredictedSimulationSystemGroup)]` — the interpolated Husk ghost seeks the nearest living player, deals contact `DamageEvent`) + the `WaveSystem` threat director (escalating waves of Husk variants Grunt/Swarmer/Brute — replaced the flat sustain; see [[2026-06-02_GameFeel_Deepening]]); `HealthApplyDamageSystem` +`EnemyTag` death; `PlayerDeathStateSystem` (both worlds, predicted — derives `Dead` from `Health<=0`, gates movement/aim/fire via `.WithDisabled()`); `PlayerRespawnSystem` (server-only — schedule + refill + reposition). Client presentation (managed, `PresentationSystemGroup`): `CombatFeedbackSystem` (damage numbers / VFX / procedural SFX / camera shake by edge-detecting replicated Health) + `HudSystem` (code-built uGUI health / cooldown / threat / DOWNED) + `PrototypeCameraRig.AddShake`. - **Netcode shape:** Husk = **ownerless interpolated** server-driven ghost (stock `LocalTransform` replication; `Health` `[GhostField]`); `Dead` = **local derived** enableable (NOT replicated — pure function of replicated Health); juice/HUD **observe** replicated state only (client world, never the sim). Identity: [[Identity]] (sci-fi frontier colony). Status: **built + runtime-validated** (Husks spawn(6)/replicate/chase/strike; death→respawn loop; HUD; emissive dark-sci-fi look); EditMode **74/74**. Decisions: [[DR-009_GameFeel_Identity_FirstBlood]]. +### Post-M8 — World-space cohesion pass (clearing + buildable Wall/Pylon + Blightfield dressing) · [[2026-06-04_World_Space_Cohesion_Pass]] + +- **Components** (`ProjectM.Simulation`): `BlightClutter` (ownerless-interpolated ghost — `[GhostField]` Remaining+Variant, server-only ScrapResourceId/ScrapPerHit; RegionTag{Expedition} **sibling of `ResourceNode`**) + `ClutterFieldSpawner` (optional baked singleton); `StructureType.Wall=5`/`Pylon=6` (byte consts; 2–4 stay reserved for M7). +- **Systems:** `ResourceHarvestSystem` **unified** to sweep nodes AND clutter in one best-target loop (required — two separate sweeps would double-destroy an overlapping projectile at ECB playback; `math.max(1,(int)yield)` guards the immortal-sink); `ExpeditionFieldSystem` scatters/clears clutter beside the node field (distinct seed); `BuildPlaceSystem` **unchanged** (already type-generic) — new generic `StructureAuthoring{byte Kind}` + two additive `StructureCatalog` rows + `BuildSendSystem` V/N keys. Client: `WorldFeedbackSystem` (observe-only `PresentationSystemGroup` — chip/shatter juice, proximity-gated so region-transit stays silent) + live-tunable `WorldFeelConfig`. +- **Netcode/world shape:** clutter = ownerless interpolated, region-scoped via GhostRelevancy (like nodes); Wall/Pylon = ownerless interpolated structure ghosts (`PlacedStructure.Type` byte-additive → **no re-bake**); Wall carries a `PhysicsCollider` (CC-blocking), Pylon cosmetic. Visual: `M_Aether_Wild`/`M_Aether_Ordered` palette materials + a classic-URP Blightfield rock basin in `Game.unity` (relief via props, **no terrain**). Status: **built + validated** (EditMode **142/142**; in-editor Play introspected via execute_code; 4-lens adversarial review → 4 findings fixed). Decisions: [[DR-018_World_Space_Cohesion_Pass]] (builds on the M6 region split / build pipeline + M8 persistent base — those systems are documented in their DRs). + ## Conventions DOTS/ECS conventions live in repo `CLAUDE.md` and the `dots-dev` skill's `dots-conventions.md`. Don't duplicate volatile API details here — link to context7-derived notes instead. \ No newline at end of file diff --git a/Docs/Vault/06_Roadmap/Backlog.md b/Docs/Vault/06_Roadmap/Backlog.md index a2d6810ca..33bebf71a 100644 --- a/Docs/Vault/06_Roadmap/Backlog.md +++ b/Docs/Vault/06_Roadmap/Backlog.md @@ -2,7 +2,7 @@ tags: - roadmap - backlog -updated: 2026-06-03 +updated: 2026-06-04 permalink: gamevault/06-roadmap/backlog --- @@ -12,6 +12,8 @@ Unordered pool of candidate work. Promote to a [[Milestones|milestone]] when com > **2026-06-04 Polish & backlog-clear pass** ([[2026-06-04_Polish_Backlog_Pass]], [[DR-016_Stage_G_Combat_Gameplay]]) — delivered + validated (EditMode 86→127): hygiene/reconcile; **+system tests for every M6 server system**; centralized `Tuning.cs` consts; replicated **wave number** on the HUD; procedural **ambient + combat juice** (camera punch / FOV hit-stop, kill-shot fanfare, respawn shimmer, reticle lock-on tether); **ghost-prop reskin** (Storage/Turret/Node distinct materials) + **SSAO/ACES post verified**; **timed/removable modifiers**, **enemy knockback**, **Husk attack telegraph**; and the **aim-drift fix** (movement-based camera look-ahead). Remaining from the selected Stage-G slice: ranged **Spitter**, **multi-prefab abilities**, + small fold-ins (storage proximity-gate, pickup auto-grant, standalone-debug RPC). Then Stages H (controls/UI) + I (multi-client harness + operator live runs). +> **2026-06-04 World-space cohesion pass** ([[2026-06-04_World_Space_Cohesion_Pass]], [[DR-018_World_Space_Cohesion_Pass]]) — delivered + validated (EditMode 127→**142**): **destructible "clearing"** (`BlightClutter` ghost smashed by the **unified** harvest sweep → Biomass scrap + smash juice, scattered/cleared with the expedition field); **build out the base** (additive `Wall`=5 / `Pylon`=6 buildables — Wall blocks the player, V/N keys); and a first **visual cohesion layer** (Aether cyan/orange material pair, the 3 new ghosts recoloured, the barren +1000 Blightfield turned into a 21-piece Synty rock/debris basin + orange wild-lights — relief via props, **no terrain**). In-editor Play introspected via execute_code; a 4-lens adversarial review (23→4) caught + fixed an immortal-shot-sink (fractional `ScrapPerHit` truncation). Base-side cohesion accents + clearing-as-gating deferred (see the 2026-06-04 follow-ups below). + - [x] Upgrade Unity 6.4 → 6.6 — done (now `6000.6.0a6`). Entities/Collections/Graphics → 6.5.0; **Netcode → 6.6.0 and Physics → 6.5.0 also renumbered into the editor line** (not independent 1.x as [[DR-001_Netcode_Test_Harness]] assumed). See [[2026-05-30_M1_Player_Slice]]. - [x] Define the core gameplay loop and the first predicted player ghost — delivered as M1 ([[2026-05-30_M1_Player_Slice]]). - [x] **Re-validate the M1 play-tick on a stable Unity 6.x** — moot/subsumed 2026-06-04: M1–M6 are all runtime-validated on the stable **6.4.7** line (the 6.6 alpha netcode bug never affected 6.4.7). The original "blocked on 6.6 alpha" framing ([[DR-002_Unity66_Alpha_Netcode_Transport]]) no longer applies. @@ -35,7 +37,7 @@ Unordered pool of candidate work. Promote to a [[Milestones|milestone]] when com - [ ] **M5 follow-up — shared-storage disk persistence** (host-only): runtime structures don't exist until M6, so nothing to save yet; add a thin per-record serialization slice (replayed through M6's placement path) after M6. `BaseAnchor`/`StorageEntry` are already flat/serialization-friendly. - [ ] **M5 follow-up — storage interaction polish**: proximity gate the deposit/withdraw (the container carries `HitRadius`); real item/UI model beyond the fixed test item; multi-writer ordering beyond first-come server apply. - [ ] **M5 follow-up — multi-client shared storage**: validate two clients see identical shared-storage buffer state (pairs with the deferred M5b multi-client interpolation + M4 two-build tests). -- [ ] **M5 follow-up — home-base visuals**: only an editor plot-bounds gizmo + a placeholder primitive container today; real ground/walls/structures arrive with M6. +- [ ] **M5 follow-up — home-base visuals**: only an editor plot-bounds gizmo + a placeholder primitive container today; real ground/walls/structures arrive with M6. **Partly addressed 2026-06-04** ([[DR-018_World_Space_Cohesion_Pass]]): the +1000 Blightfield got a real rock/debris basin + wild-lights and the buildable Wall/Pylon read in-palette; the **base-side** cohesion accents (cyan lights / perimeter relief / tiled ground) remain open. - [ ] ~~**M5 follow-up — same-tick movement**~~ — moot after M5b (the CC character runs in the predicted fixed-step group; M5's `PlayerMoveSystem` is deleted). See [[DR-007_M5b_Character_Controller_Package]]. - [ ] **M5b follow-up — multi-client CC interpolation validation**: live two-build / thin-client run to confirm remote-peer interpolation smoothness (predicted-only `CharacterInterpolation` variant is in; only single-client validated). Pairs with the deferred M4 real-LAN two-build test. - [ ] **M5b follow-up — player-vs-player collision**: currently non-physical (`SimulateDynamicBody=false`); enable + handle masses if mutual push is wanted. @@ -68,7 +70,17 @@ Surfaced by the art/Synty/aim sessions ([[DR-010_Art_Import_URP_Conversion_Visua - [ ] **DR-011 follow-up — character models / DOTS skeletal animation**: player + Husks remain primitives; swap for real rigged models when the character pack lands. - [ ] **DR-011 follow-up — VFX-Graph hit/beam packs**: the GabrielAguiar VFX-Graph subset needs separate URP setup if wanted (Shuriken packs already wired). - [ ] **DR-011 follow-up — ghost-prop Synty reskin**: Storage/UpgradePickup ghosts still use BefourStudios meshes; reskin to Synty-style or simple emissive. -- [ ] **DR-011 follow-up — mixed-theme danger zones**: BioHorror/Synty corrupted-zone art for high-threat areas (deferred from the scope gate). +- [ ] **DR-011 follow-up — mixed-theme danger zones**: BioHorror/Synty corrupted-zone art for high-threat areas (deferred from the scope gate). **Partly addressed 2026-06-04**: the Blightfield now reads orange-wild via **all-Synty recolour** (rock/debris basin + wild-lights + orange clutter/nodes) per the [[DR-018_World_Space_Cohesion_Pass]] art fork; the **BioHorror** organic-corruption accent set is still deferred. - [ ] **DR-012 follow-up — auto-target tuning**: priority/feel refinement; optional controller soft-target reticle snap (V Rising/Diablo-style). - [ ] **DR-012 follow-up — rebindable controls + multi-ability slots**. -- [ ] **Pre-M6 cleanup follow-up — higher material fidelity**: ORM channels don't map uniformly to URP; a per-channel repack or small ORM ShaderGraph + baked reflection probe would deepen the look. \ No newline at end of file +- [ ] **Pre-M6 cleanup follow-up — higher material fidelity**: ORM channels don't map uniformly to URP; a per-channel repack or small ORM ShaderGraph + baked reflection probe would deepen the look. + +## 2026-06-04 World-space cohesion follow-ups + +Surfaced by [[DR-018_World_Space_Cohesion_Pass]] (the balanced-slice scope deliberately left these for later). + +- [ ] **Base-side cohesion accents**: cyan ordered-Aether lights + perimeter relief + re-enabled tiled base ground (deferred this pass to avoid clashing with the tuned SSAO/ACES look — the Blightfield got the dressing budget). +- [ ] **Clearing as a spatial mechanic**: shipped as juice + scrap only; make cleared cells buildable / reveal hidden nodes (the "functional gating" fork from the intake gate). +- [ ] **Build-palette HUD + ghost-preview**: dedicated V/N keys for now; a selectable palette + placement preview is the UX follow-up. +- [ ] **Per-`Variant` clutter meshes**: `BlightClutter.Variant` is replicated + round-robined but the prefab is single-mesh; swap per-variant meshes (additive, no schema change). +- [x] **Focused-editor validation** (2026-06-04): confirmed in Play — Wall **stops the player CC at the collider face** (X 2.50→3.257, server==client); Blightfield **reads orange-wild rock basin** vs cyan base (real player-view shots); **clutter-clear loop** deposits Biomass + shatters + replicates (BIO 0→10, clutter 14→13); node harvest works (AETHER 0→30). Console clean. **Still open:** deep basin density/lighting **feel-tuning**. \ No newline at end of file diff --git a/Docs/Vault/07_Sessions/2026/2026-06-04_World_Space_Cohesion_Pass.md b/Docs/Vault/07_Sessions/2026/2026-06-04_World_Space_Cohesion_Pass.md new file mode 100644 index 000000000..1876ead81 --- /dev/null +++ b/Docs/Vault/07_Sessions/2026/2026-06-04_World_Space_Cohesion_Pass.md @@ -0,0 +1,63 @@ +--- +date: 2026-06-04 +type: session +tags: +- session +- world-architecture +- economy +- building +- presentation +- art +- post-m8 +permalink: gamevault/07-sessions/2026/2026-06-04-world-space-cohesion-pass +--- + +# Session 2026-06-04 — World-space cohesion pass + +> Driven by `/dots-dev` (Feature track) under ultracode. Third log dated 2026-06-04 (after M8 + the Polish backlog pass). + +## Goal + +Make the flat-feeling world feel like **a more cohesive world** without editing the floor/terrain: non-flat feel +via props, **build out a base** (more placeable structures), and **destructible resource gathering + clearing out +areas**. Operator picked: balanced vertical slice · all-Synty recoloured Blight · clearing = juice + minor scrap · +buildables = Walls + structural variety. + +## Done + +- **Clearing mechanic (net-new):** `BlightClutter` ownerless-interpolated ghost (RegionTag{Expedition}, [GhostField] + Remaining+Variant) + `ClutterFieldSpawner`. **Unified `ResourceHarvestSystem`** to sweep nodes + clutter in one + best-target loop (the double-destroy fix). `ExpeditionFieldSystem` scatters/clears clutter alongside the node field + (distinct seed). Client smash juice = new observe-only `WorldFeedbackSystem` + live-tunable `WorldFeelConfig` + (chip on `Remaining` decrease, shatter + camera punch on despawn, proximity-gated so region-transit stays silent). +- **Build out the base:** `StructureType.Wall=5`/`Pylon=6` (2–4 reserved for M7), generic `StructureAuthoring`, two + additive `StructureCatalog` rows, V/N build keys + editor hooks. `Wall.prefab` blocks the player (BoxCollider → + PhysicsCollider); `Pylon.prefab` cosmetic. `BuildPlaceSystem` untouched (already type-generic). +- **Visual cohesion:** `M_Aether_Wild`(orange)/`M_Aether_Ordered`(cyan) HDR-emissive materials; the 3 new ghosts + recoloured into the palette; the barren +1000 Blightfield became a 21-piece Synty rock/debris basin + 3 orange + wild-lights (classic-URP cosmetics in `Game.unity`, no subscene re-bake; relief via props, no terrain). +- **Validation:** EditMode **142/142** (5 harvest tests incl. overlap/fractional/same-tick-cleared). In-editor Play + (server+client) introspected via `execute_code`: baking, ghost registration, buildables (Ore 50→44, R1 collider), + clutter scatter (14+8 @ x≈1000), **0 errors**. A 4-lens adversarial-review Workflow (23 raised → 4 confirmed) caught + an immortal-shot-sink (sub-1.0 `ScrapPerHit` truncates to 0) + a same-tick-cleared passthrough — both fixed + + regression-tested before sign-off. + +## Decisions + +- [[DR-018_World_Space_Cohesion_Pass]] — clutter as a node-sibling on a unified sweep; byte-additive Wall/Pylon; + classic-URP Blightfield dressing; Aether-palette recolour. Builds on [[DR-013_M6_Aether_Cycle_Region_Split]] / + [[DR-014_M6_Build_Structures_Automation_Foundation]] / [[DR-015_The_Awakening_Engine_Fiction_Adoption]]. + +## Open / deferred + +- Base-side cohesion accents (cyan lights / perimeter relief / re-enabled tiled ground) — deferred to avoid clashing + with the tuned SSAO/ACES look. +- Clearing as a spatial mechanic (gating / reveal nodes); build-palette HUD + ghost-preview; per-`Variant` clutter + meshes — all additive follow-ups. +- Eyeball the cohesion + Wall-blocks-player reads in a **focused** editor (mechanisms verified by value headless). + +## Next + +- A focused-editor play-through to tune the Blightfield basin density/lighting + the clutter/wall feel, then either + the base-side cohesion accents or fold clearing into a spatial mechanic — or proceed to M7 automation (the reserved + structure slots + tick fields are still the additive hook). diff --git a/Docs/Vault/07_Sessions/_Decisions/DR-018_World_Space_Cohesion_Pass.md b/Docs/Vault/07_Sessions/_Decisions/DR-018_World_Space_Cohesion_Pass.md new file mode 100644 index 000000000..f9193d4b4 --- /dev/null +++ b/Docs/Vault/07_Sessions/_Decisions/DR-018_World_Space_Cohesion_Pass.md @@ -0,0 +1,133 @@ +--- +id: DR-018 +title: World-space cohesion pass — destructible Blight clutter (clearing), buildable Wall/Pylon, Aether-palette Blightfield dressing +status: accepted +date: 2026-06-04 +tags: +- decision +- netcode +- world-architecture +- economy +- building +- presentation +- art +- post-m8 +permalink: gamevault/07-sessions/decisions/dr-018-world-space-cohesion-pass +--- + +# DR-018 — World-space cohesion pass + +## Context + +The operator asked for a **world-space pass** so the world "feels like a more cohesive world" instead of flat: +non-flat ground/foliage **without editing the terrain** (props on top only), **placing buildings / building out a +base**, and **destructible resource gathering + clearing out areas**. Recon (read-only swarm) found this is mostly a +**cohesion layer over the mature M8 foundation**, not greenfield: destructible `ResourceNode` harvesting already +existed ([[DR-013_M6_Aether_Cycle_Region_Split]]); the full grid-placement build pipeline existed but shipped only the +Turret ([[DR-014_M6_Build_Structures_Automation_Foundation]]); the world was a flat quad with ~60 clustered Synty +city props at the base and **only 4 lone pillars** at the +1000 Blightfield. The fiction ([[DR-015_The_Awakening_Engine_Fiction_Adoption]]) +sets the duality: **cyan-ordered base sanctuary ↔ orange-red wild Blightfield**, Aether read by colour. + +Four scope forks were resolved with the operator up front (intake `AskUserQuestion`): **balanced vertical slice** +(touch all three, foundation now / expand later) · **all-Synty recoloured** Blight (URP-native; not the HDRP +BefourStudios path) · **clearing = juice + minor scrap** (no hard gating) · **buildables = Walls + structural variety** +(cosmetic / player-blocking, NOT Husk-pathing-defensive). Hard constraints honoured: region offset (1000,0,0) + +GhostRelevancy, frozen 32×32 grid / save schema, byte ids (never enums) in Burst/RPC, static decor as collider-stripped +classic-URP cosmetics, Aether palette, predicted-loop server authority, **no terrain edit**. + +## Decision + +1. **Clearing = `BlightClutter`, a `ResourceNode` SIBLING harvested by a UNIFIED sweep.** New ownerless interpolated + ghost `BlightClutter { [GhostField] int Remaining; [GhostField] byte Variant; byte ScrapResourceId; float ScrapPerHit }` + (RegionTag{Expedition}, prefab duplicated from `ResourceNode.prefab` so the GhostAuthoring comes free). It deposits a + small Biomass "scrap" trickle and despawns at ≤0. **`ResourceHarvestSystem` was UNIFIED** to sweep nodes AND clutter + in ONE best-target loop — **a correctness requirement, not a convenience**: two separate sweep systems would each + `ecb.DestroyEntity` a projectile that overlaps a node AND a clutter piece → the documented "double DestroyEntity + throws at playback". `ExpeditionFieldSystem` scatters clutter from an OPTIONAL `ClutterFieldSpawner` singleton on the + same per-player-presence epoch edge as the node field (distinct seed `epoch*2+1`, round-robin Variant) and clears it + on the occupied→empty edge. Client smash juice = new **`WorldFeedbackSystem`** (observe-only managed `SystemBase` in + `PresentationSystemGroup`, mirrors `CombatFeedbackSystem`): edge-detects `Remaining` for a chip burst, despawn for a + shatter burst + camera punch, with a **proximity gate** (last-pos within ~40u of the local player) so the + region-transit relevancy-drop storm at +1000 stays silent off-camera. Knobs in live-tunable `WorldFeelConfig`. + +2. **Buildables = byte-additive `Wall`(5)/`Pylon`(6).** `StructureType.Wall=5, Pylon=6` (2–4 stay RESERVED for M7 + automation). A generic `StructureAuthoring{ byte Kind }` bakes only `PlacedStructure{Type=Kind}` (no `Turret` + component → `TurretFireSystem` ignores it). `StructureCatalogAuthoring` grew two additive rows; `BuildSendSystem` + grew dedicated **V=Wall / N=Pylon** keys + editor `PlaceWall`/`PlacePylon` hooks. **`BuildPlaceSystem` was NOT + touched** — it already resolves any catalog `Type` and stamps `PlacedStructure` + `RegionTag{Base}` generically. + `Wall.prefab` carries a static `BoxCollider` (baked → `PhysicsCollider` → the CC sweeps it → blocks the player); + `Pylon.prefab` has none (cosmetic beacon). Because `PlacedStructure.Type` is already a `[GhostField] byte`, adding + values 5/6 keeps the serializer identical → **no re-bake of existing ghosts**. + +3. **Visual cohesion = Aether material pair + Blightfield basin (classic-URP cosmetics, no subscene re-bake).** + `M_Aether_Wild` (HDR orange emissive) + `M_Aether_Ordered` (HDR cyan emissive) URP/Lit assets; the three new ghosts + recoloured into the palette (Clutter→wild, Wall+Pylon→ordered). The barren +1000 Blightfield became a **21-piece + Synty rock/asteroid/debris basin + 3 orange wild-Aether point lights** under a `BlightfieldDecor` root in `Game.unity` + — deterministic ring/scatter at varied scale/height (the "non-flat" relief via props, **no terrain**), colliders + stripped (inert to the DOTS PhysicsWorld anyway, per the blessed `SyntyWorld` classic-URP pattern). Bulk authoring via + `execute_code` (PrefabUtility) for determinism + speed. + +## Consequences + +- **Validated.** EditMode **142/142** green (rewrote/added 5 `ResourceHarvestSystem` tests incl. node+clutter overlap, + fractional-yield, and same-tick-cleared consumption; existing 134 unaffected). **In-editor Play (server+client over + IPC), driven via `execute_code` world-introspection:** baking clean (catalog = Turret/Wall/Pylon with valid prefab + refs + correct costs; `ClutterFieldSpawner` baked); buildables end-to-end (built Wall@(16,16)+Pylon@(18,16), Ore 50→44, + Type GhostField replicated, Cell stays server-only=0 on client); **R1** confirmed (client Wall entity has + `PhysicsCollider`, Pylon doesn't); clutter scatter end-to-end (14 clutter + 8 nodes spawned + replicated at x≈1000, + round-robin variants); **R2** clear (the edited Bursted `ExpeditionFieldSystem` ran; **0 errors** all session, only the + pre-existing unfocused-editor Server-Tick-Batching warnings). Decor verified by VALUE (21 renderers, 0 broken shaders, + x∈[977,1020], correct HDR emission) — not just a screenshot. +- **Adversarial review** (4-lens Workflow → verify) raised 23, confirmed 4 (3 were one root issue). **Fixed before + sign-off:** an **immortal-shot-sink** — `int amount = (int)YieldPerHit` truncates a sub-1.0 per-hit value to 0, so the + projectile is consumed, nothing deposits, and the target never depletes; reachable only because + `BlightClutterAuthoring.ScrapPerHit` was `[Min(0f)]` (the node sibling is `[Min(1f)]`). Hardened with `[Min(1f)]` + + `math.max(1, (int)…)` in the system. Plus a low **same-tick-cleared passthrough** — a 2nd projectile whose only target + a sibling already cleared this tick now still consumes (an `overlappedCleared` branch) so "a hit always spends the + shot." Both regression-tested. The 19 refuted were correct-by-design (the `ghostId==0` relevancy skip, Temp-ECB + no-dispose matching sibling spawn systems, the proximity gate vs. atomic-teleport transit, observe-only audit). +- **No new asmdefs.** New code under `…/Economy/` (`BlightClutter`, `ClutterFieldSpawner` + authorings), `…/Building/` + (`StructureType.Wall/Pylon`, `StructureAuthoring`, catalog rows), `…/Client/Presentation/` (`WorldFeedbackSystem`, + `WorldFeelConfig`), `…/Client/Building/` (BuildSendSystem keys). New assets: `BlightClutter`/`Wall`/`Pylon` prefabs, + `M_Aether_Wild`/`M_Aether_Ordered` materials, `Gameplay.unity` (clutter spawner + catalog rows), `Game.unity` + (BlightfieldDecor). Reuses the runtime-ghost recipe / region split / GhostRelevancy / swept-hit / RPC-build / + StatModifier-free-economy patterns verbatim. Orthogonal to + additive over M8; does not touch the M7 automation slots. + +## Open / deferred (defaulted, tunable) + +- **Base-side cohesion**: this layer dressed the Blightfield (the barren gap); the cyan-ordered base still reads via the + existing city props + the new cyan-recoloured Wall/Pylon. A deliberate base accent (cyan lights, perimeter relief, + re-enabled tiled ground) was deferred to avoid clashing with the tuned SSAO/ACES look. +- **Clearing as a spatial mechanic**: shipped as juice + scrap only (no gating); making cleared cells buildable or + reveal hidden nodes (the "functional gating" fork) is a follow-up. +- **More buildables / build-palette HUD**: dedicated V/N keys for now (matches the B/U idiom); a selectable build palette + + ghost-preview is polish. +- **Clutter visual variety**: `Variant` is replicated + round-robined but the prefab is single-mesh; per-variant meshes + are a follow-up (additive, no schema change). +- **Focused-editor Play confirmed (2026-06-04, same day):** the Wall **stops the player CC dead at the collider face** + (drove +X, X 2.50→**3.257**, server==client, no tunnel); the **Blightfield reads as an orange-wild rock basin** vs the + cyan base (real player-view game-camera screenshots); the **clutter-clear loop works end-to-end** (BIO 0→6→10, clutter + 14→13 shatter replicated to the client); node harvest AETHER 0→30 (R2 clear on the re-edited system). Console clean. + Remaining is only **feel-tuning** (basin density/lighting) + the base-side accents — not correctness. + +## Build gotchas recorded this session + +- **A unified sweep is REQUIRED, not optional, when two target types share one projectile pass** — separate sweep + systems each `DestroyEntity` an overlapping projectile → double-destroy at ECB playback. One best-target loop over the + combined set + a shared destroyed-bitset is the correct shape. +- **Float per-hit yield truncated to an int that ALSO gates despawn is an immortal-sink footgun**: a sub-1.0 value → + `(int)`=0 → no deposit AND no decrement, yet the projectile is still consumed. Guard with `[Min(1f)]` on the authoring + AND `math.max(1, (int)…)` in the consumer (the node path was already `[Min(1f)]`; the new clutter path wasn't). +- **Unfocused-editor Play validation is feasible via `execute_code` world-introspection** even when the Play transition + stalls: identify worlds by `world.Name`, query/instantiate/mutate via the live `EntityManager`, drive client editor + hooks (`BuildSendSystem.PlaceWall`) + deposit into the ledger to exercise end-to-end paths, and read errors-only from + the console (the tick-batching warning spam is benign). Keep the session short (unfocused can dispose netcode worlds). +- **Editing a Bursted ISystem's BODY (not its query set) is low R2 risk** — the stale-binary hazard is tied to query-set + changes on an unfocused editor; a `math.max`/loop-reorder edit that leaves the SystemAPI query set unchanged is safe. +- **`manage_prefabs modify_contents component_properties` sets a `byte` field fine** (verified Pylon.Kind=6) — the + silent-drop gotcha is enum/Vector3, not byte. Still verify via `execute_code`. + +Builds on + reuses [[DR-013_M6_Aether_Cycle_Region_Split]] (region split, GhostRelevancy, swept-hit, runtime-ghost), +[[DR-014_M6_Build_Structures_Automation_Foundation]] (build pipeline, structure ghost, frozen grid/schema), +[[DR-015_The_Awakening_Engine_Fiction_Adoption]] (Aether palette), and the client-presentation pattern from +[[DR-009_GameFeel_Identity_FirstBlood]]. Serves the cohesive-world + persistent-base pillars in [[Pillars]].