From 6c27e4c3c35a4ff114f3e0def1b30e9619a144e6 Mon Sep 17 00:00:00 2001
From: Kano <89972582+kano-dot@users.noreply.github.com>
Date: Thu, 6 Aug 2026 12:33:13 +0300
Subject: [PATCH] Fixes exoplanet turf edge icons (#23009)
## About PR
- Fixes an issue with exoplanet turf edge icons layering below the
adjacent turfs
- Exoplanet turfs no longer attempt to add edge icons by default,
instead this is specified wherever it's relevant (this is still enabled
by default in base floor type, and honestly shouldn't be the case since
there's maybe 10 turf types need this vs every single turf in existence,
but i don't have the energy to go through them all)
- Removed an icon edge irrelevant turf
- Fixes exoplanet chasm turfs appearing red (no name icon in the file)
because it was trying to add edge turfs that had no icons with that name
the red eye sees all, remember our promise....
---
code/__DEFINES/layers.dm | 2 +-
code/game/turfs/simulated/floor.dm | 4 +-
.../overmap/exoplanets/decor/_turfs.dm | 9 ++-
.../overmap/exoplanets/decor/turfs/abyss.dm | 2 +-
.../exoplanets/decor/turfs/assunzione.dm | 3 -
.../overmap/exoplanets/decor/turfs/carpet.dm | 1 +
.../overmap/exoplanets/decor/turfs/grass.dm | 5 +-
.../overmap/exoplanets/decor/turfs/konyang.dm | 61 +++++++++++--------
.../overmap/exoplanets/decor/turfs/mineral.dm | 1 -
.../kano-exoplanet-turf-icon-fix.yml | 5 ++
.../port_volturno/port_volturno.dmm | 6 +-
11 files changed, 59 insertions(+), 40 deletions(-)
create mode 100644 html/changelogs/kano-exoplanet-turf-icon-fix.yml
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index 998955107a9..61b2ecaab01 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -50,7 +50,7 @@
#define GAME_PLANE -6
#define PLATING_LAYER 1
//ABOVE PLATING
- #define HOLOMAP_LAYER 1.01
+ #define ABOVE_PLATING_LAYER 1.01
#define DECAL_PLATING_LAYER 1.02
#define DISPOSALS_PIPE_LAYER 1.03
#define LATTICE_LAYER 1.04
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 0d89b1a29cf..c2d716a00b0 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -23,7 +23,9 @@
heat_capacity = 10000
var/lava = 0
- /// If the turf should generate details. Default: TRUE
+ /// Used for simple turf icon smoothing, which just adds edges to the turf if it's adjacent to a different type turf.
+ /// See `update_icon()` for the use case.
+ // ideally this shouldn't be true by default, not all turfs have edges
var/has_edge_icon = TRUE
/turf/simulated/floor/examine_descriptor(mob/user)
diff --git a/code/modules/overmap/exoplanets/decor/_turfs.dm b/code/modules/overmap/exoplanets/decor/_turfs.dm
index 08f160a6f82..b557916377a 100644
--- a/code/modules/overmap/exoplanets/decor/_turfs.dm
+++ b/code/modules/overmap/exoplanets/decor/_turfs.dm
@@ -9,6 +9,7 @@
has_resources = TRUE
footstep_sound = SFX_FOOTSTEP_ASTEROID
turf_flags = TURF_FLAG_BACKGROUND
+ has_edge_icon = FALSE
var/diggable = 1
var/dirt_color = "#7c5e42"
@@ -100,10 +101,13 @@
AddOverlays(resource_indicator)
if(LAZYLEN(decals))
AddOverlays(decals)
+
+ var/list/overlay_group = list()
for(var/direction in GLOB.cardinals)
var/turf/turf_to_check = get_step(src,direction)
if(!istype(turf_to_check, type))
var/image/rock_side = image(icon, "edge[pick(0,1,2)]", dir = turn(direction, 180))
+ rock_side.layer = ABOVE_PLATING_LAYER
switch(direction)
if(NORTH)
rock_side.pixel_y += world.icon_size
@@ -113,10 +117,13 @@
rock_side.pixel_x += world.icon_size
if(WEST)
rock_side.pixel_x -= world.icon_size
- overlays += rock_side
+ overlay_group += rock_side
+
else if(update_neighbors)
turf_to_check.update_icon()
+ AddOverlays(overlay_group)
+
/turf/simulated/floor/exoplanet/water/shallow
name = "shallow water"
desc = "Some water shallow enough to wade through."
diff --git a/code/modules/overmap/exoplanets/decor/turfs/abyss.dm b/code/modules/overmap/exoplanets/decor/turfs/abyss.dm
index 9574b8adee4..0298781659b 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/abyss.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/abyss.dm
@@ -5,6 +5,7 @@
smoothing_flags = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
smoothing_hints = SMOOTHHINT_CUT_F | SMOOTHHINT_ONLY_MATCH_TURF | SMOOTHHINT_TARGETS_NOT_UNIQUE
icon_state = "smooth"
+ has_resources = FALSE
var/static/list/forbidden_types = typecacheof(list(
/obj/singularity,
/obj/structure/lattice,
@@ -19,7 +20,6 @@
/obj/structure/sign,
/obj/structure/machinery/atmospherics/pipe
))
- has_resources = FALSE
/turf/simulated/floor/exoplanet/abyss/Initialize()
. = ..()
diff --git a/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm b/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm
index 42ddc32b2a7..f8967b59c88 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm
@@ -8,6 +8,3 @@
/turf/simulated/floor/exoplanet/assunzione/Initialize(mapload)
. = ..()
icon_state = "rust[rand(1,12)]"
-
-/turf/simulated/floor/exoplanet/assunzione/no_edge
- has_edge_icon = FALSE
diff --git a/code/modules/overmap/exoplanets/decor/turfs/carpet.dm b/code/modules/overmap/exoplanets/decor/turfs/carpet.dm
index ee87b3eb2e3..0d83902585e 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/carpet.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/carpet.dm
@@ -7,6 +7,7 @@
initial_flooring = /singleton/flooring/carpet
footstep_sound = SFX_FOOTSTEP_CARPET
has_resources = FALSE
+ has_edge_icon = TRUE
/turf/simulated/floor/exoplanet/carpet/art
icon_state = "artcarpet"
diff --git a/code/modules/overmap/exoplanets/decor/turfs/grass.dm b/code/modules/overmap/exoplanets/decor/turfs/grass.dm
index 0e03a36a4c7..fb00ca60f42 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/grass.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/grass.dm
@@ -6,6 +6,7 @@
icon_state = "greygrass"
color = "#799c4b"
footstep_sound = SFX_FOOTSTEP_GRASS
+ has_edge_icon = TRUE
/turf/simulated/floor/exoplanet/grass/Initialize()
. = ..()
@@ -36,7 +37,7 @@
icon = 'icons/turf/flooring/grass.dmi'
icon_state = "grass_stalk"
color = null
- has_edge_icon = null
+ has_edge_icon = FALSE
/turf/simulated/floor/exoplanet/grass/marsh
name = "marshy ground"
@@ -44,7 +45,7 @@
icon = 'icons/turf/fungal_marsh.dmi'
icon_state = "marsh"
color = null
- has_edge_icon = null
+ has_edge_icon = FALSE
footstep_sound = SFX_FOOTSTEP_WATER
/turf/simulated/floor/exoplanet/grass/marsh/Initialize()
diff --git a/code/modules/overmap/exoplanets/decor/turfs/konyang.dm b/code/modules/overmap/exoplanets/decor/turfs/konyang.dm
index 9e1dfd07355..7bc5e756852 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/konyang.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/konyang.dm
@@ -1,14 +1,3 @@
-/turf/simulated/floor/exoplanet/konyang
- name = "dense mossy grass"
- gender = PLURAL
- desc = "An alien moss covers the ground."
- icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
- icon_state = "grass"
- footstep_sound = SFX_FOOTSTEP_GRASS
-
-/turf/simulated/floor/exoplanet/konyang/no_edge
- has_edge_icon = FALSE
-
/obj/effect/konyang_foam
name = "coastal sea foam"
icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
@@ -31,44 +20,62 @@
icon_state = "mist_center"
layer = 5.1
-/turf/simulated/floor/exoplanet/konyang/wilting//manually mapped. To be surrounded by normal grass
+/turf/simulated/floor/exoplanet/konyang
+ name = "dense mossy grass"
+ gender = PLURAL
+ desc = "An alien moss covers the ground."
+ icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
+ icon_state = "grass"
+ footstep_sound = SFX_FOOTSTEP_GRASS
+ has_edge_icon = TRUE
+
+/turf/simulated/floor/exoplanet/konyang/no_edge
+ has_edge_icon = FALSE
+
+// manually mapped. To be surrounded by normal grass
+/turf/simulated/floor/exoplanet/konyang/wilting
name = "wilting mossy grass"
desc = "An alien moss covers the ground. This patch doesn't look so healthy..."
icon = 'icons/turf/flooring/exoplanet/konyang/moss_transition_1.dmi'
icon_state = "unsmooth"
+ has_edge_icon = FALSE
smoothing_flags = SMOOTH_MORE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
canSmoothWith = list(/turf/simulated/floor/exoplanet/konyang/wilting, /turf/simulated/floor/exoplanet/konyang/pink)
-/turf/simulated/floor/exoplanet/konyang/pink//manually mapped. To be surrounded by wilting grass
+// manually mapped. To be surrounded by wilting grass
+/turf/simulated/floor/exoplanet/konyang/pink
name = "blossoming mossy grass"
desc = "The moss here is blooming in a shade of pink."
icon = 'icons/turf/flooring/exoplanet/konyang/moss_transition_2.dmi'
icon_state = "unsmooth"
+ has_edge_icon = FALSE
smoothing_flags = SMOOTH_TRUE
-/turf/simulated/floor/exoplanet/dirt_konyang//a different path entirely so it will allow for edges to generate from grass
+// a different path entirely so it will allow for edges to generate from grass
+/turf/simulated/floor/exoplanet/dirt_konyang
name = "compacted dirt"
desc = "A patch of dirt."
icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
icon_state = "dirt"
- layer = 1.99//to let the grass edges go over it, which otherwise doesnt happen due to positioning and byond layering
+ layer = 1.99 // to let the grass edges go over it, which otherwise doesnt happen due to positioning and byond layering
footstep_sound = SFX_FOOTSTEP_ASTEROID
- has_edge_icon = FALSE
-/turf/simulated/floor/exoplanet/dirt_konyang/cave
- name = "dense compacted dirt"
-
-/turf/simulated/floor/exoplanet/dirt_konyang/cave/Initialize() // to make these tiles dark even on daytime exoplanets
- . = ..()
- set_light(0, 1, null)
- footprint_color = null
- update_icon(1)
-
-/turf/simulated/floor/exoplanet/dirt_konyang/sand//same as above
+// same as above
+/turf/simulated/floor/exoplanet/dirt_konyang/sand
name = "fine coastal sand"
desc = "Some fine, white sand."
icon = 'icons/turf/flooring/exoplanet/konyang/konyang_beach.dmi'
icon_state = "sand"
footstep_sound = SFX_FOOTSTEP_ASTEROID
smoothing_flags = SMOOTH_FALSE
- has_edge_icon = FALSE
+
+/turf/simulated/floor/exoplanet/dirt_konyang/cave
+ name = "dense compacted dirt"
+
+// to make these tiles dark even on daytime exoplanets
+/turf/simulated/floor/exoplanet/dirt_konyang/cave/Initialize()
+ . = ..()
+ set_light(0, 1, null)
+ footprint_color = null
+ update_icon(1)
+
diff --git a/code/modules/overmap/exoplanets/decor/turfs/mineral.dm b/code/modules/overmap/exoplanets/decor/turfs/mineral.dm
index 1c4f81a4487..a4dceba677e 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/mineral.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/mineral.dm
@@ -11,7 +11,6 @@
icon = 'icons/turf/flooring/ice_cavern.dmi'
icon_state = "icy_rock"
temperature = T0C - 5
- has_edge_icon = FALSE
/turf/simulated/floor/exoplanet/mineral/adhomai/Initialize(mapload)
. = ..()
diff --git a/html/changelogs/kano-exoplanet-turf-icon-fix.yml b/html/changelogs/kano-exoplanet-turf-icon-fix.yml
new file mode 100644
index 00000000000..1d702cdf780
--- /dev/null
+++ b/html/changelogs/kano-exoplanet-turf-icon-fix.yml
@@ -0,0 +1,5 @@
+author: kano
+delete-after: True
+changes:
+ - bugfix: "Fixed an issue with exoplanet turf edge icons layering below the adjacent turfs."
+ - code_imp: "Exoplanet turfs no longer attempt to add edge icons by default."
diff --git a/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm b/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm
index f5035960725..cccf5a98e5c 100644
--- a/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm
+++ b/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm
@@ -15427,7 +15427,7 @@
pixel_y = 24;
density = 0
},
-/turf/simulated/floor/exoplanet/assunzione/no_edge,
+/turf/simulated/floor/exoplanet/assunzione,
/area/port_volturno/interior/witch_hand/bar)
"kQv" = (
/obj/structure/stairs/west,
@@ -20786,7 +20786,7 @@
/obj/effect/decal/curb/corner{
dir = 8
},
-/turf/simulated/floor/exoplanet/assunzione/no_edge,
+/turf/simulated/floor/exoplanet/assunzione,
/area/port_volturno/interior/witch_hand/bar)
"owW" = (
/obj/structure/machinery/papershredder{
@@ -32557,7 +32557,7 @@
/obj/structure/table/reinforced/wood{
pixel_y = 3
},
-/turf/simulated/floor/exoplanet/assunzione/no_edge,
+/turf/simulated/floor/exoplanet/assunzione,
/area/port_volturno/interior/witch_hand/bar)
"wKA" = (
/obj/effect/decal/cleanable/dirt,