Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a

This commit is contained in:
Majkl-J
2025-02-20 00:00:19 -08:00
7388 changed files with 94693 additions and 418558 deletions
@@ -1,6 +1,6 @@
/obj/effect/decal/cleanable
gender = PLURAL
layer = FLOOR_CLEAN_LAYER
layer = CLEANABLE_FLOOR_OBJECT_LAYER
var/list/random_icon_states = null
///I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/blood_state = ""
@@ -15,6 +15,9 @@
var/datum/reagent/decal_reagent
///The amount of reagent this decal holds, if decal_reagent is defined
var/reagent_amount = 0
/// If TRUE, gains TRAIT_MOPABLE on init - thus this cleanable will cleaned if its turf is cleaned
/// Set to FALSE for things that hang high on the walls or things which generally shouldn't be mopped up
var/is_mopped = TRUE
/// Creates a cleanable decal on a turf
/// Use this if your decal is one of one, and thus we should not spawn it if it's there already
@@ -40,6 +43,9 @@
handle_merge_decal(C)
return INITIALIZE_HINT_QDEL
if(is_mopped)
ADD_TRAIT(src, TRAIT_MOPABLE, INNATE_TRAIT)
if(LAZYLEN(diseases))
var/list/datum/disease/diseases_to_add = list()
for(var/datum/disease/D in diseases)
@@ -24,10 +24,12 @@
icon = 'icons/effects/blood.dmi'
icon_state = "xgib1"
plane = GAME_PLANE
layer = BELOW_OBJ_LAYER
layer = GIB_LAYER
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
mergeable_decal = FALSE
is_mopped = TRUE // probably shouldn't be, but janitor powercreep
/obj/effect/decal/cleanable/xenoblood/xgibs/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_MOVABLE_PIPE_EJECTING, PROC_REF(on_pipe_eject))
@@ -75,6 +75,7 @@
plane = GAME_PLANE
vis_flags = VIS_INHERIT_PLANE
alpha = 180
is_mopped = FALSE
/obj/effect/decal/cleanable/blood/splatter/over_window/NeverShouldHaveComeHere(turf/here_turf)
return isgroundlessturf(here_turf)
@@ -87,15 +88,19 @@
dryname = "dried tracks"
drydesc = "Some old bloody tracks left by wheels. Machines are evil, perhaps."
/obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose
/obj/effect/decal/cleanable/blood/trail_holder
name = "blood"
icon = 'icons/effects/blood.dmi'
desc = "Your instincts say you shouldn't be following these."
icon = 'icons/effects/blood.dmi'
icon_state = null
random_icon_states = null
beauty = -50
var/list/existing_dirs = list()
/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in()
return TRUE
/obj/effect/decal/cleanable/blood/trail_holder/replace_decal(obj/effect/decal/cleanable/blood/trail_holder/blood_decal)
if(blood_state != blood_decal.blood_state)
return FALSE
return ..()
// normal version of the above trail holder object for use in less convoluted things
/obj/effect/decal/cleanable/blood/trails
@@ -111,7 +116,7 @@
desc = "They look bloody and gruesome."
icon = 'icons/effects/blood.dmi'
icon_state = "gib1"
layer = BELOW_OBJ_LAYER
layer = GIB_LAYER
plane = GAME_PLANE
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
mergeable_decal = FALSE
@@ -121,6 +126,8 @@
decal_reagent = /datum/reagent/consumable/liquidgibs
reagent_amount = 5
is_mopped = TRUE // probably shouldn't be, but janitor powercreep
/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases)
. = ..()
AddElement(/datum/element/squish_sound)
@@ -323,7 +330,7 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
/obj/effect/decal/cleanable/blood/footprints/examine(mob/user)
. = ..()
if((shoe_types.len + species_types.len) > 0)
. += "You recognise the [name] as belonging to:"
. += "You recognise \the [src] as belonging to:"
for(var/sole in shoe_types)
var/obj/item/clothing/item = sole
var/article = initial(item.gender) == PLURAL ? "Some" : "A"
@@ -356,6 +363,7 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
random_icon_states = list("hitsplatter1", "hitsplatter2", "hitsplatter3")
plane = GAME_PLANE
layer = ABOVE_WINDOW_LAYER
is_mopped = FALSE
/// The turf we just came from, so we can back up when we hit a wall
var/turf/prev_loc
/// The cached info about the blood
@@ -11,7 +11,7 @@
icon = 'icons/obj/debris.dmi'
icon_state = "ash"
plane = GAME_PLANE
layer = GAME_CLEAN_LAYER
layer = CLEANABLE_OBJECT_LAYER
mergeable_decal = FALSE
beauty = -50
decal_reagent = /datum/reagent/ash
@@ -153,6 +153,7 @@
resistance_flags = FLAMMABLE
beauty = -100
clean_type = CLEAN_TYPE_HARD_DECAL
is_mopped = FALSE
/obj/effect/decal/cleanable/cobweb/cobweb2
icon_state = "cobweb2"
@@ -164,7 +165,7 @@
icon = 'icons/effects/effects.dmi'
icon_state = "molten"
plane = GAME_PLANE
layer = GAME_CLEAN_LAYER
layer = CLEANABLE_OBJECT_LAYER
mergeable_decal = FALSE
beauty = -150
clean_type = CLEAN_TYPE_HARD_DECAL
@@ -251,7 +252,7 @@
desc = "A pile of chemicals. You can't quite tell what's inside it."
gender = NEUTER
plane = GAME_PLANE
layer = GAME_CLEAN_LAYER
layer = CLEANABLE_OBJECT_LAYER
icon = 'icons/obj/debris.dmi'
icon_state = "ash"
@@ -330,7 +331,7 @@
icon = 'icons/obj/debris.dmi'
icon_state = "paper_shreds"
plane = GAME_PLANE
layer = GAME_CLEAN_LAYER
layer = CLEANABLE_OBJECT_LAYER
/obj/effect/decal/cleanable/wrapping/pinata
name = "pinata shreds"
@@ -349,7 +350,7 @@
icon = 'icons/obj/debris.dmi'
icon_state = "garbage"
plane = GAME_PLANE
layer = GAME_CLEAN_LAYER
layer = CLEANABLE_OBJECT_LAYER
beauty = -150
clean_type = CLEAN_TYPE_HARD_DECAL
@@ -567,7 +568,9 @@
mergeable_decal = FALSE
beauty = -10
plane = GAME_PLANE
layer = BELOW_OBJ_LAYER
layer = GIB_LAYER
clean_type = CLEAN_TYPE_HARD_DECAL
is_mopped = FALSE
/obj/effect/decal/cleanable/rubble/Initialize(mapload)
. = ..()
@@ -6,7 +6,7 @@
icon = 'icons/mob/silicon/robots.dmi'
icon_state = "gib1"
plane = GAME_PLANE
layer = BELOW_OBJ_LAYER
layer = GIB_LAYER
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
blood_state = BLOOD_STATE_OIL
bloodiness = BLOOD_AMOUNT_PER_DECAL
@@ -14,6 +14,8 @@
beauty = -50
clean_type = CLEAN_TYPE_BLOOD
is_mopped = TRUE // probably shouldn't be, but janitor powercreep
/obj/effect/decal/cleanable/robot_debris/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_MOVABLE_PIPE_EJECTING, PROC_REF(on_pipe_eject))
+1 -1
View File
@@ -15,7 +15,7 @@
if(isclosedturf(loc) && loc.density)
// allows for wall graffiti to be seen
SET_PLANE_IMPLICIT(src, GAME_PLANE)
layer = GAME_CLEAN_LAYER
layer = CLEANABLE_OBJECT_LAYER
if(e_name)
name = e_name
if(desc_override)
@@ -231,6 +231,9 @@
/obj/effect/turf_decal/siding/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/end
icon_state = "siding_plain_end"
@@ -240,6 +243,9 @@
/obj/effect/turf_decal/siding/white/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/white/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/white/end
icon_state = "siding_plain_end"
@@ -249,6 +255,9 @@
/obj/effect/turf_decal/siding/red/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/red/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/red/end
icon_state = "siding_plain_end"
@@ -258,6 +267,9 @@
/obj/effect/turf_decal/siding/dark_red/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/dark_red/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/dark_red/end
icon_state = "siding_plain_end"
@@ -267,6 +279,9 @@
/obj/effect/turf_decal/siding/green/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/green/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/green/end
icon_state = "siding_plain_end"
@@ -276,6 +291,9 @@
/obj/effect/turf_decal/siding/dark_green/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/dark_green/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/dark_green/end
icon_state = "siding_plain_end"
@@ -285,6 +303,9 @@
/obj/effect/turf_decal/siding/blue/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/blue/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/blue/end
icon_state = "siding_plain_end"
@@ -294,6 +315,9 @@
/obj/effect/turf_decal/siding/dark_blue/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/dark_blue/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/dark_blue/end
icon_state = "siding_plain_end"
@@ -303,6 +327,9 @@
/obj/effect/turf_decal/siding/yellow/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/yellow/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/yellow/end
icon_state = "siding_plain_end"
@@ -312,6 +339,9 @@
/obj/effect/turf_decal/siding/purple/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/purple/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/purple/end
icon_state = "siding_plain_end"
@@ -321,6 +351,9 @@
/obj/effect/turf_decal/siding/brown/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/brown/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/brown/end
icon_state = "siding_plain_end"
@@ -330,6 +363,9 @@
/obj/effect/turf_decal/siding/dark/corner
icon_state = "siding_plain_corner"
/obj/effect/turf_decal/siding/dark/inner_corner
icon_state = "siding_plain_corner_inner"
/obj/effect/turf_decal/siding/dark/end
icon_state = "siding_plain_end"