Files
Paradise/code/game/objects/effects/decals/Cleanable/tracks.dm
Kugamo 094ca3c733 Blood now floats in zero G (#20993)
* Da Vlood

* removes_unused_icons

* Yep sprites

* fixes xeno blood and vomit

* Commit number x

* Steel Review Changes 1

* Henri Review Changes 1

* fixing vomit

🌋

* Haha haha ha ... ha

* fixing layering issueeee

* Sirryan2002 Review

THANKS

* implicit var/

* Sirryan Review 2

Electric Boogaloo

* Testmerge Update 1

gibs were still getting animated, blood drying while animated in space looked very jank.

all fixed

* unused variable

AHSDHASOIADGSOISA

* Testmerge Update 2

tracks floating annoyingly

* Improvements

-blood globules will now continue with the inertia of their emittor, instead of towards wherever they were facing
-drops will now have visible sprites after splatting
[running animate() still sometimes doesnt stop the animation annoyingly]

* errors

* Sirryan Review 3
2023-06-14 21:17:08 -05:00

153 lines
4.9 KiB
Plaintext

// 5 seconds
#define TRACKS_CRUSTIFY_TIME 50
#define ALWAYS_IN_GRAVITY 2
// color-dir-dry
GLOBAL_LIST_EMPTY(fluidtrack_cache)
// Footprints, tire trails...
/obj/effect/decal/cleanable/blood/tracks
icon = 'icons/effects/fluidtracks.dmi'
name = "wet tracks"
dryname = "dried tracks"
desc = "Whoops..."
drydesc = "Whoops..."
icon_state = "wheels1"
gender = PLURAL
random_icon_states = null
amount = 0
gravity_check = ALWAYS_IN_GRAVITY
//BLOODY FOOTPRINTS
/obj/effect/decal/cleanable/blood/footprints
icon = 'icons/effects/fluidtracks.dmi'
icon_state = "nothingwhatsoever"
desc = "You REALLY shouldn't follow these.."
gender = PLURAL
random_icon_states = null
basecolor = "#A10808"
var/entered_dirs = 0
var/exited_dirs = 0
var/base_alpha = BLOODY_FOOTPRINT_BASE_ALPHA
blood_state = BLOOD_STATE_HUMAN //the icon state to load images from
gravity_check = ALWAYS_IN_GRAVITY
/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O, oldloc)
..()
if(ishuman(O))
var/mob/living/carbon/human/H = O
var/obj/item/clothing/shoes/S = H.shoes
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/hasfeet = TRUE
if(!l_foot && !r_foot)
hasfeet = FALSE
if(S && S.bloody_shoes[blood_state] && S.blood_color == basecolor)
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
S.bloody_shoes[BLOOD_BASE_ALPHA] = base_alpha
if(!S.blood_DNA)
S.blood_DNA = list()
S.blood_DNA |= blood_DNA.Copy()
if(!(entered_dirs & H.dir))
entered_dirs |= H.dir
update_icon()
else if(hasfeet && H.bloody_feet[blood_state] && H.feet_blood_color == basecolor)//Or feet //This will need to be changed.
H.bloody_feet[blood_state] = max(H.bloody_feet[blood_state] - BLOOD_LOSS_PER_STEP, 0)
H.bloody_feet[BLOOD_BASE_ALPHA] = base_alpha
if(!H.feet_blood_DNA)
H.feet_blood_DNA = list()
H.feet_blood_DNA |= blood_DNA.Copy()
if(!(entered_dirs & H.dir))
entered_dirs |= H.dir
update_icon()
/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O)
..()
if(ishuman(O))
var/mob/living/carbon/human/H = O
var/obj/item/clothing/shoes/S = H.shoes
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/hasfeet = TRUE
if(!l_foot && !r_foot)
hasfeet = FALSE
if(S && S.bloody_shoes[blood_state] && S.blood_color == basecolor)
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
if(!S.blood_DNA)
S.blood_DNA = list()
S.blood_DNA |= blood_DNA.Copy()
if(!(exited_dirs & H.dir))
exited_dirs |= H.dir
update_icon()
else if(hasfeet && H.bloody_feet[blood_state] && H.feet_blood_color == basecolor)//Or feet
H.bloody_feet[blood_state] = max(H.bloody_feet[blood_state] - BLOOD_LOSS_PER_STEP, 0)
if(!H.feet_blood_DNA)
H.feet_blood_DNA = list()
H.feet_blood_DNA |= blood_DNA.Copy()
if(!(exited_dirs & H.dir))
exited_dirs |= H.dir
update_icon()
/obj/effect/decal/cleanable/blood/footprints/update_overlays()
. = ..()
for(var/Ddir in GLOB.cardinal)
if(entered_dirs & Ddir)
var/image/I
if(GLOB.fluidtrack_cache["entered-[blood_state]-[Ddir]"])
I = GLOB.fluidtrack_cache["entered-[blood_state]-[Ddir]"]
else
I = image(icon,"[blood_state]1",dir = Ddir)
GLOB.fluidtrack_cache["entered-[blood_state]-[Ddir]"] = I
if(I)
I.color = basecolor
. += I
if(exited_dirs & Ddir)
var/image/I
if(GLOB.fluidtrack_cache["exited-[blood_state]-[Ddir]"])
I = GLOB.fluidtrack_cache["exited-[blood_state]-[Ddir]"]
else
I = image(icon,"[blood_state]2",dir = Ddir)
GLOB.fluidtrack_cache["exited-[blood_state]-[Ddir]"] = I
if(I)
I.color = basecolor
. += I
alpha = base_alpha + bloodiness
/proc/createFootprintsFrom(atom/movable/A, dir, turf/T)
var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T)
if(ishuman(A))
var/mob/living/carbon/human/H = A
FP.blood_state = H.blood_state
FP.bloodiness = H.bloody_feet[H.blood_state] - BLOOD_LOSS_IN_SPREAD
FP.basecolor = H.feet_blood_color
FP.base_alpha = H.bloody_feet[BLOOD_BASE_ALPHA]
if(H.blood_DNA)
FP.blood_DNA = H.blood_DNA.Copy()
else if(istype(A, /obj/item/clothing/shoes))
var/obj/item/clothing/shoes/S = A
FP.blood_state = S.blood_state
FP.bloodiness = S.bloody_shoes[S.blood_state] - BLOOD_LOSS_IN_SPREAD
FP.basecolor = S.blood_color
FP.base_alpha = S.bloody_shoes[BLOOD_BASE_ALPHA]
if(S.blood_DNA)
FP.blood_DNA = S.blood_DNA.Copy()
FP.entered_dirs |= dir
FP.update_icon()
return FP
/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/blood/footprints/C)
if(blood_state != C.blood_state) //We only replace footprints of the same type as us
return
..()
/obj/effect/decal/cleanable/blood/footprints/can_bloodcrawl_in()
if(basecolor == COLOR_BLOOD_MACHINE)
return FALSE
return TRUE
#undef ALWAYS_IN_GRAVITY