mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
Cleanable cleanup (#52477)
* Don't initialize the atom_colours list on atoms until it's actually needed * Moved bloody_hands var to mob/living/carbon/human instead * Added COMSIG_COMPONENT_CLEAN_RADIATION signal to reduce moms spaghetti The shower and suit storage unit now calls this signal instead of either doing it manually or doing it via the washed proc * Cleaned up carbon washing, renamed washed to wash * The wash proc now doesn't take the washer as first arg because that wasn't used anywhere * The wash strength is no longer optional * Carbons now overrides the wash proc instead of using the signal * Properly check for obscuredness before washing any equipped items * Properly wash all items and bloody hands etc * Added clean_lips proc for humans for cleaning any lipstick * Cleaned up washing. Washy stuff now calls wash instead of calling the clean signal directly * Renamed is_cleanable to ismopable, gives this category a more fitting purpose. Many things beyond floor decals are cleanable. It is now also determined using the atom layer instead to make it more generic. * Properly utilize the is_cleanable define * Added wash override for turfs where they also wash any mopables on the same tile * Space cleaner and cleaning element etc now simply washes the mob instead of doing its own manual cleaning on ~some~ equipped items * Non-component washables now simply override wash instead of registering for the clean signal * Fixed some left over clean signal registers not returning true * Added clean_strength var to space cleaner * Moved human wash proc next to the other washing procs * Also wash glasses and mask if not obscured when washing face * Fixed attempting to "scoop up" cleanable decals using a rag * Fixed plasmaman spacehelm icon not updating when washed Also removed a duplicated worn_overlays proc * Fixed head icon not updating when washing lipstick * Moved radioactive clean signal register to where it should be * Added atom radiate VV verb for debugging * Redesigned the CLEAN constants into a more sensible flags setup This makes it more dynamic, cleaning apparatuses can clean more specific than just a cleaning strength. * CLEAN_TYPE_* flags indicate a specific cleanable, such as blood, fingerprints or disease * CLEAN_* consts consist of a combination of cleaning types to make cleaning apparatuses have a consistent behaviour on what they clean * Fixed broken rad removal logic in showers * Apply suggestions from code review Co-authored-by: Rohesie <rohesie@gmail.com> * Removed unneccesary bool from sink code * Fixed wrongly named variable in turf wash * Renamed bloody_hands to blood_in_hands Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
committed by
SkyratBot
co-authored by
Rohesie
parent
69c2e250eb
commit
bae9371da5
@@ -57,6 +57,7 @@ GLOBAL_LIST_INIT(creamable, typecacheof(list(
|
||||
COMSIG_COMPONENT_CLEAN_FACE_ACT))
|
||||
|
||||
///Callback to remove pieface
|
||||
/datum/component/creamed/proc/clean_up(datum/source, strength)
|
||||
if(strength >= CLEAN_WEAK)
|
||||
/datum/component/creamed/proc/clean_up(datum/source, clean_types)
|
||||
if(clean_types & CLEAN_TYPE_BLOOD)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
var/first_dir // This only stores the dir arg from init
|
||||
|
||||
/datum/component/decal/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_NEVER, _color, _layer=TURF_LAYER, _description, _alpha=255)
|
||||
/datum/component/decal/Initialize(_icon, _icon_state, _dir, _cleanable=FALSE, _color, _layer=TURF_LAYER, _description, _alpha=255)
|
||||
if(!isatom(parent) || !generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
first_dir = _dir
|
||||
@@ -19,7 +19,7 @@
|
||||
/datum/component/decal/RegisterWithParent()
|
||||
if(first_dir)
|
||||
RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react)
|
||||
if(cleanable != CLEAN_NEVER)
|
||||
if(cleanable != FALSE)
|
||||
RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react)
|
||||
if(description)
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine)
|
||||
@@ -80,9 +80,10 @@
|
||||
pic.dir = turn(pic.dir, dir2angle(old_dir) - dir2angle(new_dir))
|
||||
apply()
|
||||
|
||||
/datum/component/decal/proc/clean_react(datum/source, strength)
|
||||
if(strength >= cleanable)
|
||||
/datum/component/decal/proc/clean_react(datum/source, clean_types)
|
||||
if(clean_types & cleanable)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
/datum/component/decal/proc/examine(datum/source, mob/user, list/examine_list)
|
||||
examine_list += description
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/component/decal/blood
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE
|
||||
|
||||
/datum/component/decal/blood/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_STRENGTH_BLOOD, _color, _layer=ABOVE_OBJ_LAYER)
|
||||
/datum/component/decal/blood/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_TYPE_BLOOD, _color, _layer=ABOVE_OBJ_LAYER)
|
||||
if(!isitem(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
. = ..()
|
||||
|
||||
@@ -51,13 +51,16 @@
|
||||
fibers = null
|
||||
return TRUE
|
||||
|
||||
/datum/component/forensics/proc/clean_act(datum/source, strength)
|
||||
if(strength >= CLEAN_STRENGTH_FINGERPRINTS)
|
||||
/datum/component/forensics/proc/clean_act(datum/source, clean_types)
|
||||
if(clean_types & CLEAN_TYPE_FINGERPRINTS)
|
||||
wipe_fingerprints()
|
||||
if(strength >= CLEAN_STRENGTH_BLOOD)
|
||||
. = TRUE
|
||||
if(clean_types & CLEAN_TYPE_BLOOD)
|
||||
wipe_blood_DNA()
|
||||
if(strength >= CLEAN_STRENGTH_FIBERS)
|
||||
. = TRUE
|
||||
if(clean_types & CLEAN_TYPE_FIBERS)
|
||||
wipe_fibers()
|
||||
. = TRUE
|
||||
|
||||
/datum/component/forensics/proc/add_fingerprint_list(list/_fingerprints) //list(text)
|
||||
if(!length(_fingerprints))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
dupe_mode = COMPONENT_DUPE_ALLOWED
|
||||
var/list/datum/disease/diseases //make sure these are the static, non-processing versions!
|
||||
var/expire_time
|
||||
var/min_clean_strength = CLEAN_WEAK
|
||||
var/required_clean_types = CLEAN_TYPE_DISEASE
|
||||
|
||||
/datum/component/infective/Initialize(list/datum/disease/_diseases, expire_in)
|
||||
if(islist(_diseases))
|
||||
@@ -12,7 +12,7 @@
|
||||
if(expire_in)
|
||||
expire_time = world.time + expire_in
|
||||
QDEL_IN(src, expire_in)
|
||||
|
||||
|
||||
if(!ismovable(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean)
|
||||
@@ -34,9 +34,10 @@
|
||||
eater.ForceContractDisease(V)
|
||||
try_infect(feeder, BODY_ZONE_L_ARM)
|
||||
|
||||
/datum/component/infective/proc/clean(datum/source, clean_strength)
|
||||
if(clean_strength >= min_clean_strength)
|
||||
/datum/component/infective/proc/clean(datum/source, clean_types)
|
||||
if(clean_types & required_clean_types)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
/datum/component/infective/proc/try_infect_buckle(datum/source, mob/M, force)
|
||||
if(isliving(M))
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
can_contaminate = _can_contaminate
|
||||
if(istype(parent, /atom))
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/rad_examine)
|
||||
RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/rad_clean)
|
||||
if(istype(parent, /obj/item))
|
||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/rad_attack)
|
||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, .proc/rad_attack)
|
||||
@@ -90,6 +91,21 @@
|
||||
return
|
||||
strength -= strength / hl3_release_date
|
||||
|
||||
/datum/component/radioactive/proc/rad_clean(datum/source, clean_types)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
if(!(clean_types & CLEAN_TYPE_RADIATION))
|
||||
return
|
||||
|
||||
if(!(clean_types & CLEAN_TYPE_WEAK))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
strength = max(0, (strength - (RAD_BACKGROUND_RADIATION * 2)))
|
||||
if(strength <= RAD_BACKGROUND_RADIATION)
|
||||
qdel(src)
|
||||
|
||||
#undef RAD_AMOUNT_LOW
|
||||
#undef RAD_AMOUNT_MEDIUM
|
||||
#undef RAD_AMOUNT_HIGH
|
||||
|
||||
@@ -82,6 +82,7 @@
|
||||
/datum/component/thermite/proc/clean_react(datum/source, strength)
|
||||
//Thermite is just some loose powder, you could probably clean it with your hands. << todo?
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
/datum/component/thermite/proc/flame_react(datum/source, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 1922) // This is roughly the real life requirement to ignite thermite
|
||||
|
||||
Reference in New Issue
Block a user