Conflicts:
	maps/cyberiad.dmm
This commit is contained in:
Markolie
2015-03-04 19:34:21 +01:00
93 changed files with 14953 additions and 19019 deletions
@@ -1,55 +1,33 @@
// Note: BYOND is object oriented. There is no reason for this to be copy/pasted blood code.
/obj/effect/decal/cleanable/xenoblood
/obj/effect/decal/cleanable/blood/xeno
name = "xeno blood"
desc = "It's green and acidic. It looks like... <i>blood?</i>"
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "xfloor1"
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
var/list/viruses = list()
blood_DNA = list()
basecolor = "#05EE05"
/obj/effect/decal/cleanable/xenoblood/xgibs/proc/streak(var/list/directions)
spawn (0)
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
if (i > 0)
new /obj/effect/decal/cleanable/xenoblood/xsplatter(src.loc)
if (step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/xenoblood/xsplatter
random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5")
/obj/effect/decal/cleanable/xenoblood/xgibs
/obj/effect/decal/cleanable/blood/gibs/xeno
name = "xeno gibs"
desc = "Gnarly..."
gender = PLURAL
icon = 'icons/effects/blood.dmi'
icon_state = "xgib1"
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
basecolor = "#05EE05"
/obj/effect/decal/cleanable/xenoblood/xgibs/up
/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon()
color = "#FFFFFF"
/obj/effect/decal/cleanable/blood/gibs/xeno/up
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1")
/obj/effect/decal/cleanable/xenoblood/xgibs/down
/obj/effect/decal/cleanable/blood/gibs/xeno/down
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1")
/obj/effect/decal/cleanable/xenoblood/xgibs/body
/obj/effect/decal/cleanable/blood/gibs/xeno/body
random_icon_states = list("xgibhead", "xgibtorso")
/obj/effect/decal/cleanable/xenoblood/xgibs/limb
/obj/effect/decal/cleanable/blood/gibs/xeno/limb
random_icon_states = list("xgibleg", "xgibarm")
/obj/effect/decal/cleanable/xenoblood/xgibs/core
/obj/effect/decal/cleanable/blood/gibs/xeno/core
random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3")
/obj/effect/decal/cleanable/blood/xtracks
icon_state = "xtracks"
random_icon_states = null
basecolor = "#05EE05"
@@ -1,27 +1,36 @@
#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var)
#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var)
var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood
name = "blood"
desc = "It's red and gooey. Perhaps it's the chef's cooking?"
var/dryname = "dried blood"
desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
var/drydesc = "It's dry and crusty. Someone is not doing their job."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "floor1"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
icon_state = "mfloor1"
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
var/base_icon = 'icons/effects/blood.dmi'
var/list/viruses = list()
blood_DNA = list()
var/basecolor="#A10808" // Color when wet.
var/list/datum/disease2/disease/virus2 = list()
var/amount = 5
/obj/effect/decal/cleanable/blood/Del()
for(var/datum/disease2/disease/D in viruses)
D.cure(0)
..()
/obj/effect/decal/cleanable/blood/New()
..()
update_icon()
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
return
if(istype(src, /obj/effect/decal/cleanable/blood/tracks))
return // We handle our own drying.
if(src.type == /obj/effect/decal/cleanable/blood)
if(src.loc && isturf(src.loc))
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
@@ -32,6 +41,10 @@
spawn(DRYING_TIME * (amount+1))
dry()
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
color = basecolor
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
if (!istype(perp))
return
@@ -44,16 +57,25 @@
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
hasfeet = 0
if(perp.shoes && !perp.buckled)//Adding blood to shoes
perp.shoes:track_blood = max(amount,perp.shoes:track_blood) //Adding blood to shoes
if(!perp.shoes.blood_overlay)
perp.shoes.generate_blood_overlay()
if(!perp.shoes.blood_DNA)
perp.shoes.blood_DNA = list()
perp.shoes.overlays += perp.shoes.blood_overlay
perp.update_inv_shoes(1,0)
perp.shoes.blood_DNA |= blood_DNA.Copy()
var/obj/item/clothing/shoes/S = perp.shoes
if(istype(S))
S.blood_color = basecolor
S.track_blood = max(amount,S.track_blood)
if(!S.blood_overlay)
S.generate_blood_overlay()
if(!S.blood_DNA)
S.blood_DNA = list()
S.blood_overlay.color = basecolor
S.overlays += S.blood_overlay
if(S.blood_overlay && S.blood_overlay.color != basecolor)
S.blood_overlay.color = basecolor
S.overlays.Cut()
S.overlays += S.blood_overlay
S.blood_DNA |= blood_DNA.Copy()
else if (hasfeet)//Or feet
perp.track_blood = max(amount,perp.track_blood) //Or feet
perp.feet_blood_color = basecolor
perp.track_blood = max(amount,perp.track_blood)
if(!perp.feet_blood_DNA)
perp.feet_blood_DNA = list()
perp.feet_blood_DNA |= blood_DNA.Copy()
@@ -61,17 +83,14 @@
var/obj/structure/stool/bed/chair/wheelchair/W = perp.buckled
W.bloodiness = 4
perp.update_inv_shoes(1)
amount--
/obj/effect/decal/cleanable/blood/proc/dry()
name = "dried [src]"
desc = "It's dark red and crusty. Someone is not doing their job."
var/icon/I = icon(icon,icon_state)
I.SetIntensity(0.7)
icon = I
name = dryname
desc = drydesc
color = adjust_brightness(color, -50)
amount = 0
spawn(DRYING_TIME)
Destroy()
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
..()
@@ -81,17 +100,33 @@
return
var/taken = rand(1,amount)
amount -= taken
user << "<span class='notice'>You get some blood on your hands.</span>"
user << "<span class='notice'>You get some of \the [src] on your hands.</span>"
if (!user.blood_DNA)
user.blood_DNA = list()
user.blood_DNA |= blood_DNA.Copy()
user.bloody_hands += taken
user.hand_blood_color = basecolor
user.update_inv_gloves(1)
user.verbs += /mob/living/carbon/human/proc/bloody_doodle
/obj/effect/decal/cleanable/blood/splatter
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
amount = 2
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
amount = 2
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
desc = "It's red."
gender = PLURAL
icon = 'icons/effects/drip.dmi'
icon_state = "1"
random_icon_states = list("1","2","3","4","5")
amount = 0
var/list/drips = list()
/obj/effect/decal/cleanable/blood/drip/New()
..()
spawn(1)
drips |= icon_state
/obj/effect/decal/cleanable/blood/writing
icon_state = "tracks"
@@ -103,236 +138,16 @@
/obj/effect/decal/cleanable/blood/writing/New()
..()
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
random_icon_states.Remove(W.icon_state)
icon_state = pick(random_icon_states)
if(random_icon_states.len)
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
random_icon_states.Remove(W.icon_state)
icon_state = pick(random_icon_states)
else
icon_state = "writing1"
/obj/effect/decal/cleanable/blood/writing/examine()
..()
usr << "It reads: <font color='#600000'>\"[message]\"<font>"
/obj/effect/decal/cleanable/blood/green
name = "green blood"
desc = "It's green and gooey. Perhaps it's the chef's cooking?"
icon_state = "xfloor1"
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
/obj/effect/decal/cleanable/blood/green/Crossed(mob/living/carbon/human/perp)
if (!istype(perp))
return
if(amount < 1)
return
var/datum/organ/external/l_foot = perp.get_organ("l_foot")
var/datum/organ/external/r_foot = perp.get_organ("r_foot")
var/hasfeet = 1
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
hasfeet = 0
if(perp.shoes && !perp.buckled)//Adding blood to shoes
perp.shoes:track_blood_green= max(amount,perp.shoes:track_blood_green) //Adding blood to shoes
if(!perp.shoes.blood_overlay)
perp.shoes.blood_overlay_color = 1
perp.shoes.generate_blood_overlay()
if(!perp.shoes.blood_DNA)
perp.shoes.blood_DNA = list()
perp.shoes.overlays += perp.shoes.blood_overlay
perp.update_inv_shoes(1,1)
perp.shoes.blood_DNA |= blood_DNA.Copy()
else if (hasfeet)//Or feet
perp.track_blood_green = max(amount,perp.track_blood_green) //Or feet
if(!perp.feet_blood_DNA)
perp.feet_blood_DNA = list()
perp.feet_blood_DNA |= blood_DNA.Copy()
else if (perp.buckled && istype(perp.buckled, /obj/structure/stool/bed/chair/wheelchair))
var/obj/structure/stool/bed/chair/wheelchair/W = perp.buckled
W.bloodiness = 4
amount--
/obj/effect/decal/cleanable/blood/drip/green
name = "drips of blood"
desc = "It's green."
gender = PLURAL
icon = 'icons/effects/drip.dmi'
icon_state = "g1"
amount = 0
// 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
// 5 seconds
#define TRACKS_CRUSTIFY_TIME 50
// Footprints, tire trails...
/obj/effect/decal/cleanable/blood/tracks
amount = 0
random_icon_states = null
var/dirs=0
icon='icons/effects/footprints.dmi'
var/coming_state="blood1"
var/going_state="blood2"
var/newtracks=0 // Cleared after every icon_update
var/crustytracks=0 // Cleared after every icon_update
// dir = last wetting
var/list/wet=list(
"1"=0,
"2"=0,
"4"=0,
"8"=0,
"16"=0,
"32"=0,
"64"=0,
"128"=0
)
/**
* 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).
*/
proc/AddTracks(var/mob/living/carbon/human/H, var/list/DNA, var/comingdir, var/goingdir,var/typepath)
if(typepath == /obj/effect/decal/cleanable/blood/tracks/footprints)
if(H.species.bodyflags & FEET_CLAWS)
coming_state="bloodclaw1"
going_state="bloodclaw2"
if(H.species.bodyflags & FEET_PADDED)
coming_state="bloodpaw1"
going_state="bloodpaw2"
if(typepath == /obj/effect/decal/cleanable/blood/tracks/footprints/green)
if(H.species.bodyflags & FEET_CLAWS)
coming_state="xenoclaw1"
going_state="xenoclaw2"
if(H.species.bodyflags & FEET_PADDED)
coming_state="xenopaw1"
going_state="xenopaw2"
else
coming_state="xeno1"
going_state="xeno2"
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
// Process 4 bits
for(var/bi=0;bi<4;bi++)
b=1<<bi
// COMING BIT
if(comingdir&b && wet["[b]"]!=t)
if(!(dirs&b))
newtracks|=b
wet["[b]"]=t
updated=1
else
if(wet["[b]"]<world.time && !(crustytracks&b))
updated=1
// GOING BIT (shift up 4)
b=b<<4
if(realgoing&b && wet["[b]"]!=t)
if(!(dirs&b))
newtracks|=b
wet["[b]"]=t
updated=1
else
if(wet["[b]"]<world.time && !(crustytracks&b))
updated=1
dirs |= comingdir|realgoing
blood_DNA |= DNA.Copy()
if(updated)
update_icon()
process()
return PROCESS_KILL // Do not process us or we'll lag like hell.
update_icon()
// Clear everything.
//overlays.Cut()
var/b=0
var/t=world.time
var/crusty=0
// Clear out any images that have been wetted or have crustified.
for(var/image/overlay in overlays)
b=overlay.dir
if(overlay.icon_state==going_state)
b=b<<4
if(wet["[b]"]<t && !(crustytracks&b)) // NEW crusty ones get special treatment
crusty|=b
if(wet["[b]"]>t || crusty&b) // Wet or crusty? Nuke'em either way.
overlays.Remove(overlay)
newtracks |= b // Mark as needing an update.
// Update ONLY the overlays that have changed.
for(var/bi=0;bi<4;bi++)
// COMING
b=1<<bi
// New or crusty
if(newtracks&b)
var/icon/I= new /icon(icon, icon_state=coming_state, dir=num2dir(b))
// If crusty, make them look crusty.
if(crusty&b)
I.SetIntensity(0.7)
crustytracks |= b // Crusty? Don't update unless wetted again.
else
crustytracks &= ~b // Unmark as crusty.
// Add to overlays
overlays += I
// GOING
b=b<<4
if(newtracks&b)
var/icon/I= new /icon(icon, icon_state=going_state, dir=num2dir(b>>4))
if(crusty&b)
I.SetIntensity(0.7)
crustytracks |= b // Crusty? Don't update unless wetted again.
else
crustytracks &= ~b // Unmark as crusty.
overlays += I
newtracks=0 // Clear our memory of updated tracks.
/obj/effect/decal/cleanable/blood/tracks/footprints
name = "bloody footprints"
desc = "Whoops..."
/obj/effect/decal/cleanable/blood/tracks/footprints/green
name = "bloody green footprints"
desc = "Whoops..."
/obj/effect/decal/cleanable/blood/tracks/wheels
icon_state = "tracks"
desc = "They look like tracks left by wheels."
icon = 'icons/effects/blood.dmi'
gender = PLURAL
random_icon_states = null
amount = 0
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
desc = "It's red."
gender = PLURAL
icon = 'icons/effects/drip.dmi'
icon_state = "1"
amount = 0
/obj/effect/decal/cleanable/blood/writing/examine(mob/user)
..(user)
user << "It reads: <font color='[basecolor]'>\"[message]\"<font>"
/obj/effect/decal/cleanable/blood/gibs
name = "gibs"
@@ -344,6 +159,22 @@
icon = 'icons/effects/blood.dmi'
icon_state = "gibbl5"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
var/fleshcolor = "#FFFFFF"
/obj/effect/decal/cleanable/blood/gibs/update_icon()
var/image/giblets = new(base_icon, "[icon_state]_flesh", dir)
if(!fleshcolor || fleshcolor == "rainbow")
fleshcolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
giblets.color = fleshcolor
var/icon/blood = new(base_icon,"[icon_state]",dir)
if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
blood.Blend(basecolor,ICON_MULTIPLY)
icon = blood
overlays.Cut()
overlays += giblets
/obj/effect/decal/cleanable/blood/gibs/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
@@ -362,15 +193,20 @@
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
spawn (0)
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
if (i > 0)
new /obj/effect/decal/cleanable/blood/splatter(src.loc)
spawn (0)
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
if (i > 0)
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
b.basecolor = src.basecolor
b.update_icon()
for(var/datum/disease2/disease/D in src.viruses)
var/datum/disease2/disease/ND = D.getcopy()
b.viruses += ND
if (step_to(src, get_step(src, direction), 0))
break
if (step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/mucus
@@ -383,6 +219,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "mucus"
random_icon_states = list("mucus")
var/list/datum/disease2/disease/virus2 = list()
var/dry=0 // Keeps the lag down
@@ -396,29 +233,4 @@
// basecolor="#030303"
icon = 'icons/mob/robots.dmi'
icon_state = "floor1"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
/obj/effect/decal/cleanable/blood/old
name = "dried blood"
desc = "Looks like it's been here a while. Eew."
/obj/effect/decal/cleanable/blood/old/New()
..()
icon_state += "-old"
/obj/effect/decal/cleanable/blood/gibs/old
name = "old rotting gibs"
desc = "Oh god, why didn't anyone clean this up? It smells terrible."
/obj/effect/decal/cleanable/blood/gibs/old/New()
..()
icon_state += "-old"
dir = pick(1,2,4,8)
/obj/effect/decal/cleanable/vomit/old
name = "crusty dried vomit"
desc = "You try not to look at the chunks, and fail."
/obj/effect/decal/cleanable/vomit/old/New()
..()
icon_state += "-old"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
@@ -1,25 +1,26 @@
// Note: BYOND is object oriented. There is no reason for this to be copy/pasted blood code.
/obj/effect/decal/cleanable/robot_debris
/obj/effect/decal/cleanable/blood/gibs/robot
name = "robot debris"
desc = "It's a useless heap of junk... <i>or is it?</i>"
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
basecolor="#030303"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
/obj/effect/decal/cleanable/robot_debris/proc/streak(var/list/directions)
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
color = "#FFFFFF"
/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like
return
/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions)
spawn (0)
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
if (i > 0)
if (prob(40))
/*var/obj/effect/decal/cleanable/oil/o =*/
new /obj/effect/decal/cleanable/oil/streak(src.loc)
var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
streak.update_icon()
else if (prob(10))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
@@ -27,26 +28,23 @@
if (step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/robot_debris/limb
/obj/effect/decal/cleanable/blood/gibs/robot/limb
random_icon_states = list("gibarm", "gibleg")
/obj/effect/decal/cleanable/robot_debris/up
/obj/effect/decal/cleanable/blood/gibs/robot/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4
/obj/effect/decal/cleanable/robot_debris/down
/obj/effect/decal/cleanable/blood/gibs/robot/down
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4
/obj/effect/decal/cleanable/oil
/obj/effect/decal/cleanable/blood/oil
name = "motor oil"
desc = "It's black and greasy. Looks like Beepsky made another mess."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/mob/robots.dmi'
icon_state = "floor1"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
basecolor="#030303"
/obj/effect/decal/cleanable/blood/oil/dry()
return
/obj/effect/decal/cleanable/oil/streak
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
/obj/effect/decal/cleanable/blood/oil/streak
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
amount = 2
@@ -0,0 +1,165 @@
// 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
// 5 seconds
#define TRACKS_CRUSTIFY_TIME 50
// color-dir-dry
var/global/list/image/fluidtrack_cache=list()
/datum/fluidtrack
var/direction=0
var/basecolor="#A10808"
var/wet=0
var/fresh=1
var/crusty=0
var/image/overlay
New(_direction,_color,_wet)
src.direction=_direction
src.basecolor=_color
src.wet=_wet
// 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.
*/
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
blood_DNA |= DNA.Copy()
if(updated)
update_icon()
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.
/obj/effect/decal/cleanable/blood/tracks/footprints
name = "wet footprints"
dryname = "dried footprints"
desc = "Whoops..."
drydesc = "Whoops..."
coming_state = "human1"
going_state = "human2"
amount = 0
/obj/effect/decal/cleanable/blood/tracks/wheels
name = "wet tracks"
dryname = "dried tracks"
desc = "Whoops..."
drydesc = "Whoops..."
coming_state = "wheels"
going_state = ""
desc = "They look like tracks left by wheels."
gender = PLURAL
random_icon_states = null
amount = 0
@@ -17,7 +17,7 @@
..()
xeno
gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up,/obj/effect/decal/cleanable/xenoblood/xgibs/down,/obj/effect/decal/cleanable/xenoblood/xgibs,/obj/effect/decal/cleanable/xenoblood/xgibs,/obj/effect/decal/cleanable/xenoblood/xgibs/body,/obj/effect/decal/cleanable/xenoblood/xgibs/limb,/obj/effect/decal/cleanable/xenoblood/xgibs/core)
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up,/obj/effect/decal/cleanable/blood/gibs/xeno/down,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno/body,/obj/effect/decal/cleanable/blood/gibs/xeno/limb,/obj/effect/decal/cleanable/blood/gibs/xeno/core)
gibamounts = list(1,1,1,1,1,1,1)
New()
@@ -27,7 +27,7 @@
robot
sparks = 1
gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up,/obj/effect/decal/cleanable/robot_debris/down,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris/limb)
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
gibamounts = list(1,1,1,1,1,1)
New()
+9 -15
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/items.dmi'
var/discrete = 0 // used in item_attack.dm to make an item not show an attack message to viewers
var/no_embed = 0 // For use in item_attack.dm
var/icon/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/blood_overlay_color = null
var/item_state = null
var/r_speed = 1.0
@@ -675,35 +675,29 @@
//if we haven't made our blood_overlay already
if( !blood_overlay )
if(M.species.bloodflags & BLOOD_GREEN)
generate_blood_overlay(1)
else
generate_blood_overlay()
generate_blood_overlay()
//apply the blood-splatter overlay if it isn't already in there
if(!blood_DNA.len)
blood_overlay.color = blood_color
overlays += blood_overlay
//if this blood isn't already in the list, add it
if(blood_DNA[M.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
if(istype(M))
if(blood_DNA[M.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
return 1 //we applied blood to the item
/obj/item/proc/generate_blood_overlay(blood_overlay_color)
/obj/item/proc/generate_blood_overlay()
if(blood_overlay)
return
var/icon/I = new /icon(icon, icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent)
if (blood_overlay_color == 1)
I.Blend(new /icon('icons/effects/blood.dmi', "xitemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
else
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
//not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made.
for(var/obj/item/A in world)
if(A.type == type && !A.blood_overlay)
A.blood_overlay = image(I)
-5
View File
@@ -200,11 +200,6 @@
desc = "A flag proudly boasting the logo of the Syndicate, in defiance of NT."
icon_state = "syndiflag"
/obj/item/flag/ninja
name = "Spider Clan flag"
desc = "A flag proudly boasting the logo of the Spider Clan, in defiance of NT."
icon_state = "ninjaflag"
/obj/item/flag/wiz
name = "Wizard Federation flag"
desc = "A flag proudly boasting the logo of the Wizard Federation, sworn enemies of NT."
@@ -1,29 +0,0 @@
/obj/item/weapon/ninja_manuscript
name = "Manuscript"
desc = "A mysterious manuscript..."
icon = 'icons/obj/library.dmi'
icon_state = "book1"
throw_speed = 1
throw_range = 5
w_class = 3
attack_verb = list("bashed", "whacked", "educated")
var/charges = 1
/obj/item/weapon/ninja_manuscript/attack_self(var/mob/user as mob)
if(charges <= 0)
user << "\red The manuscript's power appears spent..."
return
else
user << "\blue You intently read the manuscript and come to the realization that true balance is achieved through self-will."
user << "\blue You relax and concentrate deeply; something in your mind alights ablaze and you realize the only way to true balance is the way of the Ninja."
charges--
user.mind.assigned_role = "MODE"
user.mind.special_role = "Ninja"
return
+6 -19
View File
@@ -121,8 +121,8 @@
user.do_attack_animation(L)
baton_stun(L, user)
else
L.visible_message("<span class='warning'>[L] has been prodded with [src] by [user]. Luckily it was off.</span>", \
"<span class='warning'>You've been prodded with [src] by [user]. Luckily it was off</span>")
L.visible_message("<span class='warning'>[user] has prodded [L] with [src]. Luckily it was off.</span>", \
"<span class='warning'>[user] has prodded you with [src]. Luckily it was off</span>")
return
else
..()
@@ -138,8 +138,8 @@
L.Weaken(stunforce)
L.apply_effect(STUTTER, stunforce)
L.visible_message("<span class='danger'>[L] has been stunned with [src] by [user]!</span>", \
"<span class='userdanger'>You've been stunned with [src] by [user]!</span>")
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
if(isrobot(loc))
@@ -163,22 +163,9 @@
..()
//secborg stun baton module
/obj/item/weapon/melee/baton/robot
hitcost = 500
/obj/item/weapon/melee/baton/loaded/robot
hitcost = 1000
/obj/item/weapon/melee/baton/robot/New()
..()
return
/obj/item/weapon/melee/baton/robot/attack_self(mob/user)
//try to find our power cell
var/mob/living/silicon/robot/R = loc
if (istype(R))
bcell = R.cell
return ..()
/obj/item/weapon/melee/baton/robot/attackby(obj/item/weapon/W, mob/user, params)
return
/obj/item/weapon/melee/baton/loaded/ntcane
name = "fancy cane"
@@ -87,20 +87,6 @@
new /mob/living/simple_animal/chick(loc)
..()
/obj/structure/largecrate/ninja
name = "Mysterious Crate"
icon_state = "lisacrate"
/obj/structure/largecrate/ninja/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/crowbar))
new /obj/item/clothing/gloves/space_ninja(loc)
new /obj/item/clothing/mask/gas/voice/space_ninja(loc)
new /obj/item/clothing/shoes/space_ninja(loc)
new /obj/item/clothing/head/helmet/space/space_ninja(loc)
new /obj/item/clothing/suit/space/space_ninja(loc)
new /obj/item/weapon/ninja_manuscript(loc)
..()
/obj/structure/largecrate/cat
name = "cat crate"
icon_state = "lisacrate"