diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 2b75057dd0d..9b06a745e91 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -84,8 +84,6 @@
#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays"
///from base of atom/update_icon(): (signalOut, did_anything)
#define COMSIG_ATOM_UPDATED_ICON "atom_updated_icon"
-///from base of [atom/proc/set_smoothed_icon_state]: (old_junction, new_junction)
-#define COMSIG_ATOM_SMOOTH_BITMASK "atom_smooth_bitmask"
///from base of atom/Entered(): (atom/movable/entering, /atom)
#define COMSIG_ATOM_ENTERED "atom_entered"
///from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm
index 03ddb16067a..23f0746e2e1 100644
--- a/code/__DEFINES/icon_smoothing.dm
+++ b/code/__DEFINES/icon_smoothing.dm
@@ -51,43 +51,27 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_FLOOR_ICE S_TURF(8) ///turf/open/floor/plating/ice
#define SMOOTH_GROUP_FLOOR_SNOWED S_TURF(9) ///turf/open/floor/plating/snowed
-#define SMOOTH_GROUP_CARPET S_TURF(10) ///turf/open/floor/carpet
-#define SMOOTH_GROUP_CARPET_BLACK S_TURF(11) ///turf/open/floor/carpet/black
-#define SMOOTH_GROUP_CARPET_BLUE S_TURF(12) ///turf/open/floor/carpet/blue
-#define SMOOTH_GROUP_CARPET_CYAN S_TURF(13) ///turf/open/floor/carpet/cyan
-#define SMOOTH_GROUP_CARPET_GREEN S_TURF(14) ///turf/open/floor/carpet/green
-#define SMOOTH_GROUP_CARPET_ORANGE S_TURF(15) ///turf/open/floor/carpet/orange
-#define SMOOTH_GROUP_CARPET_PURPLE S_TURF(16) ///turf/open/floor/carpet/purple
-#define SMOOTH_GROUP_CARPET_RED S_TURF(17) ///turf/open/floor/carpet/red
-#define SMOOTH_GROUP_CARPET_ROYAL_BLACK S_TURF(18) ///turf/open/floor/carpet/royalblack
-#define SMOOTH_GROUP_CARPET_ROYAL_BLUE S_TURF(19) ///turf/open/floor/carpet/royalblue
-#define SMOOTH_GROUP_CARPET_EXECUTIVE S_TURF(20) ///turf/open/floor/carpet/executive
-#define SMOOTH_GROUP_CARPET_STELLAR S_TURF(21) ///turf/open/floor/carpet/stellar
-#define SMOOTH_GROUP_CARPET_DONK S_TURF(22) ///turf/open/floor/carpet/donk
-#define SMOOTH_GROUP_CARPET_EMISSIVE S_TURF(23) ///turf/open/floor/carpet/emissive
-#define SMOOTH_GROUP_CARPET_NEON S_TURF(24) ///turf/open/floor/carpet/emissive/neon
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON S_TURF(25) ///turf/open/floor/carpet/emissive/neon/simple
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE S_TURF(26) ///turf/open/floor/carpet/emissive/neon/simple/white
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED S_TURF(27) ///turf/open/floor/carpet/emissive/neon/simple/red
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE S_TURF(28) ///turf/open/floor/carpet/emissive/neon/simple/orange
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW S_TURF(29) ///turf/open/floor/carpet/emissive/neon/simple/yellow
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME S_TURF(30) ///turf/open/floor/carpet/emissive/neon/simple/lime
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN S_TURF(31) ///turf/open/floor/carpet/emissive/neon/simple/green
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN S_TURF(32) ///turf/open/floor/carpet/emissive/neon/simple/cyan
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL S_TURF(33) ///turf/open/floor/carpet/emissive/neon/simple/teal
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE S_TURF(34) ///turf/open/floor/carpet/emissive/neon/simple/blue
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE S_TURF(35) ///turf/open/floor/carpet/emissive/neon/simple/purple
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET S_TURF(36) ///turf/open/floor/carpet/emissive/neon/simple/violet
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK S_TURF(37) ///turf/open/floor/carpet/emissive/neon/simple/pink
-#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLACK S_TURF(38) ///turf/open/floor/carpet/emissive/neon/simple/black
+#define SMOOTH_GROUP_CARPET S_TURF(10) ///turf/open/floor/carpet
+#define SMOOTH_GROUP_CARPET_BLACK S_TURF(11) ///turf/open/floor/carpet/black
+#define SMOOTH_GROUP_CARPET_BLUE S_TURF(12) ///turf/open/floor/carpet/blue
+#define SMOOTH_GROUP_CARPET_CYAN S_TURF(13) ///turf/open/floor/carpet/cyan
+#define SMOOTH_GROUP_CARPET_GREEN S_TURF(14) ///turf/open/floor/carpet/green
+#define SMOOTH_GROUP_CARPET_ORANGE S_TURF(15) ///turf/open/floor/carpet/orange
+#define SMOOTH_GROUP_CARPET_PURPLE S_TURF(16) ///turf/open/floor/carpet/purple
+#define SMOOTH_GROUP_CARPET_RED S_TURF(17) ///turf/open/floor/carpet/red
+#define SMOOTH_GROUP_CARPET_ROYAL_BLACK S_TURF(18) ///turf/open/floor/carpet/royalblack
+#define SMOOTH_GROUP_CARPET_ROYAL_BLUE S_TURF(19) ///turf/open/floor/carpet/royalblue
+#define SMOOTH_GROUP_CARPET_EXECUTIVE S_TURF(20) ///turf/open/floor/carpet/executive
+#define SMOOTH_GROUP_CARPET_STELLAR S_TURF(21) ///turf/open/floor/carpet/stellar
+#define SMOOTH_GROUP_CARPET_DONK S_TURF(22) ///turf/open/floor/carpet/donk
-#define SMOOTH_GROUP_CLOSED_TURFS S_TURF(40) ///turf/closed
-#define SMOOTH_GROUP_MATERIAL_WALLS S_TURF(41) ///turf/closed/wall/material
-#define SMOOTH_GROUP_SYNDICATE_WALLS S_TURF(42) ///turf/closed/wall/r_wall/syndicate, /turf/closed/indestructible/syndicate
-#define SMOOTH_GROUP_HOTEL_WALLS S_TURF(43) ///turf/closed/indestructible/hotelwall
-#define SMOOTH_GROUP_MINERAL_WALLS S_TURF(44) ///turf/closed/mineral, /turf/closed/indestructible
-#define SMOOTH_GROUP_BOSS_WALLS S_TURF(45) ///turf/closed/indestructible/riveted/boss
-#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(46) ///turf/closed/wall/mineral/titanium/survival
+#define SMOOTH_GROUP_CLOSED_TURFS S_TURF(24) ///turf/closed
+#define SMOOTH_GROUP_MATERIAL_WALLS S_TURF(25) ///turf/closed/wall/material
+#define SMOOTH_GROUP_SYNDICATE_WALLS S_TURF(26) ///turf/closed/wall/r_wall/syndicate, /turf/closed/indestructible/syndicate
+#define SMOOTH_GROUP_HOTEL_WALLS S_TURF(27) ///turf/closed/indestructible/hotelwall
+#define SMOOTH_GROUP_MINERAL_WALLS S_TURF(28) ///turf/closed/mineral, /turf/closed/indestructible
+#define SMOOTH_GROUP_BOSS_WALLS S_TURF(29) ///turf/closed/indestructible/riveted/boss
+#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(30) ///turf/closed/wall/mineral/titanium/survival
#define MAX_S_TURF SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS //Always match this value with the one above it.
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index d4d5876be8e..170b8842f54 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -92,88 +92,66 @@
#define MASSIVE_OBJ_LAYER 11
#define POINT_LAYER 12
-#define EMISSIVE_BLOCKER_PLANE 10
+#define EMISSIVE_BLOCKER_PLANE 12
+#define EMISSIVE_BLOCKER_LAYER 12
#define EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE"
-#define TURF_EMISSIVE_BLOCKER_PLANE 11
-#define TURF_EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE_TURF"
-#define STRUCTURE_EMISSIVE_BLOCKER_PLANE 12
-#define STRUCTURE_EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE_STRUCTURE"
-#define ITEM_EMISSIVE_BLOCKER_PLANE 13
-#define ITEM_EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE_ITEM"
-#define MOB_EMISSIVE_BLOCKER_PLANE 14
-#define MOB_EMISSIVE_BLOCKER_RENDER_TARGET "*EMISSIVE_BLOCKER_PLANE_MOB"
-#define EMISSIVE_PLANE 20
+#define CHAT_LAYER 12.0001 // Do not insert layers between these two values
+#define CHAT_LAYER_MAX 12.9999
+
+#define EMISSIVE_PLANE 13
+#define EMISSIVE_LAYER 13
#define EMISSIVE_RENDER_TARGET "*EMISSIVE_PLANE"
-#define EMISSIVE_TURF_PLANE 21
-#define EMISSIVE_TURF_RENDER_TARGET "*EMISSIVE_PLANE_TURF"
-#define EMISSIVE_STRUCTURE_PLANE 22
-#define EMISSIVE_STRUCTURE_RENDER_TARGET "*EMISSIVE_PLANE_STRUCTURE"
-#define EMISSIVE_ITEM_PLANE 23
-#define EMISSIVE_ITEM_RENDER_TARGET "*EMISSIVE_PLANE_ITEM"
-#define EMISSIVE_MOB_PLANE 24
-#define EMISSIVE_MOB_RENDER_TARGET "*EMISSIVE_PLANE_MOB"
-#define EMISSIVE_UNBLOCKABLE_PLANE 31
+
+#define EMISSIVE_UNBLOCKABLE_PLANE 14
+#define EMISSIVE_UNBLOCKABLE_LAYER 14
#define EMISSIVE_UNBLOCKABLE_RENDER_TARGET "*EMISSIVE_UNBLOCKABLE_PLANE"
-// Layer definitions for emissive and emissive blocker layers.
-// Since neither are directly rendered these are just used to tell which blocker planes can block which emissive layers.
-// Higher layer blocker planes mask lower layer emissive planes.
-// In the case of equivalent layers the emissive plane master takes priority so structures don't block their own overlays.
-#define EMISSIVE_LAYER 20
-#define EMISSIVE_TURF_LAYER 21
-#define EMISSIVE_STRUCTURE_LAYER 22
-#define EMISSIVE_ITEM_LAYER 23
-#define EMISSIVE_MOB_LAYER 24
-#define EMISSIVE_UNBLOCKABLE_LAYER 31
-
-#define LIGHTING_PLANE 41
-#define LIGHTING_LAYER 41
+#define LIGHTING_PLANE 15
+#define LIGHTING_LAYER 15
#define LIGHTING_RENDER_TARGET "LIGHT_PLANE"
#define RAD_TEXT_LAYER 15.1
-#define O_LIGHTING_VISUAL_PLANE 42
-#define O_LIGHTING_VISUAL_LAYER 42
+#define O_LIGHTING_VISUAL_PLANE 16
+#define O_LIGHTING_VISUAL_LAYER 16
#define O_LIGHTING_VISUAL_RENDER_TARGET "O_LIGHT_VISUAL_PLANE"
-#define ABOVE_LIGHTING_PLANE 43
-#define ABOVE_LIGHTING_LAYER 43
+#define ABOVE_LIGHTING_PLANE 17
+#define ABOVE_LIGHTING_LAYER 17
#define ABOVE_LIGHTING_RENDER_TARGET "ABOVE_LIGHTING_PLANE"
-#define BYOND_LIGHTING_PLANE 44
-#define BYOND_LIGHTING_LAYER 44
+#define BYOND_LIGHTING_PLANE 18
+#define BYOND_LIGHTING_LAYER 18
#define BYOND_LIGHTING_RENDER_TARGET "BYOND_LIGHTING_PLANE"
-#define CAMERA_STATIC_PLANE 45
-#define CAMERA_STATIC_LAYER 45
+#define CAMERA_STATIC_PLANE 19
+#define CAMERA_STATIC_LAYER 19
#define CAMERA_STATIC_RENDER_TARGET "CAMERA_STATIC_PLANE"
-#define RUNECHAT_PLANE 46
-#define CHAT_LAYER 12.0001 // Do not insert layers between these two values
-#define CHAT_LAYER_MAX 12.9999
+#define RUNECHAT_PLANE 20
-#define ATMOS_GROUP_PLANE 47
-#define ATMOS_GROUP_LAYER 47
+#define ATMOS_GROUP_PLANE 21
+#define ATMOS_GROUP_LAYER 21
//HUD layer defines
-#define FULLSCREEN_PLANE 51
-#define FLASH_LAYER 51
-#define FULLSCREEN_LAYER 51.1
-#define UI_DAMAGE_LAYER 51.2
-#define BLIND_LAYER 51.3
-#define CRIT_LAYER 51.4
-#define CURSE_LAYER 51.5
+#define FULLSCREEN_PLANE 31
+#define FLASH_LAYER 31
+#define FULLSCREEN_LAYER 31.1
+#define UI_DAMAGE_LAYER 31.2
+#define BLIND_LAYER 31.3
+#define CRIT_LAYER 31.4
+#define CURSE_LAYER 31.5
#define FULLSCREEN_RENDER_TARGET "FULLSCREEN_PLANE"
-#define HUD_PLANE 52
-#define HUD_LAYER 52
+#define HUD_PLANE 42
+#define HUD_LAYER 42
#define HUD_RENDER_TARGET "HUD_PLANE"
-#define ABOVE_HUD_PLANE 53
-#define ABOVE_HUD_LAYER 53
+#define ABOVE_HUD_PLANE 43
+#define ABOVE_HUD_LAYER 43
#define ABOVE_HUD_RENDER_TARGET "ABOVE_HUD_PLANE"
-#define SPLASHSCREEN_LAYER 64
-#define SPLASHSCREEN_PLANE 64
+#define SPLASHSCREEN_LAYER 54
+#define SPLASHSCREEN_PLANE 54
#define SPLASHSCREEN_RENDER_TARGET "SPLASHSCREEN_PLANE"
diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm
index ebd697f548a..17e9adf93f1 100644
--- a/code/__HELPERS/icon_smoothing.dm
+++ b/code/__HELPERS/icon_smoothing.dm
@@ -346,7 +346,6 @@ DEFINE_BITFIELD(smoothing_junction, list(
. = smoothing_junction
smoothing_junction = new_junction
icon_state = "[base_icon_state]-[smoothing_junction]"
- SEND_SIGNAL(src, COMSIG_ATOM_SMOOTH_BITMASK, ., new_junction)
/turf/closed/set_smoothed_icon_state(new_junction)
diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm
index cea4a318eb9..b7d66406164 100644
--- a/code/_onclick/hud/plane_master.dm
+++ b/code/_onclick/hud/plane_master.dm
@@ -70,83 +70,37 @@
/atom/movable/screen/plane_master/lighting/Initialize()
. = ..()
- var/i = 1
- for(var/plane in subtypesof(/atom/movable/screen/plane_master/emissive))
- var/atom/movable/screen/plane_master/emissive/emissive_plane = plane
- add_filter("emissives-[i] ([initial(emissive_plane.name)])", i++, alpha_mask_filter(render_source = initial(emissive_plane.emissive_target), flags = MASK_INVERSE))
+ add_filter("emissives", 1, alpha_mask_filter(render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE))
+ add_filter("unblockable_emissives", 2, alpha_mask_filter(render_source = EMISSIVE_UNBLOCKABLE_RENDER_TARGET, flags = MASK_INVERSE))
+ add_filter("object_lighting", 3, alpha_mask_filter(render_source = O_LIGHTING_VISUAL_RENDER_TARGET, flags = MASK_INVERSE))
/**
* Things placed on this mask the lighting plane. Doesn't render directly.
*
- * Gets masked by blocking planes. Use for things that you want blocked by
+ * Gets masked by blocking plane. Use for things that you want blocked by
* mobs, items, etc.
*/
/atom/movable/screen/plane_master/emissive
name = "emissive plane master"
plane = EMISSIVE_PLANE
- layer = EMISSIVE_LAYER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
render_target = EMISSIVE_RENDER_TARGET
- /// Basically a second copy of the `render_target` because `initial(plane_master_typepath.render_target)` always returns `null` because _BYOND_
- var/emissive_target = EMISSIVE_RENDER_TARGET
/atom/movable/screen/plane_master/emissive/Initialize()
. = ..()
- var/i = 1
- for(var/plane in subtypesof(/atom/movable/screen/plane_master/emissive_blocker))
- var/atom/movable/screen/plane_master/emissive_blocker/blocker_plane = plane
- if(initial(blocker_plane.layer) <= layer)
- continue
- add_filter("emissive_block-[i] (initial(blocker_plane.name))", i++, alpha_mask_filter(render_source = initial(blocker_plane.blocker_target), flags = MASK_INVERSE))
+ add_filter("emissive_block", 1, alpha_mask_filter(render_source = EMISSIVE_BLOCKER_RENDER_TARGET, flags = MASK_INVERSE))
-/// The plane master used for emissive turfs and turf overlays
-/atom/movable/screen/plane_master/emissive/emissive_turf
- name = "emissive turf plane master"
- plane = EMISSIVE_TURF_PLANE
- layer = EMISSIVE_TURF_LAYER
- render_target = EMISSIVE_TURF_RENDER_TARGET
- emissive_target = EMISSIVE_TURF_RENDER_TARGET
-
-/// The plane master used for emissive structures and structure overlays
-/atom/movable/screen/plane_master/emissive/emissive_structure
- name = "emissive structure plane master"
- plane = EMISSIVE_STRUCTURE_PLANE
- layer = EMISSIVE_STRUCTURE_LAYER
- render_target = EMISSIVE_STRUCTURE_RENDER_TARGET
- emissive_target = EMISSIVE_STRUCTURE_RENDER_TARGET
-
-/// The plane master used for emissive items and item overlays
-/atom/movable/screen/plane_master/emissive/emissive_item
- name = "emissive item plane master"
- plane = EMISSIVE_ITEM_PLANE
- layer = EMISSIVE_ITEM_LAYER
- render_target = EMISSIVE_ITEM_RENDER_TARGET
- emissive_target = EMISSIVE_ITEM_RENDER_TARGET
-
-/// The plane master used for emissive mobs and mob overlays
-/atom/movable/screen/plane_master/emissive/emissive_mob
- name = "emissive mob plane master"
- plane = EMISSIVE_MOB_PLANE
- layer = EMISSIVE_MOB_LAYER
- render_target = EMISSIVE_MOB_RENDER_TARGET
- emissive_target = EMISSIVE_MOB_RENDER_TARGET
-
-/// The plane master used for unblockable emissive effects
-/atom/movable/screen/plane_master/emissive/unblockable
+/**
+ * Things placed on this always mask the lighting plane. Doesn't render directly.
+ *
+ * Always masks the light plane, isn't blocked by anything. Use for on mob glows,
+ * magic stuff, etc.
+ */
+/atom/movable/screen/plane_master/emissive_unblockable
name = "unblockable emissive plane master"
plane = EMISSIVE_UNBLOCKABLE_PLANE
- layer = EMISSIVE_UNBLOCKABLE_LAYER
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
render_target = EMISSIVE_UNBLOCKABLE_RENDER_TARGET
- emissive_target = EMISSIVE_UNBLOCKABLE_RENDER_TARGET
-
-/// The plane master used for overlay lighting masking
-/atom/movable/screen/plane_master/emissive/o_light_visual
- name = "overlight light visual plane master"
- layer = O_LIGHTING_VISUAL_LAYER
- plane = O_LIGHTING_VISUAL_PLANE
- render_target = O_LIGHTING_VISUAL_RENDER_TARGET
- emissive_target = O_LIGHTING_VISUAL_RENDER_TARGET
- blend_mode = BLEND_MULTIPLY
/**
* Things placed on this layer mask the emissive layer. Doesn't render directly
@@ -156,43 +110,8 @@
/atom/movable/screen/plane_master/emissive_blocker
name = "emissive blocker plane master"
plane = EMISSIVE_BLOCKER_PLANE
- layer = EMISSIVE_LAYER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
render_target = EMISSIVE_BLOCKER_RENDER_TARGET
- /// Basically a second copy of the `render_target` because `initial(plane_master_typepath.render_target)` always returns `null` because _BYOND_
- var/blocker_target = EMISSIVE_BLOCKER_RENDER_TARGET
-
-/// The emissive blocker plane master used by structures to block... something. Presumably whatever's under turfs. (NOTE: Not actually implemented because adding this to every turf would be expensive and there's no reason to use this yet)
-/atom/movable/screen/plane_master/emissive_blocker/turf_emissive
- name = "turf emissive blocker plane master"
- plane = TURF_EMISSIVE_BLOCKER_PLANE
- layer = EMISSIVE_TURF_LAYER
- render_target = TURF_EMISSIVE_BLOCKER_RENDER_TARGET
- blocker_target = TURF_EMISSIVE_BLOCKER_RENDER_TARGET
-
-/// The emissive blocker plane master used by structures to block emissive turfs and turf overlays
-/atom/movable/screen/plane_master/emissive_blocker/structure_emissive
- name = "structure emissive blocker plane master"
- plane = STRUCTURE_EMISSIVE_BLOCKER_PLANE
- layer = EMISSIVE_STRUCTURE_LAYER
- render_target = STRUCTURE_EMISSIVE_BLOCKER_RENDER_TARGET
- blocker_target = STRUCTURE_EMISSIVE_BLOCKER_RENDER_TARGET
-
-/// The emissive blocker plane master used by items to block emissive turfs, structures and overlays thereof
-/atom/movable/screen/plane_master/emissive_blocker/item_emissive
- name = "item emissive blocker plane master"
- plane = ITEM_EMISSIVE_BLOCKER_PLANE
- layer = EMISSIVE_ITEM_LAYER
- render_target = ITEM_EMISSIVE_BLOCKER_RENDER_TARGET
- blocker_target = ITEM_EMISSIVE_BLOCKER_RENDER_TARGET
-
-/// The emissive blocker plane master used by items to block emissive turfs, structures, items and overlays thereof
-/atom/movable/screen/plane_master/emissive_blocker/mob_emissive
- name = "mob emissive blocker plane master"
- plane = MOB_EMISSIVE_BLOCKER_PLANE
- layer = EMISSIVE_MOB_LAYER
- render_target = MOB_EMISSIVE_BLOCKER_RENDER_TARGET
- blocker_target = MOB_EMISSIVE_BLOCKER_RENDER_TARGET
///Contains space parallax
/atom/movable/screen/plane_master/parallax
@@ -218,6 +137,14 @@
blend_mode = BLEND_OVERLAY
alpha = 0
+/atom/movable/screen/plane_master/o_light_visual
+ name = "overlight light visual plane master"
+ layer = O_LIGHTING_VISUAL_LAYER
+ plane = O_LIGHTING_VISUAL_PLANE
+ render_target = O_LIGHTING_VISUAL_RENDER_TARGET
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ blend_mode = BLEND_MULTIPLY
+
/atom/movable/screen/plane_master/runechat
name = "runechat plane master"
plane = RUNECHAT_PLANE
diff --git a/code/datums/components/storage/concrete/stack.dm b/code/datums/components/storage/concrete/stack.dm
index 41effa6ea8f..210f22ea5a3 100644
--- a/code/datums/components/storage/concrete/stack.dm
+++ b/code/datums/components/storage/concrete/stack.dm
@@ -35,7 +35,7 @@
var/obj/item/stack/_S = i
if(!istype(_S))
continue
- if(S.can_merge(_S))
+ if(_S.merge_type == S.merge_type)
_S.add(can_insert)
S.use(can_insert, TRUE)
return TRUE
diff --git a/code/datums/elements/decals/_decal.dm b/code/datums/elements/decal.dm
similarity index 82%
rename from code/datums/elements/decals/_decal.dm
rename to code/datums/elements/decal.dm
index 30d5506fb67..d33f5bac775 100644
--- a/code/datums/elements/decals/_decal.dm
+++ b/code/datums/elements/decal.dm
@@ -5,18 +5,18 @@
var/description
var/mutable_appearance/pic
-/datum/element/decal/Attach(atom/target, _icon, _icon_state, _dir, _cleanable=FALSE, _color, _layer=TURF_LAYER, _plane=FLOOR_PLANE, _description, _alpha=255)
+/datum/element/decal/Attach(atom/target, _icon, _icon_state, _dir, _cleanable=FALSE, _color, _layer=TURF_LAYER, _description, _alpha=255)
. = ..()
- if(!isatom(target) || !generate_appearance(_icon, _icon_state, _dir, _layer, _plane, _color, _alpha, target))
+ if(!isatom(target) || !generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, target))
return ELEMENT_INCOMPATIBLE
description = _description
cleanable = _cleanable
- RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlay, TRUE)
+ RegisterSignal(target,COMSIG_ATOM_UPDATE_OVERLAYS,.proc/apply_overlay, TRUE)
if(target.flags_1 & INITIALIZED_1)
target.update_icon() //could use some queuing here now maybe.
else
- RegisterSignal(target, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE, .proc/late_update_icon, TRUE)
+ RegisterSignal(target,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE,.proc/late_update_icon, TRUE)
if(isitem(target))
INVOKE_ASYNC(target, /obj/item/.proc/update_slot_icon, TRUE)
if(_dir)
@@ -26,12 +26,11 @@
if(_description)
RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/examine,TRUE)
-/datum/element/decal/proc/generate_appearance(_icon, _icon_state, _dir, _layer, _plane, _color, _alpha, source)
+/datum/element/decal/proc/generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, source)
if(!_icon || !_icon_state)
return FALSE
var/temp_image = image(_icon, null, _icon_state, _layer, _dir)
pic = new(temp_image)
- pic.plane = _plane
pic.color = _color
pic.alpha = _alpha
return TRUE
@@ -63,7 +62,7 @@
if(old_dir == new_dir)
return
Detach(source)
- source.AddElement(/datum/element/decal, pic.icon, pic.icon_state, new_dir, cleanable, pic.color, pic.layer, pic.plane, description, pic.alpha)
+ source.AddElement(/datum/element/decal, pic.icon, pic.icon_state, new_dir, cleanable, pic.color, pic.layer, description, pic.alpha)
/datum/element/decal/proc/clean_react(datum/source, clean_types)
SIGNAL_HANDLER
diff --git a/code/datums/elements/decals/blood.dm b/code/datums/elements/decals/blood.dm
index b71088f5487..c5ad4a3c726 100644
--- a/code/datums/elements/decals/blood.dm
+++ b/code/datums/elements/decals/blood.dm
@@ -1,16 +1,18 @@
/datum/element/decal/blood
-/datum/element/decal/blood/Attach(datum/target, _icon, _icon_state, _dir, _cleanable=CLEAN_TYPE_BLOOD, _color, _layer=ABOVE_OBJ_LAYER, _plane=FLOAT_PLANE, _description, _alpha=255)
+/datum/element/decal/blood/Attach(datum/target, _icon, _icon_state, _dir, _cleanable=CLEAN_TYPE_BLOOD, _color, _layer=ABOVE_OBJ_LAYER)
if(!isitem(target))
return ELEMENT_INCOMPATIBLE
+
. = ..()
+
RegisterSignal(target, COMSIG_ATOM_GET_EXAMINE_NAME, .proc/get_examine_name, TRUE)
/datum/element/decal/blood/Detach(atom/source, force)
UnregisterSignal(source, COMSIG_ATOM_GET_EXAMINE_NAME)
return ..()
-/datum/element/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _plane, _color, _alpha, source)
+/datum/element/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, source)
var/obj/item/I = source
if(!_icon)
_icon = 'icons/effects/blood.dmi'
diff --git a/code/datums/elements/decals/smoothing.dm b/code/datums/elements/decals/smoothing.dm
deleted file mode 100644
index 4e44140b941..00000000000
--- a/code/datums/elements/decals/smoothing.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Decals that support smoothing with the parent atom
- *
- * Currently only supports bitmask smoothing
- */
-/datum/element/decal/smoothing
- /// The icon state used as the base of the smoothed icon state
- var/base_icon_state
- /// The smoothing junction used to generate the smoothed icon state
- var/smoothing_junction
-
-/datum/element/decal/smoothing/Attach(atom/target, _icon, _icon_state, _dir, _cleanable=FALSE, _color, _layer=TURF_LAYER, _plane=FLOOR_PLANE, _description, _alpha=255, _smoothing_junction=0)
- base_icon_state = _icon_state
- smoothing_junction = _smoothing_junction
- _icon_state = "[_icon_state]-[_smoothing_junction]"
- . = ..()
- if(. & ELEMENT_INCOMPATIBLE)
- return
- RegisterSignal(target, COMSIG_ATOM_SMOOTH_BITMASK, .proc/smooth_react)
-
-/datum/element/decal/smoothing/Detach(atom/source, force)
- UnregisterSignal(source, COMSIG_ATOM_SMOOTH_BITMASK)
- return ..()
-
-
-/datum/element/decal/smoothing/rotate_react(datum/source, old_dir, new_dir)
- // SIGNAL_HANDLER <-- Already defined on parent. We can't define it again and we can't call parent. So we're stuck.
- if(old_dir == new_dir)
- return
- Detach(source)
- source.AddElement(/datum/element/decal/smoothing, pic.icon, base_icon_state, new_dir, cleanable, pic.color, pic.layer, pic.plane, description, pic.alpha, smoothing_junction)
-
-/// Reacts to the source atom smoothing
-/datum/element/decal/smoothing/proc/smooth_react(datum/source, old_junction, new_junction)
- SIGNAL_HANDLER
-
- if(old_junction == new_junction)
- return
- Detach(source)
- source.AddElement(/datum/element/decal/smoothing, pic.icon, base_icon_state, pic.dir, cleanable, pic.color, pic.layer, pic.plane, description, pic.alpha, new_junction)
diff --git a/code/datums/elements/emissive_blocker.dm b/code/datums/elements/emissive_blocker.dm
deleted file mode 100644
index 0c4912fc6bb..00000000000
--- a/code/datums/elements/emissive_blocker.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Applies an emissive blocker vis overlay to the target atom and re-applies it whenever the atom updates its vis overlays
- *
- * Used to make emissive blockers compatible with structures that mess with their vis overlays
- * If this isn't handled neon carpets start glowing through vending machines and computer consoles
- */
-/datum/element/emissive_blocker
- element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE
- id_arg_index = 2
- /// The plane used
- var/blocker_plane
-
-/datum/element/emissive_blocker/Attach(atom/target, plane)
- if(!isatom(target))
- return ELEMENT_INCOMPATIBLE
- if(!isnum(plane))
- stack_trace("Invalid plane value passed to emissive blocker element")
- return ELEMENT_INCOMPATIBLE
-
- blocker_plane = plane
- RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/update_blocker)
- update_blocker(target, null)
- return ..()
-
-/datum/element/emissive_blocker/Detach(datum/source, force)
- UnregisterSignal(source, COMSIG_ATOM_UPDATE_OVERLAYS)
- return ..()
-
-/// Re-applies the emissive blocker vis overlay
-/datum/element/emissive_blocker/proc/update_blocker(atom/source, list/overlays)
- SIGNAL_HANDLER
- SSvis_overlays.add_vis_overlay(source, source.icon, source.icon_state, EMISSIVE_LAYER, blocker_plane, source.dir)
- return NONE
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index f6eae28fae0..a4816ca7220 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -652,9 +652,6 @@
. = TRUE
if(!(signalOut & COMSIG_ATOM_NO_UPDATE_OVERLAYS))
- if(LAZYLEN(managed_vis_overlays))
- SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
-
var/list/new_overlays = update_overlays()
if(managed_overlays)
cut_overlay(managed_overlays)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index a8cda567a93..fe10ef7aa3c 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -58,8 +58,6 @@
/// Either FALSE, [EMISSIVE_BLOCK_GENERIC], or [EMISSIVE_BLOCK_UNIQUE]
var/blocks_emissive = FALSE
- /// The plane this uses for emissive effects and emissive blockers
- var/emissive_blocker_plane = EMISSIVE_PLANE
///Internal holder for emissive blocker object, do not use directly use blocks_emissive
var/atom/movable/emissive_blocker/em_block
@@ -79,10 +77,10 @@
. = ..()
switch(blocks_emissive)
if(EMISSIVE_BLOCK_GENERIC)
- AddElement(/datum/element/emissive_blocker, emissive_blocker_plane)
+ update_emissive_block()
if(EMISSIVE_BLOCK_UNIQUE)
render_target = ref(src)
- em_block = new(src, render_target, emissive_blocker_plane)
+ em_block = new(src, render_target)
vis_contents += em_block
if(opacity)
AddElement(/datum/element/light_blocking)
@@ -128,6 +126,18 @@
moveToNullspace()
+
+/atom/movable/proc/update_emissive_block()
+ if(blocks_emissive != EMISSIVE_BLOCK_GENERIC)
+ return
+ if(length(managed_vis_overlays))
+ for(var/a in managed_vis_overlays)
+ var/obj/effect/overlay/vis/vs
+ if(vs.plane == EMISSIVE_BLOCKER_PLANE)
+ SSvis_overlays.remove_vis_overlay(src, list(vs))
+ break
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, EMISSIVE_BLOCKER_LAYER, EMISSIVE_BLOCKER_PLANE, dir)
+
/atom/movable/proc/can_zFall(turf/source, levels = 1, turf/target, direction)
if(!direction)
direction = DOWN
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 75be1f9e797..a2d4d64086a 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -92,8 +92,6 @@
layer = BELOW_OBJ_LAYER //keeps shit coming out of the machine from ending up underneath it.
flags_ricochet = RICOCHET_HARD
receive_ricochet_chance_mod = 0.3
- blocks_emissive = EMISSIVE_BLOCK_GENERIC
- emissive_blocker_plane = STRUCTURE_EMISSIVE_BLOCKER_PLANE
anchored = TRUE
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
diff --git a/code/game/machinery/accounting.dm b/code/game/machinery/accounting.dm
index c333c36f6a0..940561b591a 100644
--- a/code/game/machinery/accounting.dm
+++ b/code/game/machinery/accounting.dm
@@ -55,6 +55,7 @@
/obj/machinery/accounting/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
luminosity = 0
if(machine_stat & (NOPOWER|BROKEN) || !anchored)
return
@@ -64,7 +65,7 @@
luminosity = 1
if(inserted_id)
SSvis_overlays.add_vis_overlay(src, icon, "recharger-full", layer, plane, dir, alpha)
- SSvis_overlays.add_vis_overlay(src, icon, "recharger-full", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "recharger-full", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
else
SSvis_overlays.add_vis_overlay(src, icon, "recharger-empty", layer, plane, dir, alpha)
- SSvis_overlays.add_vis_overlay(src, icon, "recharger-empty", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "recharger-empty", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index 2aad9a3f751..e13acbf67f2 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -30,6 +30,8 @@
/obj/machinery/computer/update_overlays()
. = ..()
+
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if(machine_stat & NOPOWER)
. += "[icon_keyboard]_off"
return
@@ -40,7 +42,7 @@
if(machine_stat & BROKEN)
overlay_state = "[icon_state]_broken"
SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, EMISSIVE_STRUCTURE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, EMISSIVE_PLANE, dir)
/obj/machinery/computer/power_change()
. = ..()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index b5abbd805e3..9e4f412e035 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -15,7 +15,6 @@
flags_1 = PREVENT_CLICK_UNDER_1
receive_ricochet_chance_mod = 0.8
damage_deflection = 10
- blocks_emissive = EMISSIVE_BLOCK_UNIQUE
interaction_flags_atom = INTERACT_ATOM_UI_INTERACT
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index d6c15a00dc6..6ea4cac6a8c 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -76,6 +76,8 @@
/obj/machinery/firealarm/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+
if(machine_stat & NOPOWER)
return
@@ -84,26 +86,26 @@
if(is_station_level(z))
. += "fire_[GLOB.security_level]"
SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", layer, EMISSIVE_PLANE, dir)
else
. += "fire_[SEC_LEVEL_GREEN]"
SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", layer, EMISSIVE_PLANE, dir)
var/area/A = get_area(src)
if(!detecting || !A.fire)
. += "fire_off"
SSvis_overlays.add_vis_overlay(src, icon, "fire_off", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "fire_off", layer, EMISSIVE_STRUCTURE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_off", layer, EMISSIVE_PLANE, dir)
else if(obj_flags & EMAGGED)
. += "fire_emagged"
SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", layer, EMISSIVE_STRUCTURE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", layer, EMISSIVE_PLANE, dir)
else
. += "fire_on"
SSvis_overlays.add_vis_overlay(src, icon, "fire_on", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "fire_on", layer, EMISSIVE_STRUCTURE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "fire_on", layer, EMISSIVE_PLANE, dir)
if(!panel_open && detecting && triggered) //It just looks horrible with the panel open
. += "fire_detected"
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 1397ae24d20..15150b38854 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -24,22 +24,18 @@
update_icon()
/obj/machinery/light_switch/update_icon_state()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
luminosity = 0
if(machine_stat & NOPOWER)
icon_state = "light-p"
else
luminosity = 1
+ SSvis_overlays.add_vis_overlay(src, icon, "light-glow", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
if(area.lightswitch)
icon_state = "light1"
else
icon_state = "light0"
-/obj/machinery/light_switch/update_overlays()
- . = ..()
- if(machine_stat & NOPOWER)
- return
- SSvis_overlays.add_vis_overlay(src, icon, "light-glow", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
-
/obj/machinery/light_switch/examine(mob/user)
. = ..()
. += "It is [area.lightswitch ? "on" : "off"]."
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index e3d4cc09354..c044ffb97fb 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -165,6 +165,7 @@
/obj/machinery/recharger/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
luminosity = 0
if(machine_stat & (NOPOWER|BROKEN) || !anchored)
return
@@ -176,10 +177,10 @@
if (charging)
if(using_power)
SSvis_overlays.add_vis_overlay(src, icon, "recharger-charging", layer, plane, dir, alpha)
- SSvis_overlays.add_vis_overlay(src, icon, "recharger-charging", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "recharger-charging", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
else
SSvis_overlays.add_vis_overlay(src, icon, "recharger-full", layer, plane, dir, alpha)
- SSvis_overlays.add_vis_overlay(src, icon, "recharger-full", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "recharger-full", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
else
SSvis_overlays.add_vis_overlay(src, icon, "recharger-empty", layer, plane, dir, alpha)
- SSvis_overlays.add_vis_overlay(src, icon, "recharger-empty", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "recharger-empty", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm
index 1d281077877..50b82413c8e 100644
--- a/code/game/machinery/stasis.dm
+++ b/code/game/machinery/stasis.dm
@@ -79,23 +79,21 @@
/obj/machinery/stasis/update_overlays()
. = ..()
- if(!mattress_state)
- return
+ var/_running = stasis_running()
+ var/list/overlays_to_remove = managed_vis_overlays
- if(!mattress_on)
- mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, BELOW_OBJ_LAYER, plane, dir, alpha = 0, unique = TRUE)
- else
- vis_contents += mattress_on
- if(managed_vis_overlays)
- managed_vis_overlays += mattress_on
- else
- managed_vis_overlays = list(mattress_on)
+ if(mattress_state)
+ if(!mattress_on || !managed_vis_overlays)
+ mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, BELOW_OBJ_LAYER, plane, dir, alpha = 0, unique = TRUE)
- var/is_running = stasis_running()
- if(mattress_on.alpha ? !is_running : is_running) //check the inverse of is_running compared to truthy alpha, to see if they differ
- var/new_alpha = is_running ? 255 : 0
- var/easing_direction = is_running ? EASE_OUT : EASE_IN
- animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction)
+ if(mattress_on.alpha ? !_running : _running) //check the inverse of _running compared to truthy alpha, to see if they differ
+ var/new_alpha = _running ? 255 : 0
+ var/easing_direction = _running ? EASE_OUT : EASE_IN
+ animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction)
+
+ overlays_to_remove = managed_vis_overlays - mattress_on
+
+ SSvis_overlays.remove_vis_overlay(src, overlays_to_remove)
/obj/machinery/stasis/obj_break(damage_flag)
. = ..()
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index f32f9c9a6e5..5916010cbb9 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -50,4 +50,4 @@
var/turf/T = loc
if(!istype(T)) //you know this will happen somehow
CRASH("Turf decal initialized in an object/nullspace")
- T.AddElement(/datum/element/decal, icon, icon_state, dir, FALSE, color, null, null, null, alpha)
+ T.AddElement(/datum/element/decal, icon, icon_state, dir, FALSE, color, null, null, alpha)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index f5ee0147711..7e059ca465d 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -12,7 +12,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
name = "item"
icon = 'icons/obj/items_and_weapons.dmi'
blocks_emissive = EMISSIVE_BLOCK_GENERIC
- emissive_blocker_plane = ITEM_EMISSIVE_BLOCKER_PLANE
/* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!
diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm
index 11b96eee29d..79efee73836 100644
--- a/code/game/objects/items/airlock_painter.dm
+++ b/code/game/objects/items/airlock_painter.dm
@@ -174,7 +174,7 @@
to_chat(user, "You need to get closer!")
return
if(use_paint(user) && isturf(F))
- F.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, CLEAN_TYPE_PAINT, color, null, null, null, alpha)
+ F.AddElement(/datum/element/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, CLEAN_TYPE_PAINT, color, null, null, alpha)
/obj/item/airlock_painter/decal/AltClick(mob/user)
. = ..()
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 59107d3ed43..72d761b3a23 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -83,7 +83,7 @@
* - multiplier: The amount to multiply the mats per unit by. Defaults to 1.
*/
/obj/item/stack/proc/set_mats_per_unit(list/mats, multiplier=1)
- mats_per_unit = LAZYLEN(mats) ? SSmaterials.FindOrCreateMaterialCombo(mats, multiplier) : mats
+ mats_per_unit = SSmaterials.FindOrCreateMaterialCombo(mats, multiplier)
update_custom_materials()
/** Updates the custom materials list of this stack.
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index ba16df14390..897686a334c 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -247,109 +247,6 @@
turf_type = /turf/open/floor/carpet/donk
merge_type = /obj/item/stack/tile/carpet/donk
-/obj/item/stack/tile/carpet/emissive
- name = "emissive carpet"
- icon_state = "tile_carpet_black"
- inhand_icon_state = "tile-carpet-black"
- turf_type = /turf/open/floor/carpet/emissive
- merge_type = /obj/item/stack/tile/carpet/emissive
- /// The icon state used for the emissive decal.
- var/emissive_icon_state
-
-/obj/item/stack/tile/carpet/emissive/Initialize(mapload, new_amount, merge)
- . = ..()
- if(!emissive_icon_state)
- emissive_icon_state = icon_state
- var/turf/open/floor/carpet/emissive/turf_path = turf_type
- AddElement(/datum/element/decal, icon, emissive_icon_state, dir, FALSE, initial(turf_path.emissive_color), EMISSIVE_ITEM_LAYER, EMISSIVE_ITEM_PLANE, null, initial(turf_path.emissive_alpha))
-
-/obj/item/stack/tile/carpet/emissive/neon
- name = "emissive carpet"
- icon_state = "tile_carpet_neon_simple"
- turf_type = /turf/open/floor/carpet/emissive/neon
- merge_type = /obj/item/stack/tile/carpet/emissive/neon
- /// The icon state used for the neon decal
- var/neon_icon_state
-
-/obj/item/stack/tile/carpet/emissive/neon/Initialize(mapload, amount)
- . = ..()
- if(!neon_icon_state)
- neon_icon_state = emissive_icon_state
- var/turf/open/floor/carpet/emissive/neon/turf_path = turf_type
- AddElement(/datum/element/decal, icon, neon_icon_state, dir, FALSE, initial(turf_path.neon_color), FLOAT_LAYER, FLOAT_PLANE)
-
-/obj/item/stack/tile/carpet/emissive/neon/simple
- name = "simple neon carpet"
- icon_state = "tile_carpet_neon_simple"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple
- emissive_icon_state = "tile_carpet_neon_simple_glow"
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/white
- name = "simple white neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/white
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/white
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/red
- name = "simple red neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/red
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/red
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/orange
- name = "emissive orange neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/orange
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/orange
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/yellow
- name = "emissive yellow neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/yellow
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/yellow
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/lime
- name = "emissive lime neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/lime
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/lime
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/green
- name = "emissive green neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/green
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/green
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/cyan
- name = "emissive cyan neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/cyan
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/cyan
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/teal
- name = "emissive teal neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/teal
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/teal
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/blue
- name = "emissive blue neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/blue
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/blue
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/purple
- name = "emissive purple neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/purple
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/purple
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/violet
- name = "emissive violet neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/violet
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/violet
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/pink
- name = "emissive pink neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/pink
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/pink
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/black
- name = "emissive black neon carpet"
- turf_type = /turf/open/floor/carpet/emissive/neon/simple/black
- merge_type = /obj/item/stack/tile/carpet/emissive/neon/simple/black
-
/obj/item/stack/tile/carpet/fifty
amount = 50
@@ -389,198 +286,6 @@
/obj/item/stack/tile/carpet/donk/thirty
amount = 30
-/obj/item/stack/tile/carpet/emissive/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/white/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/white/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/white/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/white/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/red/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/red/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/red/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/red/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/orange/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/orange/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/orange/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/orange/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/yellow/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/yellow/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/yellow/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/yellow/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/lime/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/lime/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/lime/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/lime/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/green/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/green/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/green/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/green/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/cyan/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/cyan/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/cyan/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/cyan/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/teal/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/teal/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/teal/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/teal/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/blue/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/blue/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/blue/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/blue/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/purple/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/purple/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/purple/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/purple/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/violet/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/violet/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/violet/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/violet/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/pink/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/pink/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/pink/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/pink/sixty
- amount = 60
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/black/ten
- amount = 10
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/black/twenty
- amount = 20
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/black/thirty
- amount = 30
-
-/obj/item/stack/tile/carpet/emissive/neon/simple/black/sixty
- amount = 60
-
/obj/item/stack/tile/fakespace
name = "astral carpet"
singular_name = "astral carpet tile"
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index be6890c0fab..f5ed1357ba6 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -8,8 +8,6 @@
flags_ricochet = RICOCHET_HARD
receive_ricochet_chance_mod = 0.6
pass_flags_self = PASSSTRUCTURE
- blocks_emissive = EMISSIVE_BLOCK_GENERIC
- emissive_blocker_plane = STRUCTURE_EMISSIVE_BLOCKER_PLANE
var/broken = FALSE
/obj/structure/Initialize()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 006ab7b09c1..1c7c0849ff1 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -8,7 +8,6 @@
max_integrity = 200
integrity_failure = 0.25
armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60)
- blocks_emissive = EMISSIVE_BLOCK_UNIQUE
var/icon_door = null
var/icon_door_override = FALSE //override to have open overlay use icon different to its base's
@@ -72,6 +71,7 @@
/obj/structure/closet/proc/closet_update_overlays(list/new_overlays)
. = new_overlays
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
luminosity = 0
if(!opened)
if(icon_door)
@@ -83,7 +83,7 @@
if(secure && !broken)
//Overlay is similar enough for both that we can use the same mask for both
luminosity = 1
- SSvis_overlays.add_vis_overlay(src, icon, "locked", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "locked", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
if(locked)
. += "locked"
else
diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm
index 0cfad263b76..17be29e6ba6 100644
--- a/code/game/turfs/open/floor/fancy_floor.dm
+++ b/code/game/turfs/open/floor/fancy_floor.dm
@@ -325,189 +325,6 @@
smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_DONK)
canSmoothWith = list(SMOOTH_GROUP_CARPET_DONK)
-/// Carpets that generate an emissive decal to augment them
-/turf/open/floor/carpet/emissive
- name = "Emissive Carpet"
- icon = 'icons/turf/floors/carpet_black.dmi'
- icon_state = "carpet_black-255"
- base_icon_state = "carpet_black"
- floor_tile = /obj/item/stack/tile/carpet/emissive
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_EMISSIVE)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_EMISSIVE)
-
- // Emissive decal settings:
- /// The icon used to generate the emisive overlay
- var/emissive_icon
- /// The base icon state for the emissive overlay
- var/base_emissive_state
- /// The color of the emissive decal
- var/emissive_color
- /// The alpha of the emissive decal
- var/emissive_alpha = 150
-
-/turf/open/floor/carpet/emissive/Initialize(mapload, ...)
- . = ..()
- if(!emissive_icon)
- emissive_icon = icon
- if(!base_emissive_state)
- base_emissive_state = base_icon_state
- AddElement(/datum/element/decal/smoothing, emissive_icon, base_emissive_state, dir, FALSE, emissive_color, EMISSIVE_TURF_LAYER, EMISSIVE_TURF_PLANE, null, emissive_alpha)
-
-/turf/open/floor/carpet/emissive/neon
- name = "Neon Carpet"
- desc = "A carpet with a design woven into it using phosphorescent thread."
- icon = 'icons/turf/floors/carpet_neon_simple.dmi'
- icon_state = "base-255"
- base_icon_state = "base"
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_NEON)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_NEON)
-
- // Neon Decals:
- /// The icon used
- var/neon_icon
- /// The base icon state used for the neon decals
- var/base_neon_state
- /// The color used for the neon decals
- var/neon_color
-
-/turf/open/floor/carpet/emissive/neon/Initialize(mapload, ...)
- . = ..()
- if(!neon_icon)
- neon_icon = emissive_icon
- if(!base_neon_state)
- base_neon_state = base_emissive_state
- AddElement(/datum/element/decal/smoothing, neon_icon, base_neon_state, dir, FALSE, neon_color)
-
-/turf/open/floor/carpet/emissive/neon/simple
- name = "Simple Neon Carpet"
- desc = "A carpet with a simple design woven into it using phosphorescent thread."
- icon = 'icons/turf/floors/carpet_neon_simple.dmi'
- icon_state = "base-255"
- base_icon_state = "base"
- base_neon_state = "lights"
- base_emissive_state = "glow"
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON)
-
-/turf/open/floor/carpet/emissive/neon/simple/white
- name = "Simple White Neon Carpet"
- desc = "A carpet with a simple design woven into it using white phosphorescent thread."
- neon_color = COLOR_WHITE
- emissive_color = COLOR_WHITE
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/white
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE)
-
-/turf/open/floor/carpet/emissive/neon/simple/red
- name = "Simple Red Neon Carpet"
- desc = "A carpet with a simple design woven into it using red phosphorescent thread."
- neon_color = COLOR_RED
- emissive_color = COLOR_RED
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/red
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED)
-
-/turf/open/floor/carpet/emissive/neon/simple/orange
- name = "Simple Orange Neon Carpet"
- desc = "A carpet with a simple design woven into it using orange phosphorescent thread."
- neon_color = COLOR_ORANGE
- emissive_color = COLOR_ORANGE
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/orange
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE)
-
-/turf/open/floor/carpet/emissive/neon/simple/yellow
- name = "Simple Yellow Neon Carpet"
- desc = "A carpet with a simple design woven into it using yellow phosphorescent thread."
- neon_color = COLOR_YELLOW
- emissive_color = COLOR_YELLOW
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/yellow
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW)
-
-/turf/open/floor/carpet/emissive/neon/simple/lime
- name = "Simple Lime Neon Carpet"
- desc = "A carpet with a simple design woven into it using lime phosphorescent thread."
- neon_color = COLOR_LIME
- emissive_color = COLOR_LIME
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/lime
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME)
-
-/turf/open/floor/carpet/emissive/neon/simple/green
- name = "Simple Green Neon Carpet"
- desc = "A carpet with a simple design woven into it using green phosphorescent thread."
- neon_color = COLOR_GREEN
- emissive_color = COLOR_GREEN
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/green
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN)
-
-/turf/open/floor/carpet/emissive/neon/simple/cyan
- name = "Simple Cyan Neon Carpet"
- desc = "A carpet with a simple design woven into it using cyan phosphorescent thread."
- neon_color = COLOR_CYAN
- emissive_color = COLOR_CYAN
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/cyan
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN)
-
-/turf/open/floor/carpet/emissive/neon/simple/teal
- name = "Simple Cyan Neon Carpet"
- desc = "A carpet with a simple design woven into it using teal phosphorescent thread."
- neon_color = COLOR_TEAL
- emissive_color = COLOR_TEAL
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/teal
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL)
-
-/turf/open/floor/carpet/emissive/neon/simple/blue
- name = "Simple Blue Neon Carpet"
- desc = "A carpet with a simple design woven into it using blue phosphorescent thread."
- neon_color = COLOR_BLUE
- emissive_color = COLOR_BLUE
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/blue
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE)
-
-/turf/open/floor/carpet/emissive/neon/simple/purple
- name = "Simple Indigo Neon Carpet"
- desc = "A carpet with a simple design woven into it using purple phosphorescent thread."
- neon_color = COLOR_PURPLE
- emissive_color = COLOR_PURPLE
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/purple
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE)
-
-/turf/open/floor/carpet/emissive/neon/simple/violet
- name = "Simple Indigo Neon Carpet"
- desc = "A carpet with a simple design woven into it using violet phosphorescent thread."
- neon_color = COLOR_VIOLET
- emissive_color = COLOR_VIOLET
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/violet
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET)
-
-/turf/open/floor/carpet/emissive/neon/simple/pink
- name = "Simple Indigo Neon Carpet"
- desc = "A carpet with a simple design woven into it using pink phosphorescent thread."
- neon_color = COLOR_PINK
- emissive_color = COLOR_PINK
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/pink
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK)
-
-/turf/open/floor/carpet/emissive/neon/simple/black
- name = "Simple Black Neon Carpet"
- desc = "A carpet with a simple design wiven into it using especially dark thread."
- neon_color = COLOR_BLACK
- emissive_color = COLOR_BLACK
- floor_tile = /obj/item/stack/tile/carpet/emissive/neon/simple/black
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLACK)
- canSmoothWith = list(SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLACK)
-
//*****Airless versions of all of the above.*****
/turf/open/floor/carpet/airless
initial_gas_mix = AIRLESS_ATMOS
@@ -539,60 +356,6 @@
/turf/open/floor/carpet/royalblue/airless
initial_gas_mix = AIRLESS_ATMOS
-/turf/open/floor/carpet/executive/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/stellar/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/donk/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/white/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/red/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/orange/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/yellow/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/green/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/cyan/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/teal/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/blue/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/purple/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/violet/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/pink/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/emissive/neon/simple/black/airless
- initial_gas_mix = AIRLESS_ATMOS
-
/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
. = (prob(probability) || force)
for(var/I in src)
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 7c87ad27a8b..0a2274be12e 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -1579,40 +1579,6 @@
/obj/item/stack/tile/carpet/royalblack/fifty)
crate_name = "exotic carpet crate"
-/datum/supply_pack/service/carpet_neon
- name = "Simple Neon Carpet Crate"
- desc = "Simple knitted carpets with phosphorescent lining. Contains 120 tiles each of 13 color variants."
- cost = CARGO_CRATE_VALUE * 15
- contains = list(
- /obj/item/stack/tile/carpet/emissive/neon/simple/white/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/white/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/red/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/red/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/orange/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/orange/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/yellow/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/yellow/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/lime/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/lime/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/green/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/green/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/cyan/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/cyan/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/teal/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/teal/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/blue/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/blue/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/purple/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/purple/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/violet/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/violet/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/pink/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/pink/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/black/sixty,
- /obj/item/stack/tile/carpet/emissive/neon/simple/black/sixty,
- )
- crate_name = "neon carpet crate"
-
/datum/supply_pack/service/lightbulbs
name = "Replacement Lights"
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs."
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 5200f520ad0..44375a426a3 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -41,7 +41,9 @@
. += "The status display reads: This unit can hold a maximum of [max_n_of_items] items."
/obj/machinery/smartfridge/update_icon_state()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if(!machine_stat)
+ SSvis_overlays.add_vis_overlay(src, icon, "smartfridge-light-mask", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
if (visible_contents)
switch(contents.len)
if(0)
@@ -57,10 +59,7 @@
else
icon_state = "[initial(icon_state)]-off"
-/obj/machinery/smartfridge/update_overlays()
- . = ..()
- if(!machine_stat)
- SSvis_overlays.add_vis_overlay(src, icon, "smartfridge-light-mask", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+
/*******************
* Item Adding
diff --git a/code/modules/lighting/emissive_blocker.dm b/code/modules/lighting/emissive_blocker.dm
index e4be0e7ef5e..8cb1b72475b 100644
--- a/code/modules/lighting/emissive_blocker.dm
+++ b/code/modules/lighting/emissive_blocker.dm
@@ -9,7 +9,7 @@
/atom/movable/emissive_blocker
name = ""
plane = EMISSIVE_BLOCKER_PLANE
- layer = EMISSIVE_LAYER
+ layer = EMISSIVE_BLOCKER_LAYER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
//Why?
//render_targets copy the transform of the target as well, but vis_contents also applies the transform
@@ -17,12 +17,11 @@
//Since only render_target handles transform we don't get any applied transform "stacking"
appearance_flags = RESET_TRANSFORM
-/atom/movable/emissive_blocker/Initialize(mapload, source, render_plane = EMISSIVE_BLOCKER_PLANE)
+/atom/movable/emissive_blocker/Initialize(mapload, source)
. = ..()
verbs.Cut() //Cargo culting from lighting object, this maybe affects memory usage?
render_source = source
- plane = render_plane
/atom/movable/emissive_blocker/ex_act(severity)
return FALSE
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index d11d427346f..3cd864f05a7 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -17,7 +17,6 @@
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
throwforce = 10
blocks_emissive = EMISSIVE_BLOCK_GENERIC
- emissive_blocker_plane = MOB_EMISSIVE_BLOCKER_PLANE
pass_flags_self = PASSMOB
///when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace.
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 0045b70a481..298aca89e02 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -197,7 +197,6 @@
/obj/machinery/power/apc/Destroy()
GLOB.apcs_list -= src
- UnregisterSignal(src, COMSIG_ATOM_UPDATE_ICON)
if(malfai && operating)
malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000)
area.power_light = FALSE
@@ -229,7 +228,6 @@
/obj/machinery/power/apc/Initialize(mapload)
. = ..()
- RegisterSignal(src, COMSIG_ATOM_UPDATE_ICON, .proc/check_updates)
if(!mapload)
return
has_electronics = APC_ELECTRONICS_SECURED
@@ -294,11 +292,55 @@
// update the APC icon to show the three base states
// also add overlays for indicator lights
/obj/machinery/power/apc/update_icon()
- . = ..()
- if(!.)
+ var/update = check_updates() //returns 0 if no need to update icons.
+ // 1 if we need to update the icon_state
+ // 2 if we need to update the overlays
+ if(!update)
icon_update_needed = FALSE
return
+ if(update & 1) // Updating the icon state
+ if(update_state & UPSTATE_ALLGOOD)
+ icon_state = "apc0"
+ else if(update_state & (UPSTATE_OPENED1|UPSTATE_OPENED2))
+ var/basestate = "apc[ cell ? "2" : "1" ]"
+ if(update_state & UPSTATE_OPENED1)
+ if(update_state & (UPSTATE_MAINT|UPSTATE_BROKE))
+ icon_state = "apcmaint" //disabled APC cannot hold cell
+ else
+ icon_state = basestate
+ else if(update_state & UPSTATE_OPENED2)
+ if (update_state & UPSTATE_BROKE || malfhack)
+ icon_state = "[basestate]-b-nocover"
+ else
+ icon_state = "[basestate]-nocover"
+ else if(update_state & UPSTATE_BROKE)
+ icon_state = "apc-b"
+ else if(update_state & UPSTATE_BLUESCREEN)
+ icon_state = "apcemag"
+ else if(update_state & UPSTATE_WIREEXP)
+ icon_state = "apcewires"
+ else if(update_state & UPSTATE_MAINT)
+ icon_state = "apc0"
+
+ if(!(update_state & UPSTATE_ALLGOOD))
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+
+ if(update & 2)
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+ if(!(machine_stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD)
+ SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", layer, EMISSIVE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", layer, EMISSIVE_PLANE, dir)
+ if(operating)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", layer, EMISSIVE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", layer, EMISSIVE_PLANE, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", layer, EMISSIVE_PLANE, dir)
+
// And now, separately for cleanness, the lighting changing
if(update_state & UPSTATE_ALLGOOD)
switch(charging)
@@ -318,49 +360,7 @@
icon_update_needed = FALSE
-/obj/machinery/power/apc/update_icon_state()
- if(update_state & UPSTATE_ALLGOOD)
- icon_state = "apc0"
- return
- if(update_state & (UPSTATE_OPENED1|UPSTATE_OPENED2))
- var/basestate = "apc[cell ? 2 : 1]"
- if(update_state & UPSTATE_OPENED1)
- icon_state = (update_state & (UPSTATE_MAINT|UPSTATE_BROKE)) ? "apcmaint" : basestate
- else if(update_state & UPSTATE_OPENED2)
- icon_state = "[basestate][((update_state & UPSTATE_BROKE) || malfhack) ? "-b" : null]-nocover"
- return
- if(update_state & UPSTATE_BROKE)
- icon_state = "apc-b"
- return
- if(update_state & UPSTATE_BLUESCREEN)
- icon_state = "apcemag"
- return
- if(update_state & UPSTATE_WIREEXP)
- icon_state = "apcewires"
- return
- if(update_state & UPSTATE_MAINT)
- icon_state = "apc0"
- return
-
-/obj/machinery/power/apc/update_overlays()
- . = ..()
- if((machine_stat & (BROKEN|MAINT)) || !(update_state & UPSTATE_ALLGOOD))
- return
- SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco3-[charging]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
- if(!operating)
- return
- SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", layer, plane, dir)
- SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", layer, EMISSIVE_STRUCTURE_PLANE, dir)
-
-/obj/machinery/power/apc/proc/check_updates(obj/machinery/power/apc/self)
- SIGNAL_HANDLER
+/obj/machinery/power/apc/proc/check_updates()
var/last_update_state = update_state
var/last_update_overlay = update_overlay
update_state = 0
@@ -420,11 +420,14 @@
update_overlay |= APC_UPOVERLAY_ENVIRON2
- . = NONE
- if(last_update_state == update_state)
- . |= COMSIG_ATOM_NO_UPDATE_ICON_STATE
- if((last_update_overlay == update_overlay) && (update_state & UPSTATE_ALLGOOD))
- . |= COMSIG_ATOM_NO_UPDATE_OVERLAYS
+ var/results = 0
+ if(last_update_state == update_state && last_update_overlay == update_overlay)
+ return 0
+ if(last_update_state != update_state)
+ results += 1
+ if(last_update_overlay != update_overlay)
+ results += 2
+ return results
// Used in process so it doesn't update the icon too much
/obj/machinery/power/apc/proc/queue_icon_update()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 6547611f936..d861f4e6a87 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -400,6 +400,7 @@
/obj/machinery/light/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if(on && status == LIGHT_OK)
var/area/A = get_area(src)
if(emergency_mode || (A?.fire))
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index b859603a99d..4086c56e241 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1708,104 +1708,6 @@
taste_description = "blueyalty" //also intentional
carpet_type = /turf/open/floor/carpet/royalblue
-/datum/reagent/carpet/neon
- name = "Neon Carpet"
- description = "For those who like the 1980s, vegas, and debugging."
- color = COLOR_ALMOST_BLACK
- taste_description = "neon"
- carpet_type = /turf/open/floor/carpet/emissive/neon
-
-/datum/reagent/carpet/neon/simple_white
- name = "Simple White Neon Carpet"
- description = "For those who like fluorescent lighting."
- color = LIGHT_COLOR_HALOGEN
- taste_description = "sodium vapor"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/white
-
-/datum/reagent/carpet/neon/simple_red
- name = "Simple Red Neon Carpet"
- description = "For those who like a bit of uncertainty."
- color = COLOR_RED
- taste_description = "neon hallucinations"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/red
-
-/datum/reagent/carpet/neon/simple_orange
- name = "Simple Orange Neon Carpet"
- description = "For those who like some sharp edges."
- color = COLOR_ORANGE
- taste_description = "neon spines"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/orange
-
-/datum/reagent/carpet/neon/simple_yellow
- name = "Simple Yellow Neon Carpet"
- description = "For those who need a little stability in their lives."
- color = COLOR_YELLOW
- taste_description = "stabilized neon"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/yellow
-
-/datum/reagent/carpet/neon/simple_lime
- name = "Simple Lime Neon Carpet"
- description = "For those who need a little bitterness."
- color = COLOR_LIME
- taste_description = "neon citrus"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/lime
-
-/datum/reagent/carpet/neon/simple_green
- name = "Simple Green Neon Carpet"
- description = "For those who need a little bit of change in their lives."
- color = COLOR_GREEN
- taste_description = "radium"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/green
-
-/datum/reagent/carpet/neon/simple_cyan
- name = "Simple Cyan Neon Carpet"
- description = "For those who need to take a breath."
- color = COLOR_DARK_CYAN
- taste_description = "neon air"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/cyan
-
-/datum/reagent/carpet/neon/simple_teal
- name = "Simple Teal Neon Carpet"
- description = "For those who need a smoke."
- color = COLOR_TEAL
- taste_description = "neon tobacco"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/teal
-
-/datum/reagent/carpet/neon/simple_blue
- name = "Simple Blue Neon Carpet"
- description = "For those who need to feel joy again."
- color = COLOR_NAVY
- taste_description = "neon blue"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/blue
-
-/datum/reagent/carpet/neon/simple_purple
- name = "Simple Purple Neon Carpet"
- description = "For those that need a little bit of exploration."
- color = COLOR_PURPLE
- taste_description = "neon hell"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/purple
-
-/datum/reagent/carpet/neon/simple_violet
- name = "Simple Violet Neon Carpet"
- description = "For those who want to temp fate."
- color = COLOR_VIOLET
- taste_description = "neon hell"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/violet
-
-/datum/reagent/carpet/neon/simple_pink
- name = "Simple Pink Neon Carpet"
- description = "For those just want to stop thinking so much."
- color = COLOR_PINK
- taste_description = "neon pink"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/pink
-
-/datum/reagent/carpet/neon/simple_black
- name = "Simple Black Neon Carpet"
- description = "For those who need to catch their breath."
- color = COLOR_BLACK
- taste_description = "neon ash"
- carpet_type = /turf/open/floor/carpet/emissive/neon/simple/black
-
/datum/reagent/bromine
name = "Bromine"
description = "A brownish liquid that's highly reactive. Useful for stopping free radicals, but not intended for human consumption."
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 28e8b11c7f3..978e23daa6d 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -387,57 +387,6 @@
results = list(/datum/reagent/carpet/royal/blue = 2)
required_reagents = list(/datum/reagent/carpet/blue = 1, /datum/reagent/royal_bee_jelly = 1)
-/datum/chemical_reaction/carpet/simple_neon_white
- results = list(/datum/reagent/carpet/neon/simple_white = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/sodium = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_red
- results = list(/datum/reagent/carpet/neon/simple_red = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/toxin/mindbreaker = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_orange
- results = list(/datum/reagent/carpet/neon/simple_orange = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/consumable/vitfro = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_yellow
- results = list(/datum/reagent/carpet/neon/simple_yellow = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/stabilizing_agent = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_lime
- results = list(/datum/reagent/carpet/neon/simple_lime = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/consumable/limejuice = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_green
- results = list(/datum/reagent/carpet/neon/simple_green = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/toxin/mutagen = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_cyan
- results = list(/datum/reagent/carpet/neon/simple_cyan = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/medicine/salbutamol = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_teal
- results = list(/datum/reagent/carpet/neon/simple_teal = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/drug/nicotine = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_blue
- results = list(/datum/reagent/carpet/neon/simple_blue = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/drug/happiness = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_purple
- results = list(/datum/reagent/carpet/neon/simple_purple = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/plasma_oxide = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_violet
- results = list(/datum/reagent/carpet/neon/simple_violet = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/medicine/c2/helbital = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_pink
- results = list(/datum/reagent/carpet/neon/simple_pink = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/impedrezene = 1)
-
-/datum/chemical_reaction/carpet/simple_neon_black
- results = list(/datum/reagent/carpet/neon/simple_black = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/tinlux = 1, /datum/reagent/medicine/c2/multiver = 1)
/datum/chemical_reaction/oil
results = list(/datum/reagent/fuel/oil = 3)
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index bc1abb1da49..f09587dc16b 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -346,6 +346,7 @@
/obj/machinery/disposal/bin/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
luminosity = 0
if(machine_stat & BROKEN)
@@ -363,15 +364,15 @@
//check for items in disposal - occupied light
if(contents.len > 0)
. += "dispover-full"
- SSvis_overlays.add_vis_overlay(src, icon, "dispover-full", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "dispover-full", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
//charging and ready light
if(pressure_charging)
. += "dispover-charge"
- SSvis_overlays.add_vis_overlay(src, icon, "dispover-charge-glow", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "dispover-charge-glow", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
else if(full_pressure)
. += "dispover-ready"
- SSvis_overlays.add_vis_overlay(src, icon, "dispover-ready-glow", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE, dir, alpha)
+ SSvis_overlays.add_vis_overlay(src, icon, "dispover-ready-glow", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha)
/obj/machinery/disposal/bin/proc/do_flush()
set waitfor = FALSE
diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm
index 711e6caaa2c..656c40390d0 100644
--- a/code/modules/research/nanites/nanite_program_hub.dm
+++ b/code/modules/research/nanites/nanite_program_hub.dm
@@ -28,10 +28,11 @@
/obj/machinery/nanite_program_hub/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if((machine_stat & (NOPOWER|MAINT|BROKEN)) || panel_open)
return
SSvis_overlays.add_vis_overlay(src, icon, "nanite_program_hub_on", layer, plane)
- SSvis_overlays.add_vis_overlay(src, icon, "nanite_program_hub_on", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE)
+ SSvis_overlays.add_vis_overlay(src, icon, "nanite_program_hub_on", EMISSIVE_LAYER, EMISSIVE_PLANE)
/obj/machinery/nanite_program_hub/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/disk/nanite_program))
diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm
index 01f0cd6c76b..8a76717e552 100644
--- a/code/modules/research/nanites/nanite_programmer.dm
+++ b/code/modules/research/nanites/nanite_programmer.dm
@@ -13,10 +13,11 @@
/obj/machinery/nanite_programmer/update_overlays()
. = ..()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if((machine_stat & (NOPOWER|MAINT|BROKEN)) || panel_open)
return
SSvis_overlays.add_vis_overlay(src, icon, "nanite_programmer_on", layer, plane)
- SSvis_overlays.add_vis_overlay(src, icon, "nanite_programmer_on", EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE)
+ SSvis_overlays.add_vis_overlay(src, icon, "nanite_programmer_on", EMISSIVE_LAYER, EMISSIVE_PLANE)
/obj/machinery/nanite_programmer/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/disk/nanite_program))
diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm
index 660a368e8ca..7f20df5fb32 100644
--- a/code/modules/vehicles/_vehicle.dm
+++ b/code/modules/vehicles/_vehicle.dm
@@ -7,8 +7,6 @@
armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60)
density = TRUE
anchored = FALSE
- blocks_emissive = EMISSIVE_BLOCK_GENERIC
- emissive_blocker_plane = STRUCTURE_EMISSIVE_BLOCKER_PLANE
COOLDOWN_DECLARE(cooldown_vehicle_move)
var/list/mob/occupants //mob = bitflags of their control level.
///Maximum amount of passengers plus drivers
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 3233210b28d..404eacb89b5 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -259,8 +259,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
if(!light_mask)
return
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
if(!(machine_stat & BROKEN) && powered())
- SSvis_overlays.add_vis_overlay(src, icon, light_mask, EMISSIVE_STRUCTURE_LAYER, EMISSIVE_STRUCTURE_PLANE)
+ SSvis_overlays.add_vis_overlay(src, icon, light_mask, EMISSIVE_LAYER, EMISSIVE_PLANE)
/obj/machinery/vending/obj_break(damage_flag)
. = ..()
diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi
index ab028555ee7..7983fba9a05 100644
Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ
diff --git a/icons/turf/floors/carpet_neon_simple.dmi b/icons/turf/floors/carpet_neon_simple.dmi
deleted file mode 100644
index a07d06e963c..00000000000
Binary files a/icons/turf/floors/carpet_neon_simple.dmi and /dev/null differ
diff --git a/tgstation.dme b/tgstation.dme
index 81b5f866623..9bcbfc48a88 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -623,12 +623,12 @@
#include "code\datums\elements\caltrop.dm"
#include "code\datums\elements\cleaning.dm"
#include "code\datums\elements\climbable.dm"
+#include "code\datums\elements\decal.dm"
#include "code\datums\elements\deferred_aquarium_content.dm"
#include "code\datums\elements\digitalcamo.dm"
#include "code\datums\elements\dryable.dm"
#include "code\datums\elements\earhealing.dm"
#include "code\datums\elements\embed.dm"
-#include "code\datums\elements\emissive_blocker.dm"
#include "code\datums\elements\empprotection.dm"
#include "code\datums\elements\firestacker.dm"
#include "code\datums\elements\forced_gravity.dm"
@@ -652,9 +652,7 @@
#include "code\datums\elements\update_icon_blocker.dm"
#include "code\datums\elements\update_icon_updates_onmob.dm"
#include "code\datums\elements\waddling.dm"
-#include "code\datums\elements\decals\_decal.dm"
#include "code\datums\elements\decals\blood.dm"
-#include "code\datums\elements\decals\smoothing.dm"
#include "code\datums\elements\food\dunkable.dm"
#include "code\datums\elements\food\food_trash.dm"
#include "code\datums\elements\food\processable.dm"