diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 241c84d3f9..6be37516d3 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -9,10 +9,17 @@ var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to var/dirt = 0 + /turf/simulated/New() ..() levelupdate() +/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") + var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src + if(!tracks) + tracks = new typepath(src) + tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) + /turf/simulated/Entered(atom/A, atom/OL) if(movement_disabled && usr.ckey != movement_disabled_exception) usr << "\red Movement is admin-disabled." //This is to identify lag problems @@ -21,42 +28,41 @@ if (istype(A,/mob/living/carbon)) var/mob/living/carbon/M = A if(M.lying) return - dirt++ - var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) - if (dirt >= 30) - if (!dirtoverlay) - dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) - dirtoverlay.alpha = 15 - else if (dirt > 30) - dirtoverlay.alpha = min(dirtoverlay.alpha+20, 255) - if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + if(istype(H.shoes, /obj/item/clothing/shoes/clown_shoes)) + var/obj/item/clothing/shoes/clown_shoes/O = H.shoes + if(H.m_intent == "run") + if(O.footstep >= 2) + O.footstep = 0 + playsound(src, "clownstep", 50, 1) // this will get annoying very fast. + else + O.footstep++ + else + playsound(src, "clownstep", 20, 1) + // Tracking blood var/list/bloodDNA = null + var/bloodcolor="" if(H.shoes) var/obj/item/clothing/shoes/S = H.shoes if(S.track_blood && S.blood_DNA) bloodDNA = S.blood_DNA + bloodcolor=S.blood_color S.track_blood-- else if(H.track_blood && H.feet_blood_DNA) bloodDNA = H.feet_blood_DNA + bloodcolor=H.feet_blood_color H.track_blood-- if (bloodDNA) - var/obj/effect/decal/cleanable/blood/footprints/here = new(src) - here.icon_state = "blood1" - here.dir = H.dir - here.blood_DNA |= bloodDNA.Copy() + src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,H.dir,0,bloodcolor) // Coming var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) - if(from) - var/obj/effect/decal/cleanable/blood/footprints/there = new(from) - there.icon_state = "blood2" - there.dir = H.dir - there.blood_DNA |= bloodDNA.Copy() + if(istype(from) && from) + from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,0,H.dir,bloodcolor) // Going - bloodDNA = null + bloodDNA = null switch (src.wet) if(1) @@ -66,8 +72,8 @@ step(M, M.dir) M << "\blue You slipped on the wet floor!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) + M.Stun(5) + M.Weaken(3) else M.inertia_dir = 0 return @@ -77,13 +83,13 @@ step(M, M.dir) M << "\blue You slipped on the wet floor!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) + M.Stun(5) + M.Weaken(3) else M.inertia_dir = 0 return - if(2) //lube //can cause infinite loops - needs work + if(2) //lube //can cause infinite loops - needs work if(!istype(M, /mob/living/carbon/slime)) M.stop_pulling() step(M, M.dir) @@ -95,6 +101,29 @@ M << "\blue You slipped on the floor!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) M.Weaken(10) + if(3) // Ice + if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes + if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) && prob(30)) + M.stop_pulling() + step(M, M.dir) + M << "\blue You slipped on the icy floor!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(4) + M.Weaken(3) + else + M.inertia_dir = 0 + return + else if(!istype(M, /mob/living/carbon/slime)) + if (M.m_intent == "run" && prob(30)) + M.stop_pulling() + step(M, M.dir) + M << "\blue You slipped on the icy floor!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(4) + M.Weaken(3) + else + M.inertia_dir = 0 + return ..() @@ -106,15 +135,11 @@ for(var/obj/effect/decal/cleanable/blood/B in contents) if(!B.blood_DNA[M.dna.unique_enzymes]) B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - B.virus2 |= virus_copylist(M.virus2) return 1 //we bloodied the floor //if there isn't a blood decal already, make one. var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - newblood.virus2 |= virus_copylist(M.virus2) return 1 //we bloodied the floor @@ -123,12 +148,10 @@ if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human)) var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src) this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - this.virus2 = virus_copylist(M.virus2) else if( istype(M, /mob/living/carbon/alien )) - var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(src) + var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) this.blood_DNA["UNKNOWN BLOOD"] = "X*" else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/oil(src) \ No newline at end of file + new /obj/effect/decal/cleanable/blood/oil(src) \ No newline at end of file