mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-06-05 21:44:44 +01:00
84dc5535dc
* These two are easy * !!!runlevel_flags the fact it was global.runlevel_flags.len has me a bit...iffy on this. * !!!json_cache Same as above. used global. * player_list & observer_mob_list * mechas_list * this wasn't even used * surgery_steps * event_triggers * landmarks_list * dead_mob_list * living_mob_list * ai_list * cable_list * cleanbot_reserved_turfs * listening_objects * silicon_mob_list * human_mob_list * Update global_lists.dm * joblist * mob_list * Update global_lists.dm * holomap_markers * mapping_units * mapping_beacons * hair_styles_list * facial_hair_styles_list * Update global_lists.dm * facial_hair_styles_male_list * facial_hair_styles_female_list * body_marking_styles_list * body_marking_nopersist_list * ear_styles_list * hair_styles_male_list * tail_styles_list * wing_styles_list * escape_list & rune_list & endgame_exits these were all really small * endgame_safespawns * stool_cache * emotes_by_key * random_maps & map_count * item_tf_spawnpoints * narsie_list * active_radio_jammers * unused * paikeys * pai_software_by_key & default_pai_software * plant_seed_sprites * magazine_icondata_keys & magazine_icondata_states * unused * ashtray_cache * light_type_cache * HOLIDAY!!! this one was annoying * faction stuff (red?!) * Update preferences_factions.dm * vs edit removal * backbaglist, pdachoicelist, exclude_jobs * item_digestion_blacklist, edible_tech, blacklisted_artifact_effect, selectable_footstep, hexNums, syndicate_access * string_slot_flags and hexdigits->hexNums * possible_changeling_IDs * vr_mob_tf_options * vr_mob_spawner_options * pipe_colors * vr_mob_spawner_options * common_tools * newscaster_standard_feeds * Update periodic_news.dm * changeling_fabricated_clothing * semirandom_mob_spawner_decisions * id_card_states * Update syndicate_ids.dm * overlay_cache & gear_distributed_to * more * radio_channels_by_freq * Update global_lists.dm * proper * default_medbay_channels & default_internal_channels default_internal_channels is weird as it has a mapbased proc() but that proc is never called... * valid_ringtones * move this * possible_plants * more * separate these moves xeno2chemlist from a hook to a new global list. * tube_dir_list * valid_bloodreagents & monitor_states * Junk * valid_bloodtypes * breach_burn_descriptors & burn * more!! appliance_available_recipes seems uber cursed, re-look at later * Appliance code is cursed * wide_chassis & flying_chassis * allows_eye_color * all_tooltip_styles * direction_table * gun_choices * severity_to_string * old event_viruses * description_icons * MOVE_KEY_MAPPINGS * more more * pai & robot modules * Update global_lists.dm * GEOSAMPLES Also swaps a .len to LAZYLEN() * shieldgens * reagent recipies * global ammo types * rad collector * old file and unused global * nif_look_messages * FESH * nifsoft * chamelion * the death of sortAtom * globulins * lazylen that * Update global_lists.dm * LAZY * Theese too * quick fix --------- Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
194 lines
4.8 KiB
Plaintext
194 lines
4.8 KiB
Plaintext
// Stolen en masse from N3X15 of /vg/station with much gratitude.
|
|
|
|
// 5 seconds
|
|
#define TRACKS_CRUSTIFY_TIME 50
|
|
|
|
/datum/fluidtrack
|
|
var/direction=0
|
|
var/basecolor="#A10808"
|
|
var/wet=0
|
|
var/fresh=1
|
|
var/crusty=0
|
|
var/image/overlay
|
|
|
|
/datum/fluidtrack/New(_direction,_color,_wet)
|
|
src.direction=_direction
|
|
src.basecolor=_color
|
|
src.wet=_wet
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/reveal_blood()
|
|
if(!fluorescent)
|
|
if(stack && stack.len)
|
|
for(var/datum/fluidtrack/track in stack)
|
|
track.basecolor = COLOR_LUMINOL
|
|
..()
|
|
|
|
// 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
|
|
persistent = TRUE
|
|
generic_filth = FALSE
|
|
|
|
// 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="#A10808")
|
|
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
|
|
|
|
// When tracks will start to dry out
|
|
var/t=world.time + TRACKS_CRUSTIFY_TIME
|
|
|
|
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.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
|
|
|
|
dirs |= comingdir|realgoing
|
|
init_forensic_data().merge_blooddna(null,DNA)
|
|
if(updated)
|
|
update_icon()
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/update_icon()
|
|
cut_overlays()
|
|
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
|
|
add_overlay(I)
|
|
updatedtracks=0 // Clear our memory of updated tracks.
|
|
add_janitor_hud_overlay()
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/footprints
|
|
name = "wet footprints"
|
|
dryname = "dried footprints"
|
|
desc = "They look like still wet tracks left by footwear."
|
|
drydesc = "They look like dried tracks left by footwear."
|
|
coming_state = "human1"
|
|
going_state = "human2"
|
|
amount = 0
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/snake
|
|
name = "wet tracks"
|
|
dryname = "dried tracks"
|
|
desc = "They look like still wet tracks left by a giant snake."
|
|
drydesc = "They look like dried tracks left by a giant snake."
|
|
coming_state = "snake1"
|
|
going_state = "snake2"
|
|
random_icon_states = null
|
|
amount = 0
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/paw
|
|
name = "wet tracks"
|
|
dryname = "dried tracks"
|
|
desc = "They look like still wet tracks left by a mammal."
|
|
drydesc = "They look like dried tracks left by a mammal."
|
|
coming_state = "paw1"
|
|
going_state = "paw2"
|
|
random_icon_states = null
|
|
amount = 0
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/claw
|
|
name = "wet tracks"
|
|
dryname = "dried tracks"
|
|
desc = "They look like still wet tracks left by a reptile."
|
|
drydesc = "They look like dried tracks left by a reptile."
|
|
coming_state = "claw1"
|
|
going_state = "claw2"
|
|
random_icon_states = null
|
|
amount = 0
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks/wheels
|
|
name = "wet tracks"
|
|
dryname = "dried tracks"
|
|
desc = "They look like still wet tracks left by wheels."
|
|
drydesc = "They look like dried tracks left by wheels."
|
|
coming_state = "wheels"
|
|
going_state = ""
|
|
gender = PLURAL
|
|
random_icon_states = null
|
|
amount = 0
|
|
|
|
#undef TRACKS_CRUSTIFY_TIME
|