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
+8
View File
@@ -7,6 +7,14 @@
#define FOOTSTEP_WATER "water"
#define FOOTSTEP_LAVA "lava"
#define FOOTPRINT_SHOE "shoe"
#define FOOTPRINT_PAW "paw"
#define FOOTPRINT_CLAW "claw"
#define FOOTPRINT_WHEEL "wheels"
#define FOOTPRINT_TRAIL "trails_"
#define FOOTPRINT_SNAKE "snake"
#define FOOTPRINT_DRAG "drag"
/*
id = list(
+20
View File
@@ -92,6 +92,26 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors
"Purple" = "#e300ff"//purple
))
GLOBAL_LIST_INIT(noodle_taurs, list(
"Naga",
"Tentacle"
))
GLOBAL_LIST_INIT(paw_taurs, list(
"Fox",
"Wolf",
"Otie",
"Drake",
"Lab",
"Shepherd",
"Husky",
"Eevee",
"Panther",
"Horse",
"Cow",
"Tiger"
))
//Crew objective and miscreants stuff
GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
@@ -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.
+2 -2
View File
@@ -31,12 +31,12 @@
H.update_inv_wear_suit()
if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None"))
if(H.dna.features["taur"] in list("Naga", "Tentacle"))
if(H.dna.features["taur"] in GLOB.noodle_taurs)
taurmode = SNEK_TAURIC
if(tauric == TRUE)
center = TRUE
dimension_x = 64
else if(H.dna.features["taur"] in list("Fox","Wolf","Otie","Drake","Lab","Shepherd","Husky","Eevee","Panther","Horse","Cow","Tiger"))
else if(H.dna.features["taur"] in GLOB.paw_taurs)
taurmode = PAW_TAURIC
if(tauric == TRUE)
center = TRUE
@@ -43,6 +43,9 @@
var/bleed_rate = 0 //how much are we bleeding
var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding
var/blood_state = BLOOD_STATE_NOT_BLOODY
var/list/blood_smear = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
var/name_override //For temporary visible name changes
var/nameless = FALSE //For drones of both the insectoid and robotic kind. And other types of nameless critters.
@@ -62,7 +62,7 @@
//No oldFP or they're all a different kind of blood
S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state] - BLOOD_LOSS_PER_STEP)
if (S.bloody_shoes[S.blood_state] > BLOOD_LOSS_IN_SPREAD)
var/obj/effect/decal/cleanable/blood/tracks/FP = new /obj/effect/decal/cleanable/blood/tracks(T)
var/obj/effect/decal/cleanable/blood/tracks/FP = new /obj/effect/decal/cleanable/blood/tracks/footprints(T)
FP.blood_state = S.blood_state
FP.entered_dirs |= dir
FP.bloodiness = S.bloody_shoes[S.blood_state] - BLOOD_LOSS_IN_SPREAD
@@ -72,6 +72,69 @@
update_inv_shoes()
//End bloody footprints
S.step_action()
else
if(!buckled)
if(!lying)
if(loc == NewLoc)
if(!has_gravity(loc))
return
var/turf/T = get_turf(src)
if(blood_smear && blood_smear[blood_state])
for(var/obj/effect/decal/cleanable/blood/tracks/oldFP in T)
if (oldFP.blood_state == blood_state)
return
blood_smear[blood_state] = max(0, blood_smear[blood_state] - BLOOD_LOSS_PER_STEP)
if(blood_smear[blood_state] > BLOOD_LOSS_IN_SPREAD)
var/obj/effect/decal/cleanable/blood/tracks/FP = new /obj/effect/decal/cleanable/blood/tracks/footprints(T)
if(DIGITIGRADE in dna.species.species_traits)
if(dna.species.id == ("lizard" || "ashwalker" || "xeno"))
FP.icon_state = FOOTPRINT_CLAW
FP.print_state = FOOTPRINT_CLAW
else if(dna.species.id == "Mammal")
FP.icon_state = FOOTPRINT_PAW
FP.print_state = FOOTPRINT_PAW
else
FP.icon_state = FOOTPRINT_SHOE
FP.print_state = FOOTPRINT_SHOE
else if(("taur" in dna.species.mutant_bodyparts) && (dna.features["taur"] != "None"))
if(dna.features["taur"] in GLOB.noodle_taurs)
FP.icon_state = FOOTPRINT_SNAKE
FP.print_state = FOOTPRINT_SNAKE
else if(dna.features["taur"] in GLOB.paw_taurs)
FP.icon_state = FOOTPRINT_PAW
FP.print_state = FOOTPRINT_PAW
else
FP.icon_state = FOOTPRINT_SHOE
FP.print_state = FOOTPRINT_SHOE
FP.blood_state = blood_state
FP.entered_dirs |= dir
FP.bloodiness = blood_smear - BLOOD_LOSS_IN_SPREAD
FP.transfer_blood_dna(blood_DNA)
FP.color = blood_DNA_to_color() //Color the blood with our dna stuff
FP.update_icon()
else //we're on the floor, smear some stuff around
if(loc == NewLoc)
if(!has_gravity(loc))
return
var/turf/T = get_turf(src)
if(blood_smear && blood_smear[blood_state])
for(var/obj/effect/decal/cleanable/blood/tracks/oldFP in T)
if (oldFP.blood_state == blood_state)
return
blood_smear[blood_state] = max(0, blood_smear[blood_state] - BLOOD_LOSS_PER_STEP)
if(blood_smear[blood_state] > BLOOD_LOSS_IN_SPREAD)
var/obj/effect/decal/cleanable/blood/tracks/FP = new /obj/effect/decal/cleanable/blood/tracks/footprints(T)
FP.icon_state = FOOTPRINT_DRAG
FP.print_state = FOOTPRINT_DRAG
FP.blood_state = blood_state
FP.entered_dirs |= dir
FP.bloodiness = blood_smear - BLOOD_LOSS_IN_SPREAD
FP.transfer_blood_dna(blood_DNA)
FP.color = blood_DNA_to_color() //Color the blood with our dna stuff
FP.update_icon()
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
if(dna.species.space_move(src))
@@ -680,6 +680,8 @@
px_y = 12
stam_heal_tick = 2
max_stamina_damage = 50
var/blood_state = BLOOD_STATE_NOT_BLOODY
var/list/bloody_legs = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
/obj/item/bodypart/l_leg/set_disabled(new_disabled = TRUE)
..()
@@ -727,6 +729,8 @@
px_y = 12
max_stamina_damage = 50
stam_heal_tick = 2
var/blood_state = BLOOD_STATE_NOT_BLOODY
var/list/bloody_legs = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
/obj/item/bodypart/r_leg/set_disabled(new_disabled = TRUE)
..()