diff --git a/Content.IntegrationTests/Tests/Construction/RCDTest.cs b/Content.IntegrationTests/Tests/Construction/RCDTest.cs index 770f004517..814f7e89aa 100644 --- a/Content.IntegrationTests/Tests/Construction/RCDTest.cs +++ b/Content.IntegrationTests/Tests/Construction/RCDTest.cs @@ -38,9 +38,9 @@ public sealed class RCDTest : InteractionTest pEast = Transform.WithEntityId(pEast, MapData.Grid); pWest = Transform.WithEntityId(pWest, MapData.Grid); - await SetTile(PlatingRCD, SEntMan.GetNetCoordinates(pNorth), MapData.Grid); - await SetTile(PlatingRCD, SEntMan.GetNetCoordinates(pSouth), MapData.Grid); - await SetTile(PlatingRCD, SEntMan.GetNetCoordinates(pEast), MapData.Grid); + await SetTile(Plating, SEntMan.GetNetCoordinates(pNorth), MapData.Grid); + await SetTile(Plating, SEntMan.GetNetCoordinates(pSouth), MapData.Grid); + await SetTile(Plating, SEntMan.GetNetCoordinates(pEast), MapData.Grid); await SetTile(Lattice, SEntMan.GetNetCoordinates(pWest), MapData.Grid); Assert.That(ProtoMan.TryIndex(RCDSettingWall, out var settingWall), $"RCDPrototype not found: {RCDSettingWall}."); @@ -194,7 +194,7 @@ public sealed class RCDTest : InteractionTest // Deconstruct the steel tile. await Interact(null, pEast); await RunSeconds(settingDeconstructTile.Delay + 1); // wait for the deconstruction to finish - await AssertTile(PlatingRCD, FromServer(pEast)); + await AssertTile(Lattice, FromServer(pEast)); // Check that the cost of the deconstruction was subtracted from the current charges. newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs index 1aac18f3a4..8917ba7ead 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Constants.cs @@ -11,9 +11,7 @@ public abstract partial class InteractionTest protected const string Floor = "FloorSteel"; protected const string FloorItem = "FloorTileItemSteel"; protected const string Plating = "Plating"; - protected const string PlatingRCD = "PlatingRCD"; protected const string Lattice = "Lattice"; - protected const string PlatingBrass = "PlatingBrass"; // Structures protected const string Airlock = "Airlock"; diff --git a/Content.IntegrationTests/Tests/Tiles/TileConstructionTests.cs b/Content.IntegrationTests/Tests/Tiles/TileConstructionTests.cs index 64c4c291fe..0827e11b70 100644 --- a/Content.IntegrationTests/Tests/Tiles/TileConstructionTests.cs +++ b/Content.IntegrationTests/Tests/Tiles/TileConstructionTests.cs @@ -100,25 +100,4 @@ public sealed class TileConstructionTests : InteractionTest await AssertEntityLookup((FloorItem, 1)); } - - /// - /// Test brassPlating -> floor -> brassPlating using tilestacking - /// - [Test] - public async Task BrassPlatingPlace() - { - await SetTile(PlatingBrass); - - // Brass Plating -> Tile - await InteractUsing(FloorItem); - Assert.That(HandSys.GetActiveItem((SEntMan.GetEntity(Player), Hands)), Is.Null); - await AssertTile(Floor); - AssertGridCount(1); - - // Tile -> Brass Plating - await InteractUsing(Pry); - await AssertTile(PlatingBrass); - AssertGridCount(1); - await AssertEntityLookup((FloorItem, 1)); - } } diff --git a/Content.IntegrationTests/Tests/Tiles/TileStackRecursionTest.cs b/Content.IntegrationTests/Tests/Tiles/TileStackRecursionTest.cs deleted file mode 100644 index 52c5b03265..0000000000 --- a/Content.IntegrationTests/Tests/Tiles/TileStackRecursionTest.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Content.Shared.CCVar; -using Content.Shared.Maps; -using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; - -namespace Content.IntegrationTests.Tests.Tiles; - -public sealed class TileStackRecursionTest -{ - [Test] - public async Task TestBaseTurfRecursion() - { - await using var pair = await PoolManager.GetServerClient(); - var protoMan = pair.Server.ResolveDependency(); - var cfg = pair.Server.ResolveDependency(); - var maxTileHistoryLength = cfg.GetCVar(CCVars.TileStackLimit); - Assert.That(protoMan.TryGetInstances(out var tiles)); - Assert.That(tiles, Is.Not.EqualTo(null)); - //store the distance from the root node to the given tile node - var nodes = new List<(ProtoId, int)>(); - //each element of list is a connection from BaseTurf tile to tile that goes on it - var edges = new List<(ProtoId, ProtoId)>(); - foreach (var ctdef in tiles!.Values) - { - //at first, each node is unexplored and has infinite distance to root. - //we use space node as root - everything is supposed to start at space, and it's hardcoded into the game anyway. - if (ctdef.ID == ContentTileDefinition.SpaceID) - { - nodes.Insert(0, (ctdef.ID, 0)); //space is the first element - continue; - } - Assert.That(ctdef.BaseTurf != ctdef.ID); - nodes.Add((ctdef.ID, int.MaxValue)); - if (ctdef.BaseTurf != null) - edges.Add((ctdef.BaseTurf.Value, ctdef.ID)); - Assert.That(ctdef.BaseWhitelist, Does.Not.Contain(ctdef.ID)); - edges.AddRange(ctdef.BaseWhitelist.Select(possibleTurf => - (possibleTurf, new ProtoId(ctdef.ID)))); - } - Bfs(nodes, edges, maxTileHistoryLength); - await pair.CleanReturnAsync(); - } - - private void Bfs(List<(ProtoId, int)> nodes, List<(ProtoId, ProtoId)> edges, int depthLimit) - { - var root = nodes[0]; - var queue = new Queue<(ProtoId, int)>(); - queue.Enqueue(root); - while (queue.Count != 0) - { - var u = queue.Dequeue(); - //get a list of tiles that can be put on this tile - var adj = edges.Where(n => n.Item1 == u.Item1).Select(n => n.Item2); - var adjNodes = nodes.Where(n => adj.Contains(n.Item1)).ToList(); - foreach (var node in adjNodes) - { - var adjNode = node; - adjNode.Item2 = u.Item2 + 1; - Assert.That(adjNode.Item2, Is.LessThanOrEqualTo(depthLimit)); //we can doomstack tiles on top of each other. Bad! - queue.Enqueue(adjNode); - } - } - } -} diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs index 37045097f3..2cec8d707a 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs @@ -517,39 +517,17 @@ public sealed partial class ExplosionSystem else if (tileDef.MapAtmosphere) canCreateVacuum = true; // is already a vacuum. - var history = CompOrNull(tileRef.GridUid); - - // break the tile into its underlying parts int tileBreakages = 0; while (maxTileBreak > tileBreakages && _robustRandom.Prob(type.TileBreakChance(effectiveIntensity))) { tileBreakages++; effectiveIntensity -= type.TileBreakRerollReduction; - ContentTileDefinition? newDef = null; + // does this have a base-turf that we can break it down to? + if (string.IsNullOrEmpty(tileDef.BaseTurf)) + break; - // if we have tile history, we revert the tile to its previous state - var chunkIndices = SharedMapSystem.GetChunkIndices(tileRef.GridIndices, TileSystem.ChunkSize); - if (history != null && history.ChunkHistory.TryGetValue(chunkIndices, out var chunk) && - chunk.History.TryGetValue(tileRef.GridIndices, out var stack) && stack.Count > 0) - { - // last entry in the stack - var newId = stack[^1]; - stack.RemoveAt(stack.Count - 1); - if (stack.Count == 0) - chunk.History.Remove(tileRef.GridIndices); - - Dirty(tileRef.GridUid, history); - - newDef = (ContentTileDefinition) _tileDefinitionManager[newId.Id]; - } - else if (tileDef.BaseTurf.HasValue) - { - // otherwise, we just use the base turf - newDef = (ContentTileDefinition) _tileDefinitionManager[tileDef.BaseTurf.Value]; - } - - if (newDef == null) + if (_tileDefinitionManager[tileDef.BaseTurf] is not ContentTileDefinition newDef) break; if (newDef.MapAtmosphere && !canCreateVacuum) diff --git a/Content.Server/Maps/TileGridSplitSystem.cs b/Content.Server/Maps/TileGridSplitSystem.cs deleted file mode 100644 index fef0efed2b..0000000000 --- a/Content.Server/Maps/TileGridSplitSystem.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Numerics; -using Content.Shared.Maps; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; - -namespace Content.Server.Maps; - -/// -/// This system handles transferring data when a grid is split. -/// -public sealed class TileGridSplitSystem : EntitySystem -{ - [Dependency] private readonly SharedMapSystem _maps = default!; - [Dependency] private readonly IGameTiming _timing = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnGridSplit); - } - - /// - /// Transfer tile history from the old grid to the new grids. - /// - private void OnGridSplit(ref GridSplitEvent ev) - { - if (!TryComp(ev.Grid, out var oldHistory)) - return; - - var oldGrid = Comp(ev.Grid); - - foreach (var gridUid in ev.NewGrids) - { - // ensure the new grid has a history component and get its grid component - var newHistory = EnsureComp(gridUid); - var newGrid = Comp(gridUid); - - foreach (var tile in _maps.GetAllTiles(gridUid, newGrid)) - { - // calculate where this tile was on the old grid - var oldIndices = _maps.LocalToTile(ev.Grid, oldGrid, new EntityCoordinates(gridUid, new Vector2(tile.GridIndices.X + 0.5f, tile.GridIndices.Y + 0.5f))); - - var chunkIndices = SharedMapSystem.GetChunkIndices(oldIndices, TileSystem.ChunkSize); - if (oldHistory.ChunkHistory.TryGetValue(chunkIndices, out var oldChunk) && - oldChunk.History.TryGetValue(oldIndices, out var history)) - { - // now we move the history from the old grid to the new grid - var newChunkIndices = SharedMapSystem.GetChunkIndices(tile.GridIndices, TileSystem.ChunkSize); - if (!newHistory.ChunkHistory.TryGetValue(newChunkIndices, out var newChunk)) - { - newChunk = new TileHistoryChunk(); - newHistory.ChunkHistory[newChunkIndices] = newChunk; - } - - newChunk.History[tile.GridIndices] = new List>(history); - newChunk.LastModified = _timing.CurTick; - - // clean up the old history - oldChunk.History.Remove(oldIndices); - if (oldChunk.History.Count == 0) - oldHistory.ChunkHistory.Remove(chunkIndices); - else - oldChunk.LastModified = _timing.CurTick; - } - } - - Dirty(gridUid, newHistory); - } - - Dirty(ev.Grid, oldHistory); - } -} diff --git a/Content.Shared/CCVar/CCVars.Game.cs b/Content.Shared/CCVar/CCVars.Game.cs index 03cf6a673a..68342733f8 100644 --- a/Content.Shared/CCVar/CCVars.Game.cs +++ b/Content.Shared/CCVar/CCVars.Game.cs @@ -409,13 +409,4 @@ public sealed partial class CCVars /// public static readonly CVarDef GameHostnameInTitlebar = CVarDef.Create("game.hostname_in_titlebar", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// The maximum amount of tiles you can stack on top of each other. 0 is unlimited. - /// - /// - /// Having it too high can result in "doomstacking" tiles - this messes with efficiency of explosions, deconstruction of tiles, and might result in memory problems. - /// - public static readonly CVarDef TileStackLimit = - CVarDef.Create("game.tile_stack_limit", 5, CVar.SERVER | CVar.REPLICATED); } diff --git a/Content.Shared/Maps/ContentTileDefinition.cs b/Content.Shared/Maps/ContentTileDefinition.cs index 672eb95911..46ce7a212e 100644 --- a/Content.Shared/Maps/ContentTileDefinition.cs +++ b/Content.Shared/Maps/ContentTileDefinition.cs @@ -8,7 +8,6 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; using Robust.Shared.Utility; namespace Content.Shared.Maps @@ -42,13 +41,7 @@ namespace Content.Shared.Maps [DataField("isSubfloor")] public bool IsSubFloor { get; private set; } [DataField("baseTurf")] - public ProtoId? BaseTurf { get; private set; } - - /// - /// On what tiles this tile can be placed on. BaseTurf is already included. - /// - [DataField] - public List> BaseWhitelist { get; private set; } = new(); + public string BaseTurf { get; private set; } = string.Empty; [DataField] public PrototypeFlags DeconstructTools { get; set; } = new(); diff --git a/Content.Shared/Maps/TileHistoryComponent.cs b/Content.Shared/Maps/TileHistoryComponent.cs deleted file mode 100644 index 0e02d60984..0000000000 --- a/Content.Shared/Maps/TileHistoryComponent.cs +++ /dev/null @@ -1,125 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using Robust.Shared.Timing; - -namespace Content.Shared.Maps; - -[RegisterComponent, NetworkedComponent] -public sealed partial class TileHistoryComponent : Component -{ - // History of tiles for each grid chunk. - [DataField] - public Dictionary ChunkHistory = new(); - - /// - /// Tick at which PVS was last toggled. Ensures that all players receive a full update when toggling PVS. - /// - public GameTick ForceTick { get; set; } -} - -[Serializable, NetSerializable] -public sealed class TileHistoryState : ComponentState -{ - public Dictionary ChunkHistory; - - public TileHistoryState(Dictionary chunkHistory) - { - ChunkHistory = chunkHistory; - } -} - -[Serializable, NetSerializable] -public sealed class TileHistoryDeltaState : ComponentState, IComponentDeltaState -{ - public Dictionary ChunkHistory; - public HashSet AllHistoryChunks; - - public TileHistoryDeltaState(Dictionary chunkHistory, HashSet allHistoryChunks) - { - ChunkHistory = chunkHistory; - AllHistoryChunks = allHistoryChunks; - } - - public void ApplyToFullState(TileHistoryState state) - { - var toRemove = new List(); - foreach (var key in state.ChunkHistory.Keys) - { - if (!AllHistoryChunks.Contains(key)) - toRemove.Add(key); - } - - foreach (var key in toRemove) - { - state.ChunkHistory.Remove(key); - } - - foreach (var (indices, chunk) in ChunkHistory) - { - state.ChunkHistory[indices] = new TileHistoryChunk(chunk); - } - } - - public void ApplyToComponent(TileHistoryComponent component) - { - var toRemove = new List(); - foreach (var key in component.ChunkHistory.Keys) - { - if (!AllHistoryChunks.Contains(key)) - toRemove.Add(key); - } - - foreach (var key in toRemove) - { - component.ChunkHistory.Remove(key); - } - - foreach (var (indices, chunk) in ChunkHistory) - { - component.ChunkHistory[indices] = new TileHistoryChunk(chunk); - } - } - - public TileHistoryState CreateNewFullState(TileHistoryState state) - { - var chunks = new Dictionary(state.ChunkHistory.Count); - - foreach (var (indices, chunk) in ChunkHistory) - { - chunks[indices] = new TileHistoryChunk(chunk); - } - - foreach (var (indices, chunk) in state.ChunkHistory) - { - if (AllHistoryChunks.Contains(indices)) - chunks.TryAdd(indices, new TileHistoryChunk(chunk)); - } - - return new TileHistoryState(chunks); - } -} - -[DataDefinition, Serializable, NetSerializable] -public sealed partial class TileHistoryChunk -{ - [DataField] - public Dictionary>> History = new(); - - [ViewVariables] - public GameTick LastModified; - - public TileHistoryChunk() - { - } - - public TileHistoryChunk(TileHistoryChunk other) - { - History = new Dictionary>>(other.History.Count); - foreach (var (key, value) in other.History) - { - History[key] = new List>(value); - } - LastModified = other.LastModified; - } -} diff --git a/Content.Shared/Maps/TileSystem.cs b/Content.Shared/Maps/TileSystem.cs index 908507e54d..d87b3ca50d 100644 --- a/Content.Shared/Maps/TileSystem.cs +++ b/Content.Shared/Maps/TileSystem.cs @@ -1,16 +1,10 @@ using System.Linq; using System.Numerics; -using Content.Shared.CCVar; using Content.Shared.Coordinates.Helpers; using Content.Shared.Decals; -using Content.Shared.Tiles; -using Robust.Shared.Configuration; -using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Map.Components; -using Robust.Shared.Prototypes; using Robust.Shared.Random; -using Robust.Shared.Timing; using Robust.Shared.Utility; namespace Content.Shared.Maps; @@ -20,85 +14,12 @@ namespace Content.Shared.Maps; /// public sealed class TileSystem : EntitySystem { - [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; [Dependency] private readonly SharedDecalSystem _decal = default!; [Dependency] private readonly SharedMapSystem _maps = default!; [Dependency] private readonly TurfSystem _turf = default!; - [Dependency] private readonly IGameTiming _timing = default!; - - public const int ChunkSize = 16; - - private int _tileStackLimit; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnGridStartup); - SubscribeLocalEvent(OnGetState); - SubscribeLocalEvent(OnHandleState); - SubscribeLocalEvent(OnFloorTileAttempt); - - _cfg.OnValueChanged(CCVars.TileStackLimit, t => _tileStackLimit = t, true); - } - - private void OnHandleState(EntityUid uid, TileHistoryComponent component, ref ComponentHandleState args) - { - if (args.Current is not TileHistoryState state && args.Current is not TileHistoryDeltaState) - return; - - if (args.Current is TileHistoryState fullState) - { - component.ChunkHistory.Clear(); - foreach (var (key, value) in fullState.ChunkHistory) - { - component.ChunkHistory[key] = new TileHistoryChunk(value); - } - - return; - } - - if (args.Current is TileHistoryDeltaState deltaState) - { - deltaState.ApplyToComponent(component); - } - } - - private void OnGetState(EntityUid uid, TileHistoryComponent component, ref ComponentGetState args) - { - if (args.FromTick <= component.CreationTick || args.FromTick <= component.ForceTick) - { - var fullHistory = new Dictionary(component.ChunkHistory.Count); - foreach (var (key, value) in component.ChunkHistory) - { - fullHistory[key] = new TileHistoryChunk(value); - } - args.State = new TileHistoryState(fullHistory); - return; - } - - var data = new Dictionary(); - foreach (var (index, chunk) in component.ChunkHistory) - { - if (chunk.LastModified >= args.FromTick) - data[index] = new TileHistoryChunk(chunk); - } - - args.State = new TileHistoryDeltaState(data, new(component.ChunkHistory.Keys)); - } - - /// - /// On grid startup, ensure that we have Tile History. - /// - private void OnGridStartup(GridInitializeEvent ev) - { - if (HasComp(ev.EntityUid)) - return; - - EnsureComp(ev.EntityUid); - } /// /// Returns a weighted pick of a tile variant. @@ -164,7 +85,7 @@ public sealed class TileSystem : EntitySystem return PryTile(tileRef); } - public bool PryTile(TileRef tileRef) + public bool PryTile(TileRef tileRef) { return PryTile(tileRef, false); } @@ -176,7 +97,7 @@ public sealed class TileSystem : EntitySystem if (tile.IsEmpty) return false; - var tileDef = (ContentTileDefinition)_tileDefinitionManager[tile.TypeId]; + var tileDef = (ContentTileDefinition) _tileDefinitionManager[tile.TypeId]; if (!tileDef.CanCrowbar) return false; @@ -191,73 +112,33 @@ public sealed class TileSystem : EntitySystem return ReplaceTile(tileref, replacementTile, tileref.GridUid, grid); } - public bool ReplaceTile(TileRef tileref, ContentTileDefinition replacementTile, EntityUid grid, MapGridComponent? component = null, byte? variant = null) + public bool ReplaceTile(TileRef tileref, ContentTileDefinition replacementTile, EntityUid grid, MapGridComponent? component = null) { DebugTools.Assert(tileref.GridUid == grid); if (!Resolve(grid, ref component)) return false; - var key = tileref.GridIndices; - var currentTileDef = (ContentTileDefinition) _tileDefinitionManager[tileref.Tile.TypeId]; - // If the tile we're placing has a baseTurf that matches the tile we're replacing, we don't need to create a history - // unless the tile already has a history. - var history = EnsureComp(grid); - var chunkIndices = SharedMapSystem.GetChunkIndices(key, ChunkSize); - history.ChunkHistory.TryGetValue(chunkIndices, out var chunk); - var historyExists = chunk != null && chunk.History.ContainsKey(key); - - if (replacementTile.BaseTurf != currentTileDef.ID || historyExists) - { - if (chunk == null) - { - chunk = new TileHistoryChunk(); - history.ChunkHistory[chunkIndices] = chunk; - } - - chunk.LastModified = _timing.CurTick; - Dirty(grid, history); - - //Create stack if needed - if (!chunk.History.TryGetValue(key, out var stack)) - { - stack = new List>(); - chunk.History[key] = stack; - } - - //Prevent the doomstack - if (stack.Count >= _tileStackLimit && _tileStackLimit != 0) - return false; - - //Push current tile to the stack, if not empty - if (!tileref.Tile.IsEmpty) - { - stack.Add(currentTileDef.ID); - } - } - - variant ??= PickVariant(replacementTile); + var variant = PickVariant(replacementTile); var decals = _decal.GetDecalsInRange(tileref.GridUid, _turf.GetTileCenter(tileref).Position, 0.5f); foreach (var (id, _) in decals) { _decal.RemoveDecal(tileref.GridUid, id); } - _maps.SetTile(grid, component, tileref.GridIndices, new Tile(replacementTile.TileId, 0, variant.Value)); + _maps.SetTile(grid, component, tileref.GridIndices, new Tile(replacementTile.TileId, 0, variant)); return true; } - - public bool DeconstructTile(TileRef tileRef, bool spawnItem = true) + public bool DeconstructTile(TileRef tileRef) { if (tileRef.Tile.IsEmpty) return false; - var tileDef = (ContentTileDefinition)_tileDefinitionManager[tileRef.Tile.TypeId]; + var tileDef = (ContentTileDefinition) _tileDefinitionManager[tileRef.Tile.TypeId]; - //Can't deconstruct anything that doesn't have a base turf. - if (tileDef.BaseTurf == null) + if (string.IsNullOrEmpty(tileDef.BaseTurf)) return false; var gridUid = tileRef.GridUid; @@ -271,68 +152,20 @@ public sealed class TileSystem : EntitySystem (_robustRandom.NextFloat() - 0.5f) * bounds, (_robustRandom.NextFloat() - 0.5f) * bounds)); - var historyComp = EnsureComp(gridUid); - ProtoId previousTileId; + //Actually spawn the relevant tile item at the right position and give it some random offset. + var tileItem = Spawn(tileDef.ItemDropPrototypeName, coordinates); + Transform(tileItem).LocalRotation = _robustRandom.NextDouble() * Math.Tau; - var chunkIndices = SharedMapSystem.GetChunkIndices(indices, ChunkSize); - - //Pop from stack if we have history - if (historyComp.ChunkHistory.TryGetValue(chunkIndices, out var chunk) && - chunk.History.TryGetValue(indices, out var stack) && stack.Count > 0) - { - chunk.LastModified = _timing.CurTick; - Dirty(gridUid, historyComp); - - previousTileId = stack.Last(); - stack.RemoveAt(stack.Count - 1); - - //Clean up empty stacks to avoid memory buildup - if (stack.Count == 0) - { - chunk.History.Remove(indices); - } - - // Clean up empty chunks - if (chunk.History.Count == 0) - { - historyComp.ChunkHistory.Remove(chunkIndices); - } - } - else - { - //No stack? Assume BaseTurf was the layer below - previousTileId = tileDef.BaseTurf.Value; - } - - if (spawnItem) - { - //Actually spawn the relevant tile item at the right position and give it some random offset. - var tileItem = Spawn(tileDef.ItemDropPrototypeName, coordinates); - Transform(tileItem).LocalRotation = _robustRandom.NextDouble() * Math.Tau; - } - - //Destroy any decals on the tile + // Destroy any decals on the tile var decals = _decal.GetDecalsInRange(gridUid, coordinates.SnapToGrid(EntityManager, _mapManager).Position, 0.5f); foreach (var (id, _) in decals) { _decal.RemoveDecal(tileRef.GridUid, id); } - //Replace tile with the one it was placed on - var previousDef = (ContentTileDefinition)_tileDefinitionManager[previousTileId]; - _maps.SetTile(gridUid, mapGrid, indices, new Tile(previousDef.TileId)); + var plating = _tileDefinitionManager[tileDef.BaseTurf]; + _maps.SetTile(gridUid, mapGrid, tileRef.GridIndices, new Tile(plating.TileId)); return true; } - - private void OnFloorTileAttempt(Entity ent, ref FloorTileAttemptEvent args) - { - if (_tileStackLimit == 0) - return; - var chunkIndices = SharedMapSystem.GetChunkIndices(args.GridIndices, ChunkSize); - if (!ent.Comp.ChunkHistory.TryGetValue(chunkIndices, out var chunk) || - !chunk.History.TryGetValue(args.GridIndices, out var stack)) - return; - args.Cancelled = stack.Count >= _tileStackLimit; // greater or equals because the attempt itself counts as a tile we're trying to place - } } diff --git a/Content.Shared/RCD/RCDPrototype.cs b/Content.Shared/RCD/RCDPrototype.cs index c4ac7148f7..2be5e1c776 100644 --- a/Content.Shared/RCD/RCDPrototype.cs +++ b/Content.Shared/RCD/RCDPrototype.cs @@ -44,12 +44,6 @@ public sealed partial class RCDPrototype : IPrototype [DataField, ViewVariables(VVAccess.ReadOnly)] public string? Prototype { get; private set; } - /// - /// If true, allows placing the entity once per direction (North, West, South and East) - /// - [DataField, ViewVariables(VVAccess.ReadOnly)] - public bool AllowMultiDirection { get; private set; } - /// /// Number of charges consumed when the operation is completed /// diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index 2f1f058a1b..504576216a 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -38,7 +38,6 @@ public sealed class RCDSystem : EntitySystem [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly TurfSystem _turf = default!; - [Dependency] private readonly TileSystem _tile = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly SharedMapSystem _mapSystem = default!; @@ -146,7 +145,7 @@ public sealed class RCDSystem : EntitySystem var tile = _mapSystem.GetTileRef(gridUid.Value, mapGrid, location); var position = _mapSystem.TileIndicesFor(gridUid.Value, mapGrid, location); - if (!IsRCDOperationStillValid(uid, component, gridUid.Value, mapGrid, tile, position, component.ConstructionDirection, args.Target, args.User)) + if (!IsRCDOperationStillValid(uid, component, gridUid.Value, mapGrid, tile, position, args.Target, args.User)) return; if (!_net.IsServer) @@ -254,7 +253,7 @@ public sealed class RCDSystem : EntitySystem var tile = _mapSystem.GetTileRef(gridUid.Value, mapGrid, location); var position = _mapSystem.TileIndicesFor(gridUid.Value, mapGrid, location); - if (!IsRCDOperationStillValid(uid, component, gridUid.Value, mapGrid, tile, position, args.Event.Direction, args.Event.Target, args.Event.User)) + if (!IsRCDOperationStillValid(uid, component, gridUid.Value, mapGrid, tile, position, args.Event.Target, args.Event.User)) args.Cancel(); } @@ -284,7 +283,7 @@ public sealed class RCDSystem : EntitySystem var position = _mapSystem.TileIndicesFor(gridUid.Value, mapGrid, location); // Ensure the RCD operation is still valid - if (!IsRCDOperationStillValid(uid, component, gridUid.Value, mapGrid, tile, position, args.Direction, args.Target, args.User)) + if (!IsRCDOperationStillValid(uid, component, gridUid.Value, mapGrid, tile, position, args.Target, args.User)) return; // Finalize the operation (this should handle prediction properly) @@ -319,11 +318,6 @@ public sealed class RCDSystem : EntitySystem #region Entity construction/deconstruction rule checks public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, EntityUid gridUid, MapGridComponent mapGrid, TileRef tile, Vector2i position, EntityUid? target, EntityUid user, bool popMsgs = true) - { - return IsRCDOperationStillValid(uid, component, gridUid, mapGrid, tile, position, component.ConstructionDirection, target, user, popMsgs); - } - - public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, EntityUid gridUid, MapGridComponent mapGrid, TileRef tile, Vector2i position, Direction direction, EntityUid? target, EntityUid user, bool popMsgs = true) { var prototype = _protoManager.Index(component.ProtoId); @@ -360,7 +354,7 @@ public sealed class RCDSystem : EntitySystem { case RcdMode.ConstructTile: case RcdMode.ConstructObject: - return IsConstructionLocationValid(uid, component, gridUid, mapGrid, tile, position, direction, user, popMsgs); + return IsConstructionLocationValid(uid, component, gridUid, mapGrid, tile, position, user, popMsgs); case RcdMode.Deconstruct: return IsDeconstructionStillValid(uid, tile, target, user, popMsgs); } @@ -368,7 +362,7 @@ public sealed class RCDSystem : EntitySystem return false; } - private bool IsConstructionLocationValid(EntityUid uid, RCDComponent component, EntityUid gridUid, MapGridComponent mapGrid, TileRef tile, Vector2i position, Direction direction, EntityUid user, bool popMsgs = true) + private bool IsConstructionLocationValid(EntityUid uid, RCDComponent component, EntityUid gridUid, MapGridComponent mapGrid, TileRef tile, Vector2i position, EntityUid user, bool popMsgs = true) { var prototype = _protoManager.Index(component.ProtoId); @@ -411,24 +405,8 @@ public sealed class RCDSystem : EntitySystem return false; } - var tileDef = _turf.GetContentTileDefinition(tile); - - // Check rule: Respect baseTurf and baseWhitelist - if (prototype.Prototype != null && _tileDefMan.TryGetDefinition(prototype.Prototype, out var replacementDef)) - { - var replacementContentDef = (ContentTileDefinition) replacementDef; - - if (replacementContentDef.BaseTurf != tileDef.ID && !replacementContentDef.BaseWhitelist.Contains(tileDef.ID)) - { - if (popMsgs) - _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-on-empty-tile-message"), uid, user); - - return false; - } - } - // Check rule: Tiles can't be identical - if (tileDef.ID == prototype.Prototype) + if (_turf.GetContentTileDefinition(tile).ID == prototype.Prototype) { if (popMsgs) _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-identical-tile"), uid, user); @@ -451,28 +429,6 @@ public sealed class RCDSystem : EntitySystem foreach (var ent in _intersectingEntities) { - // If the entity is the exact same prototype as what we are trying to build, then block it. - // This is to prevent spamming objects on the same tile (e.g. lights) - if (prototype.Prototype != null && MetaData(ent).EntityPrototype?.ID == prototype.Prototype) - { - var isIdentical = true; - - if (prototype.AllowMultiDirection) - { - var entDirection = Transform(ent).LocalRotation.GetCardinalDir(); - if (entDirection != direction) - isIdentical = false; - } - - if (isIdentical) - { - if (popMsgs) - _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-identical-entity"), uid, user); - - return false; - } - } - if (isWindow && HasComp(ent)) continue; @@ -577,10 +533,7 @@ public sealed class RCDSystem : EntitySystem switch (prototype.Mode) { case RcdMode.ConstructTile: - if (!_tileDefMan.TryGetDefinition(prototype.Prototype, out var tileDef)) - return; - - _tile.ReplaceTile(tile, (ContentTileDefinition) tileDef, gridUid, mapGrid); + _mapSystem.SetTile(gridUid, mapGrid, position, new Tile(_tileDefMan[prototype.Prototype].TileId)); _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to set grid: {gridUid} {position} to {prototype.Prototype}"); break; @@ -607,9 +560,10 @@ public sealed class RCDSystem : EntitySystem if (target == null) { - // Deconstruct tile, don't drop tile as item - if (_tile.DeconstructTile(tile, spawnItem: false)) - _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to set grid: {gridUid} tile: {position} open to space"); + // Deconstruct tile (either converts the tile to lattice, or removes lattice) + var tileDef = (_turf.GetContentTileDefinition(tile).ID != "Lattice") ? new Tile(_tileDefMan["Lattice"].TileId) : Tile.Empty; + _mapSystem.SetTile(gridUid, mapGrid, position, tileDef); + _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to set grid: {gridUid} tile: {position} open to space"); } else { diff --git a/Content.Shared/Tiles/FloorTileSystem.cs b/Content.Shared/Tiles/FloorTileSystem.cs index a2743ca6ca..2c6df5ce89 100644 --- a/Content.Shared/Tiles/FloorTileSystem.cs +++ b/Content.Shared/Tiles/FloorTileSystem.cs @@ -16,7 +16,6 @@ using Robust.Shared.Network; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; -using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Shared.Tiles; @@ -143,7 +142,7 @@ public sealed class FloorTileSystem : EntitySystem var baseTurf = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId]; - if (CanPlaceOn(currentTileDefinition, baseTurf.ID)) + if (HasBaseTurf(currentTileDefinition, baseTurf.ID)) { if (!_stackSystem.TryUse((uid, stack), 1)) continue; @@ -153,7 +152,7 @@ public sealed class FloorTileSystem : EntitySystem return; } } - else if (HasBaseTurf(currentTileDefinition, new ProtoId(ContentTileDefinition.SpaceID))) + else if (HasBaseTurf(currentTileDefinition, ContentTileDefinition.SpaceID)) { if (!_stackSystem.TryUse((uid, stack), 1)) continue; @@ -172,35 +171,19 @@ public sealed class FloorTileSystem : EntitySystem } } - public bool HasBaseTurf(ContentTileDefinition tileDef, ProtoId baseTurf) + public bool HasBaseTurf(ContentTileDefinition tileDef, string baseTurf) { return tileDef.BaseTurf == baseTurf; } - private bool CanPlaceOn(ContentTileDefinition tileDef, ProtoId currentTurfId) - { - //Check exact BaseTurf match - if (tileDef.BaseTurf == currentTurfId) - return true; - - // Check whitelist match - if (tileDef.BaseWhitelist.Count > 0 && tileDef.BaseWhitelist.Contains(currentTurfId)) - return true; - - return false; - } - private void PlaceAt(EntityUid user, EntityUid gridUid, MapGridComponent mapGrid, EntityCoordinates location, ushort tileId, SoundSpecifier placeSound, float offset = 0) { _adminLogger.Add(LogType.Tile, LogImpact.Low, $"{ToPrettyString(user):actor} placed tile {_tileDefinitionManager[tileId].Name} at {ToPrettyString(gridUid)} {location}"); - var tileDef = (ContentTileDefinition) _tileDefinitionManager[tileId]; - var random = new System.Random((int)_timing.CurTick.Value); - var variant = _tile.PickVariant(tileDef, random); - - var tileRef = _map.GetTileRef(gridUid, mapGrid, location.Offset(new Vector2(offset, offset))); - _tile.ReplaceTile(tileRef, tileDef, gridUid, mapGrid, variant: variant); + var random = new System.Random((int) _timing.CurTick.Value); + var variant = _tile.PickVariant((ContentTileDefinition) _tileDefinitionManager[tileId], random); + _map.SetTile(gridUid, mapGrid,location.Offset(new Vector2(offset, offset)), new Tile(tileId, 0, variant)); _audio.PlayPredicted(placeSound, location, user); } diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9f2284ad36..6671a79fa3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3684,14 +3684,6 @@ Entries: id: 9385 time: '2026-01-13T13:44:00.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/42334 -- author: Velken, Murphyneko - changes: - - message: Station tiles and floors can now be placed on planets, asteroids and - different platings. - type: Tweak - id: 9386 - time: '2026-01-13T14:05:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/38898 - author: ScarKy0 changes: - message: The throwing knives bundle now comes with 8 knives instead of 4. @@ -3797,14 +3789,6 @@ Entries: id: 9398 time: '2026-01-14T21:40:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/42289 -- author: TriviaSolari - changes: - - message: Entities that are airtight on all sides (such as full-tile walls, airlocks, - and windows) now skip rotational checks for airtightness when initialized. - type: Tweak - id: 9399 - time: '2026-01-15T02:46:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/42390 - author: ArtisticRoomba changes: - message: The TEG now produces 75% more power. This is to counteract tritium fires @@ -3867,49 +3851,3 @@ Entries: id: 9407 time: '2026-01-15T20:01:06.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/42040 -- author: Velken - changes: - - message: RCD can no longer spam lights in the same spot. - type: Fix - - message: RCD can no longer be used to destroy indestructible tiles. - type: Fix - id: 9408 - time: '2026-01-15T20:39:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/42432 -- author: B_Kirill - changes: - - message: Added camera map. Cutting MAP wire hides camera from map while keeping - it accessible in camera list. - type: Add - id: 9409 - time: '2026-01-15T21:37:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/39684 -- author: ScarKy0 - changes: - - message: Added Makeshift and Regular Mortar&Pestle! It can be found in the nutrimax - and dinnerware vendors or crafted. It works slower and can only process 1 item - at a time. - type: Add - - message: Added Makeshift and Regular Handheld Juicer! It can be found in the nutrimax - and dinnerware vendors or crafted. It works slower and can only process 1 item - at a time. - type: Add - id: 9410 - time: '2026-01-16T00:35:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/42019 -- author: EmoGarbage404 - changes: - - message: Fixed flatpackers ignoring material costs for certain machine board requirements - and being able to print unlatheable items for flatpacks. - type: Fix - id: 9411 - time: '2026-01-16T00:52:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/42445 -- author: sowelipililimute - changes: - - message: Using a core pinpointer piece on another piece no longer causes you to - start an unintended construction recipe. - type: Fix - id: 9412 - time: '2026-01-16T02:09:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/42446 diff --git a/Resources/Locale/en-US/rcd/components/rcd-component.ftl b/Resources/Locale/en-US/rcd/components/rcd-component.ftl index 17fda9111e..9741bde388 100644 --- a/Resources/Locale/en-US/rcd/components/rcd-component.ftl +++ b/Resources/Locale/en-US/rcd/components/rcd-component.ftl @@ -29,7 +29,6 @@ rcd-component-must-build-on-subfloor-message = You can only build that on expose rcd-component-cannot-build-on-subfloor-message = You can't build that on exposed subfloor! rcd-component-cannot-build-on-occupied-tile-message = You can't build here, the space is already occupied! rcd-component-cannot-build-identical-tile = That tile already exists there! -rcd-component-cannot-build-identical-entity = That already exists there! ### Category names diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 8c4e437f33..a93d634e1f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -1749,6 +1749,9 @@ state: generic_panel_open # - type: Computer # board: SyndicateCommsComputerCircuitboard + - type: Anchorable + flags: + - Anchorable # No taking the console along! - type: PointLight radius: 1.5 energy: 1.6 diff --git a/Resources/Prototypes/RCD/rcd.yml b/Resources/Prototypes/RCD/rcd.yml index b173fa4157..5fb5356f91 100644 --- a/Resources/Prototypes/RCD/rcd.yml +++ b/Resources/Prototypes/RCD/rcd.yml @@ -37,7 +37,7 @@ category: WallsAndFlooring sprite: /Textures/Interface/Radial/RCD/plating.png mode: ConstructTile - prototype: PlatingRCD + prototype: Plating cost: 1 delay: 1 collisionMask: InteractImpassable @@ -128,7 +128,6 @@ - IsWindow rotation: User fx: EffectRCDConstruct1 - allowMultiDirection: true - type: rcd id: ReinforcedWindow @@ -158,7 +157,6 @@ - IsWindow rotation: User fx: EffectRCDConstruct2 - allowMultiDirection: true # Airlocks - type: rcd @@ -210,7 +208,6 @@ collisionBounds: "-0.23,-0.49,0.23,-0.36" rotation: User fx: EffectRCDConstruct1 - allowMultiDirection: true - type: rcd id: BulbLight @@ -224,7 +221,6 @@ collisionBounds: "-0.23,-0.49,0.23,-0.36" rotation: User fx: EffectRCDConstruct1 - allowMultiDirection: true # Electrical - type: rcd diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index 80163767e9..49bd367491 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1,33 +1,5 @@ -- type: tile - id: BaseStationTile - abstract: true - isSubfloor: false - deconstructTools: [ Prying ] - footstepSounds: - collection: FootstepFloor - heatCapacity: 10000 - baseTurf: Plating - baseWhitelist: - - PlatingBrass - - FloorAsteroidIronsand - - FloorAsteroidSand - - FloorAsteroidSandBorderless - - FloorAsteroidIronsandBorderless - - FloorAsteroidSandRedBorderless - - PlatingAsteroid - - PlatingSnow - - FloorPlanetDirt - - FloorDesert - - FloorLowDesert - - FloorPlanetGrass - - FloorSnow - - FloorDirt - - PlatingRCD - - FloorHullReinforced - - type: tile id: FloorSteel - parent: BaseStationTile name: tiles-steel-floor sprite: /Textures/Tiles/steel.png variants: 4 @@ -36,11 +8,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteel + heatCapacity: 10000 - type: tile id: FloorSteelCheckerLight - parent: BaseStationTile name: tiles-steel-floor-checker-light sprite: /Textures/Tiles/cafeteria.png variants: 4 @@ -49,11 +26,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteelCheckerLight + heatCapacity: 10000 - type: tile id: FloorSteelCheckerDark - parent: BaseStationTile name: tiles-steel-floor-checker-dark sprite: /Textures/Tiles/checker_dark.png variants: 4 @@ -62,11 +44,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteelCheckerDark + heatCapacity: 10000 - type: tile id: FloorSteelMini - parent: BaseStationTile name: tiles-steel-floor-mini sprite: /Textures/Tiles/steel_mini.png variants: 4 @@ -75,11 +62,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteelMini + heatCapacity: 10000 - type: tile id: FloorSteelPavement - parent: BaseStationTile name: tiles-steel-floor-pavement sprite: /Textures/Tiles/steel_pavement.png variants: 4 @@ -88,11 +80,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteelPavement + heatCapacity: 10000 - type: tile id: FloorSteelDiagonal - parent: BaseStationTile name: tiles-steel-floor-diagonal sprite: /Textures/Tiles/steel_diagonal.png variants: 4 @@ -101,18 +98,28 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteelDiagonal + heatCapacity: 10000 - type: tile id: FloorSteelOffset - parent: BaseStationTile name: tiles-steel-floor-offset sprite: /Textures/Tiles/steel_offset.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteelOffset + heatCapacity: 10000 - type: tile id: FloorSteelMono - parent: BaseStationTile name: tiles-steel-floor-mono sprite: /Textures/Tiles/steel_mono.png variants: 4 @@ -121,11 +128,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepTile itemDrop: FloorTileItemSteelMono + heatCapacity: 10000 - type: tile id: FloorSteelPavementVertical - parent: BaseStationTile name: tiles-steel-floor-pavement-vertical sprite: /Textures/Tiles/steel_pavement_vertical.png variants: 4 @@ -134,11 +146,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepTile itemDrop: FloorTileItemSteelPavementVertical + heatCapacity: 10000 - type: tile id: FloorSteelHerringbone - parent: BaseStationTile name: tiles-steel-floor-herringbone sprite: /Textures/Tiles/steel_herringbone.png variants: 4 @@ -147,11 +164,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepTile itemDrop: FloorTileItemSteelHerringbone + heatCapacity: 10000 - type: tile id: FloorSteelDiagonalMini - parent: BaseStationTile name: tiles-steel-floor-diagonal-mini sprite: /Textures/Tiles/steel_diagonal_mini.png variants: 4 @@ -160,29 +182,40 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepTile itemDrop: FloorTileItemSteelDiagonalMini + heatCapacity: 10000 - type: tile id: FloorBrassFilled - parent: BaseStationTile name: tiles-brass-floor-filled sprite: /Textures/Tiles/Misc/clockwork/clockwork_floor_filled.png + baseTurf: PlatingBrass + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemBrassFilled + heatCapacity: 10000 - type: tile id: FloorBrassReebe - parent: BaseStationTile name: tiles-brass-floor-reebe sprite: /Textures/Tiles/Misc/clockwork/reebe.png + baseTurf: PlatingBrass + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemBrassReebe + heatCapacity: 10000 - type: tile id: FloorPlastic - parent: BaseStationTile name: tiles-plastic-floor sprite: /Textures/Tiles/plastic.png variants: 4 @@ -191,11 +224,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteel + heatCapacity: 10000 - type: tile id: FloorWood - parent: BaseStationTile name: tiles-wood sprite: /Textures/Tiles/wood.png variants: 4 @@ -204,15 +242,18 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepWood barestepSounds: collection: BarestepWood itemDrop: FloorTileItemWood + heatCapacity: 10000 - type: tile id: FloorWhite - parent: BaseStationTile name: tiles-white-floor sprite: /Textures/Tiles/white.png variants: 4 @@ -221,13 +262,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhite + heatCapacity: 10000 - type: tile id: FloorWhiteMini - parent: BaseStationTile name: tiles-white-floor-mini sprite: /Textures/Tiles/white_mini.png variants: 4 @@ -236,13 +280,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhiteMini + heatCapacity: 10000 - type: tile id: FloorWhitePavement - parent: BaseStationTile name: tiles-white-floor-pavement sprite: /Textures/Tiles/white_pavement.png variants: 4 @@ -251,13 +298,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhitePavement + heatCapacity: 10000 - type: tile id: FloorWhiteDiagonal - parent: BaseStationTile name: tiles-white-floor-diagonal sprite: /Textures/Tiles/white_diagonal.png variants: 4 @@ -266,22 +316,28 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhiteDiagonal + heatCapacity: 10000 - type: tile id: FloorWhiteOffset - parent: BaseStationTile name: tiles-white-floor-offset sprite: /Textures/Tiles/white_offset.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhiteOffset + heatCapacity: 10000 - type: tile id: FloorWhiteMono - parent: BaseStationTile name: tiles-white-floor-mono sprite: /Textures/Tiles/white_mono.png variants: 4 @@ -290,13 +346,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhiteMono + heatCapacity: 10000 - type: tile id: FloorWhitePavementVertical - parent: BaseStationTile name: tiles-white-floor-pavement-vertical sprite: /Textures/Tiles/white_pavement_vertical.png variants: 4 @@ -305,13 +364,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhitePavementVertical + heatCapacity: 10000 - type: tile id: FloorWhiteHerringbone - parent: BaseStationTile name: tiles-white-floor-herringbone sprite: /Textures/Tiles/white_herringbone.png variants: 4 @@ -320,13 +382,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhiteHerringbone + heatCapacity: 10000 - type: tile id: FloorWhiteDiagonalMini - parent: BaseStationTile name: tiles-white-floor-diagonal-mini sprite: /Textures/Tiles/white_diagonal_mini.png variants: 4 @@ -335,13 +400,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhiteDiagonalMini + heatCapacity: 10000 - type: tile id: FloorWhitePlastic - parent: BaseStationTile name: tiles-plastic-white-floor sprite: /Textures/Tiles/white_plastic.png variants: 4 @@ -350,13 +418,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemWhite + heatCapacity: 10000 - type: tile id: FloorDark - parent: BaseStationTile name: tiles-dark-floor sprite: /Textures/Tiles/dark.png variants: 4 @@ -365,13 +436,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDark + heatCapacity: 10000 - type: tile id: FloorDarkMini - parent: BaseStationTile name: tiles-dark-floor-mini sprite: /Textures/Tiles/dark_mini.png variants: 4 @@ -380,13 +454,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkMini + heatCapacity: 10000 - type: tile id: FloorDarkPavement - parent: BaseStationTile name: tiles-dark-floor-pavement sprite: /Textures/Tiles/dark_pavement.png variants: 4 @@ -395,13 +472,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkPavement + heatCapacity: 10000 - type: tile id: FloorDarkDiagonal - parent: BaseStationTile name: tiles-dark-floor-diagonal sprite: /Textures/Tiles/dark_diagonal.png variants: 4 @@ -410,22 +490,28 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkDiagonal + heatCapacity: 10000 - type: tile id: FloorDarkOffset - parent: BaseStationTile name: tiles-dark-floor-offset sprite: /Textures/Tiles/dark_offset.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkOffset + heatCapacity: 10000 - type: tile id: FloorDarkMono - parent: BaseStationTile name: tiles-dark-floor-mono sprite: /Textures/Tiles/dark_mono.png variants: 4 @@ -434,13 +520,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkMono + heatCapacity: 10000 - type: tile id: FloorDarkPavementVertical - parent: BaseStationTile name: tiles-dark-floor-pavement-vertical sprite: /Textures/Tiles/dark_pavement_vertical.png variants: 4 @@ -449,13 +538,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkPavementVertical + heatCapacity: 10000 - type: tile id: FloorDarkHerringbone - parent: BaseStationTile name: tiles-dark-floor-herringbone sprite: /Textures/Tiles/dark_herringbone.png variants: 4 @@ -464,13 +556,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkHerringbone + heatCapacity: 10000 - type: tile id: FloorDarkDiagonalMini - parent: BaseStationTile name: tiles-dark-floor-diagonal-mini sprite: /Textures/Tiles/dark_diagonal_mini.png variants: 4 @@ -479,13 +574,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDarkDiagonalMini + heatCapacity: 10000 - type: tile id: FloorDarkPlastic - parent: BaseStationTile name: tiles-plastic-dark-floor sprite: /Textures/Tiles/dark_plastic.png variants: 4 @@ -494,58 +592,76 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemDark + heatCapacity: 10000 - type: tile id: FloorTechMaint - parent: BaseStationTile name: tiles-techmaint-floor sprite: /Textures/Tiles/tech_maint.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemTechmaint + heatCapacity: 10000 - type: tile id: FloorTechMaintDark - parent: BaseStationTile name: tiles-techmaint-floor-dark sprite: /Textures/Tiles/tech_maint_dark.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemTechmaintDark + heatCapacity: 10000 - type: tile id: FloorReinforced - parent: BaseStationTile name: tiles-reinforced-floor sprite: /Textures/Tiles/reinforced.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: PartRodMetal1 + heatCapacity: 10000 - type: tile id: FloorMono - parent: BaseStationTile name: tiles-mono-floor sprite: /Textures/Tiles/mono.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemMono + heatCapacity: 10000 - type: tile id: FloorLino - parent: BaseStationTile name: tiles-linoleum-floor sprite: /Textures/Tiles/lino.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemLino + heatCapacity: 10000 - type: tile id: FloorSteelDirty - parent: BaseStationTile name: tiles-dirty-steel-floor sprite: /Textures/Tiles/steel_dirty.png variants: 4 @@ -554,49 +670,64 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepPlating itemDrop: FloorTileItemDirty + heatCapacity: 10000 - type: tile id: FloorElevatorShaft - parent: BaseStationTile name: tiles-elevator-shaft sprite: /Textures/Tiles/elevator_shaft.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemElevatorShaft + heatCapacity: 10000 - type: tile id: FloorMetalDiamond - parent: BaseStationTile name: tiles-diamond-plate-floor sprite: /Textures/Tiles/metaldiamond.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemMetalDiamond + heatCapacity: 10000 - type: tile id: FloorRockVault - parent: BaseStationTile name: tiles-rock-floor sprite: /Textures/Tiles/rock_vault.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepAsteroid itemDrop: FloorTileItemRockVault + heatCapacity: 10000 - type: tile id: FloorBlue - parent: BaseStationTile name: tiles-blue-tile sprite: /Textures/Tiles/blue.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemBlue + heatCapacity: 10000 - type: tile id: FloorSteelLime - parent: BaseStationTile name: tiles-lime-floor sprite: /Textures/Tiles/lime.png variants: 4 @@ -605,62 +736,89 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemLime + heatCapacity: 10000 - type: tile id: FloorMining - parent: BaseStationTile name: tiles-mining-tile sprite: /Textures/Tiles/mining_floor.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemMining + heatCapacity: 10000 - type: tile id: FloorMiningDark - parent: BaseStationTile name: tiles-mining-dark-tile sprite: /Textures/Tiles/mining_floor_dark.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemMiningDark + heatCapacity: 10000 - type: tile id: FloorMiningLight - parent: BaseStationTile name: tiles-mining-light-tile sprite: /Textures/Tiles/mining_floor_light.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemMiningLight + heatCapacity: 10000 # Departmental - type: tile id: FloorFreezer - parent: BaseStationTile name: tiles-freezer sprite: /Textures/Tiles/freezer.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemFreezer + heatCapacity: 10000 - type: tile id: FloorShowroom - parent: BaseStationTile name: tiles-showroom-floor sprite: /Textures/Tiles/showroom.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShowroom + heatCapacity: 10000 - type: tile id: FloorHydro - parent: BaseStationTile name: tiles-hydro-floor sprite: /Textures/Tiles/hydro.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemHydro + heatCapacity: 10000 - type: tile id: FloorBar - parent: BaseStationTile name: tiles-bar-floor sprite: /Textures/Tiles/bar.png variants: 4 @@ -669,43 +827,64 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemBar + heatCapacity: 10000 - type: tile id: FloorClown - parent: BaseStationTile name: tiles-clown-floor sprite: /Textures/Tiles/clown.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemClown + heatCapacity: 10000 - type: tile id: FloorMime - parent: BaseStationTile name: tiles-mime-floor sprite: /Textures/Tiles/mime.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemMime + heatCapacity: 10000 - type: tile id: FloorKitchen - parent: BaseStationTile name: tiles-kitchen-floor sprite: /Textures/Tiles/kitchen.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemKitchen + heatCapacity: 10000 - type: tile id: FloorLaundry - parent: BaseStationTile name: tiles-laundry-floor sprite: /Textures/Tiles/laundry.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemLaundry + heatCapacity: 10000 - type: tile id: FloorSteelDamaged - parent: BaseStationTile name: tiles-steel-floor sprite: /Textures/Tiles/steel_damaged.png variants: 5 @@ -715,12 +894,17 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemSteel #This should probably be made null when it becomes possible to make it such, in SS13 prying destroyed tiles wouldn't give you anything. + heatCapacity: 10000 # Concrete - type: tile id: FloorConcrete - parent: BaseStationTile name: tiles-concrete-tile sprite: /Textures/Tiles/Planet/Concrete/concrete.png variants: 4 @@ -729,13 +913,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemConcrete + heatCapacity: 10000 - type: tile id: FloorConcreteMono - parent: BaseStationTile name: tiles-concrete-slab sprite: /Textures/Tiles/Planet/Concrete/concrete_mono.png variants: 4 @@ -744,13 +931,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemConcreteMono + heatCapacity: 10000 - type: tile id: FloorConcreteSmooth - parent: BaseStationTile name: tiles-concrete-smooth sprite: /Textures/Tiles/Planet/Concrete/concrete_smooth.png variants: 4 @@ -759,13 +949,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemConcreteSmooth + heatCapacity: 10000 - type: tile id: FloorGrayConcrete - parent: BaseStationTile name: tiles-gray-concrete-tile sprite: /Textures/Tiles/Planet/Concrete/grayconcrete.png variants: 4 @@ -774,13 +967,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemGrayConcrete + heatCapacity: 10000 - type: tile id: FloorGrayConcreteMono - parent: BaseStationTile name: tiles-gray-concrete-slab sprite: /Textures/Tiles/Planet/Concrete/grayconcrete_mono.png variants: 4 @@ -789,13 +985,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemGrayConcreteMono + heatCapacity: 10000 - type: tile id: FloorGrayConcreteSmooth - parent: BaseStationTile name: tiles-gray-concrete-smooth sprite: /Textures/Tiles/Planet/Concrete/grayconcrete_smooth.png variants: 4 @@ -804,13 +1003,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemGrayConcreteSmooth + heatCapacity: 10000 - type: tile id: FloorOldConcrete - parent: BaseStationTile name: tiles-old-concrete-tile sprite: /Textures/Tiles/Planet/Concrete/oldconcrete.png variants: 4 @@ -819,13 +1021,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemOldConcrete + heatCapacity: 10000 - type: tile id: FloorOldConcreteMono - parent: BaseStationTile name: tiles-old-concrete-slab sprite: /Textures/Tiles/Planet/Concrete/oldconcrete_mono.png variants: 4 @@ -834,13 +1039,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemOldConcreteMono + heatCapacity: 10000 - type: tile id: FloorOldConcreteSmooth - parent: BaseStationTile name: tiles-old-concrete-smooth sprite: /Textures/Tiles/Planet/Concrete/oldconcrete_smooth.png variants: 4 @@ -849,86 +1057,107 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemOldConcreteSmooth + heatCapacity: 10000 # Carpets (non smoothing) - type: tile id: FloorArcadeBlue - parent: BaseStationTile name: tiles-blue-arcade-floor sprite: /Textures/Tiles/arcadeblue.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet friction: 1.25 itemDrop: FloorTileItemArcadeBlue + heatCapacity: 10000 - type: tile id: FloorArcadeBlue2 - parent: BaseStationTile name: tiles-blue-arcade-floor sprite: /Textures/Tiles/arcadeblue2.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet friction: 1.25 itemDrop: FloorTileItemArcadeBlue2 + heatCapacity: 10000 - type: tile id: FloorArcadeRed - parent: BaseStationTile name: tiles-red-arcade-floor sprite: /Textures/Tiles/arcadered.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet friction: 1.25 itemDrop: FloorTileItemArcadeRed + heatCapacity: 10000 - type: tile id: FloorEighties - parent: BaseStationTile name: tiles-eighties-floor sprite: /Textures/Tiles/eighties.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet friction: 1.25 itemDrop: FloorTileItemEighties + heatCapacity: 10000 - type: tile id: FloorCarpetClown - parent: BaseStationTile name: tiles-clown-carpet-floor sprite: /Textures/Tiles/carpetclown.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet friction: 1.25 itemDrop: FloorTileItemCarpetClown + heatCapacity: 10000 - type: tile id: FloorCarpetOffice - parent: BaseStationTile name: tiles-office-carpet-floor sprite: /Textures/Tiles/carpetoffice.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet friction: 1.25 itemDrop: FloorTileItemCarpetOffice + heatCapacity: 10000 - type: tile id: FloorBoxing - parent: BaseStationTile name: tiles-boxing-ring-floor sprite: /Textures/Tiles/boxing.png variants: 4 @@ -937,12 +1166,17 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor friction: 1.25 itemDrop: FloorTileItemBoxing + heatCapacity: 10000 - type: tile id: FloorGym - parent: BaseStationTile name: tiles-gym-floor sprite: /Textures/Tiles/gym.png variants: 4 @@ -951,13 +1185,18 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor friction: 1.25 itemDrop: FloorTileItemGym + heatCapacity: 10000 # Shuttle - type: tile id: FloorShuttleWhite - parent: BaseStationTile name: tiles-white-shuttle-floor sprite: /Textures/Tiles/shuttlewhite.png variants: 4 @@ -966,11 +1205,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttleWhite + heatCapacity: 10000 - type: tile id: FloorShuttleGrey - parent: BaseStationTile name: tiles-grey-shuttle-floor sprite: /Textures/Tiles/shuttlegrey.png variants: 4 @@ -979,11 +1223,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttleGrey + heatCapacity: 10000 - type: tile id: FloorShuttleBlack - parent: BaseStationTile name: tiles-black-shuttle-floor sprite: /Textures/Tiles/shuttleblack.png variants: 4 @@ -992,11 +1241,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttleBlack + heatCapacity: 10000 - type: tile id: FloorShuttleBlue - parent: BaseStationTile name: tiles-blue-shuttle-floor sprite: /Textures/Tiles/shuttleblue.png variants: 4 @@ -1005,11 +1259,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttleBlue + heatCapacity: 10000 - type: tile id: FloorShuttleOrange - parent: BaseStationTile name: tiles-orange-shuttle-floor sprite: /Textures/Tiles/shuttleorange.png variants: 4 @@ -1018,11 +1277,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttleOrange + heatCapacity: 10000 - type: tile id: FloorShuttlePurple - parent: BaseStationTile name: tiles-purple-shuttle-floor sprite: /Textures/Tiles/shuttlepurple.png variants: 4 @@ -1031,11 +1295,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttlePurple + heatCapacity: 10000 - type: tile id: FloorShuttleRed - parent: BaseStationTile name: tiles-red-shuttle-floor sprite: /Textures/Tiles/shuttlered.png variants: 4 @@ -1044,31 +1313,42 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemShuttleRed + heatCapacity: 10000 # Materials - type: tile id: FloorGold - parent: BaseStationTile name: tiles-gold-tile sprite: /Textures/Tiles/gold.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemGold + heatCapacity: 10000 - type: tile id: FloorSilver - parent: BaseStationTile name: tiles-silver-tile sprite: /Textures/Tiles/silver.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemSilver + heatCapacity: 10000 - type: tile id: FloorGlass - parent: BaseStationTile name: tiles-glass-floor sprite: /Textures/Tiles/glass.png variants: 4 @@ -1077,13 +1357,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: SheetGlass1 + heatCapacity: 10000 - type: tile id: FloorRGlass - parent: BaseStationTile name: tiles-reinforced-glass-floor sprite: /Textures/Tiles/rglass.png variants: 4 @@ -1092,49 +1375,65 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: SheetRGlass1 + heatCapacity: 10000 - type: tile id: FloorMetalFoam - parent: BaseStationTile name: tiles-metal-foam sprite: /Textures/Tiles/foammetal.png variants: 1 placementVariants: - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: SheetSteel1 + heatCapacity: 10000 # Circuits - type: tile id: FloorGreenCircuit - parent: BaseStationTile name: tiles-green-circuit-floor sprite: /Textures/Tiles/green_circuit.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemGCircuit + heatCapacity: 10000 - type: tile id: FloorBlueCircuit - parent: BaseStationTile name: tiles-blue-circuit-floor sprite: /Textures/Tiles/blue_circuit.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemBCircuit + heatCapacity: 10000 - type: tile id: FloorRedCircuit - parent: BaseStationTile name: tiles-red-circuit-floor sprite: /Textures/Tiles/red_circuit.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemRCircuit + heatCapacity: 10000 # Terrain - type: tile @@ -1255,19 +1554,19 @@ sprite: /Textures/Tiles/Asteroid/asteroid.png variants: 13 placementVariants: - - 0.8 - - 0.0166 #Should be roughly 20%.... I think??? I don't know dude, I'm just a YAML monkey. - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0166 - - 0.0116 - - 0.0116 + - 0.8 + - 0.0166 #Should be roughly 20%.... I think??? I don't know dude, I'm just a YAML monkey. + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0166 + - 0.0116 + - 0.0116 baseTurf: Space isSubfloor: true footstepSounds: @@ -1506,7 +1805,6 @@ - type: tile id: FloorFlesh - parent: BaseStationTile name: tiles-flesh-floor sprite: /Textures/Tiles/meat.png variants: 4 @@ -1515,23 +1813,29 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepBlood itemDrop: FloorTileItemFlesh friction: 0.25 #slippy + heatCapacity: 10000 - type: tile id: FloorTechMaint2 - parent: BaseStationTile name: tiles-techmaint2-floor sprite: /Textures/Tiles/steel_maint.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemSteelMaint + heatCapacity: 10000 - type: tile id: FloorTechMaint3 - parent: BaseStationTile name: tiles-techmaint3-floor sprite: /Textures/Tiles/grating_maint.png variants: 4 @@ -1540,13 +1844,16 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemGratingMaint + heatCapacity: 10000 - type: tile id: FloorWoodTile - parent: BaseStationTile name: tiles-wood2 sprite: /Textures/Tiles/wood_tile.png variants: 4 @@ -1555,15 +1862,18 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepWood barestepSounds: collection: BarestepWood itemDrop: FloorTileItemWoodPattern + heatCapacity: 10000 - type: tile id: FloorBrokenWood - parent: BaseStationTile name: tiles-wood3 sprite: /Textures/Tiles/wood_broken.png variants: 7 @@ -1575,22 +1885,29 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepWood barestepSounds: collection: BarestepWood itemDrop: MaterialWoodPlank1 + heatCapacity: 10000 - type: tile id: FloorWebTile - parent: BaseStationTile name: tiles-web sprite: /Textures/Tiles/Misc/Web/web_tile.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepCarpet barestepSounds: collection: BarestepCarpet itemDrop: FloorTileItemWeb + heatCapacity: 10000 - type: tile id: FloorChromite @@ -1614,18 +1931,33 @@ #Hull tiles - type: tile id: FloorHull - parent: BaseStationTile name: tiles-hull sprite: /Textures/Tiles/hull.png + baseTurf: Plating + isSubfloor: false footstepSounds: collection: FootstepHull itemDrop: FloorTileItemSteel #probably should not be normally obtainable, but the game shits itself and dies when you try to put null here + heatCapacity: 10000 + +- type: tile + id: FloorHullReinforced + name: tiles-hull-reinforced + sprite: /Textures/Tiles/hull_reinforced.png + baseTurf: Plating + isSubfloor: false + footstepSounds: + collection: FootstepHull + itemDrop: FloorTileItemSteel + heatCapacity: 100000 #/tg/ has this set as "INFINITY." I don't know if that exists here so I've just added an extra 0 + indestructible: true - type: tile id: FloorReinforcedHardened - parent: BaseStationTile name: tiles-super-reinforced-floor sprite: /Textures/Tiles/super_reinforced.png + baseTurf: Plating + isSubfloor: false footstepSounds: collection: FootstepHull itemDrop: PartRodMetal1 #same case as FloorHull @@ -1635,7 +1967,6 @@ # Grass - type: tile id: FloorAstroGrass - parent: BaseStationTile name: tiles-astro-grass sprite: /Textures/Tiles/Planet/Grass/grass.png variants: 4 @@ -1654,15 +1985,19 @@ East: /Textures/Tiles/Planet/Grass/double_edge.png North: /Textures/Tiles/Planet/Grass/double_edge.png West: /Textures/Tiles/Planet/Grass/double_edge.png + baseTurf: Plating + isSubfloor: false deconstructTools: [ Cutting ] footstepSounds: collection: FootstepGrass itemDrop: FloorTileItemAstroGrass + heatCapacity: 10000 - type: tile id: FloorMowedAstroGrass - parent: [ BaseStationTile, FloorGrass ] name: tiles-mowed-astro-grass + parent: FloorGrass + baseTurf: Plating #Corvax sprite: /Textures/Corvax/Tiles/mowed_grass.png variants: 4 @@ -1679,8 +2014,9 @@ - type: tile id: FloorJungleAstroGrass - parent: [ BaseStationTile, FloorGrassJungle ] name: tiles-jungle-astro-grass + parent: FloorGrassJungle + baseTurf: Plating isSubfloor: false deconstructTools: [ Cutting ] itemDrop: FloorTileItemJungleAstroGrass @@ -1707,18 +2043,22 @@ # Ice - type: tile id: FloorAstroIce - parent: BaseStationTile name: tiles-astro-ice sprite: /Textures/Tiles/Planet/Snow/ice.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] friction: 0.05 + heatCapacity: 10000 mobFriction: 0.05 mobAcceleration: 0.1 itemDrop: FloorTileItemAstroIce - type: tile id: FloorAstroSnow - parent: [ BaseStationTile, FloorSnow ] name: tiles-astro-snow + parent: FloorSnow + baseTurf: Plating isSubfloor: false deconstructTools: [ Prying ] itemDrop: FloorTileItemAstroSnow @@ -1727,8 +2067,9 @@ # Asteroid Sand - type: tile id: FloorAstroAsteroidSand - parent: [ BaseStationTile, FloorAsteroidSand ] name: tiles-astro-asteroid-sand + parent: FloorAsteroidSand + baseTurf: Plating isSubfloor: false deconstructTools: [ Prying ] itemDrop: FloorTileItemAstroAsteroidSand @@ -1736,8 +2077,9 @@ - type: tile id: FloorAstroAsteroidSandBorderless - parent: [ BaseStationTile, FloorAsteroidSandBorderless ] name: tiles-astro-asteroid-sand-borderless + parent: FloorAsteroidSandBorderless + baseTurf: Plating isSubfloor: false deconstructTools: [ Prying ] itemDrop: FloorTileItemAstroAsteroidSand @@ -1775,7 +2117,6 @@ - type: tile id: FloorWoodLarge - parent: BaseStationTile name: tiles-wood-large sprite: /Textures/Tiles/wood_large.png variants: 4 @@ -1784,11 +2125,15 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepWood barestepSounds: collection: BarestepWood itemDrop: FloorTileItemWoodLarge + heatCapacity: 10000 - type: tile id: FloorXenoborg @@ -1804,36 +2149,44 @@ - type: tile id: FloorXeno - parent: BaseStationTile name: tiles-xeno-floor sprite: /Textures/Tiles/xeno_flooring.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepBlood itemDrop: FloorTileItemXeno + heatCapacity: 10000 - type: tile id: FloorXenoSteel - parent: BaseStationTile name: tiles-xeno-steel sprite: /Textures/Tiles/xeno_steel.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemXenoSteel + heatCapacity: 10000 allowRotationMirror: true - type: tile id: FloorXenoSteelCorner - parent: BaseStationTile name: tiles-xeno-steel-corner sprite: /Textures/Tiles/xeno_steel_corner.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile itemDrop: FloorTileItemXenoSteelCorner + heatCapacity: 10000 allowRotationMirror: true - type: tile id: FloorDarkSquiggly - parent: BaseStationTile name: tiles-dark-squiggly sprite: /Textures/Tiles/dark_squiggly.png variants: 4 @@ -1842,21 +2195,29 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor itemDrop: FloorTileItemDarkSquiggly + heatCapacity: 10000 allowRotationMirror: true - type: tile id: FloorXenoMaint - parent: BaseStationTile name: tiles-xeno-maint sprite: /Textures/Tiles/xeno_maint.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepHull itemDrop: FloorTileItemXenoMaint + heatCapacity: 10000 - type: tile id: FloorWhiteMarble - parent: BaseStationTile name: tiles-white-marble sprite: /Textures/Tiles/white_marble.png variants: 8 @@ -1869,14 +2230,17 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile friction: 0.8 itemDrop: FloorTileItemWhiteMarble + heatCapacity: 10000 - type: tile id: FloorDarkMarble - parent: BaseStationTile name: tiles-dark-marble sprite: /Textures/Tiles/dark_marble.png variants: 8 @@ -1889,14 +2253,17 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile friction: 0.8 itemDrop: FloorTileItemDarkMarble + heatCapacity: 10000 - type: tile id: FloorPlasmaMarble - parent: BaseStationTile name: tiles-plasma-marble sprite: /Textures/Tiles/plasmarble.png variants: 8 @@ -1909,14 +2276,17 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile friction: 0.8 itemDrop: FloorTileItemPlasmaMarble + heatCapacity: 10000 - type: tile id: FloorUraniumMarble - parent: BaseStationTile name: tiles-uranium-marble sprite: /Textures/Tiles/uranium_marble.png variants: 8 @@ -1929,7 +2299,11 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] footstepSounds: collection: FootstepTile friction: 0.8 itemDrop: FloorTileItemUraniumMarble + heatCapacity: 10000 diff --git a/Resources/Prototypes/Tiles/planet.yml b/Resources/Prototypes/Tiles/planet.yml index 057afa776b..d2b9456e3a 100644 --- a/Resources/Prototypes/Tiles/planet.yml +++ b/Resources/Prototypes/Tiles/planet.yml @@ -1,16 +1,5 @@ -- type: tile - id: BaseFloorPlanet - abstract: true - heatCapacity: 10000 - isSubfloor: true - footstepSounds: - collection: FootstepAsteroid - weather: true - indestructible: true - - type: tile id: FloorPlanetDirt - parent: BaseFloorPlanet name: tiles-dirt-planet-floor sprite: /Textures/Tiles/Planet/dirt.rsi/dirt.png variants: 4 @@ -19,11 +8,16 @@ - 1.0 - 1.0 - 1.0 + isSubfloor: true + footstepSounds: + collection: FootstepAsteroid + heatCapacity: 10000 + weather: true + indestructible: true # Desert - type: tile id: FloorDesert - parent: BaseFloorPlanet name: tiles-desert-floor sprite: /Textures/Tiles/Planet/Desert/desert.png variants: 6 @@ -36,6 +30,12 @@ - 0.06 - 0.01 # Corvax-Mapping-End + isSubfloor: true + footstepSounds: + collection: FootstepAsteroid + heatCapacity: 10000 + weather: true + indestructible: true - type: tile id: FloorLowDesert @@ -49,11 +49,16 @@ - 1.0 - 1.0 - 1.0 + isSubfloor: true + footstepSounds: + collection: FootstepAsteroid + heatCapacity: 10000 + weather: true + indestructible: true # Grass - type: tile id: FloorPlanetGrass - parent: BaseFloorPlanet name: tiles-grass-planet-floor sprite: /Textures/Tiles/Planet/Grass/grass.png variants: 4 @@ -73,20 +78,29 @@ North: /Textures/Tiles/Planet/Grass/double_edge.png West: /Textures/Tiles/Planet/Grass/double_edge.png baseTurf: FloorPlanetDirt + isSubfloor: true footstepSounds: collection: FootstepGrass + itemDrop: FloorTileItemGrass + heatCapacity: 10000 + weather: true + indestructible: true # Lava - type: tile id: FloorBasalt name: tiles-basalt-floor - parent: BaseFloorPlanet sprite: /Textures/Tiles/Planet/basalt.png + isSubfloor: true + footstepSounds: + collection: FootstepAsteroid + heatCapacity: 10000 + weather: true + indestructible: true # Snow - type: tile id: FloorSnow - parent: BaseFloorPlanet name: tiles-snow sprite: /Textures/Tiles/Planet/Snow/snow.png variants: 13 @@ -110,8 +124,12 @@ East: /Textures/Tiles/Planet/Snow/snow_double_edge_east.png North: /Textures/Tiles/Planet/Snow/snow_double_edge_north.png West: /Textures/Tiles/Planet/Snow/snow_double_edge_west.png + isSubfloor: true footstepSounds: collection: FootstepSnow + heatCapacity: 10000 + weather: true + indestructible: true # Ice - type: tile @@ -128,7 +146,6 @@ # Dug snow - type: tile id: FloorSnowDug - parent: BaseFloorPlanet name: tiles-snow-dug sprite: /Textures/Tiles/Planet/Snow/snow_dug.png edgeSpritePriority: 1 @@ -137,7 +154,11 @@ East: /Textures/Tiles/Planet/Snow/snow_dug_double_edge_east.png North: /Textures/Tiles/Planet/Snow/snow_dug_double_edge_north.png West: /Textures/Tiles/Planet/Snow/snow_dug_double_edge_west.png + isSubfloor: true footstepSounds: collection: FootstepSnow + heatCapacity: 10000 + weather: true + indestructible: true # Wasteland diff --git a/Resources/Prototypes/Tiles/plating.yml b/Resources/Prototypes/Tiles/plating.yml index a6f150959d..2a85222c3a 100644 --- a/Resources/Prototypes/Tiles/plating.yml +++ b/Resources/Prototypes/Tiles/plating.yml @@ -1,52 +1,16 @@ - type: tile - id: BasePlating - abstract: true - friction: 1.5 - heatCapacity: 10000 + id: Plating + name: tiles-plating + sprite: /Textures/Tiles/plating.png + baseTurf: Lattice isSubfloor: true footstepSounds: collection: FootstepPlating - baseTurf: Lattice - baseWhitelist: - - TrainLattice - -- type: tile - id: Plating - parent: BasePlating - name: tiles-plating - sprite: /Textures/Tiles/plating.png - -- type: tile - id: PlatingRCD - parent: Plating - baseWhitelist: - - TrainLattice - - FloorPlanetDirt - - FloorDesert - - FloorLowDesert - - FloorPlanetGrass - - FloorSnow - - FloorDirt - - FloorAsteroidIronsand - - FloorAsteroidSand - - FloorAsteroidSandBorderless - - FloorAsteroidIronsandBorderless - - FloorAsteroidSandRedBorderless - -- type: tile - id: FloorHullReinforced - parent: BasePlating - name: tiles-hull-reinforced - sprite: /Textures/Tiles/hull_reinforced.png - footstepSounds: - collection: FootstepHull - itemDrop: FloorTileItemSteel - heatCapacity: 100000 #/tg/ has this set as "INFINITY." I don't know if that exists here so I've just added an extra 0 - indestructible: true + friction: 1.5 + heatCapacity: 10000 - type: tile id: PlatingDamaged - parent: BasePlating name: tiles-plating sprite: /Textures/Tiles/plating_damaged.png variants: 3 @@ -54,25 +18,45 @@ - 1.0 - 1.0 - 1.0 + baseTurf: Lattice + isSubfloor: true + footstepSounds: + collection: FootstepPlating + friction: 1.5 + heatCapacity: 10000 - type: tile id: PlatingAsteroid - parent: BasePlating name: tiles-asteroid-plating sprite: /Textures/Tiles/Asteroid/asteroid_plating.png + baseTurf: Lattice + isSubfloor: true + footstepSounds: + collection: FootstepPlating + friction: 1.5 + heatCapacity: 10000 - type: tile id: PlatingBrass - parent: BasePlating name: tiles-brass-plating sprite: /Textures/Tiles/Misc/clockwork/clockwork_floor.png + baseTurf: Lattice + isSubfloor: true + footstepSounds: + collection: FootstepPlating + friction: 1.5 + heatCapacity: 10000 - type: tile id: PlatingSnow name: tiles-snow-plating - parent: BasePlating sprite: /Textures/Tiles/snow_plating.png #Not in the snow planet RSI because it doesn't have any metadata. Should probably be moved to its own folder later. + baseTurf: Lattice + isSubfloor: true + footstepSounds: + collection: FootstepPlating friction: 0.75 #a little less then actual snow + heatCapacity: 10000 - type: tile id: PlatingIronsand @@ -103,8 +87,16 @@ - type: tile id: TrainLattice - parent: Lattice name: tiles-lattice-train sprite: /Textures/Tiles/latticeTrain.png + baseTurf: Space + isSubfloor: true + deconstructTools: [ Cutting ] + weather: true footstepSounds: collection: FootstepPlating + friction: 1.5 + isSpace: true + itemDrop: PartRodMetal1 + heatCapacity: 10000 + mass: 200