diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index eef64d1b6a2..9635de50de3 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -19,6 +19,7 @@ var/amount = 5 var/drytime var/dries = TRUE + var/bleed_time /obj/effect/decal/cleanable/blood/no_dry dries = FALSE @@ -53,10 +54,15 @@ blood_DNA |= B.blood_DNA.Copy() qdel(B) drytime = DRYING_TIME * (amount+1) - if (dries && !mapload) - addtimer(CALLBACK(src, /obj/effect/decal/cleanable/blood/.proc/dry), drytime) - else if (dries) - dry() + bleed_time = world.time + if (dries) + animate(src, color = "#000000", time = drytime, loop = 0, flags = ANIMATION_RELATIVE) + +/obj/effect/decal/cleanable/blood/examine() + if(dries && world.time > (bleed_time + drytime)) + name = dryname + desc = drydesc + . = ..() /obj/effect/decal/cleanable/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/gun/energy/rifle/cult)) @@ -70,6 +76,8 @@ /obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp) if (!istype(perp)) return + if(dries && world.time > (bleed_time + drytime)) + amount = 0 if(amount < 1) return @@ -115,14 +123,10 @@ if(amount > 2 && prob(perp.slip_chance(perp.m_intent == M_RUN ? 20 : 5))) perp.slip(src, 4) -/obj/effect/decal/cleanable/blood/proc/dry() - name = dryname - desc = drydesc - color = adjust_brightness(color, -50) - amount = 0 - /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) @@ -254,11 +258,7 @@ random_icon_states = null var/list/datum/disease2/disease/virus2 = list() - var/dry = 0 // Keeps the lag down /obj/effect/decal/cleanable/mucus/Initialize() . = ..() - addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * 2) - -/obj/effect/decal/cleanable/mucus/proc/dry() - dry = TRUE + animate(src, color = "#000000", time = DRYING_TIME * 2, loop = 0, flags = ANIMATION_RELATIVE) diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 20a4bb272bf..e6341bcdfb4 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -5,14 +5,11 @@ icon_state = "gib1" basecolor="#030303" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") - dries = FALSE // So we can avoid setting the timer if it's not going to do anything. + dries = FALSE /obj/effect/decal/cleanable/blood/gibs/robot/update_icon() color = "#FFFFFF" -/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like - return - /obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) set waitfor = FALSE var/direction = pick(directions) @@ -42,13 +39,10 @@ basecolor="#030303" dries = FALSE -/obj/effect/decal/cleanable/blood/oil/dry() - return - /obj/effect/decal/cleanable/blood/oil/streak random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") amount = 2 /obj/effect/decal/cleanable/blood/drip/oil name = "drips of motor oil" - desc = "It's black and greasy." \ No newline at end of file + desc = "It's black and greasy." diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index e8810220b9c..cae3ae0ab57 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -157,8 +157,9 @@ desc = "They look like still wet tracks left by bare feet." drydesc = "They look like dried tracks left by bare feet." -/obj/effect/decal/cleanable/blood/tracks/footprints/barefoot/del_dry/dry() - qdel(src) +/obj/effect/decal/cleanable/blood/tracks/footprints/barefoot/del_dry/Initialize() + . = ..() + QDEL_IN(src, TRACKS_CRUSTIFY_TIME) /obj/effect/decal/cleanable/blood/tracks/wheels name = "wet tracks" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a549f6611a9..d96c39a9555 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -27,9 +27,9 @@ var/image/blood_overlay var/bleeding = FALSE - var/blood_amount = 50 // set a limit to the amount of blood it can bleed, otherwise it will keep bleeding forever and crunk the server + var/blood_amount = 20 // set a limit to the amount of blood it can bleed, otherwise it will keep bleeding forever and crunk the server var/previous_bleed_timer = 0 // they only bleed for as many seconds as force damage was applied to them - var/blood_timer_mod = 1 // tweak to change the amount of seconds a mob will bleed + var/blood_timer_mod = 0.25 // tweak to change the amount of seconds a mob will bleed var/list/speak = list() var/speak_chance = 0 diff --git a/html/changelogs/blood_splatter_reduction.yml b/html/changelogs/blood_splatter_reduction.yml new file mode 100644 index 00000000000..92e3edfb0c4 --- /dev/null +++ b/html/changelogs/blood_splatter_reduction.yml @@ -0,0 +1,7 @@ +author: mikomyazaki + +delete-after: True + +changes: + - bugfix: "Large amounts of blood splatters should impact server performance significantly less." + - tweak: "Simple mobs now produce fewer blood splatters each time they are hit."