mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-03 21:42:06 +00:00
* [MDB IGNORE] Refactors drinks and fixes a lot of food problems * [MDB IGNORE] Refactors drinks and fixes a lot of food problems * forgto 2 commit * im slowly going insane * why does find and replace not FIND everything * hnghnnngh * h * l * a * a * so close... * delta fix * I thought I committed this already, guess not * this PR has been the bane of my fucking life * orange juice Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com> Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com> Co-authored-by: Jolly-66 <70232195+Jolly-66@users.noreply.github.com>
135 lines
4.7 KiB
Plaintext
135 lines
4.7 KiB
Plaintext
/obj/effect/decal/cleanable
|
|
gender = PLURAL
|
|
layer = ABOVE_NORMAL_TURF_LAYER
|
|
var/list/random_icon_states = null
|
|
///I'm sorry but cleanable/blood code is ass, and so is blood_DNA
|
|
var/blood_state = ""
|
|
///0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
|
|
var/bloodiness = 0
|
|
///When two of these are on a same tile or do we need to merge them into just one?
|
|
var/mergeable_decal = TRUE
|
|
var/beauty = 0
|
|
///The type of cleaning required to clean the decal. See __DEFINES/cleaning.dm for the options
|
|
var/clean_type = CLEAN_TYPE_LIGHT_DECAL
|
|
///The reagent this decal holds. Leave blank for none.
|
|
var/datum/reagent/decal_reagent
|
|
///The amount of reagent this decal holds, if decal_reagent is defined
|
|
var/reagent_amount = 0
|
|
|
|
/obj/effect/decal/cleanable/Initialize(mapload, list/datum/disease/diseases)
|
|
. = ..()
|
|
if (random_icon_states && (icon_state == initial(icon_state)) && length(random_icon_states) > 0)
|
|
icon_state = pick(random_icon_states)
|
|
create_reagents(300)
|
|
if(decal_reagent)
|
|
reagents.add_reagent(decal_reagent, reagent_amount)
|
|
if(loc && isturf(loc))
|
|
for(var/obj/effect/decal/cleanable/C in loc)
|
|
if(C != src && C.type == type && !QDELETED(C))
|
|
if (replace_decal(C))
|
|
handle_merge_decal(C)
|
|
return INITIALIZE_HINT_QDEL
|
|
|
|
if(LAZYLEN(diseases))
|
|
var/list/datum/disease/diseases_to_add = list()
|
|
for(var/datum/disease/D in diseases)
|
|
if(D.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS)
|
|
diseases_to_add += D
|
|
if(LAZYLEN(diseases_to_add))
|
|
AddComponent(/datum/component/infective, diseases_to_add)
|
|
|
|
AddElement(/datum/element/beauty, beauty)
|
|
|
|
var/turf/T = get_turf(src)
|
|
if(T && is_station_level(T.z))
|
|
SSblackbox.record_feedback("tally", "station_mess_created", 1, name)
|
|
var/static/list/loc_connections = list(
|
|
COMSIG_ATOM_ENTERED = .proc/on_entered,
|
|
)
|
|
AddElement(/datum/element/connect_loc, loc_connections)
|
|
|
|
/obj/effect/decal/cleanable/Destroy()
|
|
var/turf/T = get_turf(src)
|
|
if(T && is_station_level(T.z))
|
|
SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name)
|
|
return ..()
|
|
|
|
/obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) // Returns true if we should give up in favor of the pre-existing decal
|
|
if(mergeable_decal)
|
|
return TRUE
|
|
|
|
/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, params)
|
|
if((istype(W, /obj/item/reagent_containers/cup) && !istype(W, /obj/item/reagent_containers/cup/rag)) || istype(W, /obj/item/reagent_containers/cup/glass))
|
|
if(src.reagents && W.reagents)
|
|
. = 1 //so the containers don't splash their content on the src while scooping.
|
|
if(!src.reagents.total_volume)
|
|
to_chat(user, span_notice("[src] isn't thick enough to scoop up!"))
|
|
return
|
|
if(W.reagents.total_volume >= W.reagents.maximum_volume)
|
|
to_chat(user, span_notice("[W] is full!"))
|
|
return
|
|
to_chat(user, span_notice("You scoop up [src] into [W]!"))
|
|
reagents.trans_to(W, reagents.total_volume, transfered_by = user)
|
|
if(!reagents.total_volume) //scooped up all of it
|
|
qdel(src)
|
|
return
|
|
if(W.get_temperature()) //todo: make heating a reagent holder proc
|
|
if(istype(W, /obj/item/clothing/mask/cigarette))
|
|
return
|
|
else
|
|
var/hotness = W.get_temperature()
|
|
reagents.expose_temperature(hotness)
|
|
to_chat(user, span_notice("You heat [name] with [W]!"))
|
|
else
|
|
return ..()
|
|
|
|
/obj/effect/decal/cleanable/fire_act(exposed_temperature, exposed_volume)
|
|
if(reagents)
|
|
reagents.expose_temperature(exposed_temperature)
|
|
..()
|
|
|
|
|
|
//Add "bloodiness" of this blood's type, to the human's shoes
|
|
//This is on /cleanable because fuck this ancient mess
|
|
/obj/effect/decal/cleanable/proc/on_entered(datum/source, atom/movable/AM)
|
|
SIGNAL_HANDLER
|
|
if(iscarbon(AM) && blood_state && bloodiness >= 40)
|
|
SEND_SIGNAL(AM, COMSIG_STEP_ON_BLOOD, src)
|
|
update_appearance()
|
|
|
|
/obj/effect/decal/cleanable/wash(clean_types)
|
|
. = ..()
|
|
if (. || (clean_types & clean_type))
|
|
qdel(src)
|
|
return TRUE
|
|
return .
|
|
|
|
/**
|
|
* Checks if this decal is a valid decal that can be blood crawled in.
|
|
*/
|
|
/obj/effect/decal/cleanable/proc/can_bloodcrawl_in()
|
|
if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY))
|
|
return bloodiness
|
|
|
|
return FALSE
|
|
|
|
/**
|
|
* Gets the color associated with the any blood present on this decal. If there is no blood, returns null.
|
|
*/
|
|
/obj/effect/decal/cleanable/proc/get_blood_color()
|
|
switch(blood_state)
|
|
if(BLOOD_STATE_HUMAN)
|
|
return rgb(149, 10, 10)
|
|
if(BLOOD_STATE_XENO)
|
|
return rgb(43, 186, 0)
|
|
if(BLOOD_STATE_OIL)
|
|
return rgb(22, 22, 22)
|
|
|
|
return null
|
|
|
|
/obj/effect/decal/cleanable/proc/handle_merge_decal(obj/effect/decal/cleanable/merger)
|
|
if(!merger)
|
|
return
|
|
if(merger.reagents && reagents)
|
|
reagents.trans_to(merger, reagents.total_volume)
|