I need to do something else for a bit pending reviews

This commit is contained in:
Poojawa
2019-04-17 04:33:56 -05:00
parent 73098574b7
commit fe6407d00c
9 changed files with 290 additions and 25 deletions
@@ -39,11 +39,6 @@
/obj/effect/decal/cleanable/blood/splatter
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
/obj/effect/decal/cleanable/blood/tracks
icon_state = "tracks"
desc = "They look like tracks left by wheels."
random_icon_states = null
/obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose so that it shows up even on regular splatters
name = "blood"
icon_state = "ltrails_1"
@@ -150,19 +145,18 @@
//BLOODY FOOTPRINTS
/obj/effect/decal/cleanable/blood/footprints
name = "footprints"
icon = 'icons/effects/footprints.dmi'
/obj/effect/decal/cleanable/blood/tracks
name = "tracks"
icon = 'icons/effects/fluidtracks.dmi'
icon_state = "nothingwhatsoever"
desc = "WHOSE FOOTPRINTS ARE THESE?"
random_icon_states = null
var/entered_dirs = 0
var/exited_dirs = 0
var/foot_state
blood_state = BLOOD_STATE_BLOOD //the icon state to load images from
var/print_state = FOOTPRINT_SHOE //the icon state to load images from
var/list/shoe_types = list()
/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O)
/obj/effect/decal/cleanable/blood/tracks/Crossed(atom/movable/O)
..()
if(ishuman(O))
var/mob/living/carbon/human/H = O
@@ -174,7 +168,7 @@
entered_dirs |= H.dir
update_icon()
/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O)
/obj/effect/decal/cleanable/blood/tracks/Uncrossed(atom/movable/O)
..()
if(ishuman(O))
var/mob/living/carbon/human/H = O
@@ -187,24 +181,24 @@
update_icon()
/obj/effect/decal/cleanable/blood/footprints/update_icon()
/obj/effect/decal/cleanable/blood/tracks/update_icon()
cut_overlays()
for(var/Ddir in GLOB.cardinals)
if(entered_dirs & Ddir)
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]"]
if(!bloodstep_overlay)
GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir)
GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[print_state]1", dir = Ddir)
add_overlay(bloodstep_overlay)
if(exited_dirs & Ddir)
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]"]
if(!bloodstep_overlay)
GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir)
GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[print_state]2", dir = Ddir)
add_overlay(bloodstep_overlay)
alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness
/obj/effect/decal/cleanable/blood/footprints/examine(mob/user)
/obj/effect/decal/cleanable/blood/tracks/examine(mob/user)
. = ..()
if(shoe_types.len)
. += "You recognise the footprints as belonging to:\n"
@@ -214,14 +208,51 @@
to_chat(user, .)
/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C)
/obj/effect/decal/cleanable/blood/tracks/replace_decal(obj/effect/decal/cleanable/C)
if(blood_state != C.blood_state) //We only replace footprints of the same type as us
return
if(color != C.color)
return
..()
/obj/effect/decal/cleanable/blood/footprints/can_bloodcrawl_in()
/obj/effect/decal/cleanable/blood/tracks/can_bloodcrawl_in()
if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY))
return 1
return 0
return TRUE
return FALSE
/obj/effect/decal/cleanable/blood/tracks/footprints
name = "footprints"
desc = "They look like tracks left by footwear."
icon_state = FOOTPRINT_SHOE
print_state = FOOTPRINT_SHOE
/obj/effect/decal/cleanable/blood/tracks/snake
name = "tracks"
desc = "They look like tracks left by a giant snake."
icon_state = FOOTPRINT_SNAKE
print_state = FOOTPRINT_SNAKE
/obj/effect/decal/cleanable/blood/tracks/paw
name = "tracks"
desc = "They look like tracks left by mammalian paws."
icon_state = FOOTPRINT_PAW
print_state = FOOTPRINT_PAW
/obj/effect/decal/cleanable/blood/tracks/claw
name = "tracks"
desc = "They look like tracks left by reptilian claws."
icon_state = FOOTPRINT_CLAW
print_state = FOOTPRINT_CLAW
/obj/effect/decal/cleanable/blood/tracks/wheels
name = "tracks"
desc = "They look like tracks left by wheels."
gender = PLURAL
icon_state = FOOTPRINT_WHEEL
print_state = FOOTPRINT_WHEEL
/obj/effect/decal/cleanable/blood/tracks/body
name = "trails"
desc = "A trail left by something being dragged."
icon_state = FOOTPRINT_DRAG
print_state = FOOTPRINT_DRAG
@@ -0,0 +1,136 @@
// Stolen en masse from N3X15 of /vg/station with much gratitude.
// The idea is to have 4 bits for coming and 4 for going.
#define TRACKS_COMING_NORTH 1
#define TRACKS_COMING_SOUTH 2
#define TRACKS_COMING_EAST 4
#define TRACKS_COMING_WEST 8
#define TRACKS_GOING_NORTH 16
#define TRACKS_GOING_SOUTH 32
#define TRACKS_GOING_EAST 64
#define TRACKS_GOING_WEST 128
// color-dir-dry
var/global/list/image/fluidtrack_cache=list()
/datum/fluidtrack
var/direction=0
var/basecolor=COLOR_BLOOD_HUMAN
var/image/overlay
/datum/fluidtrack/New(_direction,_color,_wet)
src.direction=_direction
src.basecolor=_color
// Footprints, tire trails...
/obj/effect/decal/cleanable/blood/tracks
amount = 0
random_icon_states = null
var/dirs=0
icon = 'icons/effects/fluidtracks.dmi'
icon_state = ""
var/coming_state="blood1"
var/going_state="blood2"
var/updatedtracks=0
// dir = id in stack
var/list/setdirs=list(
"1"=0,
"2"=0,
"4"=0,
"8"=0,
"16"=0,
"32"=0,
"64"=0,
"128"=0
)
// List of laid tracks and their colors.
var/list/datum/fluidtrack/stack=list()
/**
* Add tracks to an existing trail.
*
* @param DNA bloodDNA to add to collection.
* @param comingdir Direction tracks come from, or 0.
* @param goingdir Direction tracks are going to (or 0).
* @param bloodcolor Color of the blood when wet.
*/
/obj/effect/decal/cleanable/blood/tracks/proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor=BLOOD_COLOR_HUMAN)
var/updated=0
// Shift our goingdir 4 spaces to the left so it's in the GOING bitblock.
var/realgoing=goingdir<<4
// Current bit
var/b=0
var/datum/fluidtrack/track
// Process 4 bits
for(var/bi=0;bi<4;bi++)
b=1<<bi
// COMING BIT
// If setting
if(comingdir&b)
// If not wet or not set
if(dirs&b)
var/sid=setdirs["[b]"]
track=stack[sid]
if(track.wet==t && track.basecolor==bloodcolor)
continue
// Remove existing stack entry
stack.Remove(track)
track=new /datum/fluidtrack(b,bloodcolor,t)
stack.Add(track)
setdirs["[b]"]=stack.Find(track)
updatedtracks |= b
updated=1
// GOING BIT (shift up 4)
b=b<<4
if(realgoing&b)
// If not wet or not set
if(dirs&b)
var/sid=setdirs["[b]"]
track=stack[sid]
if(track.basecolor==bloodcolor)
continue
// Remove existing stack entry
stack.Remove(track)
track=new /datum/fluidtrack(b,bloodcolor,t)
stack.Add(track)
setdirs["[b]"]=stack.Find(track)
updatedtracks |= b
updated=1
dirs |= comingdir|realgoing
if(islist(blood_DNA))
blood_DNA |= DNA.Copy()
if(updated)
update_icon()
/obj/effect/decal/cleanable/blood/tracks/on_update_icon()
overlays.Cut()
color = "#ffffff"
var/truedir=0
// Update ONLY the overlays that have changed.
for(var/datum/fluidtrack/track in stack)
var/stack_idx=setdirs["[track.direction]"]
var/state=coming_state
truedir=track.direction
if(truedir&240) // Check if we're in the GOING block
state=going_state
truedir=truedir>>4
if(track.overlay)
track.overlay=null
var/image/I = image(icon, icon_state=state, dir=num2dir(truedir))
I.color = track.basecolor
track.fresh=0
track.overlay=I
stack[stack_idx]=track
overlays += I
updatedtracks=0 // Clear our memory of updated tracks.