mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-03-18 15:32:38 +00:00
1993 lines
54 KiB
Plaintext
1993 lines
54 KiB
Plaintext
/obj/decal
|
|
var/list/random_icon_states = list()
|
|
var/random_dir = 0
|
|
|
|
New()
|
|
..()
|
|
if (random_icon_states && length(src.random_icon_states) > 0)
|
|
src.icon_state = pick(src.random_icon_states)
|
|
if (src.random_dir)
|
|
if (random_dir >= 8)
|
|
src.dir = pick(alldirs)
|
|
else
|
|
src.dir = pick(cardinal)
|
|
|
|
if (!real_name)
|
|
real_name = name
|
|
|
|
meteorhit(obj/M as obj)
|
|
if (src.z == 2)
|
|
return
|
|
else
|
|
return ..()
|
|
|
|
ex_act(severity)
|
|
if (src.z == 2)
|
|
return
|
|
else
|
|
return ..()
|
|
|
|
/obj/decal/poster
|
|
desc = "A piece of paper with an image on it. Clearly dealing with incredible technology here."
|
|
name = "poster"
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "poster"
|
|
anchored = 1
|
|
opacity = 0
|
|
density = 0
|
|
var/imgw = 600
|
|
var/imgh = 400
|
|
var/popup_win = 1
|
|
layer = EFFECTS_LAYER_BASE
|
|
|
|
examine()
|
|
if (usr.client && src.popup_win)
|
|
src.show_popup_win(usr)
|
|
else
|
|
return ..()
|
|
|
|
proc/show_popup_win(var/client/C)
|
|
if (!C || !src.popup_win)
|
|
return
|
|
C << browse(grabResource("html/traitorTips/wizardTips.html"),"window=antagTips;titlebar=1;size=[imgw]x[imgh];can_minimize=0;can_resize=0")
|
|
|
|
wallsign
|
|
desc = "A sign, on a wall. Wow!"
|
|
icon = 'icons/obj/decals.dmi'
|
|
popup_win = 0
|
|
var/pixel_var = 0
|
|
|
|
New()
|
|
..()
|
|
if (src.pixel_var)
|
|
src.pixel_y += rand(-4,4)
|
|
src.pixel_x += rand(-4,4)
|
|
|
|
|
|
stencil // font: "space frigate", free and adapted by cogwerks
|
|
name = "stencil"
|
|
desc = ""
|
|
icon = 'icons/obj/stencils.dmi'
|
|
alpha = 200
|
|
pixel_y = 9
|
|
mouse_opacity = 0
|
|
icon_state = "a"
|
|
|
|
|
|
// splitting this shit up into children seems easier than assigning them all in the mapmaker with varediting.
|
|
// it'll make it way easier to assemble stencils while maintaining controlled spacing
|
|
// this is not a monospaced font so manual adjustments are necessary after laying out text
|
|
// should be a close-enough estimate for starters though
|
|
// characters may fit as dublets or triplets on one turf
|
|
// i suppose it would have been more sensical to just dump out a bunch of full words from gimp
|
|
// instead of hand-setting a typeface inside a fucking spaceman game
|
|
// but fuck it, this will let other mappers write whatever hull stencils they want from it. have fun?
|
|
// going piece by piece should also make damage look more realistic, no floating words over a breach
|
|
// i'm aligning stencils against corners, so stencils on opposite sides of an airbridge will be either l or r aligned
|
|
|
|
|
|
left
|
|
pixel_x = -3 //fine-tune from this offset
|
|
|
|
a
|
|
name = "a"
|
|
icon_state = "a"
|
|
b
|
|
name = "b"
|
|
icon_state = "b"
|
|
c
|
|
name = "c"
|
|
icon_state = "c"
|
|
d
|
|
name = "d"
|
|
icon_state = "d"
|
|
e
|
|
name = "e"
|
|
icon_state = "e"
|
|
f
|
|
name = "f"
|
|
icon_state = "f"
|
|
g
|
|
name = "g"
|
|
icon_state = "g"
|
|
h
|
|
name = "h"
|
|
icon_state = "h"
|
|
i
|
|
name = "i"
|
|
icon_state = "i"
|
|
j
|
|
name = "j"
|
|
icon_state = "j"
|
|
k
|
|
name = "k"
|
|
icon_state = "k"
|
|
l
|
|
name = "l"
|
|
icon_state = "l"
|
|
m
|
|
name = "m"
|
|
icon_state = "m"
|
|
n
|
|
name = "n"
|
|
icon_state = "n"
|
|
o
|
|
name = "o"
|
|
icon_state = "o"
|
|
p
|
|
name = "p"
|
|
icon_state = "p"
|
|
q
|
|
name = "q"
|
|
icon_state = "q"
|
|
r
|
|
name = "r"
|
|
icon_state = "r"
|
|
s
|
|
name = "s"
|
|
icon_state = "s"
|
|
t
|
|
name = "t"
|
|
icon_state = "t"
|
|
u
|
|
name = "u"
|
|
icon_state = "u"
|
|
v
|
|
name = "v"
|
|
icon_state = "v"
|
|
w
|
|
name = "w"
|
|
icon_state = "w"
|
|
x
|
|
name = "x"
|
|
icon_state = "x"
|
|
y
|
|
name = "y"
|
|
icon_state = "y"
|
|
z
|
|
name = "z"
|
|
icon_state = "z"
|
|
one
|
|
name = "one"
|
|
icon_state = "1"
|
|
two
|
|
name = "two"
|
|
icon_state = "2"
|
|
three
|
|
name = "three"
|
|
icon_state = "3"
|
|
four
|
|
name = "four"
|
|
icon_state = "4"
|
|
five
|
|
name = "five"
|
|
icon_state = "5"
|
|
six
|
|
name = "six"
|
|
icon_state = "6"
|
|
seven
|
|
name = "seven"
|
|
icon_state = "7"
|
|
eight
|
|
name = "eight"
|
|
icon_state = "8"
|
|
nine
|
|
name = "nine"
|
|
icon_state = "9"
|
|
zero
|
|
name = "zero"
|
|
icon_state = "0"
|
|
|
|
|
|
right
|
|
pixel_x = 11 // fine-tune from this offset
|
|
|
|
a
|
|
name = "a"
|
|
icon_state = "a"
|
|
b
|
|
name = "b"
|
|
icon_state = "b"
|
|
c
|
|
name = "c"
|
|
icon_state = "c"
|
|
d
|
|
name = "d"
|
|
icon_state = "d"
|
|
e
|
|
name = "e"
|
|
icon_state = "e"
|
|
f
|
|
name = "f"
|
|
icon_state = "f"
|
|
g
|
|
name = "g"
|
|
icon_state = "g"
|
|
h
|
|
name = "h"
|
|
icon_state = "h"
|
|
i
|
|
name = "i"
|
|
icon_state = "i"
|
|
j
|
|
name = "j"
|
|
icon_state = "j"
|
|
k
|
|
name = "k"
|
|
icon_state = "k"
|
|
l
|
|
name = "l"
|
|
icon_state = "l"
|
|
m
|
|
name = "m"
|
|
icon_state = "m"
|
|
n
|
|
name = "n"
|
|
icon_state = "n"
|
|
o
|
|
name = "o"
|
|
icon_state = "o"
|
|
p
|
|
name = "p"
|
|
icon_state = "p"
|
|
q
|
|
name = "q"
|
|
icon_state = "q"
|
|
r
|
|
name = "r"
|
|
icon_state = "r"
|
|
s
|
|
name = "s"
|
|
icon_state = "s"
|
|
t
|
|
name = "t"
|
|
icon_state = "t"
|
|
u
|
|
name = "u"
|
|
icon_state = "u"
|
|
v
|
|
name = "v"
|
|
icon_state = "v"
|
|
w
|
|
name = "w"
|
|
icon_state = "w"
|
|
x
|
|
name = "x"
|
|
icon_state = "x"
|
|
y
|
|
name = "y"
|
|
icon_state = "y"
|
|
z
|
|
name = "z"
|
|
icon_state = "z"
|
|
one
|
|
name = "one"
|
|
icon_state = "1"
|
|
two
|
|
name = "two"
|
|
icon_state = "2"
|
|
three
|
|
name = "three"
|
|
icon_state = "3"
|
|
four
|
|
name = "four"
|
|
icon_state = "4"
|
|
five
|
|
name = "five"
|
|
icon_state = "5"
|
|
six
|
|
name = "six"
|
|
icon_state = "6"
|
|
seven
|
|
name = "seven"
|
|
icon_state = "7"
|
|
eight
|
|
name = "eight"
|
|
icon_state = "8"
|
|
nine
|
|
name = "nine"
|
|
icon_state = "9"
|
|
zero
|
|
name = "zero"
|
|
icon_state = "0"
|
|
|
|
|
|
chsl
|
|
name = "CLEAN HANDS SAVE LIVES"
|
|
desc = "A poster that reads 'CLEAN HANDS SAVE LIVES'."
|
|
icon_state = "chsl"
|
|
|
|
chsc
|
|
name = "CLEAN HANDS SAVE CASH"
|
|
desc = "A poster that reads 'CLEAN HANDS SAVE CASH: Today's unwashed palm is tomorrow's class action suit!'."
|
|
icon_state = "chsc"
|
|
|
|
danger_highvolt
|
|
name = "Danger: High Voltage"
|
|
icon_state = "shock"
|
|
|
|
medbay
|
|
name = "Medical Bay"
|
|
icon_state = "wall_sign_medbay"
|
|
|
|
space
|
|
name = "VACUUM AREA"
|
|
desc = "A warning sign which reads 'EXTERNAL AIRLOCK'."
|
|
icon_state = "space"
|
|
|
|
construction
|
|
name = "CONSTRUCTION AREA"
|
|
desc = "A warning sign which reads 'CONSTRUCTION AREA'."
|
|
icon_state = "wall_sign_danger"
|
|
|
|
pool
|
|
name = "Pool"
|
|
icon_state = "pool"
|
|
|
|
fire
|
|
name = "FIRE HAZARD"
|
|
desc = "A warning sign which reads 'FIRE HAZARD'."
|
|
icon_state = "wall_sign_fire"
|
|
|
|
biohazard
|
|
name = "BIOHAZARD"
|
|
desc = "A warning sign which reads 'BIOHAZARD'."
|
|
icon_state = "bio"
|
|
|
|
gym
|
|
name = "Barkley Ballin' Gym"
|
|
icon_state = "gym"
|
|
|
|
barber
|
|
name = "The Snip"
|
|
icon = 'icons/obj/barber_shop.dmi'
|
|
icon_state = "thesnip"
|
|
|
|
bar
|
|
name = "Bar"
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "barsign"
|
|
|
|
magnet
|
|
name = "ACTIVE MAGNET AREA"
|
|
desc = "A warning sign. I guess this area is dangerous."
|
|
icon_state = "wall_sign_mag"
|
|
|
|
cdnp
|
|
name = "CRIME DOES NOT PAY"
|
|
desc = "A warning sign which suggests that you reconsider your poor life choices."
|
|
icon_state = "crime"
|
|
|
|
dont_panic
|
|
name = "DON'T PANIC"
|
|
desc = "A sign which suggests that you remain calm, as everything is surely just fine."
|
|
icon_state = "centcomfail"
|
|
New()
|
|
..()
|
|
icon_state = pick("centcomfail", "centcomfail2")
|
|
|
|
fudad
|
|
name = "Arthur Muggins Memorial Jazz Lounge"
|
|
desc = "In memory of Arthur \"F. U. Dad\" Muggins, the bravest, toughest Vice Cop SS13 has ever known. Loved by all. R.I.P."
|
|
icon_state = "rip"
|
|
|
|
escape
|
|
name = "ESCAPE"
|
|
desc = "Follow this to find Escape! Or fire. Or death. One of those."
|
|
icon_state = "wall_escape"
|
|
|
|
escape_left
|
|
name = "ESCAPE"
|
|
desc = "Follow this to find Escape! Or fire. Or death. One of those."
|
|
icon_state = "wall_escape_arrow_l"
|
|
|
|
escape_right
|
|
name = "ESCAPE"
|
|
desc = "Follow this to find Escape! Or fire. Or death. One of those."
|
|
icon_state = "wall_escape_arrow_r"
|
|
|
|
medbay_text
|
|
name = "MEDICAL BAY"
|
|
desc = "Follow this to find Medbay! Or fire. Or death. One of those."
|
|
icon_state = "wall_medbay"
|
|
|
|
medbay_left
|
|
name = "MEDICAL BAY"
|
|
desc = "Follow this to find Medbay! Or fire. Or death. One of those."
|
|
icon_state = "wall_medbay_arrow_l"
|
|
|
|
medbay_right
|
|
name = "MEDICAL BAY"
|
|
desc = "Follow this to find Medbay! Or fire. Or death. One of those."
|
|
icon_state = "wall_medbay_arrow_r"
|
|
|
|
hazard_stripe
|
|
name = "hazard stripe"
|
|
desc = ""
|
|
icon_state = "stripe"
|
|
|
|
hazard_caution
|
|
name = "CAUTION"
|
|
icon_state = "wall_caution"
|
|
|
|
hazard_danger
|
|
name = "DANGER"
|
|
icon_state = "wall_danger"
|
|
|
|
hazard_bio
|
|
name = "BIOHAZARD"
|
|
icon_state = "wall_biohazard"
|
|
|
|
hazard_rad
|
|
name = "RADIATION"
|
|
icon_state = "wall_radiation"
|
|
|
|
hazard_exheat
|
|
name = "EXTREME HEAT"
|
|
icon_state = "wall_extremeheat"
|
|
|
|
hazard_electrical
|
|
name = "ELECTRICAL HAZARD"
|
|
icon_state = "wall_electricalhazard"
|
|
|
|
hazard_hotloop
|
|
name = "HOT LOOP"
|
|
icon_state = "wall_hotloop"
|
|
|
|
hazard_coldloop
|
|
name = "COLD LOOP"
|
|
icon_state = "wall_coldloop"
|
|
|
|
poster_hair
|
|
name = "Fabulous Hair!"
|
|
desc = "There's a bunch of ladies with really fancy hair pictured on this."
|
|
icon_state = "wall_poster_hair"
|
|
|
|
poster_cool
|
|
name = "cool poster"
|
|
desc = "There's a couple people pictured on this poster, looking pretty cool."
|
|
icon_state = "wall_poster_cool3"
|
|
random_icon_states = list("wall_poster_cool", "wall_poster_cool2", "wall_poster_cool3")
|
|
|
|
poster_human
|
|
name = "poster"
|
|
desc = "There's a person pictured on this poster. Some sort of celebrity."
|
|
icon_state = "wall_poster_human"
|
|
//todo: implement procedural celebrities
|
|
|
|
poster_borg
|
|
name = "poster"
|
|
desc = "There's a cyborg pictured on this poster, but you aren't really sure what the message is. Is it trying to advertise something?"
|
|
icon_state = "wall_poster_borg"
|
|
|
|
poster_sol
|
|
name = "poster"
|
|
desc = "There's a star and the word 'SOL' pictured on this poster."
|
|
icon_state = "wall_poster_sol"
|
|
|
|
poster_clown
|
|
name = "poster"
|
|
desc = "There's a clown pictured on this poster."
|
|
icon_state = "wall_poster_clown"
|
|
|
|
poster_nt
|
|
name = "\improper NanoTrasen poster"
|
|
desc = "A cheerful-looking version of the NT corporate logo."
|
|
icon_state = "wall_poster_nt"
|
|
|
|
poster_ptoe
|
|
name = "periodic table of elements"
|
|
desc = "A chart listing all known chemical elements."
|
|
icon_state = "ptoe"
|
|
|
|
poster_y4nt
|
|
name = "\improper NanoTrasen poster"
|
|
desc = "A huge poster that reads 'I want YOU for NT!'"
|
|
icon_state = "you_4_nt"
|
|
|
|
poster_rand
|
|
name = "poster"
|
|
desc = "You aren't really sure what the message is. Is it trying to advertise something?"
|
|
icon_state = "wall_poster_cool3"
|
|
pixel_var = 1
|
|
random_icon_states = list("wall_poster_cool", "wall_poster_cool2", "wall_poster_cool3", "wall_poster_hair", "wall_poster_human", "wall_poster_borg", "wall_poster_sol", "wall_poster_clown")
|
|
|
|
////////////////
|
|
// CLEANABLES //
|
|
////////////////
|
|
|
|
/obj/decal/cleanable
|
|
density = 0
|
|
anchored = 1
|
|
var/can_sample = 0
|
|
var/sampled = 0
|
|
var/sample_amt = 10
|
|
var/sample_reagent = "water"
|
|
var/sample_verb = "scoop"
|
|
var/list/diseases = list()
|
|
var/slippery = 0 // set it to the probability that you want people to slip in the stuff, ie urine's slippery is 80 so you have an 80% chance to slip on it
|
|
var/slipped_in_blood = 0 // self explanitory hopefully
|
|
var/can_dry = 0
|
|
var/dry = 0 // if it's slippery to start, is it dry now?
|
|
|
|
flags = NOSPLASH
|
|
layer = DECAL_LAYER
|
|
|
|
New(var/loc,var/list/viral_list)
|
|
src.real_name = src.name
|
|
if (viral_list && viral_list.len > 0)
|
|
for (var/datum/ailment_data/AD in viral_list)
|
|
src.diseases += AD
|
|
if (src.can_dry)
|
|
src.Dry()
|
|
..()
|
|
var/area/Ar = get_area(src)
|
|
if (Ar)
|
|
Ar.sims_score = max(Ar.sims_score - 6, 0)
|
|
|
|
HasEntered(AM as mob|obj)
|
|
..()
|
|
if (!src.slippery || src.dry)
|
|
return
|
|
if (istype(src, /obj/decal/cleanable/blood/dynamic))
|
|
var/obj/decal/cleanable/blood/dynamic/D = src
|
|
if (D.blood_volume <= 2)
|
|
return
|
|
if (istype(src.loc, /turf/space))
|
|
return
|
|
if (iscarbon(AM))
|
|
var/mob/M = AM
|
|
if (!M.can_slip())
|
|
return
|
|
if (prob(src.slippery))
|
|
M.pulling = null
|
|
M.visible_message("<span style=\"color:red\"><b>[M]</b> slips on [src]!</span>",\
|
|
"<span style=\"color:red\">You slip on [src]!</span>")
|
|
playsound(src.loc, "sound/misc/slip.ogg", 50, 1, -3)
|
|
M.stunned = 2
|
|
M.weakened = 2
|
|
if (src.slipped_in_blood)
|
|
M.add_blood()
|
|
|
|
attackby(obj/item/W, mob/user)
|
|
if (src.can_sample && W.is_open_container() && W.reagents)
|
|
src.Sample(W, user)
|
|
else
|
|
return ..()
|
|
|
|
proc/Dry(var/time = rand(600,1000))
|
|
if (!src.can_dry || src.dry)
|
|
return 0
|
|
spawn(time)
|
|
qdel(src)
|
|
return 1
|
|
|
|
proc/Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!src.can_sample || !W.reagents)
|
|
return 0
|
|
if (src.sampled)
|
|
user.show_text("There's not enough left of [src] to [src.sample_verb] into [W].", "red")
|
|
return 0
|
|
|
|
if (src.reagents)
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - (src.reagents.total_volume - 1))
|
|
user.show_text("[W] is too full!", "red")
|
|
return 0
|
|
else
|
|
if (src.reagents.total_volume)
|
|
src.reagents.trans_to(W, src.reagents.total_volume)
|
|
user.visible_message("<span style=\"color:blue\"><b>[user]</b> [src.sample_verb]s some of [src] into [W].</span>",\
|
|
"<span style=\"color:blue\">You [src.sample_verb] some of [src] into [W].</span>")
|
|
W.reagents.handle_reactions()
|
|
src.sampled = 1
|
|
return 1
|
|
|
|
else if (src.sample_amt && src.sample_reagent)
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - (src.sample_amt - 1))
|
|
user.show_text("[W] is too full!", "red")
|
|
return 0
|
|
else
|
|
W.reagents.add_reagent(src.sample_reagent, src.sample_amt)
|
|
user.visible_message("<span style=\"color:blue\"><b>[user]</b> [src.sample_verb]s some of [src] into [W].</span>",\
|
|
"<span style=\"color:blue\">You [src.sample_verb] some of [src] into [W].</span>")
|
|
W.reagents.handle_reactions()
|
|
src.sampled = 1
|
|
return 1
|
|
|
|
dispose()
|
|
..()
|
|
var/area/Ar = get_area(src)
|
|
if (Ar)
|
|
Ar.sims_score = min(Ar.sims_score + 6, 100)
|
|
|
|
/obj/decal/cleanable/blood
|
|
name = "blood"
|
|
desc = "It's red."
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "floor1"
|
|
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
|
var/ling_blood = 0
|
|
var/blood_volume = 0
|
|
color = DEFAULT_BLOOD_COLOR
|
|
slippery = 10
|
|
slipped_in_blood = 1
|
|
can_sample = 1
|
|
sample_reagent = "blood"
|
|
can_dry = 1
|
|
|
|
New()
|
|
..()
|
|
var/datum/reagents/R = new/datum/reagents(10) // 9u is the max since we wanna leave at least 1u of blood in the blood puddle
|
|
reagents = R
|
|
R.my_atom = src
|
|
if (ling_blood)
|
|
src.reagents.add_reagent("bloodc", 10)
|
|
src.sample_reagent = "bloodc"
|
|
else
|
|
src.reagents.add_reagent("blood", 10)
|
|
|
|
Dry(var/time = rand(200,500))
|
|
if (!src.can_dry || src.dry)
|
|
return 0
|
|
spawn(time)
|
|
src.dry = 1
|
|
src.name = "dried [src.real_name]"
|
|
src.desc = "It's all flakey and dry now."
|
|
return 1
|
|
|
|
disposing()
|
|
diseases = list()
|
|
var/obj/decal/bloodtrace/B = new /obj/decal/bloodtrace(src.loc)
|
|
if(B.blood_DNA)
|
|
B.blood_DNA = src.blood_DNA
|
|
if(B.blood_type)
|
|
B.blood_type = src.blood_type
|
|
..()
|
|
|
|
/*
|
|
/obj/decal/cleanable/blood/burn(fi_amount)
|
|
if(fi_amount > 900000.0)
|
|
src.virus = null
|
|
sleep(11)
|
|
qdel(src)
|
|
return
|
|
*/
|
|
|
|
/obj/decal/cleanable/blood/dynamic
|
|
desc = "It's blood."
|
|
icon_state = "blank" // if you make any more giant white cumblobs all over my nice blood decals
|
|
random_icon_states = null // I swear to god I will fucking end you
|
|
var/low_icon_states = list("drip1a", "drip1b", "drip1c", "drip1d", "drip1e", "drip1f") // these'll change eventually, for now they're good enough
|
|
var/med_icon_states = list("drip2a", "drip2b", "drip2c", "drip2d", "drip2e", "drip2f")
|
|
var/high_icon_states = list("drip3a", "drip3b", "drip3c", "drip3d", "drip3e", "drip3f")
|
|
var/max_icon_states = list("drip4a", "drip4b", "drip4c", "drip4d", "drip5a", "drip5b", "drip5c", "drip5d")
|
|
var/violent_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7", "gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
|
|
blood_volume = 0
|
|
color = "#FFFFFF"
|
|
|
|
proc/add_volume(var/add_color, var/amount = 1)
|
|
// add_color passes the blood's color to the overlays
|
|
// amount should only be 1-5 if you want anything to happen
|
|
src.blood_volume ++
|
|
if (src.reagents.maximum_volume < 100)
|
|
src.reagents.maximum_volume += 10
|
|
if (src.blood_volume >= 10)
|
|
return
|
|
switch (amount)
|
|
if (-INFINITY to 0)
|
|
return
|
|
if (1)
|
|
create_overlay(src.low_icon_states, add_color)
|
|
if (2)
|
|
create_overlay(src.med_icon_states, add_color)
|
|
if (3)
|
|
create_overlay(src.high_icon_states, add_color)
|
|
if (4)
|
|
create_overlay(src.max_icon_states, add_color)
|
|
if (5)
|
|
create_overlay(src.violent_icon_states, add_color) // for when you wanna create a BIG MESS
|
|
if (6 to INFINITY)
|
|
return
|
|
|
|
proc/create_overlay(var/icons_to_choose, var/add_color)
|
|
if (icons_to_choose && length(icons_to_choose) > 0)
|
|
var/blood_addition = pick(icons_to_choose)
|
|
var/image/blood_overlay = image('icons/effects/blood.dmi', blood_addition)
|
|
blood_overlay.transform = turn(blood_overlay.transform, pick(0, 180)) // gets funky with 0,90,180,-90
|
|
blood_overlay.pixel_x += rand(-4,4)
|
|
blood_overlay.pixel_y += rand(-4,4)
|
|
if (add_color)
|
|
blood_overlay.color = add_color
|
|
src.overlays += blood_overlay
|
|
|
|
/obj/decal/cleanable/blood/drip
|
|
New()
|
|
..()
|
|
src.pixel_y += rand(0,16)
|
|
|
|
/obj/decal/cleanable/blood/drip/low
|
|
random_icon_states = list("drip1a", "drip1b", "drip1c", "drip1d", "drip1e", "drip1f")
|
|
/obj/decal/cleanable/blood/drip/med
|
|
random_icon_states = list("drip2a", "drip2b", "drip2c", "drip2d", "drip2e", "drip2f")
|
|
/obj/decal/cleanable/blood/drip/high
|
|
random_icon_states = list("drip3a", "drip3b", "drip3c", "drip3d", "drip3e", "drip3f")
|
|
|
|
/obj/decal/cleanable/blood/splatter
|
|
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
|
|
|
|
/obj/decal/cleanable/blood/tracks
|
|
icon_state = "tracks"
|
|
random_icon_states = null
|
|
color = "#FFFFFF"
|
|
|
|
/obj/decal/cleanable/blood/gibs
|
|
name = "gibs"
|
|
desc = "Grisly..."
|
|
anchored = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "gibbl5"
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
|
color = "#FFFFFF"
|
|
slippery = 5
|
|
can_dry = 0
|
|
|
|
attack_hand(var/mob/user as mob)
|
|
if (istype(user, /mob/living/carbon/human))
|
|
var/mob/living/carbon/human/H = user
|
|
if (H.job == "Chef")
|
|
user.visible_message("<span style=\"color:blue\"><b>[H]</b> starts rifling through [src] with their hands. What a weirdo.</span>",\
|
|
"<span style=\"color:blue\">You rake through the gibs with your bare hands.</span>")
|
|
playsound(src.loc, "sound/effects/splat.ogg", 50, 1)
|
|
if (H.gloves)
|
|
H.gloves.blood_DNA = src.blood_DNA
|
|
else
|
|
H.blood_DNA = src.blood_DNA
|
|
if (src.sampled)
|
|
H.show_text("You didn't find anything useful. Now your hands are all bloody for nothing!", "red")
|
|
else
|
|
H.show_text("You find some... salvageable... meat.. you guess?", "blue")
|
|
H.unlock_medal("Sheesh!", 1)
|
|
new /obj/item/reagent_containers/food/snacks/ingredient/meat/mysterymeat(src.loc)
|
|
src.sampled = 1
|
|
else
|
|
return ..()
|
|
else
|
|
return ..()
|
|
|
|
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)
|
|
var/obj/decal/cleanable/blood/b = new /obj/decal/cleanable/blood/splatter(src.loc)
|
|
if (src.diseases)
|
|
b.diseases += src.diseases
|
|
if (src.blood_DNA && src.blood_type) // For forensics (Convair880).
|
|
b.blood_DNA = src.blood_DNA
|
|
b.blood_type = src.blood_type
|
|
if (step_to(src, get_step(src, direction), 0))
|
|
break
|
|
|
|
/obj/decal/cleanable/blood/gibs/body
|
|
random_icon_states = list("gibhead", "gibtorso")
|
|
|
|
/obj/decal/cleanable/blood/gibs/core
|
|
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
|
|
|
/obj/decal/cleanable/glitter //WE'RE TRYING THIS NOW
|
|
name = "glitter"
|
|
desc = "You can try to clean it up, but there'll always be a little bit left."
|
|
icon = 'icons/effects/glitter.dmi'
|
|
icon_state = "glitter"
|
|
random_dir = 4
|
|
random_icon_states = list("glitter-1", "glitter-2", "glitter-3", "glitter-4", "glitter-5", "glitter-6", "glitter-7", "glitter-8", "glitter-9", "glitter-10")
|
|
can_sample = 1
|
|
sample_reagent = "glitter"
|
|
sample_verb = "scrape"
|
|
|
|
/obj/decal/cleanable/paper
|
|
name = "paper"
|
|
desc = "Ripped up little flecks of paper."
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "paper"
|
|
random_dir = 4
|
|
can_sample = 1
|
|
sample_reagent = "paper"
|
|
sample_verb = "scrape"
|
|
|
|
New()
|
|
..()
|
|
pixel_y += rand(-4,4)
|
|
pixel_x += rand(-4,4)
|
|
return
|
|
|
|
/obj/decal/cleanable/rust
|
|
name = "rust"
|
|
desc = "That sure looks safe."
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "rust1"
|
|
random_icon_states = list("rust1", "rust2", "rust3","rust4","rust5")
|
|
can_sample = 1
|
|
sample_reagent = "iron"
|
|
sample_verb = "scrape"
|
|
|
|
/obj/decal/cleanable/balloon
|
|
name = "balloon"
|
|
desc = "The remains of a balloon."
|
|
icon = 'icons/obj/balloon.dmi'
|
|
icon_state = "balloon_white_pop"
|
|
|
|
/obj/decal/cleanable/writing
|
|
name = "writing"
|
|
desc = "Someone's scribbled something here."
|
|
layer = TURF_LAYER + 1
|
|
icon = 'icons/obj/writing.dmi'
|
|
icon_state = "writing1"
|
|
color = "#000000"
|
|
random_icon_states = list("writing1", "writing2", "writing3", "writing4", "writing5", "writing6", "writing7")
|
|
var/words = "Nothing."
|
|
var/font = null
|
|
var/webfont = 0
|
|
var/font_color = "#000000"
|
|
|
|
get_desc(dist)
|
|
. = "<br><span style='color: blue'>It says:</span><br><span style='color: [src.font_color]'>[words]</span>"
|
|
//. = "[src.webfont ? "<link href='http://fonts.googleapis.com/css?family=[src.font]' rel='stylesheet' type='text/css'>" : null]<span style='color: blue'>It says:</span><br><span style='[src.font ? "font-family: [src.font][src.webfont ? ", cursive" : null];" : null]color: [src.font_color]'>[words]</span>"
|
|
|
|
/obj/decal/cleanable/writing/infrared
|
|
name = "infrared writing"
|
|
desc = "Someone's scribbled something here, with infrared ink. Ain't that spiffy?"
|
|
icon_state = "IRwriting1"
|
|
color = "#D20040"
|
|
random_icon_states = list("IRwriting1", "IRwriting2", "IRwriting3", "IRwriting4", "IRwriting5", "IRwriting6", "IRwriting7")
|
|
infra_luminosity = 4
|
|
invisibility = 1
|
|
font_color = "#D20040"
|
|
|
|
/obj/decal/cleanable/writing/postit
|
|
name = "sticky note"
|
|
desc = "Someone's stuck a little note here."
|
|
icon_state = "postit"
|
|
random_icon_states = list()
|
|
layer = EFFECTS_LAYER_BASE - 1
|
|
color = null
|
|
words = ""
|
|
var/max_message = 128
|
|
|
|
New()
|
|
..()
|
|
pixel_y += rand(-12,12)
|
|
pixel_x += rand(-12,12)
|
|
|
|
attackby(obj/item/W as obj, mob/living/user as mob)
|
|
if (istype(W, /obj/item/pen))
|
|
var/obj/item/pen/pen = W
|
|
pen.in_use = 1
|
|
var/t = input(user, "What do you want to write?", null, null) as null|text
|
|
if (!t)
|
|
pen.in_use = 0
|
|
return
|
|
if ((length(src.words) + length(t)) > src.max_message)
|
|
user.show_text("All that won't fit on [src]!", "red")
|
|
pen.in_use = 0
|
|
return
|
|
logTheThing("station", user, null, "writes on [src] with [pen] at [showCoords(src.x, src.y, src.z)]: [t]")
|
|
t = copytext(html_encode(t), 1, MAX_MESSAGE_LEN)
|
|
if (pen.font_color)
|
|
src.color = pen.font_color
|
|
if (pen.uses_handwriting && user && user.mind && user.mind.handwriting)
|
|
src.font = user.mind.handwriting
|
|
src.webfont = 1
|
|
else if (pen.font)
|
|
src.font = pen.font
|
|
if (pen.webfont)
|
|
src.webfont = 1
|
|
if (src.words)
|
|
src.words += "<br>"
|
|
var/search_t = lowertext(t)
|
|
if (copytext(search_t, 1, 4) == "no ")
|
|
src.icon_state = "postit-no"
|
|
else if (copytext(search_t, -1) == "?")
|
|
src.icon_state = "postit-quest"
|
|
else if (copytext(search_t, -1) == "!")
|
|
src.icon_state = "postit-excl"
|
|
else if (findtext(search_t, " wrong "))
|
|
src.icon_state = "postit-x"
|
|
else
|
|
src.icon_state = "postit-writing"
|
|
src.words += "[t]"
|
|
pen.in_use = 0
|
|
else
|
|
return ..()
|
|
|
|
/obj/decal/cleanable/water
|
|
name = "water"
|
|
desc = "Water, on the floor. Amazing!"
|
|
icon = 'icons/effects/water.dmi'
|
|
icon_state = "floor1"
|
|
random_icon_states = list("floor1", "floor2", "floor3")
|
|
can_dry = 1
|
|
slippery = 90
|
|
can_sample = 1
|
|
sample_reagent = "water"
|
|
|
|
Crossed(atom/movable/O)
|
|
if (istype(O, /obj/item/clothing/under/towel))
|
|
var/obj/item/clothing/under/towel/T = O
|
|
T.dry_turf(get_turf(src))
|
|
return
|
|
else
|
|
return ..()
|
|
|
|
/obj/decal/cleanable/urine
|
|
name = "urine"
|
|
desc = "It's yellow, and it smells."
|
|
icon = 'icons/effects/urine.dmi'
|
|
icon_state = "floor1"
|
|
blood_DNA = null
|
|
blood_type = null
|
|
random_icon_states = list("floor1", "floor2", "floor3")
|
|
var/thrice_drunk = 0
|
|
can_dry = 1
|
|
slippery = 80
|
|
can_sample = 1
|
|
|
|
Crossed(atom/movable/O)
|
|
if (istype(O, /obj/item/clothing/under/towel))
|
|
var/obj/item/clothing/under/towel/T = O
|
|
T.dry_turf(get_turf(src))
|
|
return
|
|
else
|
|
return ..()
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!src.can_sample)
|
|
return 0
|
|
|
|
if (W.is_open_container() && W.reagents)
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - 2)
|
|
user.show_text("[W] is too full!", "red")
|
|
return
|
|
|
|
else
|
|
user.visible_message("<span style=\"color:blue\"><b>[user]</b> is splashing the urine puddle into \the [W]. How singular.</span>",\
|
|
"<span style=\"color:blue\">You splash a little urine into \the [W].</span>")
|
|
|
|
switch (thrice_drunk)
|
|
if (0)
|
|
W.reagents.add_reagent("urine", 1)
|
|
if (1)
|
|
W.reagents.add_reagent("urine", 1)
|
|
W.reagents.add_reagent("toeoffrog", 1)
|
|
if (2)
|
|
W.reagents.add_reagent("urine", 1)
|
|
W.reagents.add_reagent("woolofbat", 1)
|
|
if (3)
|
|
W.reagents.add_reagent("urine", 1)
|
|
W.reagents.add_reagent("tongueofdog", 1)
|
|
if (4)
|
|
W.reagents.add_reagent("triplepiss",1)
|
|
|
|
if (prob(20))
|
|
qdel(src)
|
|
|
|
W.reagents.handle_reactions()
|
|
return 1
|
|
|
|
/obj/decal/cleanable/vomit
|
|
name = "pool of vomit"
|
|
desc = "Someone lost their lunch."
|
|
icon = 'icons/effects/vomit.dmi'
|
|
icon_state = "floor1"
|
|
random_icon_states = list("floor1", "floor2", "floor3")
|
|
slippery = 30
|
|
can_dry = 1
|
|
can_sample = 1
|
|
sample_amt = 5
|
|
sample_reagent = "vomit"
|
|
sample_verb = "scrape"
|
|
|
|
Dry(var/time = rand(200,500))
|
|
if (!src.can_dry || src.dry)
|
|
return 0
|
|
spawn(time)
|
|
src.dry = 1
|
|
src.name = "dried [src.real_name]"
|
|
src.desc = "It's all gummy. Ew."
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!src.can_sample || !W.reagents)
|
|
return 0
|
|
if (src.sampled)
|
|
user.show_text("There's not enough left of [src] to [src.sample_verb] into [W].", "red")
|
|
return 0
|
|
|
|
if (src.sample_amt && src.sample_reagent)
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - (src.sample_amt - 1))
|
|
user.show_text("[W] is too full!", "red")
|
|
return 0
|
|
else
|
|
W.reagents.add_reagent(src.sample_reagent, src.sample_amt)
|
|
user.visible_message("<span style=\"color:blue\"><b>[user]</b> is sticking their fingers into [src] and pushing it into [W]. It's probably best not to ask.</span>",\
|
|
"<span style=\"color:blue\">You [src.sample_verb] some of the puke into [W]. You are absolutely disgusting.</span>")
|
|
W.reagents.handle_reactions()
|
|
playsound(src.loc, "sound/effects/splat.ogg", 50, 1)
|
|
src.sampled = 1
|
|
return 1
|
|
|
|
/obj/decal/cleanable/vomit/spiders
|
|
desc = "Someone lost their lunch. Oh god their lunch was spiders?!"
|
|
random_icon_states = list("spiders1", "spiders2", "spiders3")
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!src.can_sample || !W.reagents)
|
|
return 0
|
|
if (src.sampled)
|
|
user.show_text("There's not enough left of [src] to [src.sample_verb] into [W].", "red")
|
|
return 0
|
|
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - (src.sample_amt - 1))
|
|
user.show_text("[W] is too full!", "red")
|
|
return 0
|
|
else
|
|
W.reagents.add_reagent("vomit", 2)
|
|
W.reagents.add_reagent("black_goop", 2)
|
|
W.reagents.add_reagent("spiders", 1)
|
|
|
|
var/fluff = pick("twitches", "wriggles", "wiggles", "skitters")
|
|
var/fluff2
|
|
if (prob(10))
|
|
fluff2 = ""
|
|
else // I only code good & worthwhile things :D
|
|
var/swear1 = pick("Oh", "Holy[pick("", " fucking")]", "Fucking", "Goddamn[pick("", " fucking")]", "Mother of[pick("", " fucking")]", "Jesus[pick("", " fucking")]")
|
|
var/swear2 = pick("shit", "fuck", "hell", "heck", "hellfarts", "piss")
|
|
var/that_is = " that is the [pick("worst", "most vile", "most utterly horrendous", "grodiest", "most horrific")] thing you've seen[pick(" in your entire life", " this week", " today", "", "!")]"
|
|
fluff2 = " [swear1] [swear2][prob(50) ? "[that_is]" : null][pick(".", "!", "!!")]"
|
|
|
|
user.visible_message("<span style=\"color:blue\"><b>[user]</b> is sticking their fingers into [src] and pushing it into [W].<span style=\"color:red\">It [fluff] a bit.[fluff2]</span></span>",\
|
|
"<span style=\"color:blue\">You [src.sample_verb] some of the puke into [W].<span style=\"color:red\">It [fluff] a bit.[fluff2]</span></span>")
|
|
W.reagents.handle_reactions()
|
|
playsound(src.loc, "sound/effects/splat.ogg", 50, 1)
|
|
src.sampled = 1
|
|
return 1
|
|
|
|
/obj/decal/cleanable/greenpuke
|
|
name = "green vomit"
|
|
desc = "That's just wrong."
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/vomit.dmi'
|
|
icon_state = "green1"
|
|
var/dried = 0
|
|
random_icon_states = list("green1", "green2", "green3")
|
|
can_dry = 1
|
|
slippery = 35
|
|
can_sample = 1
|
|
sample_amt = 5
|
|
sample_reagent = "gvomit"
|
|
sample_verb = "scrape"
|
|
|
|
Dry(var/time = rand(200,500))
|
|
if (!src.can_dry)
|
|
return 0
|
|
spawn(time)
|
|
src.dry = 1
|
|
src.name = "dried [src.real_name]"
|
|
src.desc = "It's all gummy. Ew."
|
|
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!src.can_sample || !W.reagents)
|
|
return 0
|
|
if (src.sampled)
|
|
user.show_text("There's not enough left of [src] to [src.sample_verb] into [W].", "red")
|
|
return 0
|
|
|
|
if (src.sample_amt && src.sample_reagent)
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - (src.sample_amt - 1))
|
|
user.show_text("[W] is too full!", "red")
|
|
return 0
|
|
else
|
|
W.reagents.add_reagent(src.sample_reagent, src.sample_amt)
|
|
user.show_text("You scoop some of the sticky, slimy, stringy green puke into [W]. You are absolutely horrifying.", "blue")
|
|
for (var/mob/O in AIviewers(user, null))
|
|
if (O != user)
|
|
O.show_message("<span style=\"color:blue\"><b>[user]</b> is sticking their fingers into [src] and pushing it into [W]. It's all slimy and stringy. Oh god.</span>", 1)
|
|
if (prob(33) && ishuman(O))
|
|
O.show_message("<span style=\"color:red\">You feel ill from watching that.</span>")
|
|
for (var/mob/V in viewers(O, null))
|
|
V.show_message("<span style=\"color:red\">[O] pukes all over \himself. Thanks, [user].</span>", 1)
|
|
playsound(O.loc, "sound/effects/splat.ogg", 50, 1)
|
|
new /obj/decal/cleanable/vomit(O.loc)
|
|
|
|
W.reagents.handle_reactions()
|
|
playsound(src.loc, "sound/effects/splat.ogg", 50, 1)
|
|
src.sampled = 1
|
|
return 1
|
|
|
|
/obj/decal/cleanable/tomatosplat
|
|
name = "ruined tomato"
|
|
desc = "Gallows humour."
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "floor1"
|
|
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
|
color = "#FF0000"
|
|
slippery = 10
|
|
can_sample = 1
|
|
sample_reagent = "juice_tomato"
|
|
|
|
/obj/decal/cleanable/eggsplat
|
|
name = "smashed egg"
|
|
desc = "Chickens will be none too pleased about this."
|
|
icon = 'icons/effects/water.dmi'
|
|
icon_state = "egg1"
|
|
random_icon_states = list("egg1", "egg2", "egg3")
|
|
slippery = 5
|
|
can_sample = 1
|
|
sample_amt = 5
|
|
sample_reagent = "egg"
|
|
|
|
/obj/decal/cleanable/ash
|
|
name = "ashes"
|
|
desc = "Ashes to ashes, dust to dust."
|
|
icon = 'icons/obj/objects.dmi'
|
|
icon_state = "ash"
|
|
can_sample = 1
|
|
sample_reagent = "ash"
|
|
sample_verb = "scrape"
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
..()
|
|
qdel(src)
|
|
|
|
attack_hand(mob/user as mob)
|
|
user.show_text("The ashes slip through your fingers.", "blue")
|
|
dispose()
|
|
return
|
|
|
|
/obj/decal/cleanable/generic
|
|
name = "clutter"
|
|
desc = "Someone should clean that up."
|
|
layer = TURF_LAYER
|
|
icon = 'icons/obj/objects.dmi'
|
|
icon_state = "shards"
|
|
|
|
/obj/decal/cleanable/dirt
|
|
name = "dirt"
|
|
desc = "Someone should clean that up."
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "dirt"
|
|
random_dir = 1
|
|
|
|
/obj/decal/cleanable/cobweb
|
|
name = "cobweb"
|
|
desc = "Someone should remove that."
|
|
layer = MOB_LAYER+1
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "cobweb1"
|
|
|
|
/obj/decal/cleanable/molten_item
|
|
name = "gooey grey mass"
|
|
desc = "huh."
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/obj/chemical.dmi'
|
|
icon_state = "molten"
|
|
|
|
/obj/decal/cleanable/cobweb2
|
|
name = "cobweb"
|
|
desc = "Someone should remove that."
|
|
layer = MOB_LAYER+1
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "cobweb2"
|
|
|
|
/obj/decal/cleanable/fungus
|
|
name = "space fungus"
|
|
desc = "A fungal growth. Looks pretty nasty."
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "fungus1"
|
|
var/amount = 1
|
|
can_sample = 1
|
|
sample_reagent = "space_fungus"
|
|
sample_verb = "scrape"
|
|
|
|
New()
|
|
if (prob(5))
|
|
src.amount += rand(1,2)
|
|
src.update_icon()
|
|
..()
|
|
return
|
|
|
|
proc/update_icon()
|
|
src.icon_state = "fungus[max(1,min(3, amount))]"
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!src.can_sample || !W.reagents)
|
|
return 0
|
|
|
|
else if (src.sample_amt && src.sample_reagent)
|
|
if (W.reagents.total_volume >= W.reagents.maximum_volume - (src.sample_amt - 1))
|
|
user.show_text("[W] is too full!", "red")
|
|
return 0
|
|
else
|
|
W.reagents.add_reagent(src.sample_reagent, src.sample_amt)
|
|
user.visible_message("<span style=\"color:blue\"><b>[user]</b> [src.sample_verb]s some of [src] into [W].</span>",\
|
|
"<span style=\"color:blue\">You [src.sample_verb] some of [src] into [W].</span>")
|
|
W.reagents.handle_reactions()
|
|
playsound(src.loc, "sound/items/Screwdriver.ogg", 50, 1)
|
|
src.amount--
|
|
if (src.amount <= 0)
|
|
qdel(src)
|
|
src.update_icon()
|
|
return 1
|
|
|
|
/obj/decal/cleanable/machine_debris
|
|
name = "twisted shrapnel"
|
|
desc = "A chunk of broken and melted scrap metal."
|
|
anchored = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/mob/robots.dmi'
|
|
icon_state = "gib1"
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
|
|
|
|
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)
|
|
if (prob(10))
|
|
var/datum/effects/system/spark_spread/s = unpool(/datum/effects/system/spark_spread)
|
|
s.set_up(3, 1, src)
|
|
s.start()
|
|
if (step_to(src, get_step(src, direction), 0))
|
|
break
|
|
|
|
/obj/decal/cleanable/robot_debris
|
|
name = "robot debris"
|
|
desc = "Useless heap of junk."
|
|
anchored = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/mob/robots.dmi'
|
|
icon_state = "gib1"
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
|
|
|
|
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)
|
|
if (prob(40))
|
|
/*var/obj/decal/cleanable/oil/o =*/
|
|
new /obj/decal/cleanable/oil/streak(src.loc)
|
|
else if (prob(10))
|
|
var/datum/effects/system/spark_spread/s = unpool(/datum/effects/system/spark_spread)
|
|
s.set_up(3, 1, src)
|
|
s.start()
|
|
if (step_to(src, get_step(src, direction), 0))
|
|
break
|
|
|
|
/obj/decal/cleanable/robot_debris/limb
|
|
random_icon_states = list("gibarm", "gibleg")
|
|
|
|
/obj/decal/cleanable/oil
|
|
name = "motor oil"
|
|
desc = "It's black."
|
|
icon = 'icons/effects/oil.dmi'
|
|
icon_state = "floor1"
|
|
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
|
slippery = 70
|
|
can_sample = 1
|
|
sample_reagent = "oil"
|
|
|
|
/obj/decal/cleanable/oil/streak
|
|
random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5")
|
|
|
|
/obj/decal/cleanable/greenglow
|
|
name = "green glow"
|
|
desc = "Eerie."
|
|
icon = 'icons/effects/effects.dmi'
|
|
icon_state = "greenglow"
|
|
var/datum/light/light
|
|
|
|
New()
|
|
..()
|
|
light = new /datum/light/point
|
|
light.set_brightness(0.4)
|
|
light.set_height(0.5)
|
|
light.set_color(0.2, 1, 0.2)
|
|
light.attach(src)
|
|
light.enable()
|
|
|
|
spawn(1200) // 2 minutes
|
|
qdel(src)
|
|
|
|
/obj/decal/cleanable/saltpile
|
|
name = "salt pile"
|
|
desc = "Bad luck, that."
|
|
icon = 'icons/effects/salt.dmi'
|
|
icon_state = "0"
|
|
can_sample = 1
|
|
sample_reagent = "salt"
|
|
sample_verb = "scrape"
|
|
|
|
New()
|
|
..()
|
|
src.updateIcon()
|
|
updateSurroundingSalt(get_turf(src))
|
|
|
|
|
|
HasEntered(AM as mob|obj)
|
|
..()
|
|
|
|
if(!(isliving(AM) || isobj(AM) || isintangible(AM))) return
|
|
var/mob/M = AM
|
|
var/oopschance = 5
|
|
if(ismob(AM))
|
|
if (M.m_intent != "walk") // walk, don't run
|
|
oopschance += 28
|
|
if (prob(oopschance))
|
|
M.visible_message("<span style=\"color:red\">[M.name] accidentally scuffs a foot across the [src], scattering it everywhere! [pick("Fuck!", "Shit!", "Damnit!", "Welp.")]</span>")
|
|
qdel(src)
|
|
|
|
disposing()
|
|
var/turf/T = get_turf(src)
|
|
..()
|
|
updateSurroundingSalt(T)
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
..()
|
|
qdel(src)
|
|
|
|
proc/updateIcon()
|
|
var/dirs = 0
|
|
for (var/dir in cardinal)
|
|
var/turf/T = get_step(src, dir)
|
|
var/obj/decal/cleanable/saltpile/S = T.getSaltHere()
|
|
if (S)
|
|
dirs |= dir
|
|
icon_state = num2text(dirs)
|
|
|
|
/obj/decal/cleanable/magnesiumpile
|
|
name = "magnesium pile"
|
|
desc = "Uh-oh."
|
|
icon = 'icons/effects/salt.dmi'
|
|
icon_state = "0"
|
|
can_sample = 1
|
|
sample_reagent = "magnesium"
|
|
sample_verb = "scrape"
|
|
var/on_fire = null
|
|
var/burn_time = 4
|
|
|
|
New()
|
|
..()
|
|
src.updateIcon()
|
|
updateSurroundingMagnesium(get_turf(src))
|
|
|
|
disposing()
|
|
var/turf/T = get_turf(src)
|
|
..()
|
|
updateSurroundingMagnesium(T)
|
|
|
|
Sample(var/obj/item/W as obj, var/mob/user as mob)
|
|
..()
|
|
qdel(src)
|
|
|
|
proc/updateIcon()
|
|
var/dirs = 0
|
|
for (var/dir in cardinal)
|
|
var/turf/T = get_step(src, dir)
|
|
var/obj/decal/cleanable/magnesiumpile/S = locate(/obj/decal/cleanable/magnesiumpile) in T
|
|
if (S)
|
|
dirs |= dir
|
|
icon_state = num2text(dirs)
|
|
|
|
proc/ignite()
|
|
if (on_fire)
|
|
return
|
|
on_fire = image('icons/effects/fire.dmi', "2old")
|
|
visible_message("<span style='color:red'>[src] ignites!</span>")
|
|
src.overlays += on_fire
|
|
spawn(0)
|
|
var/turf/T = get_turf(src)
|
|
while (burn_time > 0)
|
|
if (loc == T && !disposed && on_fire)
|
|
fireflash_sm(T, 0, T0C + 3100, 0, 1, 0)
|
|
if (burn_time <= 2)
|
|
for (var/D in cardinal)
|
|
var/turf/Q = get_step(T, D)
|
|
var/obj/decal/cleanable/magnesiumpile/M = locate() in Q
|
|
if (M)
|
|
M.ignite()
|
|
if (src.loc && src.loc.reagents && src.loc.reagents.total_volume)
|
|
for (var/i = 0, i < 10, i++)
|
|
src.loc.reagents.temperature_reagents(T0C + 3100, 10)
|
|
if (src.loc)
|
|
for (var/obj/O in src.loc)
|
|
if (O != src && O.reagents && O.reagents.total_volume)
|
|
for (var/i = 0, i < 10, i++)
|
|
O.reagents.temperature_reagents(T0C + 3100, 10)
|
|
sleep(5)
|
|
else
|
|
return
|
|
burn_time--
|
|
qdel(src)
|
|
|
|
reagent_act(id, volume)
|
|
if (disposed)
|
|
return
|
|
if (id == "water")
|
|
if (on_fire)
|
|
if (volume >= 10)
|
|
explosion_new(src, get_turf(src), 1)
|
|
qdel(src)
|
|
else
|
|
overlays -= on_fire
|
|
on_fire = null
|
|
burn_time = initial(burn_time)
|
|
else if (id == "ff-foam")
|
|
if (on_fire)
|
|
overlays -= on_fire
|
|
on_fire = null
|
|
burn_time = initial(burn_time)
|
|
|
|
temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
|
if (exposed_temperature >= T0C + 473)
|
|
ignite()
|
|
..()
|
|
|
|
/turf/proc/getSaltHere()
|
|
for (var/obj/decal/cleanable/saltpile/S in src.contents)
|
|
return S
|
|
|
|
/proc/updateSurroundingSalt(var/turf/T)
|
|
if (!istype(T)) return
|
|
for (var/obj/decal/cleanable/saltpile/S in orange(1,T))
|
|
S.updateIcon()
|
|
|
|
/proc/updateSurroundingMagnesium(var/turf/T)
|
|
if (!istype(T)) return
|
|
for (var/obj/decal/cleanable/magnesiumpile/S in orange(1,T))
|
|
S.updateIcon()
|
|
|
|
/obj/decal/cleanable/nitrotriiodide
|
|
name = "gooey mess"
|
|
desc = "Someone should DEFINITELY clean that up"
|
|
icon = 'icons/effects/effects.dmi'
|
|
icon_state = "nitrotri_wet"
|
|
color = "#cb5e97"
|
|
can_dry = 1
|
|
|
|
HasEntered(AM as mob|obj)
|
|
if( !src.dry || !(isliving(AM) || isobj(AM)) ) return
|
|
src.bang()
|
|
|
|
attackby(var/obj/item/W, var/mob/user)
|
|
if (src.dry)
|
|
src.bang()
|
|
return
|
|
return ..()
|
|
|
|
attack_hand(var/mob/user)
|
|
if (src.dry)
|
|
src.bang()
|
|
else
|
|
boutput(user, "<span style=\"color:blue\">You poke the mess. It's slightly viscous and smells strange. [prob(25) ? pick("Ew.", "Grody.", "Weird.") : null]</span>")
|
|
|
|
proc/bang()
|
|
src.visible_message("<b>The dust emits a loud bang!</b>")
|
|
if(prob(20))
|
|
var/datum/effects/system/bad_smoke_spread/smoke = new /datum/effects/system/bad_smoke_spread()
|
|
smoke.set_up(5, 0, src.loc, ,"#cb5e97")
|
|
smoke.start()
|
|
/*
|
|
var/datum/effects/system/spark_spread/s = unpool(/datum/effects/system/spark_spread)
|
|
s.set_up(5, 1, src.loc)
|
|
s.start()
|
|
*/
|
|
explosion(src, src.loc, -1, -1, -1, 1)
|
|
qdel(src)
|
|
|
|
Dry(var/time = 200 + 20 * rand(0,20))
|
|
if (!src.can_dry || src.dry)
|
|
return 0
|
|
spawn(time)
|
|
src.dry = 1
|
|
name = "dusty powder"
|
|
desc = "Janitor's clearly not doing his job properly, sigh."
|
|
icon_state = "nitrotri_dry"
|
|
if (prob(25)) //This emulates the effect of air randomly passing over the stuff
|
|
spawn(10 * rand(11,1200)) //At least 11 seconds, at most 20 minutes
|
|
src.bang()
|
|
return 1
|
|
|
|
////////////
|
|
// OTHERS //
|
|
////////////
|
|
|
|
/obj/decal/skeleton
|
|
name = "skeleton"
|
|
desc = "The remains of a human."
|
|
opacity = 0
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/3dimension.dmi'
|
|
icon_state = "skeleton_l"
|
|
|
|
/obj/decal/skeleton/cap
|
|
name = "remains of the captain"
|
|
desc = "The remains of the captain of this station ..."
|
|
opacity = 0
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/3dimension.dmi'
|
|
icon_state = "skeleton_l"
|
|
|
|
/obj/decal/floatingtiles
|
|
name = "floating tiles"
|
|
desc = "These tiles are just floating around in the void."
|
|
opacity = 0
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/3dimension.dmi'
|
|
icon_state = "floattiles1"
|
|
|
|
/obj/decal/implo
|
|
name = "implosion"
|
|
icon = 'icons/effects/64x64.dmi'
|
|
icon_state = "dimplo"
|
|
layer = EFFECTS_LAYER_BASE
|
|
opacity = 0
|
|
anchored = 1
|
|
pixel_y = -16
|
|
pixel_x = -16
|
|
mouse_opacity = 0
|
|
New(var/atom/location)
|
|
src.loc = location
|
|
spawn(20) del(src)
|
|
return ..(location)
|
|
|
|
/obj/decal/shockwave
|
|
name = "shockwave"
|
|
icon = 'icons/effects/64x64.dmi'
|
|
icon_state = "explocom"
|
|
layer = EFFECTS_LAYER_BASE
|
|
opacity = 0
|
|
anchored = 1
|
|
pixel_y = -16
|
|
pixel_x = -16
|
|
mouse_opacity = 0
|
|
New(var/atom/location)
|
|
src.loc = location
|
|
spawn(20) del(src)
|
|
return ..(location)
|
|
|
|
/obj/decal/point
|
|
name = "point"
|
|
icon = 'icons/mob/screen1.dmi'
|
|
icon_state = "arrow"
|
|
layer = EFFECTS_LAYER_1
|
|
anchored = 1
|
|
|
|
/obj/decal/jukebox
|
|
name = "Old Jukebox"
|
|
icon = 'icons/obj/decoration.dmi'
|
|
icon_state = "jukebox"
|
|
desc = "This doesn't seem to be working anymore."
|
|
layer = OBJ_LAYER
|
|
anchored = 1
|
|
density = 1
|
|
|
|
/obj/decal/pole
|
|
name = "Barber Pole"
|
|
icon = 'icons/obj/decoration.dmi'
|
|
icon_state = "pole"
|
|
anchored = 1
|
|
density = 0
|
|
desc = "Barber poles historically were signage used to convey that the barber would perform services such as blood letting and other medical procedures, with the red representing blood, and the white representing the bandaging. In America, long after the time when blood-letting was offered, a third colour was added to bring it in line with the colours of their national flag. This one is in space."
|
|
layer = OBJ_LAYER
|
|
|
|
/obj/decal/oven
|
|
name = "Oven"
|
|
desc = "An old oven."
|
|
icon = 'icons/obj/kitchen.dmi'
|
|
icon_state = "oven_off"
|
|
anchored = 1
|
|
density = 1
|
|
layer = OBJ_LAYER
|
|
|
|
/obj/decal/sink
|
|
name = "Sink"
|
|
icon = 'icons/obj/kitchen.dmi'
|
|
icon_state = "sink"
|
|
desc = "The sink doesn't appear to be connected to a waterline."
|
|
anchored = 1
|
|
density = 1
|
|
layer = OBJ_LAYER
|
|
|
|
obj/decal/fakeobjects
|
|
layer = OBJ_LAYER
|
|
|
|
obj/decal/fakeobjects/cargopad
|
|
name = "Cargo Pad"
|
|
desc = "Used to recieve objects transported by a Cargo Transporter."
|
|
icon = 'icons/obj/objects.dmi'
|
|
icon_state = "cargopad"
|
|
anchored = 1
|
|
|
|
/obj/decal/fakeobjects/robot
|
|
name = "Inactive Robot"
|
|
desc = "The robot looks to be in good condition."
|
|
icon = 'icons/mob/robots.dmi'
|
|
icon_state = "robot"
|
|
|
|
/obj/decal/fakeobjects/apc_broken
|
|
name = "broken APC"
|
|
desc = "A smashed local power unit."
|
|
icon = 'icons/obj/power.dmi'
|
|
icon_state = "apc-b"
|
|
anchored = 1
|
|
|
|
obj/decal/fakeobjects/teleport_pad
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "pad0"
|
|
name = "teleport pad"
|
|
anchored = 1
|
|
layer = FLOOR_EQUIP_LAYER1
|
|
desc = "A pad used for scientific teleportation."
|
|
|
|
/obj/decal/fakeobjects/firealarm_broken
|
|
name = "broken fire alarm"
|
|
desc = "This fire alarm is burnt out, ironically."
|
|
icon = 'icons/obj/monitors.dmi'
|
|
icon_state = "firex"
|
|
anchored = 1
|
|
|
|
/obj/decal/fakeobjects/firelock_broken
|
|
name = "rusted firelock"
|
|
desc = "Rust has rendered this firelock useless."
|
|
icon = 'icons/obj/doors/door_fire2.dmi'
|
|
icon_state = "door0"
|
|
anchored = 1
|
|
|
|
/obj/decal/fakeobjects/lighttube_broken
|
|
name = "shattered light tube"
|
|
desc = "Something has broken this light."
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "tube-broken"
|
|
anchored = 1
|
|
|
|
/obj/decal/fakeobjects/lightbulb_broken
|
|
name = "shattered light bulb"
|
|
desc = "Something has broken this light."
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "bulb-broken"
|
|
anchored = 1
|
|
|
|
/obj/decal/fakeobjects/airmonitor_broken
|
|
name = "broken air monitor"
|
|
desc = "Something has broken this air monitor."
|
|
icon = 'icons/obj/monitors.dmi'
|
|
icon_state = "alarmx"
|
|
anchored = 1
|
|
|
|
/obj/decal/fakeobjects/shuttlethruster
|
|
name = "propulsion unit"
|
|
desc = "A small impulse drive that moves the shuttle."
|
|
icon = 'icons/turf/shuttle.dmi'
|
|
icon_state = "propulsion"
|
|
anchored = 1
|
|
density = 1
|
|
opacity = 0
|
|
|
|
/obj/decal/fakeobjects/pipe
|
|
name = "rusted pipe"
|
|
desc = "Good riddance."
|
|
icon = 'icons/obj/atmospherics/pipes/regular_pipe.dmi'
|
|
icon_state = "intact"
|
|
anchored = 1
|
|
|
|
heat
|
|
icon = 'icons/obj/atmospherics/pipes/heat_pipe.dmi'
|
|
|
|
/obj/decal/fakeobjects/oldcanister
|
|
name = "old gas canister"
|
|
desc = "All the gas in it seems to be long gone."
|
|
icon = 'icons/misc/evilreaverstation.dmi'
|
|
icon_state = "old_oxy"
|
|
anchored = 0
|
|
density = 1
|
|
|
|
|
|
plasma
|
|
name = "old plasma canister"
|
|
icon_state = "old_plasma"
|
|
desc = "This used to be the most feared piece of equipment on the station, don't you believe it?"
|
|
|
|
/obj/decal/fakeobjects/shuttleengine
|
|
name = "engine unit"
|
|
desc = "A generator unit that uses complex technology."
|
|
icon = 'icons/turf/shuttle.dmi'
|
|
icon_state = "heater"
|
|
anchored = 1
|
|
density = 1
|
|
opacity = 0
|
|
|
|
/obj/decal/bloodtrace
|
|
name = "blood trace"
|
|
desc = "Oh my!!"
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "lum"
|
|
invisibility = 101
|
|
blood_DNA = null
|
|
blood_type = null
|
|
|
|
/obj/decal/boxingrope
|
|
name = "Boxing Ropes"
|
|
desc = "Do not exit the ring."
|
|
density = 1
|
|
anchored = 1
|
|
icon = 'icons/obj/decoration.dmi'
|
|
icon_state = "ringrope"
|
|
layer = OBJ_LAYER
|
|
|
|
CanPass(atom/movable/mover, turf/target, height=0, air_group=0) // stolen from window.dm
|
|
if (src.dir == SOUTHWEST || src.dir == SOUTHEAST || src.dir == NORTHWEST || src.dir == NORTHEAST || src.dir == SOUTH || src.dir == NORTH)
|
|
return 0
|
|
if(get_dir(loc, target) == dir)
|
|
|
|
return !density
|
|
else
|
|
return 1
|
|
|
|
CheckExit(atom/movable/O as mob|obj, target as turf)
|
|
if (!src.density)
|
|
return 1
|
|
if (get_dir(O.loc, target) == src.dir)
|
|
return 0
|
|
return 1
|
|
|
|
/obj/decal/boxingropeenter
|
|
name = "Ring entrance"
|
|
desc = "Do not exit the ring."
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/obj/decoration.dmi'
|
|
icon_state = "ringrope"
|
|
layer = OBJ_LAYER
|
|
|
|
/obj/decal/tile_edge
|
|
name = "edge"
|
|
mouse_opacity = 0
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "tile_edge"
|
|
layer = TURF_LAYER + 0.1 // it should basically be part of a turf
|
|
var/merge_with_turf = 1
|
|
|
|
New()
|
|
if (src.merge_with_turf)
|
|
var/turf/T = get_turf(src)
|
|
if (!T)
|
|
return ..()
|
|
var/image/I = image(src.icon, T, src.icon_state, src.layer, src.dir)
|
|
if (src.color)
|
|
I.color = src.color
|
|
if (T.UpdateOverlays(I, "tile_edge\ref[src]"))
|
|
qdel(src)
|
|
else
|
|
return ..()
|
|
else
|
|
return ..()
|
|
|
|
Move()
|
|
return 0
|
|
|
|
/obj/decal/tile_edge/stripe
|
|
name = "hazard stripe"
|
|
icon = 'icons/obj/hazard_stripes.dmi'
|
|
icon_state = "stripe-edge"
|
|
|
|
/obj/decal/tile_edge/stripe/big
|
|
icon_state = "bigstripe-edge"
|
|
|
|
/obj/decal/tile_edge/stripe/extra_big
|
|
icon_state = "xtra_bigstripe-edge"
|
|
|
|
/obj/decal/tile_edge/line
|
|
icon = 'icons/obj/line.dmi'
|
|
icon_state = "linefull"
|
|
|
|
white // the default white of these things is brighter than the white tiles, this color matches those
|
|
color = "#E4E4E4"
|
|
grey
|
|
color = "#8D8C8C"
|
|
black
|
|
color = "#474646"
|
|
|
|
red
|
|
color = "#BC6B72"
|
|
orange
|
|
color = "#E7C88C"
|
|
yellow
|
|
color = "#BC9F6B"
|
|
green
|
|
color = "#90B672"
|
|
blue
|
|
color = "#6CA3BB"
|
|
purple
|
|
color = "#AB8CB0"
|
|
|
|
/obj/decal/stage_edge
|
|
name = "stage"
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "curtainthing"
|
|
density = 1
|
|
anchored = 1
|
|
dir = NORTH
|
|
|
|
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
if (istype(mover, /obj/projectile))
|
|
return 1
|
|
if (get_dir(loc, target) == dir)
|
|
return !density
|
|
else
|
|
return 1
|
|
|
|
CheckExit(atom/movable/O as mob|obj, target as turf)
|
|
if (!src.density)
|
|
return 1
|
|
if (istype(O, /obj/projectile))
|
|
return 1
|
|
if (get_dir(O.loc, target) == src.dir)
|
|
return 0
|
|
return 1
|
|
|
|
/obj/decal/alienflower
|
|
name = "strange alien flower"
|
|
desc = "Is it going to eat you if you get too close?"
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "alienflower"
|
|
random_dir = 8
|
|
|
|
New()
|
|
..()
|
|
src.dir = pick(alldirs)
|
|
src.pixel_y += rand(-8,8)
|
|
src.pixel_x += rand(-8,8)
|
|
|
|
/obj/decal/cleanable/alienvine
|
|
name = "strange alien vine"
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "avine_l1"
|
|
random_icon_states = list("avine_l1", "avine_l2", "avine_l3")
|
|
New()
|
|
..()
|
|
src.dir = pick(cardinal)
|
|
if (prob(20))
|
|
new /obj/decal/alienflower(src.loc)
|
|
|
|
/obj/decal/icefloor
|
|
name = "ice"
|
|
desc = "Slippery!"
|
|
icon = 'icons/obj/wizard.dmi'
|
|
icon_state = "icefloor"
|
|
density = 0
|
|
opacity = 0
|
|
anchored = 1
|
|
|
|
/obj/decal/icefloor/HasEntered(var/atom/movable/AM)
|
|
if (iscarbon(AM))
|
|
var/mob/M = AM
|
|
// drsingh fix for undefined variable mob/living/carbon/monkey/var/shoes
|
|
if (!M.can_slip(0))
|
|
return
|
|
|
|
M.pulling = null
|
|
boutput(M, "<span style=\"color:red\">You slipped on [src]!</span>")
|
|
playsound(src.loc, "sound/misc/slip.ogg", 50, 1, -3)
|
|
M.stunned = 2
|
|
M.weakened = 1
|
|
if (prob(5))
|
|
M.TakeDamage("head", 5, 0, 0, DAMAGE_BLUNT)
|
|
M.visible_message("<span style=\"color:red\"><b>[M]</b> hits their head on [src]!</span>")
|
|
playsound(src.loc, "sound/weapons/genhit1.ogg", 50, 1)
|
|
|
|
/obj/decal/cleanable/gangtag
|
|
name = "gang tag"
|
|
desc = "A spraypainted gang tag."
|
|
density = 0
|
|
anchored = 1
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "gangtag0"
|
|
var/datum/gang/owners = null
|
|
|
|
proc/delete_same_tags()
|
|
for(var/obj/decal/cleanable/gangtag/T in get_turf(src))
|
|
if(T.owners == src.owners && T != src) T.dispose()
|
|
|
|
/* New()
|
|
var/highlayer = 4
|
|
for(var/obj/decal/cleanable/gangtag/T in get_turf(src))
|
|
if(T.layer > highlayer) highlayer = T.layer
|
|
src.layer = highlayer + 1*/
|
|
|
|
disposing(var/uncapture = 1)
|
|
var/area/tagarea = get_area(src)
|
|
if(tagarea.gang_owners == src.owners && uncapture)
|
|
tagarea.gang_owners = null
|
|
var/turf/T = get_turf(src)
|
|
T.tagged = 0
|
|
..()
|
|
|
|
// These used to be static turfs derived from the standard grey floor tile and thus didn't always blend in very well (Convair880).
|
|
/obj/decal/mule
|
|
name = "Don't spawn me"
|
|
mouse_opacity = 0
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/obj/decals.dmi'
|
|
icon_state = "blank"
|
|
layer = TURF_LAYER + 0.1 // Should basically be part of a turf.
|
|
|
|
beacon
|
|
name = "MULE delivery destination"
|
|
icon_state = "mule_beacon"
|
|
var/auto_dropoff_spawn = 1
|
|
|
|
New()
|
|
..()
|
|
var/turf/T = get_turf(src)
|
|
if (T && isturf(T) && src.auto_dropoff_spawn == 1)
|
|
for (var/obj/machinery/navbeacon/mule/NB in T.contents)
|
|
if (!isnull(NB.codes_txt))
|
|
var/turf/TD = null
|
|
switch (NB.codes_txt)
|
|
if ("delivery;dir=1")
|
|
TD = locate(T.x, T.y + 1, T.z)
|
|
if ("delivery;dir=4")
|
|
TD = locate(T.x + 1, T.y, T.z)
|
|
if ("delivery;dir=2")
|
|
TD = locate(T.x, T.y - 1, T.z)
|
|
if ("delivery;dir=8")
|
|
TD = locate(T.x - 1, T.y, T.z)
|
|
else
|
|
return
|
|
|
|
if (TD && isturf(TD) && !TD.density)
|
|
new /obj/decal/mule/dropoff(TD)
|
|
if (!isnull(NB.location))
|
|
src.name = "[src.name] ([NB.location])"
|
|
break
|
|
return
|
|
|
|
no_auto_dropoff_spawn
|
|
auto_dropoff_spawn = 0
|
|
|
|
dropoff
|
|
name = "MULE cargo dropoff point"
|
|
icon_state = "mule_dropoff" |