diff --git a/Content.Shared/Tiles/RequiresTileComponent.cs b/Content.Shared/Tiles/RequiresTileComponent.cs
new file mode 100644
index 0000000000..52e646ed2a
--- /dev/null
+++ b/Content.Shared/Tiles/RequiresTileComponent.cs
@@ -0,0 +1,12 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Tiles;
+
+///
+/// Deletes the entity if the tile changes from under it. Used for visual effects.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed class RequiresTileComponent : Component
+{
+
+}
diff --git a/Content.Shared/Tiles/RequiresTileSystem.cs b/Content.Shared/Tiles/RequiresTileSystem.cs
new file mode 100644
index 0000000000..e34e6ffb18
--- /dev/null
+++ b/Content.Shared/Tiles/RequiresTileSystem.cs
@@ -0,0 +1,33 @@
+using Robust.Shared.Map.Components;
+using Robust.Shared.Map.Enumerators;
+
+namespace Content.Shared.Tiles;
+
+public sealed class RequiresTileSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnTileChange);
+ }
+
+ private void OnTileChange(ref TileChangedEvent ev)
+ {
+ if (!TryComp(ev.Entity, out var grid))
+ return;
+
+ var anchored = grid.GetAnchoredEntitiesEnumerator(ev.NewTile.GridIndices);
+ if (anchored.Equals(AnchoredEntitiesEnumerator.Empty))
+ return;
+
+ var query = GetEntityQuery();
+
+ while (anchored.MoveNext(out var ent))
+ {
+ if (!query.HasComponent(ent.Value))
+ continue;
+
+ QueueDel(ent.Value);
+ }
+ }
+}
diff --git a/Resources/Prototypes/Decals/rock.yml b/Resources/Prototypes/Decals/rock.yml
new file mode 100644
index 0000000000..a9d4dda414
--- /dev/null
+++ b/Resources/Prototypes/Decals/rock.yml
@@ -0,0 +1,62 @@
+- type: decal
+ id: Basalt1
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt1
+
+- type: decal
+ id: Basalt2
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt2
+
+- type: decal
+ id: Basalt3
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt3
+
+- type: decal
+ id: Basalt4
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt4
+
+- type: decal
+ id: Basalt5
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt5
+
+- type: decal
+ id: Basalt6
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt6
+
+- type: decal
+ id: Basalt7
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt7
+
+- type: decal
+ id: Basalt8
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt8
+
+- type: decal
+ id: Basalt9
+ tags: ["rock"]
+ sprite:
+ sprite: Decals/basalt.rsi
+ state: basalt9
diff --git a/Resources/Prototypes/Entities/Tile/basalt.yml b/Resources/Prototypes/Entities/Tile/basalt.yml
new file mode 100644
index 0000000000..064bbb45ad
--- /dev/null
+++ b/Resources/Prototypes/Entities/Tile/basalt.yml
@@ -0,0 +1,81 @@
+- type: entity
+ id: BasaltOne
+ name: basalt
+ description: Rock
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Sprite
+ sprite: /Textures/Tiles/Planet/basalt.rsi
+ layers:
+ - state: basalt1
+ shader: unshaded
+ drawdepth: LowFloors
+ - type: RequiresTile
+ - type: Transform
+ anchored: true
+ - type: Tag
+ tags:
+ - HideContextMenu
+
+- type: entity
+ id: BasaltTwo
+ parent: BasaltOne
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Sprite
+ layers:
+ - state: basalt2
+ shader: unshaded
+
+- type: entity
+ id: BasaltThree
+ parent: BasaltOne
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Sprite
+ layers:
+ - state: basalt3
+ shader: unshaded
+
+- type: entity
+ id: BasaltFour
+ parent: BasaltOne
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Sprite
+ layers:
+ - state: basalt4
+ shader: unshaded
+
+- type: entity
+ id: BasaltFive
+ parent: BasaltOne
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Sprite
+ layers:
+ - state: basalt5
+ shader: unshaded
+
+- type: entity
+ id: BasaltRandom
+ parent: BasaltOne
+ suffix: Random
+ components:
+ - type: RandomSprite
+ available:
+ - 0:
+ basalt1: ""
+ - 0:
+ basalt2: ""
+ - 0:
+ basalt3: ""
+ - 0:
+ basalt4: ""
+ - 0:
+ basalt5: ""
diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml
index c392d0fa2e..9043d57afa 100644
--- a/Resources/Prototypes/Tiles/floors.yml
+++ b/Resources/Prototypes/Tiles/floors.yml
@@ -1092,6 +1092,18 @@
heatCapacity: 10000
# Terrain
+- type: tile
+ id: FloorBasaslt
+ name: tiles-basalt-floor
+ sprite: /Textures/Tiles/Planet/basalt.png
+ isSubfloor: true
+ canCrowbar: false
+ footstepSounds:
+ collection: FootstepAsteroid
+ friction: 0.30
+ thermalConductivity: 0.04
+ heatCapacity: 10000
+
- type: tile
id: FloorSnow
name: tiles-snow
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt1.png b/Resources/Textures/Decals/basalt.rsi/basalt1.png
new file mode 100644
index 0000000000..98289f7369
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt1.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt2.png b/Resources/Textures/Decals/basalt.rsi/basalt2.png
new file mode 100644
index 0000000000..135a513d2b
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt2.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt3.png b/Resources/Textures/Decals/basalt.rsi/basalt3.png
new file mode 100644
index 0000000000..f957b0dc72
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt3.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt4.png b/Resources/Textures/Decals/basalt.rsi/basalt4.png
new file mode 100644
index 0000000000..85dba4a9ee
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt4.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt5.png b/Resources/Textures/Decals/basalt.rsi/basalt5.png
new file mode 100644
index 0000000000..c73e5cabdf
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt5.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt6.png b/Resources/Textures/Decals/basalt.rsi/basalt6.png
new file mode 100644
index 0000000000..8e3b047913
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt6.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt7.png b/Resources/Textures/Decals/basalt.rsi/basalt7.png
new file mode 100644
index 0000000000..814b996273
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt7.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt8.png b/Resources/Textures/Decals/basalt.rsi/basalt8.png
new file mode 100644
index 0000000000..90d6164ab7
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt8.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/basalt9.png b/Resources/Textures/Decals/basalt.rsi/basalt9.png
new file mode 100644
index 0000000000..0b7b1316fa
Binary files /dev/null and b/Resources/Textures/Decals/basalt.rsi/basalt9.png differ
diff --git a/Resources/Textures/Decals/basalt.rsi/meta.json b/Resources/Textures/Decals/basalt.rsi/meta.json
new file mode 100644
index 0000000000..4dcef5184b
--- /dev/null
+++ b/Resources/Textures/Decals/basalt.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/tgstation/tgstation/tree/423404b31e36c4605faacec881b324db8997b0a6",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "basalt1"
+ },
+ {
+ "name": "basalt2"
+ },
+ {
+ "name": "basalt3"
+ },
+ {
+ "name": "basalt4"
+ },
+ {
+ "name": "basalt5"
+ },
+ {
+ "name": "basalt6"
+ },
+ {
+ "name": "basalt7"
+ },
+ {
+ "name": "basalt8"
+ },
+ {
+ "name": "basalt9"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Tiles/Planet/attributions.yml b/Resources/Textures/Tiles/Planet/attributions.yml
new file mode 100644
index 0000000000..f85b983186
--- /dev/null
+++ b/Resources/Textures/Tiles/Planet/attributions.yml
@@ -0,0 +1,4 @@
+- files: ["basalt.png"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Taken from tgstation"
+ source: "https://github.com/tgstation/tgstation/tree/423404b31e36c4605faacec881b324db8997b0a6"
\ No newline at end of file
diff --git a/Resources/Textures/Tiles/Planet/basalt.png b/Resources/Textures/Tiles/Planet/basalt.png
new file mode 100644
index 0000000000..11f3c562dc
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/basalt.png differ
diff --git a/Resources/Textures/Tiles/Planet/basalt.rsi/basalt1.png b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt1.png
new file mode 100644
index 0000000000..f595ee02db
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt1.png differ
diff --git a/Resources/Textures/Tiles/Planet/basalt.rsi/basalt2.png b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt2.png
new file mode 100644
index 0000000000..48a125a40b
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt2.png differ
diff --git a/Resources/Textures/Tiles/Planet/basalt.rsi/basalt3.png b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt3.png
new file mode 100644
index 0000000000..37b954466e
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt3.png differ
diff --git a/Resources/Textures/Tiles/Planet/basalt.rsi/basalt4.png b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt4.png
new file mode 100644
index 0000000000..7070b6ff53
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt4.png differ
diff --git a/Resources/Textures/Tiles/Planet/basalt.rsi/basalt5.png b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt5.png
new file mode 100644
index 0000000000..d01f6513c0
Binary files /dev/null and b/Resources/Textures/Tiles/Planet/basalt.rsi/basalt5.png differ
diff --git a/Resources/Textures/Tiles/Planet/basalt.rsi/meta.json b/Resources/Textures/Tiles/Planet/basalt.rsi/meta.json
new file mode 100644
index 0000000000..a16b6d3fb6
--- /dev/null
+++ b/Resources/Textures/Tiles/Planet/basalt.rsi/meta.json
@@ -0,0 +1,66 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/tgstation/tgstation/tree/423404b31e36c4605faacec881b324db8997b0a6",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "basalt1",
+ "delays": [
+ [
+ 2,
+ 2,
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "basalt2",
+ "delays": [
+ [
+ 2,
+ 2,
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "basalt3",
+ "delays": [
+ [
+ 2,
+ 2,
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "basalt4",
+ "delays": [
+ [
+ 2,
+ 2,
+ 2,
+ 2
+ ]
+ ]
+ },
+ {
+ "name": "basalt5",
+ "delays": [
+ [
+ 2,
+ 2,
+ 2,
+ 2
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file