[MIRROR] Reverts Adds Neon Carpet (#55782) (#3040)

* reverts Adds Neon Carpet (#55782), it appears to have been causing massive amounts of maptick (#56496)

It appears to have been causing massive amounts of maptick, this'll need a testmerge so we can test my hypothesis

* Reverts Adds Neon Carpet (#55782)

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
This commit is contained in:
SkyratBot
2021-02-03 10:22:43 +01:00
committed by GitHub
co-authored by LemonInTheDark
parent acfe254041
commit 70024ef6ad
44 changed files with 211 additions and 1110 deletions
-2
View File
@@ -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)
+20 -36
View File
@@ -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.
+36 -58
View File
@@ -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"
-1
View File
@@ -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)
+21 -94
View File
@@ -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
@@ -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
@@ -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
+4 -2
View File
@@ -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'
-40
View File
@@ -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)
-33
View File
@@ -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
-3
View File
@@ -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)
+14 -4
View File
@@ -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
-2
View File
@@ -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
+3 -2
View File
@@ -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)
+3 -1
View File
@@ -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()
. = ..()
-1
View File
@@ -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
+7 -5
View File
@@ -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"
+2 -6
View File
@@ -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"]."
+4 -3
View File
@@ -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)
+13 -15
View File
@@ -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)
. = ..()
+1 -1
View File
@@ -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)
-1
View File
@@ -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 !!!!!!!!!!!!!!
+1 -1
View File
@@ -174,7 +174,7 @@
to_chat(user, "<span class='notice'>You need to get closer!</span>")
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)
. = ..()
+1 -1
View File
@@ -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.
@@ -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"
-2
View File
@@ -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()
@@ -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
-237
View File
@@ -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)
-34
View File
@@ -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."
@@ -41,7 +41,9 @@
. += "<span class='notice'>The status display reads: This unit can hold a maximum of <b>[max_n_of_items]</b> items.</span>"
/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
+2 -3
View File
@@ -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
-1
View File
@@ -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.
+55 -52
View File
@@ -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()
+1
View File
@@ -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))
@@ -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."
@@ -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)
+4 -3
View File
@@ -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
@@ -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))
@@ -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))
-2
View File
@@ -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
+2 -1
View File
@@ -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)
. = ..()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

+1 -3
View File
@@ -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"