mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-25 06:47:01 +01:00
b8902e2e16
Runtime map now has a bunch of new areas / items with often-tested stuffs, and some hard-to-put-at-runtime stuffs. Runtime map jobs now are positioned to make it faster to reach the aforementioned often-tested stuffs. Runtime map doesn't generate an overmap anymore by default, which speeds up the process. Runtime map now loads in ~11 seconds instead of ~40 seconds as it was before. Updated the maploader to be faster in parsing maps. Bapi is not engaged anymore if we're only measuring the map size, which speeds up the process. In fastboot we do not generate the codexes anymore, which speeds up the process. In fastboot and if exoplanets and away sites are not enabled, we do not parse the map templates anymore, which speeds up the process. Updated the icon smoothing to be faster. Optimized cargo area code. Other optimizations.
291 lines
8.4 KiB
Plaintext
291 lines
8.4 KiB
Plaintext
#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var)
|
|
|
|
/obj/effect/decal/cleanable/blood
|
|
name = "blood"
|
|
var/dryname = "dried blood"
|
|
desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
|
|
var/drydesc = "It's dry and crusty. Someone is not doing their job."
|
|
gender = PLURAL
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "mfloor1"
|
|
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
|
|
var/base_icon = 'icons/effects/blood.dmi'
|
|
var/list/viruses = list()
|
|
blood_DNA = list()
|
|
color = COLOR_HUMAN_BLOOD
|
|
var/basecolor = COLOR_HUMAN_BLOOD // Color when wet.
|
|
var/list/datum/disease2/disease/virus2 = list()
|
|
var/amount = 5
|
|
var/drytime
|
|
var/dries = TRUE
|
|
var/bleed_time
|
|
|
|
/obj/effect/decal/cleanable/blood/no_dry
|
|
dries = FALSE
|
|
|
|
/obj/effect/decal/cleanable/blood/reveal_blood()
|
|
if(!fluorescent)
|
|
fluorescent = 1
|
|
basecolor = COLOR_LUMINOL
|
|
update_icon()
|
|
|
|
/obj/effect/decal/cleanable/blood/clean_blood()
|
|
fluorescent = 0
|
|
if(invisibility != 100)
|
|
set_invisibility(100)
|
|
amount = 0
|
|
..(ignore=1)
|
|
|
|
/obj/effect/decal/cleanable/blood/hide()
|
|
return
|
|
|
|
/obj/effect/decal/cleanable/blood/Initialize(mapload)
|
|
. = ..()
|
|
fall_to_floor()
|
|
update_icon()
|
|
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
|
|
return
|
|
if(type == /obj/effect/decal/cleanable/blood)
|
|
if (isturf(loc))
|
|
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
|
|
if(B != src)
|
|
if (B.blood_DNA)
|
|
blood_DNA |= B.blood_DNA.Copy()
|
|
QDEL_IN(B, 1 SECOND)
|
|
drytime = DRYING_TIME * (amount+1)
|
|
bleed_time = world.time
|
|
if (dries)
|
|
animate(src, color = "#000000", time = drytime, loop = 0, flags = ANIMATION_RELATIVE)
|
|
|
|
var/static/list/loc_connections = list(
|
|
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
|
|
)
|
|
|
|
AddElement(/datum/element/connect_loc, loc_connections)
|
|
|
|
/obj/effect/decal/cleanable/blood/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
if(dries && world.time > (bleed_time + drytime))
|
|
name = dryname
|
|
desc = drydesc
|
|
. = ..()
|
|
|
|
/obj/effect/decal/cleanable/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item, /obj/item/gun/energy/rifle/cult))
|
|
return TRUE
|
|
return ..()
|
|
|
|
/obj/effect/decal/cleanable/blood/update_icon()
|
|
if(basecolor == "rainbow")
|
|
basecolor = get_random_colour(1)
|
|
color = basecolor
|
|
|
|
/obj/effect/decal/cleanable/blood/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
|
|
SIGNAL_HANDLER
|
|
|
|
if (!istype(arrived, /mob/living/carbon/human))
|
|
return
|
|
|
|
var/mob/living/carbon/human/perp = arrived
|
|
|
|
if(dries && world.time > (bleed_time + drytime))
|
|
amount = 0
|
|
if(amount < 1)
|
|
return
|
|
|
|
LAZYINITLIST(blood_DNA)
|
|
|
|
var/obj/item/organ/external/l_foot = perp.get_organ(BP_L_FOOT)
|
|
var/obj/item/organ/external/r_foot = perp.get_organ(BP_R_FOOT)
|
|
var/hasfeet = 1
|
|
if((!l_foot || l_foot.is_stump()) && (!r_foot || r_foot.is_stump()))
|
|
hasfeet = 0
|
|
|
|
//If thrown (or leap manouvering), the mob is considered flying, so don't dirt its shoes
|
|
if(!perp.throwing)
|
|
|
|
if(perp.shoes && !perp.buckled_to)//Adding blood to shoes
|
|
var/obj/item/clothing/shoes/S = perp.shoes
|
|
if(istype(S))
|
|
if(S.item_flags & ITEM_FLAG_LIGHT_STEP)
|
|
return
|
|
S.blood_color = basecolor
|
|
S.track_footprint = max(amount, S.track_footprint)
|
|
if(!S.blood_overlay)
|
|
S.generate_blood_overlay()
|
|
if(!S.blood_DNA)
|
|
S.blood_DNA = list()
|
|
S.blood_overlay.color = basecolor
|
|
S.AddOverlays(S.blood_overlay)
|
|
if(S.blood_overlay && S.blood_overlay.color != basecolor)
|
|
S.CutOverlays(S.blood_overlay, ATOM_ICON_CACHE_PROTECTED)
|
|
S.blood_overlay.color = basecolor
|
|
S.AddOverlays(S.blood_overlay, ATOM_ICON_CACHE_PROTECTED)
|
|
if(blood_DNA)
|
|
S.blood_DNA |= blood_DNA.Copy()
|
|
|
|
else if(hasfeet) //Or feet
|
|
perp.footprint_color = basecolor
|
|
perp.track_footprint = max(amount,perp.track_footprint)
|
|
LAZYINITLIST(perp.feet_blood_DNA)
|
|
if(blood_DNA)
|
|
perp.feet_blood_DNA |= blood_DNA.Copy()
|
|
else if(perp.buckled_to && istype(perp.buckled_to, /obj/structure/bed/stool/chair/office/wheelchair))
|
|
var/obj/structure/bed/stool/chair/office/wheelchair/W = perp.buckled_to
|
|
W.bloodiness = 4
|
|
|
|
perp.update_inv_shoes(1)
|
|
amount--
|
|
|
|
//Point and laugh
|
|
if(amount > 2 && prob(perp.slip_chance(perp.m_intent == M_RUN ? 20 : 5)))
|
|
perp.slip(src, 4)
|
|
|
|
if(perp.throwing)
|
|
amount--
|
|
|
|
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
|
|
..()
|
|
if(dries && world.time > (bleed_time + drytime))
|
|
amount = 0
|
|
if (amount && istype(user))
|
|
add_fingerprint(user)
|
|
if (user.gloves)
|
|
return
|
|
var/taken = rand(1,amount)
|
|
amount -= taken
|
|
to_chat(user, SPAN_NOTICE("You get some of \the [src] on your hands."))
|
|
LAZYINITLIST(user.blood_DNA)
|
|
|
|
if (blood_DNA)
|
|
user.blood_DNA |= blood_DNA.Copy()
|
|
|
|
user.bloody_hands = taken
|
|
user.hand_blood_color = basecolor
|
|
user.update_inv_gloves(1)
|
|
add_verb(user, /mob/living/carbon/human/proc/bloody_doodle)
|
|
|
|
/obj/effect/decal/cleanable/blood/splatter
|
|
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
|
|
amount = 2
|
|
|
|
/obj/effect/decal/cleanable/blood/drip
|
|
name = "drips of blood"
|
|
desc = "It's red."
|
|
gender = PLURAL
|
|
icon = 'icons/effects/drip.dmi'
|
|
icon_state = "1"
|
|
random_icon_states = list("1","2","3","4","5")
|
|
amount = 0
|
|
var/list/drips
|
|
|
|
/obj/effect/decal/cleanable/blood/drip/New()
|
|
..()
|
|
drips = list(icon_state)
|
|
|
|
/obj/effect/decal/cleanable/blood/drip/Destroy()
|
|
drips = null
|
|
. = ..()
|
|
|
|
/obj/effect/decal/cleanable/blood/writing
|
|
icon_state = "tracks"
|
|
desc = "It looks like a writing in blood."
|
|
gender = NEUTER
|
|
random_icon_states = list("writing1","writing2","writing3","writing4","writing5")
|
|
amount = 0
|
|
var/message
|
|
|
|
/obj/effect/decal/cleanable/blood/writing/Initialize()
|
|
. = ..()
|
|
if(LAZYLEN(random_icon_states))
|
|
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
|
|
random_icon_states -= W.icon_state
|
|
icon_state = pick(random_icon_states)
|
|
else
|
|
icon_state = "writing1"
|
|
|
|
/obj/effect/decal/cleanable/blood/writing/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
. = ..()
|
|
. += "It reads: <font color='[basecolor]'>\"[message]\"</font>"
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs
|
|
name = "gibs"
|
|
desc = "They look bloody and gruesome."
|
|
gender = PLURAL
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "gib1"
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5")
|
|
var/fleshcolor = "#FFFFFF"
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/update_icon()
|
|
|
|
var/image/giblets = new(base_icon, "[icon_state]_flesh", dir)
|
|
if(!fleshcolor || fleshcolor == "rainbow")
|
|
fleshcolor = get_random_colour(1)
|
|
giblets.color = fleshcolor
|
|
|
|
var/icon/blood = new(base_icon,"[icon_state]",dir)
|
|
if(basecolor == "rainbow") basecolor = get_random_colour(1)
|
|
blood.Blend(basecolor,ICON_MULTIPLY)
|
|
|
|
icon = blood
|
|
ClearOverlays()
|
|
AddOverlays(giblets)
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/up
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gibup1","gibup1","gibup1")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/down
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gibdown1","gibdown1","gibdown1")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/body
|
|
random_icon_states = list("gibhead", "gibtorso")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/limb
|
|
random_icon_states = list("gibleg", "gibarm")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/core
|
|
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
|
|
set waitfor = FALSE
|
|
var/direction = pick(directions)
|
|
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
|
sleep(3)
|
|
if (i > 0)
|
|
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
|
b.basecolor = src.basecolor
|
|
b.update_icon()
|
|
if (step_to(src, get_step(src, direction), 0))
|
|
break
|
|
/obj/effect/decal/cleanable/blood/proc/fall_to_floor()
|
|
if (isopenturf(loc))
|
|
anchored = FALSE
|
|
ADD_FALLING_ATOM(src)
|
|
|
|
/obj/effect/decal/cleanable/blood/fall_impact()
|
|
. = ..()
|
|
anchored = initial(anchored)
|
|
|
|
/obj/effect/decal/cleanable/mucus
|
|
name = "mucus"
|
|
desc = "Disgusting mucus."
|
|
gender = PLURAL
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "mucus"
|
|
random_icon_states = null
|
|
|
|
var/list/datum/disease2/disease/virus2 = list()
|
|
|
|
/obj/effect/decal/cleanable/mucus/Initialize()
|
|
. = ..()
|
|
animate(src, color = "#000000", time = DRYING_TIME * 2, loop = 0, flags = ANIMATION_RELATIVE)
|
|
|
|
#undef DRYING_TIME
|