Resolves conflicts.

This commit is contained in:
Desolate
2018-10-11 05:36:22 -05:00
486 changed files with 16260 additions and 10647 deletions
+4 -1
View File
@@ -71,13 +71,16 @@
buckled_mob.clear_alert("buckled")
buckled_mob = null
post_buckle_mob(.)
post_unbuckle_mob(.)
//Handle any extras after buckling/unbuckling
//Called on buckle_mob() and unbuckle_mob()
/atom/movable/proc/post_buckle_mob(mob/living/M)
return
//same but for unbuckle
/atom/movable/proc/post_unbuckle_mob(mob/living/M)
return
//Wrapper procs that handle sanity and user feedback
/atom/movable/proc/user_buckle_mob(mob/living/M, mob/user)
@@ -21,10 +21,10 @@
color = "#FFFFFF"
/obj/effect/decal/cleanable/blood/gibs/xeno/up
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1")
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6", "xgibup1", "xgibup1", "xgibup1")
/obj/effect/decal/cleanable/blood/gibs/xeno/down
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1")
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6", "xgibdown1", "xgibdown1", "xgibdown1")
/obj/effect/decal/cleanable/blood/gibs/xeno/body
random_icon_states = list("xgibhead", "xgibtorso")
@@ -36,4 +36,4 @@
random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3")
/obj/effect/decal/cleanable/blood/xtracks
basecolor = "#05EE05"
basecolor = "#05EE05"
@@ -2,11 +2,11 @@
//Liquid fuel is used for things that used to rely on volatile fuels or plasma being contained to a couple tiles.
icon = 'icons/effects/effects.dmi'
icon_state = "fuel"
layer = TURF_LAYER+0.2
anchored = 1
layer = LATTICE_LAYER
anchored = TRUE
var/amount = 1 //Basically moles.
/obj/effect/decal/cleanable/liquid_fuel/New(newLoc,amt=1)
/obj/effect/decal/cleanable/liquid_fuel/Initialize(newLoc, amt = 1)
amount = amt
//Be absorbed by any other liquid fuel in the tile.
@@ -21,38 +21,42 @@
/obj/effect/decal/cleanable/liquid_fuel/proc/Spread()
//Allows liquid fuels to sometimes flow into other tiles.
if(amount < 0.5) return
if(amount < 0.5)
return
var/turf/simulated/S = loc
if(!istype(S)) return
if(!istype(S))
return
for(var/d in cardinal)
if(rand(25))
var/turf/simulated/target = get_step(src, d)
var/turf/simulated/origin = get_turf(src)
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
if(!locate(/obj/effect/decal/cleanable/liquid_fuel) in target)
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25)
new/obj/effect/decal/cleanable/liquid_fuel(target, amount * 0.25)
amount *= 0.75
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel
icon_state = "mustard"
anchored = 0
anchored = FALSE
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0)
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Initialize(newLoc, amt = 1, d = 0)
dir = d //Setting this direction means you won't get torched by your own flamethrower.
. = ..()
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Spread()
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
if(amount < 0.1) return
if(amount < 0.1)
return
var/turf/simulated/S = loc
if(!istype(S)) return
if(!istype(S))
return
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
var/turf/simulated/O = get_step(S,d)
for(var/d in list(turn(dir, 90), turn(dir, -90), dir))
var/turf/simulated/O = get_step(S, d)
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
continue
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O, amount * 0.25, d)
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
amount *= 0.25
@@ -1,6 +1,6 @@
#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()
var/global/list/image/splatter_cache = list()
/obj/effect/decal/cleanable/blood
name = "blood"
@@ -8,24 +8,24 @@ var/global/list/image/splatter_cache=list()
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
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "mfloor1"
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
var/base_icon = 'icons/effects/blood.dmi'
appearance_flags = NO_CLIENT_COLOR
blood_DNA = list()
var/base_icon = 'icons/effects/blood.dmi'
var/blood_state = BLOOD_STATE_HUMAN
var/bloodiness = MAX_SHOE_BLOODINESS
var/basecolor = "#A10808" // Color when wet.
var/amount = 5
appearance_flags = NO_CLIENT_COLOR
var/dry_timer = 0
var/off_floor = FALSE
/obj/effect/decal/cleanable/blood/New()
..()
/obj/effect/decal/cleanable/blood/Initialize()
. = ..()
update_icon()
if(GAMEMODE_IS_CULT)
var/datum/game_mode/cult/mode_ticker = ticker.mode
@@ -58,7 +58,8 @@ var/global/list/image/splatter_cache=list()
return ..()
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
if(basecolor == "rainbow")
basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
color = basecolor
/obj/effect/decal/cleanable/blood/proc/dry()
@@ -93,9 +94,9 @@ var/global/list/image/splatter_cache=list()
var/mob/living/carbon/human/H = O
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/hasfeet = 1
var/hasfeet = TRUE
if(!l_foot && !r_foot)
hasfeet = 0
hasfeet = FALSE
if(H.shoes && blood_state && bloodiness)
var/obj/item/clothing/shoes/S = H.shoes
var/add_blood = 0
@@ -137,10 +138,10 @@ var/global/list/image/splatter_cache=list()
gender = PLURAL
icon = 'icons/effects/drip.dmi'
icon_state = "1"
random_icon_states = list("1","2","3","4","5")
random_icon_states = list("1", "2", "3", "4", "5")
amount = 0
var/drips = 1
bloodiness = 0
var/drips = 1
/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in()
return TRUE
@@ -150,12 +151,12 @@ var/global/list/image/splatter_cache=list()
icon_state = "ltrails_1"
desc = "Your instincts say you shouldn't be following these."
gender = PLURAL
density = 0
layer = 2
density = FALSE
layer = TURF_LAYER
random_icon_states = null
var/list/existing_dirs = list()
blood_DNA = list()
appearance_flags = NO_CLIENT_COLOR
var/list/existing_dirs = list()
/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in()
return TRUE
@@ -164,12 +165,12 @@ var/global/list/image/splatter_cache=list()
icon_state = "tracks"
desc = "It looks like a writing in blood."
gender = NEUTER
random_icon_states = list("writing1","writing2","writing3","writing4","writing5")
random_icon_states = list("writing1", "writing2", "writing3", "writing4", "writing5")
amount = 0
var/message
/obj/effect/decal/cleanable/blood/writing/New()
..()
/obj/effect/decal/cleanable/blood/writing/Initialize()
. = ..()
if(random_icon_states.len)
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
random_icon_states.Remove(W.icon_state)
@@ -179,20 +180,20 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/writing/examine(mob/user)
..(user)
to_chat(user, "It reads: <font color='[basecolor]'>\"[message]\"<font>")
to_chat(user, "<span class='notice'>It reads: <font color='[basecolor]'>\"[message]\"<font></span>")
/obj/effect/decal/cleanable/blood/gibs
name = "gibs"
desc = "They look bloody and gruesome."
gender = PLURAL
density = 0
anchored = 1
layer = 2
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "gibbl5"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
noclear = TRUE
var/fleshcolor = "#FFFFFF"
noclear = 1
/obj/effect/decal/cleanable/blood/gibs/update_icon()
var/image/giblets = new(base_icon, "[icon_state]_flesh", dir)
@@ -207,10 +208,10 @@ var/global/list/image/splatter_cache=list()
. = ..()
/obj/effect/decal/cleanable/blood/gibs/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gibup1", "gibup1", "gibup1")
/obj/effect/decal/cleanable/blood/gibs/down
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gibdown1", "gibdown1", "gibdown1")
/obj/effect/decal/cleanable/blood/gibs/body
random_icon_states = list("gibhead", "gibtorso")
@@ -221,15 +222,15 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/gibs/core
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
/obj/effect/decal/cleanable/blood/gibs/New()
..()
/obj/effect/decal/cleanable/blood/gibs/Initialize()
. = ..()
reagents.add_reagent("liquidgibs", 5)
/obj/effect/decal/cleanable/blood/gibs/cleangibs //most ironic name ever...
/obj/effect/decal/cleanable/blood/gibs/cleangibs/New() //no reagent!
..()
/obj/effect/decal/cleanable/blood/gibs/cleangibs/Initialize() //no reagent!
. = ..()
reagents.remove_reagent("liquidgibs",5)
@@ -246,18 +247,20 @@ var/global/list/image/splatter_cache=list()
break
/obj/effect/decal/cleanable/blood/old/New()
..()
/obj/effect/decal/cleanable/blood/old/Initialize()
. = ..()
bloodiness = 0
dry()
/obj/effect/decal/cleanable/blood/old/can_bloodcrawl_in()
return FALSE
/obj/effect/decal/cleanable/blood/gibs/old/New()
..()
/obj/effect/decal/cleanable/blood/gibs/old/Initialize()
. = ..()
bloodiness = 0
dry()
/obj/effect/decal/cleanable/blood/gibs/old/can_bloodcrawl_in()
return FALSE
#undef DRYING_TIME
+203 -203
View File
@@ -1,203 +1,203 @@
/obj/effect/decal/cleanable/generic
name = "clutter"
desc = "Someone should clean that up."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
/obj/effect/decal/cleanable/ash
name = "ashes"
desc = "Ashes to ashes, dust to dust, and into space."
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
anchored = 1
/obj/effect/decal/cleanable/ash/New()
..()
reagents.add_reagent("ash", 10)
/obj/effect/decal/cleanable/dirt
name = "dirt"
desc = "Someone should clean that up."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/effects.dmi'
icon_state = "dirt"
mouse_opacity = 0
/obj/effect/decal/cleanable/dirt/blackpowder
name = "black powder"
mouse_opacity = 1
noscoop = 1
/obj/effect/decal/cleanable/dirt/blackpowder/New()
..()
reagents.add_reagent("blackpowder", 40) //size 2 explosion when activated
/obj/effect/decal/cleanable/flour
name = "flour"
desc = "It's still good. Four second rule!"
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/effects.dmi'
icon_state = "flour"
/obj/effect/decal/cleanable/flour/foam
name = "Fire fighting foam"
desc = "It's foam."
color = "#EBEBEB"
New()
..()
spawn(150)// 15 seconds
qdel(src)
/obj/effect/decal/cleanable/greenglow
name = "glowing goo"
desc = "Jeez. I hope that's not for lunch."
gender = PLURAL
density = 0
anchored = 1
layer = 2
light_range = 1
icon = 'icons/effects/effects.dmi'
icon_state = "greenglow"
New()
..()
spawn(1200)// 2 minutes
qdel(src)
/obj/effect/decal/cleanable/cobweb
name = "cobweb"
desc = "Somebody should remove that."
density = 0
anchored = 1
layer = 3
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1"
burntime = 1
/obj/effect/decal/cleanable/cobweb/fire_act()
qdel(src)
/obj/effect/decal/cleanable/molten_object
name = "gooey grey mass"
desc = "It looks like a melted... something."
density = 0
anchored = 1
layer = 3
gender = NEUTER
icon = 'icons/effects/effects.dmi'
icon_state = "molten"
/obj/effect/decal/cleanable/molten_object/large
name = "big gooey grey mass"
icon_state = "big_molten"
/obj/effect/decal/cleanable/cobweb2
name = "cobweb"
desc = "Somebody should remove that."
density = 0
anchored = 1
layer = 3
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb2"
//Vomit (sorry)
/obj/effect/decal/cleanable/vomit
name = "vomit"
desc = "Gosh, how unpleasant."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
noclear = 1
/obj/effect/decal/cleanable/vomit/New()
..()
reagents.add_reagent("vomit", 5)
/obj/effect/decal/cleanable/vomit/green
name = "green vomit"
desc = "It's all gummy. Ew."
icon_state = "gvomit_1"
random_icon_states = list("gvomit_1", "gvomit_2", "gvomit_3", "gvomit_4")
/obj/effect/decal/cleanable/vomit/green/New()
..()
reagents.remove_reagent("vomit", 5)
reagents.add_reagent("green_vomit", 5)
/obj/effect/decal/cleanable/tomato_smudge
name = "tomato smudge"
desc = "It's red."
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
/obj/effect/decal/cleanable/plant_smudge
name = "plant smudge"
density = 0
anchored = 1
layer = 2
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_plant")
/obj/effect/decal/cleanable/egg_smudge
name = "smashed egg"
desc = "Seems like this one won't hatch."
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
/obj/effect/decal/cleanable/pie_smudge //honk
name = "smashed pie"
desc = "It's pie cream from a cream pie."
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie")
/obj/effect/decal/cleanable/fungus
name = "space fungus"
desc = "A fungal growth. Looks pretty nasty."
density = 0
anchored = 1
layer = 2
icon = 'icons/effects/effects.dmi'
icon_state = "flour"
color = "#D5820B"
/obj/effect/decal/cleanable/fungus/New()
..()
reagents.add_reagent("fungus", 10)
/obj/effect/decal/cleanable/confetti //PARTY TIME!
name = "confetti"
desc = "Party time!"
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "confetti1"
random_icon_states = list("confetti1", "confetti2", "confetti3")
anchored = 1
/obj/effect/decal/cleanable/generic
name = "clutter"
desc = "Someone should clean that up."
gender = PLURAL
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
/obj/effect/decal/cleanable/ash
name = "ashes"
desc = "Ashes to ashes, dust to dust, and into space."
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
anchored = TRUE
/obj/effect/decal/cleanable/ash/Initialize()
. = ..()
reagents.add_reagent("ash", 10)
/obj/effect/decal/cleanable/dirt
name = "dirt"
desc = "Someone should clean that up."
gender = PLURAL
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/dirt.dmi'
icon_state = "dirt"
canSmoothWith = list(/obj/effect/decal/cleanable/dirt, /turf/simulated/wall, /obj/structure/falsewall)
smooth = SMOOTH_MORE
mouse_opacity = FALSE
/obj/effect/decal/cleanable/dirt/Initialize()
..()
icon_state = ""
/obj/effect/decal/cleanable/dirt/blackpowder
name = "black powder"
mouse_opacity = TRUE
noscoop = TRUE
/obj/effect/decal/cleanable/dirt/blackpowder/Initialize()
. = ..()
reagents.add_reagent("blackpowder", 40) // size 2 explosion when activated
/obj/effect/decal/cleanable/flour
name = "flour"
desc = "It's still good. Four second rule!"
gender = PLURAL
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/effects.dmi'
icon_state = "flour"
/obj/effect/decal/cleanable/flour/foam
name = "Fire fighting foam"
desc = "It's foam."
color = "#EBEBEB"
/obj/effect/decal/cleanable/flour/foam/Initialize()
. = ..()
QDEL_IN(src, 15 SECONDS)
/obj/effect/decal/cleanable/greenglow
name = "glowing goo"
desc = "Jeez. I hope that's not for lunch."
gender = PLURAL
density = FALSE
anchored = TRUE
layer = TURF_LAYER
light_range = 1
icon = 'icons/effects/effects.dmi'
icon_state = "greenglow"
/obj/effect/decal/cleanable/greenglow/Initialize(mapload)
. = ..()
QDEL_IN(src, 2 MINUTES)
/obj/effect/decal/cleanable/cobweb
name = "cobweb"
desc = "Somebody should remove that."
density = FALSE
anchored = TRUE
layer = OBJ_LAYER
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1"
burntime = 1
/obj/effect/decal/cleanable/cobweb/fire_act()
qdel(src)
/obj/effect/decal/cleanable/molten_object
name = "gooey grey mass"
desc = "It looks like a melted... something."
density = FALSE
anchored = TRUE
layer = OBJ_LAYER
gender = NEUTER
icon = 'icons/effects/effects.dmi'
icon_state = "molten"
/obj/effect/decal/cleanable/molten_object/large
name = "big gooey grey mass"
icon_state = "big_molten"
/obj/effect/decal/cleanable/cobweb2
name = "cobweb"
desc = "Somebody should remove that."
density = FALSE
anchored = TRUE
layer = OBJ_LAYER
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb2"
/obj/effect/decal/cleanable/vomit
name = "vomit"
desc = "Gosh, how unpleasant."
gender = PLURAL
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
noclear = TRUE
/obj/effect/decal/cleanable/vomit/Initialize()
. = ..()
reagents.add_reagent("vomit", 5)
/obj/effect/decal/cleanable/vomit/green
name = "green vomit"
desc = "It's all gummy. Ew."
icon_state = "gvomit_1"
random_icon_states = list("gvomit_1", "gvomit_2", "gvomit_3", "gvomit_4")
/obj/effect/decal/cleanable/vomit/green/Initialize()
. = ..()
reagents.remove_reagent("vomit", 5)
reagents.add_reagent("green_vomit", 5)
/obj/effect/decal/cleanable/tomato_smudge
name = "tomato smudge"
desc = "It's red."
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
/obj/effect/decal/cleanable/plant_smudge
name = "plant smudge"
density = FALSE
anchored = TRUE
layer = TURF_LAYER
gender = NEUTER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_plant")
/obj/effect/decal/cleanable/egg_smudge
name = "smashed egg"
desc = "Seems like this one won't hatch."
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
/obj/effect/decal/cleanable/pie_smudge //honk
name = "smashed pie"
desc = "It's pie cream from a cream pie."
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie")
/obj/effect/decal/cleanable/fungus
name = "space fungus"
desc = "A fungal growth. Looks pretty nasty."
density = FALSE
anchored = TRUE
layer = TURF_LAYER
icon = 'icons/effects/effects.dmi'
icon_state = "flour"
color = "#D5820B"
/obj/effect/decal/cleanable/fungus/Initialize()
. = ..()
reagents.add_reagent("fungus", 10)
/obj/effect/decal/cleanable/confetti //PARTY TIME!
name = "confetti"
desc = "Party time!"
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "confetti1"
random_icon_states = list("confetti1", "confetti2", "confetti3")
anchored = TRUE
@@ -3,7 +3,7 @@
desc = "It's a useless heap of junk... <i>or is it?</i>"
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
basecolor="#030303"
basecolor = "#030303"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
bloodiness = MAX_SHOE_BLOODINESS
@@ -20,7 +20,7 @@
return FALSE
/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions)
spawn (0)
spawn(0)
var/direction = pick(directions)
for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
@@ -39,15 +39,15 @@
random_icon_states = list("gibarm", "gibleg")
/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
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/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
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/blood/oil
name = "motor oil"
desc = "It's black and greasy. Looks like Beepsky made another mess."
basecolor="#030303"
basecolor = "#030303"
bloodiness = MAX_SHOE_BLOODINESS
/obj/effect/decal/cleanable/blood/oil/can_bloodcrawl_in()
@@ -2,7 +2,7 @@
#define TRACKS_CRUSTIFY_TIME 50
// color-dir-dry
var/global/list/image/fluidtrack_cache=list()
var/global/list/image/fluidtrack_cache = list()
// Footprints, tire trails...
/obj/effect/decal/cleanable/blood/tracks
@@ -23,7 +23,7 @@ var/global/list/image/fluidtrack_cache=list()
desc = "You REALLY shouldn't follow these.."
gender = PLURAL
random_icon_states = null
basecolor="#A10808"
basecolor = "#A10808"
var/entered_dirs = 0
var/exited_dirs = 0
blood_state = BLOOD_STATE_HUMAN //the icon state to load images from
@@ -35,9 +35,9 @@ var/global/list/image/fluidtrack_cache=list()
var/obj/item/clothing/shoes/S = H.shoes
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/hasfeet = 1
var/hasfeet = TRUE
if(!l_foot && !r_foot)
hasfeet = 0
hasfeet = FALSE
if(S && S.bloody_shoes[blood_state] && S.blood_color == basecolor)
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
entered_dirs |= H.dir
@@ -58,9 +58,9 @@ var/global/list/image/fluidtrack_cache=list()
var/obj/item/clothing/shoes/S = H.shoes
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
var/hasfeet = 1
var/hasfeet = TRUE
if(!l_foot && !r_foot)
hasfeet = 0
hasfeet = FALSE
if(S && S.bloody_shoes[blood_state] && S.blood_color == basecolor)
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
exited_dirs |= H.dir
+13 -4
View File
@@ -1,8 +1,8 @@
/obj/effect/decal/cleanable
anchored = 1
anchored = TRUE
var/list/random_icon_states = list()
var/noscoop = 0 //if it has this, don't let it be scooped up
var/noclear = 0 //if it has this, don't delete it when its' scooped up
var/noscoop = FALSE //if it has this, don't let it be scooped up
var/noclear = FALSE //if it has this, don't delete it when its' scooped up
/obj/effect/decal/cleanable/proc/can_bloodcrawl_in()
return FALSE
@@ -11,8 +11,16 @@
if(random_icon_states && length(src.random_icon_states) > 0)
src.icon_state = pick(src.random_icon_states)
create_reagents(100)
if(smooth)
smooth_icon(src)
smooth_icon_neighbors(src)
..()
/obj/effect/decal/cleanable/Destroy()
if(smooth)
smooth_icon_neighbors(src)
return ..()
/obj/effect/decal/cleanable/attackby(obj/item/W as obj, mob/user as mob,)
if(istype(W, /obj/item/reagent_containers/glass) || istype(W, /obj/item/reagent_containers/food/drinks))
if(src.reagents && W.reagents && !noscoop)
@@ -28,7 +36,8 @@
qdel(src)
return
if(is_hot(W)) //todo: make heating a reagent holder proc
if(istype(W, /obj/item/clothing/mask/cigarette)) return
if(istype(W, /obj/item/clothing/mask/cigarette))
return
else
src.reagents.chem_temp += 15
src.reagents.handle_reactions()
+3 -3
View File
@@ -3,8 +3,8 @@
desc = "A rune drawn in crayon."
icon = 'icons/effects/crayondecal.dmi'
icon_state = "rune1"
layer = 2.1
anchored = 1
layer = MID_TURF_LAYER
anchored = TRUE
/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune")
@@ -15,4 +15,4 @@
desc = "A [name] drawn in crayon."
icon_state = type
color = main
color = main
+22 -22
View File
@@ -1,7 +1,7 @@
// Used for spray that you spray at walls, tables, hydrovats etc
/obj/effect/decal/spraystill
density = 0
anchored = 1
density = FALSE
anchored = TRUE
layer = 50
plane = HUD_PLANE
@@ -11,38 +11,38 @@
pass_flags = PASSTABLE | PASSGRILLE
/obj/effect/decal/snow
name="snow"
density=0
anchored=1
layer=2
icon='icons/turf/snow.dmi'
name = "snow"
density = FALSE
anchored = TRUE
layer = TURF_DECAL_LAYER
icon = 'icons/turf/snow.dmi'
/obj/effect/decal/snow/clean/edge
icon_state="snow_corner"
icon_state = "snow_corner"
/obj/effect/decal/snow/sand/edge
icon_state="gravsnow_corner"
icon_state = "gravsnow_corner"
/obj/effect/decal/snow/clean/surround
icon_state="snow_surround"
icon_state = "snow_surround"
/obj/effect/decal/snow/sand/surround
icon_state="gravsnow_surround"
icon_state = "gravsnow_surround"
/obj/effect/decal/leaves
name="fall leaves"
density = 0
anchored = 1
layer = 2
icon='icons/obj/flora/plants.dmi'
name = "fall leaves"
density = FALSE
anchored = TRUE
layer = HIGH_TURF_LAYER
icon = 'icons/obj/flora/plants.dmi'
icon_state = "fallleaves"
/obj/effect/decal/straw
name="scattered straw"
density = 0
anchored = 1
layer = 2
icon='icons/obj/flora/plants.dmi'
name = "scattered straw"
density = FALSE
anchored = TRUE
layer = HIGH_TURF_LAYER
icon = 'icons/obj/flora/plants.dmi'
icon_state = "strawscattered"
/obj/effect/decal/straw/medium
@@ -52,4 +52,4 @@
icon_state = "strawscattered2"
/obj/effect/decal/straw/edge
icon_state = "strawscatterededge"
icon_state = "strawscatterededge"
+4 -4
View File
@@ -6,21 +6,21 @@
desc = "They look like human remains. They have a strange aura about them."
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
anchored = 1
anchored = TRUE
/obj/effect/decal/remains/xeno
name = "remains"
desc = "They look like the remains of something... alien. They have a strange aura about them."
icon = 'icons/effects/blood.dmi'
icon_state = "remainsxeno"
anchored = 1
anchored = TRUE
/obj/effect/decal/remains/robot
name = "remains"
desc = "They look like the remains of something mechanical. They have a strange aura about them."
icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot"
anchored = 1
anchored = TRUE
/obj/effect/decal/remains/robot/New()
..()
@@ -33,7 +33,7 @@
desc = "Noooooooooooooooooooooo"
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
anchored = 1
anchored = TRUE
/obj/effect/decal/remains/slime/New()
..()
@@ -1,6 +1,6 @@
/obj/effect/decal/warning_stripes
icon = 'icons/effects/warning_stripes.dmi'
layer = 2
layer = TURF_LAYER
/obj/effect/decal/warning_stripes/north
icon_state = "N"
@@ -50,7 +50,7 @@
/obj/effect/decal/warning_stripes/northwestsouth
icon_state = "U-E"
/obj/effect/decal/warning_stripes/New()
/obj/effect/decal/warning_stripes/Initialize()
. = ..()
loc.overlays += src
qdel(src)
@@ -107,4 +107,4 @@
icon_state = "16"
/obj/effect/decal/warning_stripes/blue/hollow
icon_state = "18"
icon_state = "18"
@@ -7,7 +7,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
/obj/effect/particle_effect
name = "particle effect"
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
unacidable = 1//So effects are not targeted by alien acid.
pass_flags = PASSTABLE | PASSGRILLE
@@ -27,7 +27,7 @@
icon_state = "explosion"
opacity = 1
anchored = 1
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
pixel_x = -32
pixel_y = -32
+1 -1
View File
@@ -32,7 +32,7 @@
anchored = 1
layer = 99
plane = HUD_PLANE
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
unacidable = 1//Just to be sure.
/obj/effect/beam
+1 -1
View File
@@ -58,7 +58,7 @@
anchored = 1
density = 1
layer = 5
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
/obj/effect/overlay/wall_rot/New()
..()
@@ -42,3 +42,8 @@
name = "reinforced window spawner"
icon_state = "rwindow_spawner"
windowtospawn = /obj/structure/window/reinforced
/obj/effect/spawner/window/reinforced/plasma
name = "reinforced plasma window spawner"
icon_state = "pwindow_spawner"
windowtospawn = /obj/structure/window/plasmareinforced
@@ -134,7 +134,7 @@
name = mimiced_atom.name
appearance = mimiced_atom.appearance
setDir(mimiced_atom.dir)
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
/obj/effect/temp_visual/decoy/fading/New(loc, atom/mimiced_atom)
..()
@@ -2,7 +2,7 @@
/obj/effect/temp_visual
anchored = 1
layer = ABOVE_MOB_LAYER
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/duration = 10
var/randomdir = TRUE
+3 -3
View File
@@ -1,12 +1,12 @@
/proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
/proc/empulse(turf/epicenter, heavy_range, light_range, log=0, cause = null)
if(!epicenter) return
if(!istype(epicenter, /turf))
epicenter = get_turf(epicenter.loc)
if(log)
message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] [ADMIN_COORDJMP(epicenter)]</a>")
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] [COORD(epicenter)]")
message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] [cause ? "(Cause: [cause])": ] [ADMIN_COORDJMP(epicenter)]</a>")
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] [cause ? "(Cause: [cause])" : ] [COORD(epicenter)]")
if(heavy_range > 1)
new/obj/effect/temp_visual/emp/pulse(epicenter)
+3 -3
View File
@@ -1,6 +1,6 @@
//TODO: Flash range does nothing currently
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1)
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1, cause = null)
src = null //so we don't abort once src is deleted
epicenter = get_turf(epicenter)
@@ -25,8 +25,8 @@
var/list/cached_exp_block = list()
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</a>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] [cause ? "(Cause: [cause])" : ] [ADMIN_COORDJMP(epicenter)] ")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] [cause ? "(Cause: [cause])" : ] [COORD(epicenter)] ")
// Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
// Stereo users will also hear the direction of the explosion!
+1 -2
View File
@@ -232,7 +232,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
if(affecting && affecting.receive_damage(0, 5)) // 5 burn damage
H.UpdateDamageIcon()
H.updatehealth()
return
else
extinguish()
@@ -554,4 +553,4 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
return TRUE
/obj/item/attack_hulk(mob/living/carbon/human/user)
return FALSE
return FALSE
@@ -90,7 +90,6 @@
to_chat(AI, "Your core files are being wiped!")
while(AI && AI.stat != DEAD)
AI.adjustOxyLoss(2)
AI.updatehealth()
sleep(10)
flush = 0
+1 -1
View File
@@ -84,7 +84,7 @@
var/dead_notes = input("Insert any relevant notes")
var/obj/item/paper/R = new(user.loc)
R.name = "Official Coroner's Report - [dead_name]"
R.info = "<b>NanoTrasen Science Station Cyberiad - Coroner's Report</b><br><br><b>Name of Deceased:</b> [dead_name]</br><br><b>Rank of Deceased:</b> [dead_rank]<br><br><b>Time of Death:</b> [dead_tod]<br><br><b>Cause of Death:</b> [dead_cause]<br><br><b>Trace Chemicals:</b> [dead_chems]<br><br><b>Additional Coroner's Notes:</b> [dead_notes]<br><br><b>Coroner's Signature:</b> <span class=\"paper_field\">"
R.info = "<b>Nanotrasen Science Station [using_map.station_short] - Coroner's Report</b><br><br><b>Name of Deceased:</b> [dead_name]</br><br><b>Rank of Deceased:</b> [dead_rank]<br><br><b>Time of Death:</b> [dead_tod]<br><br><b>Cause of Death:</b> [dead_cause]<br><br><b>Trace Chemicals:</b> [dead_chems]<br><br><b>Additional Coroner's Notes:</b> [dead_notes]<br><br><b>Coroner's Signature:</b> <span class=\"paper_field\">"
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
sleep(10)
user.put_in_hands(R)
+250
View File
@@ -632,3 +632,253 @@ REAGENT SCANNER
if(T.cores > 1)
user.show_message("Anomalous slime core amount detected", 1)
user.show_message("Growth progress: [T.amount_grown]/10", 1)
/obj/item/bodyanalyzer
name = "handheld body analyzer"
icon = 'icons/obj/device.dmi'
icon_state = "bodyanalyzer_0"
item_state = "healthanalyser"
desc = "A handheld scanner capable of deep-scanning an entire body."
slot_flags = SLOT_BELT
throwforce = 3
w_class = WEIGHT_CLASS_TINY
throw_speed = 5
throw_range = 10
origin_tech = "magnets=6;biotech=6"
var/obj/item/stock_parts/cell/power_supply
var/cell_type = /obj/item/stock_parts/cell/upgraded
var/ready = TRUE // Ready to scan
var/time_to_use = 0 // How much time remaining before next scan is available.
var/usecharge = 750
/obj/item/bodyanalyzer/advanced
cell_type = /obj/item/stock_parts/cell/upgraded/plus
/obj/item/bodyanalyzer/New()
..()
power_supply = new cell_type(src)
power_supply.give(power_supply.maxcharge)
update_icon()
/obj/item/bodyanalyzer/proc/setReady()
ready = TRUE
playsound(src, 'sound/machines/defib_saftyOn.ogg', 50, 0)
update_icon()
/obj/item/bodyanalyzer/update_icon(printing = FALSE)
overlays.Cut()
var/percent = power_supply.percent()
if(ready)
icon_state = "bodyanalyzer_1"
else
icon_state = "bodyanalyzer_2"
var/overlayid = round(percent / 10)
overlayid = "bodyanalyzer_charge[overlayid]"
overlays += icon(icon, overlayid)
if(printing)
overlays += icon(icon, "bodyanalyzer_printing")
/obj/item/bodyanalyzer/attack(mob/living/M, mob/living/carbon/human/user)
if(user.incapacitated() || !user.Adjacent(M))
return
if(!ready)
to_chat(user, "<span class='notice'>The scanner beeps angrily at you! It's currently recharging - [round((time_to_use - world.time) * 0.1)] seconds remaining.</span>")
playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
return
if(power_supply.charge >= usecharge)
mobScan(M, user)
else
to_chat(user, "<span class='notice'>The scanner beeps angrily at you! It's out of charge!</span>")
playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
/obj/item/bodyanalyzer/proc/mobScan(mob/living/M, mob/user)
if(ishuman(M))
var/report = generate_printing_text(M, user)
user.visible_message("[user] begins scanning [M] with [src].", "You begin scanning [M].")
if(do_after(user, 100, target = M))
var/obj/item/paper/printout = new
printout.info = report
printout.name = "Scan report - [M.name]"
playsound(user.loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
user.put_in_hands(printout)
time_to_use = world.time + 600
power_supply.use(usecharge)
ready = FALSE
update_icon(TRUE)
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), 600)
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/update_icon), 20)
else if(iscorgi(M) && M.stat == DEAD)
to_chat(user, "<span class='notice'>You wonder if [M.p_they()] was a good dog. <b>[src] tells you they were the best...</b></span>") // :'(
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
ready = FALSE
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), 600)
time_to_use = world.time + 600
else
to_chat(user, "<span class='notice'>Scanning error detected. Invalid specimen.</span>")
//Unashamedly ripped from adv_med.dm
/obj/item/bodyanalyzer/proc/generate_printing_text(mob/living/M, mob/user)
var/dat = ""
var/mob/living/carbon/human/target = M
dat = "<font color='blue'><b>Target Statistics:</b></font><br>"
var/t1
switch(target.stat) // obvious, see what their status is
if(CONSCIOUS)
t1 = "Conscious"
if(UNCONSCIOUS)
t1 = "Unconscious"
else
t1 = "*dead*"
dat += "[target.health > 50 ? "<font color='blue'>" : "<font color='red'>"]\tHealth %: [target.health], ([t1])</font><br>"
var/found_disease = FALSE
for(var/thing in target.viruses)
var/datum/disease/D = thing
if(D.visibility_flags) //If any visibility flags are on.
continue
found_disease = TRUE
break
if(found_disease)
dat += "<font color='red'>Disease detected in target.</font><BR>"
var/extra_font = null
extra_font = (target.getBruteLoss() < 60 ? "<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\t-Brute Damage %: [target.getBruteLoss()]</font><br>"
extra_font = (target.getOxyLoss() < 60 ? "<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\t-Respiratory Damage %: [target.getOxyLoss()]</font><br>"
extra_font = (target.getToxLoss() < 60 ? "<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\t-Toxin Content %: [target.getToxLoss()]</font><br>"
extra_font = (target.getFireLoss() < 60 ? "<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\t-Burn Severity %: [target.getFireLoss()]</font><br>"
extra_font = (target.radiation < 10 ?"<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\tRadiation Level %: [target.radiation]</font><br>"
extra_font = (target.getCloneLoss() < 1 ?"<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\tGenetic Tissue Damage %: [target.getCloneLoss()]<br>"
extra_font = (target.getBrainLoss() < 1 ?"<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\tApprox. Brain Damage %: [target.getBrainLoss()]<br>"
dat += "Paralysis Summary %: [target.paralysis] ([round(target.paralysis / 4)] seconds left!)<br>"
dat += "Body Temperature: [target.bodytemperature-T0C]&deg;C ([target.bodytemperature*1.8-459.67]&deg;F)<br>"
dat += "<hr>"
if(target.has_brain_worms())
dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.<br>"
var/blood_percent = round((target.blood_volume / BLOOD_VOLUME_NORMAL))
blood_percent *= 100
extra_font = (target.blood_volume > 448 ? "<font color='blue'>" : "<font color='red'>")
dat += "[extra_font]\tBlood Level %: [blood_percent] ([target.blood_volume] units)</font><br>"
if(target.reagents)
dat += "Epinephrine units: [target.reagents.get_reagent_amount("Epinephrine")] units<BR>"
dat += "Ether: [target.reagents.get_reagent_amount("ether")] units<BR>"
extra_font = (target.reagents.get_reagent_amount("silver_sulfadiazine") < 30 ? "<font color='black'>" : "<font color='red'>")
dat += "[extra_font]\tSilver Sulfadiazine: [target.reagents.get_reagent_amount("silver_sulfadiazine")]</font><br>"
extra_font = (target.reagents.get_reagent_amount("styptic_powder") < 30 ? "<font color='black'>" : "<font color='red'>")
dat += "[extra_font]\tStyptic Powder: [target.reagents.get_reagent_amount("styptic_powder")] units<BR>"
extra_font = (target.reagents.get_reagent_amount("salbutamol") < 30 ? "<font color='black'>" : "<font color='red'>")
dat += "[extra_font]\tSalbutamol: [target.reagents.get_reagent_amount("salbutamol")] units<BR>"
dat += "<hr><table border='1'>"
dat += "<tr>"
dat += "<th>Organ</th>"
dat += "<th>Burn Damage</th>"
dat += "<th>Brute Damage</th>"
dat += "<th>Other Wounds</th>"
dat += "</tr>"
for(var/obj/item/organ/external/e in target.bodyparts)
dat += "<tr>"
var/AN = ""
var/open = ""
var/infected = ""
var/robot = ""
var/imp = ""
var/bled = ""
var/splint = ""
var/internal_bleeding = ""
var/lung_ruptured = ""
if(e.internal_bleeding)
internal_bleeding = "<br>Internal bleeding"
if(istype(e, /obj/item/organ/external/chest) && target.is_lung_ruptured())
lung_ruptured = "Lung ruptured:"
if(e.status & ORGAN_SPLINTED)
splint = "Splinted:"
if(e.status & ORGAN_BROKEN)
AN = "[e.broken_description]:"
if(e.is_robotic())
robot = "Robotic:"
if(e.open)
open = "Open:"
switch(e.germ_level)
if(INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200)
infected = "Mild Infection:"
if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
infected = "Mild Infection+:"
if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
infected = "Mild Infection++:"
if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
infected = "Acute Infection:"
if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
infected = "Acute Infection+:"
if(INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 400)
infected = "Acute Infection++:"
if(INFECTION_LEVEL_THREE to INFINITY)
infected = "Septic:"
var/unknown_body = 0
for(var/I in e.embedded_objects)
unknown_body++
if(unknown_body || e.hidden)
imp += "Unknown body present:"
if(!AN && !open && !infected & !imp)
AN = "None:"
dat += "<td>[e.name]</td><td>[e.burn_dam]</td><td>[e.brute_dam]</td><td>[robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured]</td>"
dat += "</tr>"
for(var/obj/item/organ/internal/i in target.internal_organs)
var/mech = i.desc
var/infection = "None"
switch(i.germ_level)
if(1 to INFECTION_LEVEL_ONE + 200)
infection = "Mild Infection:"
if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
infection = "Mild Infection+:"
if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
infection = "Mild Infection++:"
if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
infection = "Acute Infection:"
if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
infection = "Acute Infection+:"
if(INFECTION_LEVEL_TWO + 300 to INFINITY)
infection = "Acute Infection++:"
dat += "<tr>"
dat += "<td>[i.name]</td><td>N/A</td><td>[i.damage]</td><td>[infection]:[mech]</td><td></td>"
dat += "</tr>"
dat += "</table>"
if(target.disabilities & BLIND)
dat += "<font color='red'>Cataracts detected.</font><BR>"
if(target.disabilities & COLOURBLIND)
dat += "<font color='red'>Photoreceptor abnormalities detected.</font><BR>"
if(target.disabilities & NEARSIGHTED)
dat += "<font color='red'>Retinal misalignment detected.</font><BR>"
return dat
@@ -302,14 +302,12 @@
if(cyborg.health < cyborg.maxHealth)
if(cyborg.health < 0)
repair_amount = -2.5
repair_amount = 2.5
powercost = 30
else
repair_amount = -1
repair_amount = 1
powercost = 10
cyborg.adjustBruteLoss(repair_amount)
cyborg.adjustFireLoss(repair_amount)
cyborg.updatehealth()
cyborg.heal_overall_damage(repair_amount, repair_amount)
cyborg.cell.use(powercost)
else
cyborg.cell.use(5)
+1 -3
View File
@@ -94,9 +94,7 @@
hp -= Proj.damage
if(hp <= 0)
for(var/mob/O in oviewers())
if((O.client && !( O.blinded )))
to_chat(O, "<span class='warning'>[src] breaks into tiny pieces and collapses!</span>")
visible_message("<span class='warning'>[src] breaks into tiny pieces and collapses!</span>")
qdel(src)
// Create a temporary object to represent the damage
@@ -73,7 +73,6 @@
else
M.heal_organ_damage(heal_brute, heal_burn)
M.updatehealth()
user.visible_message("<span class='green'>[user] applies [src] on [M].</span>", \
"<span class='green'>You apply [src] on [M].</span>")
use(1)
+1 -4
View File
@@ -15,9 +15,7 @@
if(istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
var/mob/living/silicon/robot/R = M
if(R.getBruteLoss() || R.getFireLoss() )
R.adjustBruteLoss(-15)
R.adjustFireLoss(-15)
R.updatehealth()
R.heal_overall_damage(15, 15)
use(1)
user.visible_message("<span class='notice'>\The [user] applied some [src] at [R]'s damaged areas.</span>",\
"<span class='notice'>You apply some [src] at [R]'s damaged areas.</span>")
@@ -31,7 +29,6 @@
if(S && S.is_robotic())
if(S.get_damage())
S.heal_damage(15, 15, robo_repair = 1)
H.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applies some nanite paste at[user != M ? " \the [M]'s" : " \the"][S.name] with \the [src].</span>",\
"<span class='notice'>You apply some nanite paste at [user == M ? "your" : "[M]'s"] [S.name].</span>")
@@ -94,7 +94,7 @@ var/global/list/datum/stack_recipe/tranquillite_recipes = list ( \
)
var/global/list/datum/stack_recipe/abductor_recipes = list ( \
new/datum/stack_recipe("alien bed", /obj/structure/stool/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 15, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 20, one_per_turf = 1, on_floor = 1), \
@@ -14,32 +14,32 @@
* Metal
*/
var/global/list/datum/stack_recipe/metal_recipes = list(
new /datum/stack_recipe("stool", /obj/structure/stool, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("chair", /obj/structure/stool/bed/chair, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (middle)", /obj/structure/stool/bed/chair/sofa, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (left)", /obj/structure/stool/bed/chair/sofa/left, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (right)", /obj/structure/stool/bed/chair/sofa/right, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (corner)", /obj/structure/stool/bed/chair/sofa/corner, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("barber chair", /obj/structure/stool/bed/chair/barber, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("wheelchair", /obj/structure/stool/bed/chair/wheelchair, 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("bed", /obj/structure/stool/bed, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("psychiatrist bed", /obj/structure/stool/psychbed, 5, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("chair", /obj/structure/chair, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("barber chair", /obj/structure/chair/barber, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("wheelchair", /obj/structure/chair/wheelchair, 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("psychiatrist bed", /obj/structure/bed/psych, 5, one_per_turf = 1, on_floor = 1),
null,
new /datum/stack_recipe_list("office chairs",list(
new /datum/stack_recipe("dark office chair", /obj/structure/stool/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("light office chair", /obj/structure/stool/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("dark office chair", /obj/structure/chair/office/dark, 5, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("light office chair", /obj/structure/chair/office/light, 5, one_per_turf = 1, on_floor = 1),
)),
new /datum/stack_recipe_list("comfy chairs", list(
new /datum/stack_recipe("beige comfy chair", /obj/structure/stool/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("black comfy chair", /obj/structure/stool/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("brown comfy chair", /obj/structure/stool/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("lime comfy chair", /obj/structure/stool/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("teal comfy chair", /obj/structure/stool/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("red comfy chair", /obj/structure/stool/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("blue comfy chair", /obj/structure/stool/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("purple comfy chair", /obj/structure/stool/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("green comfy chair", /obj/structure/stool/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("beige comfy chair", /obj/structure/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("black comfy chair", /obj/structure/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("brown comfy chair", /obj/structure/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("lime comfy chair", /obj/structure/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("teal comfy chair", /obj/structure/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("red comfy chair", /obj/structure/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("blue comfy chair", /obj/structure/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("purple comfy chair", /obj/structure/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("green comfy chair", /obj/structure/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1),
)),
null,
@@ -162,12 +162,12 @@ var/global/list/datum/stack_recipe/wood_recipes = list(
new /datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1),
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20),
new /datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
new /datum/stack_recipe("wooden chair", /obj/structure/stool/bed/chair/wood/normal, 3, time = 10, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("wooden chair", /obj/structure/chair/wood/normal, 3, time = 10, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("bookcase", /obj/structure/bookcase, 5, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("dresser", /obj/structure/dresser, 30, time = 50, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("dog bed", /obj/structure/stool/bed/dogbed, 10, time = 10, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40),
new /datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1),
-2
View File
@@ -332,7 +332,6 @@
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
H.adjustStaminaLoss(50)
H.Weaken(5)
H.updatehealth() //forces health update before next life tick
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
H.emote("gasp")
if(!H.undergoing_cardiac_arrest() && (prob(10) || defib.combat)) // Your heart explodes.
@@ -479,7 +478,6 @@
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
H.adjustStaminaLoss(50)
H.Weaken(5)
H.updatehealth() //forces health update before next life tick
if(!H.undergoing_cardiac_arrest() && prob(10)) // Your heart explodes.
H.set_heartattack(TRUE)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
+36 -1
View File
@@ -60,7 +60,7 @@
if(nadeassembly)
nadeassembly.attack_self(user)
return
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
var/newtime = input(usr, "Please set the timer.", "Timer", det_time) as num
if(user.is_in_active_hand(src))
newtime = Clamp(newtime, 10, 60000)
det_time = newtime
@@ -231,3 +231,38 @@
CB.prime()
..()
/obj/item/grenade/plastic/x4/thermite
name = "T4"
desc = "A wall breaching charge, containing fuel, metal oxide and metal powder mixed in just the right way. One hell of a combination. Effective against walls, ineffective against airlocks..."
det_time = 2
icon_state = "t4breach0"
item_state = "t4breach"
/obj/item/grenade/plastic/x4/thermite/prime()
var/turf/location
if(target)
if(!QDELETED(target))
location = get_turf(target)
target.overlays -= image_overlay
else
location = get_turf(src)
if(location)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(8,0, location, aim_dir)
if(target && target.density)
var/turf/T = get_step(location, aim_dir)
for(var/turf/simulated/wall/W in range(1, location))
W.thermitemelt(speed = 30)
addtimer(CALLBACK(null, .proc/explosion, T, 0, 0, 2), 3)
addtimer(CALLBACK(smoke, /datum/effect_system/smoke_spread/.proc/start), 3)
else
addtimer(CALLBACK(null, .proc/explosion, T, 0, 0, 2), 3)
addtimer(CALLBACK(smoke, /datum/effect_system/smoke_spread/.proc/start), 3)
if(isliving(target))
var/mob/living/M = target
M.adjust_fire_stacks(2)
M.IgniteMob()
qdel(src)
@@ -98,8 +98,8 @@
if(usr.buckled && isobj(usr.buckled) && !usr.buckled.anchored )
spawn(0)
var/obj/structure/stool/bed/chair/C = null
if(istype(usr.buckled, /obj/structure/stool/bed/chair))
var/obj/structure/chair/C = null
if(istype(usr.buckled, /obj/structure/chair))
C = usr.buckled
var/obj/B = usr.buckled
var/movementdirection = turn(direction,180)
+2 -1
View File
@@ -56,7 +56,6 @@
var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_hand")
if(affecting.receive_damage( 0, 5 )) //INFERNO
H.UpdateDamageIcon()
H.updatehealth()
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src], [user.p_they()] however burn[user.p_s()] [user.p_their()] finger in the process.</span>")
set_light(2)
@@ -184,6 +183,7 @@
attack_verb = list("burnt","singed")
processing_objects.Add(src)
update_icon()
return TRUE
/obj/item/match/proc/matchburnout()
if(lit)
@@ -197,6 +197,7 @@
desc = "A match. This one has seen better days."
attack_verb = list("flicked")
processing_objects.Remove(src)
return TRUE
/obj/item/match/dropped(mob/user)
matchburnout()
+6 -6
View File
@@ -1636,7 +1636,7 @@
<li>The Chief Engineer is bound to the same rules regarding the axe as Atmospheric Technicians;</li>
<li>The Chief Engineer is permitted to carry a telescopic baton and a flash; </li>
<li>The Chief Engineer is responsible for maintaining the integrity of the Gravitational Singularity Engine and/or the Supermatter Engine and/or the Tesla Engine. Neglecting this duty is grounds for termination should the Engine malfunction;</li>
<li>The Chief Engineer is responsible for maintaining the integrity of the Cyberiad's Atmospherics System. Failure to maintain this integrity is grounds for termination;</li>
<li>The Chief Engineer is responsible for maintaining the integrity of the station's Atmospherics System. Failure to maintain this integrity is grounds for termination;</li>
<li>The Chief Engineer may declare an area "Condemned", if it is damaged to the point where repairs cannot reasonably be completed within an acceptable frame of time;</li>
<li>The Chief Engineer is permitted to grant Building Permits to crewmembers, but must keep the Station Blueprints in a safe location at all times.</li>
</ol>
@@ -1652,7 +1652,7 @@
<li>Engineers must constantly monitor the Supermatter Engine, if it is the chosen method of power generation, if it is currently active (ie, under Emitter Fire). This is not negotiable;</li>
<li>Engineers must respond promptly to breaches, regardless of size. Failure to report within fifteen (15) minutes will be considered a breach of Standard Operating Procedure, unless there are no spare Engineers to report or an Atmospheric Technician has arrived on scene first. All Hazard Zones must be cordoned off with Engineering Tape, for the sake of everyone else;</li>
<li>Engineers are permitted to hack doors to gain unauthorized access to locations if said locations happen to require urgent repairs;</li>
<li>Engineers are to maintain the integrity of the Cyberiad's Power Network. In addition, hotwiring the Gravitational Singularity Engine, Supermatter Engine or Tesla Engine is strictly forbidden;</li>
<li>Engineers are to maintain the integrity of the station's Power Network. In addition, hotwiring the Gravitational Singularity Engine, Supermatter Engine or Tesla Engine is strictly forbidden;</li>
<li>Engineers must ensure there is at least one (1) engineering hardsuit available on the station at all times, unless there is an emergency that requires the use of all suits.</li>
</ol>
<br><br>
@@ -2063,7 +2063,7 @@
<li>The Security Pod Pilot is not permitted to use the Laser Module during arrests, and must switch to the Disabler Module;</li>
<li>The Security Pod Pilot must carry around a spare set of tools and energy cell, for their own sake;</li>
<li>The Security Pod Pilot may immediately, and without warning, conduct arrests on individuals attempting to perform E.V.A actions near the AI Satellite. Exception is made if the AI Unit is malfunctioning;</li>
<li>The Security Pod Pilot is not permitted to explore the area surrounding the station, and must therefore be confined to the immediate orbital area of the NSS Cyberiad, the NXS Klapaucius (the Telecomms Satellite) and the Mining/Research Asteroid. Exception is made if the Head of Security permits otherwise.</li>
<li>The Security Pod Pilot is not permitted to explore the area surrounding the station, and must therefore be confined to the immediate orbital area of the station, the NXS Klapaucius (the Telecomms Satellite) and the Mining/Research Asteroid. Exception is made if the Head of Security permits otherwise.</li>
</ol><BR>
<h style='color: darkblue'>Code Blue</h>
@@ -2506,11 +2506,11 @@
<li>The Captain is not permitted to perform regular Security Duty. However, they may still assist Security if they are understaffed, or if they see a crime being committed. However, the Captain is not permitted to take items from the Armory under normal circumstances, unless authorized by the Head of Security. In addition, the Captain may not requisition weaponry for themselves from Cargo and/or Science, unless there's an immediate threat to station and/or crew;</li>
<li>If a Department lacks a Head of Staff, the Captain should make reasonable efforts to appoint an Acting Head of Staff, if there are available personnel to fill the position;</li>
<li>The Captain is to ensure that Space Law is being correctly applied. This should be done in cooperation with the Head of Security;</li>
<li>The Captain is not to leave the NSS Cyberiad unless given specific permission by Central Command, or it happens to be the end of the shift. This includes via space or via the Gateway. To do so is to be considered abandoning their posts and is grounds for termination;</li>
<li>The Captain is not to leave the station unless given specific permission by Central Command, or it happens to be the end of the shift. This includes via space or via the Gateway. To do so is to be considered abandoning their posts and is grounds for termination;</li>
<li>The Captain must keep the Nuclear Authentication Disk on their person at all times or, failing that, in the possession of the Head of Security or Blueshield;</li>
<li>The Captain is to attempt to resolve every issue that arises in Command locally before contacting Central Command;</li>
<li>The Captain is not permitted to carry their Antique Laser Gun or Space Armor unless there's an immediate emergency that requires attending to;</li>
<li>The Captain, despite being in charge of the Cyberiad, is not independent from Nanotrasen. Any attempts to disregard general company policy are to be considered an instant condition for contract termination;</li>
<li>The Captain, despite being in charge of the station, is not independent from Nanotrasen. Any attempts to disregard general company policy are to be considered an instant condition for contract termination;</li>
<li>The Captain may only promote personnel to a Acting Head of Staff position if there is no assigned Head of Staff associated with the Department. Said Acting Head of Staff must be a member of the Department they are to lead. See below for more information on Chain of Command;</li>
<li>The Captain may not fire any Head of Staff without reasonable justification (ie, incompetency, criminal activity, or otherwise any action that endangers/compromises the station and/or crew). The Captain may not fire any Central Command VIPs (ie, Blueshield, Magistrate, Nanotrasen Representative) without permission from Central Command, unless they are blatantly acting against the well-being and safety of the crew and station.</li>
</ol><BR>
@@ -2560,4 +2560,4 @@
</body>
</html>
"}
"}
+1 -3
View File
@@ -50,7 +50,6 @@
to_chat(H, "<span class='warning'>[src] cuts into your hand!</span>")
if(affecting.receive_damage(force*0.5))
H.UpdateDamageIcon()
H.updatehealth()
/obj/item/shard/attackby(obj/item/I, mob/user, params)
if(iswelder(I))
@@ -87,7 +86,6 @@
H.Weaken(3)
if(affecting.receive_damage(5, 0))
H.UpdateDamageIcon()
H.updatehealth()
..()
/obj/item/shard/plasma
@@ -126,4 +124,4 @@
to_chat(usr, "You add the newly-formed plasma glass to the stack. It now contains [NG.amount] sheets.")
qdel(src)
else
return ..()
return ..()
@@ -246,6 +246,15 @@
new /obj/item/grenade/flashbang(src)
update_icon()
/obj/item/storage/belt/security/response_team_gamma/New()
..()
new /obj/item/melee/baton/loaded(src)
new /obj/item/reagent_containers/spray/pepper(src)
new /obj/item/flash(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/grenade/flashbang(src)
update_icon()
/obj/item/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
@@ -123,3 +123,13 @@
new /obj/item/clothing/accessory/medal/conduct(src)
new /obj/item/clothing/accessory/medal/conduct(src)
new /obj/item/clothing/accessory/medal/gold/captain(src)
/obj/item/storage/lockbox/t4
name = "lockbox (T4)"
desc = "Contains three T4 breaching charges."
req_access = list(access_cent_specops)
/obj/item/storage/lockbox/t4/New()
..()
for(var/i = 0, i < 3, i++)
new /obj/item/grenade/plastic/x4/thermite(src)
@@ -166,7 +166,7 @@
if(display_contents_with_number)
for(var/datum/numbered_display/ND in display_contents)
ND.sample_object.mouse_opacity = 2
ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE
ND.sample_object.screen_loc = "[cx]:16,[cy]:16"
ND.sample_object.maptext = "<font color='white'>[(ND.number > 1)? "[ND.number]" : ""]</font>"
ND.sample_object.layer = 20
@@ -177,7 +177,7 @@
cy--
else
for(var/obj/O in contents)
O.mouse_opacity = 2 //This is here so storage items that spawn with contents correctly have the "click around item to equip"
O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip"
O.screen_loc = "[cx]:16,[cy]:16"
O.maptext = ""
O.layer = 20
@@ -309,7 +309,7 @@
src.orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
W.mouse_opacity = 2 //So you can click on the area around the item to equip it, instead of having to pixel hunt
W.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt
update_icon()
return 1
+13 -6
View File
@@ -14,6 +14,7 @@
var/status = 0
var/obj/item/stock_parts/cell/high/bcell = null
var/hitcost = 1000
var/throw_hit_chance = 35
/obj/item/melee/baton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide.</span>")
@@ -28,6 +29,11 @@
QDEL_NULL(bcell)
return ..()
/obj/item/melee/baton/throw_impact(atom/hit_atom)
..()
if(status && prob(throw_hit_chance))
baton_stun(hit_atom)
/obj/item/melee/baton/loaded/New() //this one starts with a cell pre-installed.
..()
bcell = new(src)
@@ -138,15 +144,17 @@
if(H.check_shields(0, "[user]'s [name]", src, MELEE_ATTACK)) //No message; check_shields() handles that
playsound(L, 'sound/weapons/Genhit.ogg', 50, 1)
return
user.lastattacked = L
L.lastattacker = user
L.Stun(stunforce)
L.Weaken(stunforce)
L.apply_effect(STUTTER, stunforce)
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
if(user)
user.lastattacked = L
L.lastattacker = user
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
add_attack_logs(user, L, "stunned")
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
if(isrobot(loc))
@@ -160,8 +168,6 @@
var/mob/living/carbon/human/H = L
H.forcesay(GLOB.hit_appends)
add_attack_logs(user, L, "Stunned with [src]")
/obj/item/melee/baton/emp_act(severity)
if(bcell)
deductcharge(1000 / severity)
@@ -193,6 +199,7 @@
throwforce = 5
stunforce = 5
hitcost = 2000
throw_hit_chance = 10
slot_flags = SLOT_BACK
var/obj/item/assembly/igniter/sparkler = null
@@ -315,7 +315,7 @@
desc = "A frozen shell of ice containing nanofrost that freezes the surrounding area after activation."
icon = 'icons/effects/effects.dmi'
icon_state = "frozen_smoke_capsule"
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
pass_flags = PASSTABLE
/obj/effect/nanofrost_container/proc/Smoke()
-1
View File
@@ -147,7 +147,6 @@
H.adjustBruteLoss(damage)
H.UpdateDamageIcon()
H.updatehealth()
return
/obj/structure/proc/can_touch(var/mob/user)
@@ -60,9 +60,7 @@
if(allowed(user))
locked = !locked
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
for(var/mob/O in viewers(user, 3))
if((O.client && !( O.blinded )))
to_chat(O, "<span class='notice'>The locker has been [locked ? null : "un"]locked by [user].</span>")
visible_message("<span class='notice'>The locker has been [locked ? null : "un"]locked by [user].</span>")
update_icon()
else
to_chat(user, "<span class='notice'>Access Denied</span>")
@@ -93,12 +91,11 @@
/obj/structure/closet/secure_closet/emag_act(mob/user)
if(!broken)
broken = 1
locked = 0
desc = "It appears to be broken."
broken = TRUE
locked = FALSE
icon_state = icon_off
flick(icon_broken, src)
to_chat(user, "<span class='notice'>You unlock \the [src].</span>")
to_chat(user, "<span class='notice'>You break the lock on \the [src].</span>")
/obj/structure/closet/secure_closet/attack_hand(mob/user)
add_fingerprint(user)
@@ -156,8 +156,8 @@
/obj/structure/closet/wardrobe/yellow
name = "yellow wardrobe"
icon_state = "wardrobe-y"
icon_closed = "wardrobe-y"
icon_state = "yellow"
icon_closed = "yellow"
/obj/structure/closet/wardrobe/yellow/New()
..()
@@ -270,9 +270,7 @@
return
if(src.allowed(user))
src.locked = !src.locked
for(var/mob/O in viewers(user, 3))
if((O.client && !( O.blinded )))
to_chat(O, "<span class='notice'>The crate has been [locked ? null : "un"]locked by [user].</span>")
visible_message("<span class='notice'>The crate has been [locked ? null : "un"]locked by [user].</span>")
update_icon()
else
to_chat(user, "<span class='notice'>Access Denied</span>")
+10 -13
View File
@@ -1,14 +1,15 @@
/obj/structure/stool/bed/chair/e_chair
/obj/structure/chair/e_chair
name = "electric chair"
desc = "Looks absolutely SHOCKING!"
icon_state = "echair0"
item_chair = null
var/obj/item/assembly/shock_kit/part = null
var/last_time = 1.0
var/delay_time = 50
/obj/structure/stool/bed/chair/e_chair/New()
/obj/structure/chair/e_chair/New()
..()
overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir)
overlays += image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1, dir)
spawn(2)
if(isnull(part)) //This e-chair was not custom built
part = new(src)
@@ -19,11 +20,10 @@
part2.master = part
part.part1 = part1
part.part2 = part2
return
/obj/structure/stool/bed/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/structure/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/wrench))
var/obj/structure/stool/bed/chair/C = new /obj/structure/stool/bed/chair(loc)
var/obj/structure/chair/C = new /obj/structure/chair(loc)
playsound(loc, W.usesound, 50, 1)
C.dir = dir
part.loc = loc
@@ -31,9 +31,8 @@
part = null
qdel(src)
return
return
/obj/structure/stool/bed/chair/e_chair/verb/activate_e_chair()
/obj/structure/chair/e_chair/verb/activate_e_chair()
set name = "Activate Electric Chair"
set category = "Object"
set src in oview(1)
@@ -44,15 +43,13 @@
return
to_chat(usr, "<span class='notice'>You activate \the [src].</span>")
shock()
return
/obj/structure/stool/bed/chair/e_chair/rotate()
/obj/structure/chair/e_chair/rotate()
..()
overlays.Cut()
overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete
return
overlays += image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete
/obj/structure/stool/bed/chair/e_chair/proc/shock()
/obj/structure/chair/e_chair/proc/shock()
if(last_time + delay_time > world.time)
return
last_time = world.time
+1 -1
View File
@@ -18,7 +18,7 @@
var/grille_type
var/broken_type = /obj/structure/grille/broken
var/shockcooldown = 0
var/my_shockcooldown = 50
var/my_shockcooldown = 1 SECONDS
/obj/structure/grille/fence/
var/width = 3
@@ -29,7 +29,7 @@
/obj/structure/kitchenspike
name = "a meat spike"
name = "meat spike"
icon = 'icons/obj/kitchen.dmi'
icon_state = "spike"
desc = "A spike for collecting meat from animals."
+2 -5
View File
@@ -69,10 +69,7 @@
if(src.destroyed)
return
else
to_chat(usr, text("<span class='notice'>You kick the lab cage.</span>"))
for(var/mob/O in oviewers())
if((O.client && !( O.blinded )))
to_chat(O, text("<span class='warning'>[] kicks the lab cage.</span>", usr))
user.visible_message("<span class='warning'>[user] kicks the lab cage.</span>", "<span class='notice'>You kick the lab cage.</span>")
src.health -= 2
healthcheck()
return
@@ -82,4 +79,4 @@
new /obj/item/clothing/mask/facehugger/lamarr(src.loc)
occupied = 0
update_icon()
return
return
+2 -6
View File
@@ -207,9 +207,7 @@
return
O.forceMove(loc)
if(user != O)
for(var/mob/B in viewers(user, 3))
if((B.client && !( B.blinded )))
to_chat(B, text("<span class='warning'>[] stuffs [] into []!</span>", user, O, src))
user.visible_message("<span class='warning'>[user] stuffs [O] into [src]!</span>")
return
/obj/structure/m_tray/Destroy()
@@ -440,9 +438,7 @@
return
O.forceMove(loc)
if(user != O)
for(var/mob/B in viewers(user, 3))
if((B.client && !( B.blinded )))
to_chat(B, text("<span class='warning'>[] stuffs [] into []!</span>", user, O, src))
user.visible_message("<span class='warning'>[user] stuffs [O] into [src]!</span>")
//Foreach goto(99)
return
@@ -1,6 +1,6 @@
//Alium nests. Essentially beds with an unbuckle delay that only aliums can buckle mobs to.
/obj/structure/stool/bed/nest
/obj/structure/bed/nest
name = "alien nest"
desc = "It's a gruesome pile of thick, sticky resin shaped like a nest."
icon = 'icons/mob/alien.dmi'
@@ -9,11 +9,11 @@
var/image/nest_overlay
comfort = 0
/obj/structure/stool/bed/nest/New()
/obj/structure/bed/nest/New()
nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=MOB_LAYER - 0.2)
return ..()
/obj/structure/stool/bed/nest/user_unbuckle_mob(mob/living/user)
/obj/structure/bed/nest/user_unbuckle_mob(mob/living/user)
if(buckled_mob && buckled_mob.buckled == src)
var/mob/living/M = buckled_mob
@@ -47,7 +47,7 @@
add_fingerprint(user)
/obj/structure/stool/bed/nest/user_buckle_mob(mob/living/M, mob/living/user)
/obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/living/user)
if( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) )
return
@@ -65,7 +65,7 @@
"<span class='italics'>You hear squelching...</span>")
/obj/structure/stool/bed/nest/post_buckle_mob(mob/living/M)
/obj/structure/bed/nest/post_buckle_mob(mob/living/M)
if(M == buckled_mob)
M.pixel_y = 0
M.pixel_x = initial(M.pixel_x) + 2
@@ -77,7 +77,7 @@
M.layer = initial(M.layer)
overlays -= nest_overlay
/obj/structure/stool/bed/nest/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/structure/bed/nest/attackby(obj/item/W as obj, mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
var/aforce = W.force
health = max(0, health - aforce)
@@ -85,8 +85,7 @@
visible_message("<span class='warning'>[user] hits [src] with [W]!</span>", 1)
healthcheck()
/obj/structure/stool/bed/nest/proc/healthcheck()
if(health <=0)
density = 0
/obj/structure/bed/nest/proc/healthcheck()
if(health <= 0)
density = FALSE
qdel(src)
return
@@ -2,59 +2,52 @@
* Contains:
* Beds
* Roller beds
* Dog Beds
*/
/*
* Beds
*/
/obj/structure/stool/bed
/obj/structure/bed
name = "bed"
desc = "This is used to lie in, sleep in or strap on."
icon = 'icons/obj/objects.dmi'
icon_state = "bed"
can_buckle = 1
buckle_lying = 1
can_buckle = TRUE
anchored = TRUE
buckle_lying = TRUE
burn_state = FLAMMABLE
burntime = 30
buildstackamount = 2
var/movable = 0 // For mobility checks
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 2
buckle_offset = -6
var/comfort = 2 //defualt comfort
var/comfort = 2 // default comfort
/obj/structure/stool/bed/MouseDrop(atom/over_object)
..(over_object, skip_fucking_stool_shit = 1)
/obj/structure/stool/psychbed
/obj/structure/bed/psych
name = "psych bed"
desc = "For prime comfort during psychiatric evaluations."
icon_state = "psychbed"
buildstackamount = 5
can_buckle = 1
buckle_lying = 1
can_buckle = TRUE
buckle_lying = TRUE
/obj/structure/stool/bed/dogbed
name = "dog bed"
icon_state = "dogbed"
desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off."
anchored = 0
buildstackamount = 10
buildstacktype = /obj/item/stack/sheet/wood
buckle_offset = 0
comfort = 0.5
/obj/structure/stool/bed/dogbed/ian
name = "Ian's bed"
desc = "Ian's bed! Looks comfy."
anchored = 1
/obj/structure/stool/bed/alien
/obj/structure/bed/alien
name = "resting contraption"
desc = "This looks similar to contraptions from Earth. Could aliens be stealing our technology?"
icon_state = "abed"
comfort = 0.3
/obj/structure/stool/bed/proc/handle_rotation()
/obj/structure/bed/proc/handle_rotation()
return
/obj/structure/stool/bed/attack_animal(mob/living/simple_animal/user)
/obj/structure/bed/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/bed/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
user.do_attack_animation(src)
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
@@ -64,15 +57,16 @@
/*
* Roller beds
*/
/obj/structure/stool/bed/roller
/obj/structure/bed/roller
name = "roller bed"
icon = 'icons/obj/rollerbed.dmi'
icon_state = "down"
burn_state = FIRE_PROOF
anchored = 0
anchored = FALSE
comfort = 1
/obj/structure/stool/bed/roller/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/structure/bed/roller/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/roller_holder))
if(buckled_mob)
user_unbuckle_mob(user)
@@ -80,15 +74,14 @@
user.visible_message("<span class='notice'>[user] collapses \the [name].</span>", "<span class='notice'>You collapse \the [name].</span>")
new/obj/item/roller(get_turf(src))
qdel(src)
return
/obj/structure/stool/bed/roller/post_buckle_mob(mob/living/M)
/obj/structure/bed/roller/post_buckle_mob(mob/living/M)
if(M == buckled_mob)
density = 1
density = TRUE
icon_state = "up"
M.pixel_y = initial(M.pixel_y)
else
density = 0
density = FALSE
icon_state = "down"
M.pixel_x = M.get_standard_pixel_x_offset(M.lying)
M.pixel_y = M.get_standard_pixel_y_offset(M.lying)
@@ -101,7 +94,7 @@
w_class = WEIGHT_CLASS_BULKY // Can't be put in backpacks.
/obj/item/roller/attack_self(mob/user)
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
R.add_fingerprint(user)
qdel(src)
@@ -113,7 +106,7 @@
forceMove(RH)
RH.held = src
/obj/structure/stool/bed/roller/MouseDrop(over_object, src_location, over_location)
/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location)
..()
if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src)))
if(!ishuman(usr))
@@ -123,7 +116,6 @@
usr.visible_message("<span class='notice'>[usr] collapses \the [name].</span>", "<span class='notice'>You collapse \the [name].</span>")
new/obj/item/roller(get_turf(src))
qdel(src)
return
/obj/item/roller_holder
name = "roller bed rack"
@@ -139,9 +131,37 @@
/obj/item/roller_holder/attack_self(mob/user as mob)
if(!held)
to_chat(user, "<span class='info'> The rack is empty.</span>")
return
to_chat(user, "<span class='notice'>You deploy the roller bed.</span>")
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
R.add_fingerprint(user)
QDEL_NULL(held)
/*
* Dog beds
*/
/obj/structure/bed/dogbed
name = "dog bed"
icon_state = "dogbed"
desc = "A comfy-looking dog bed. You can even strap your pet in, just in case the gravity turns off."
anchored = FALSE
buildstackamount = 10
buildstacktype = /obj/item/stack/sheet/wood
buckle_offset = 0
comfort = 0.5
/obj/structure/bed/dogbed/ian
name = "Ian's bed"
desc = "Ian's bed! Looks comfy."
anchored = TRUE
/obj/structure/bed/dogbed/renault
desc = "Renault's bed! Looks comfy. A foxy person needs a foxy pet."
name = "Renault's bed"
anchored = TRUE
/obj/structure/bed/dogbed/runtime
desc = "A comfy-looking cat bed. You can even strap your pet in, in case the gravity turns off."
name = "Runtime's bed"
anchored = TRUE
@@ -1,62 +1,100 @@
/obj/structure/stool/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete
/obj/structure/chair // fuck you Pete
name = "chair"
desc = "You sit in this. Either by will or force."
icon = 'icons/obj/chairs.dmi'
icon_state = "chair"
buckle_lying = 0 //you sit in a chair, not lay
layer = OBJ_LAYER
can_buckle = TRUE
buckle_lying = FALSE // you sit in a chair, not lay
anchored = TRUE
burn_state = FIRE_PROOF
buildstackamount = 1
buckle_offset = 0
var/propelled = 0 // Check for fire-extinguisher-driven chairs
comfort = 0
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 1
var/item_chair = /obj/item/chair // if null it can't be picked up
var/movable = FALSE // For mobility checks
var/propelled = FALSE // Check for fire-extinguisher-driven chairs
var/comfort = 0
/obj/structure/stool/bed/chair/New()
/obj/structure/chair/New()
..()
spawn(3) //sorry. i don't think there's a better way to do this.
handle_rotation()
return
/obj/structure/stool/bed/chair/narsie_act()
/obj/structure/chair/narsie_act()
if(prob(20))
var/obj/structure/stool/bed/chair/wood/W = new/obj/structure/stool/bed/chair/wood(get_turf(src))
W.dir = dir
var/obj/structure/chair/wood/W = new/obj/structure/chair/wood(get_turf(src))
W.setDir(dir)
qdel(src)
/obj/structure/stool/bed/chair/Move(atom/newloc, direct)
/obj/structure/chair/Move(atom/newloc, direct)
..()
handle_rotation()
/obj/structure/stool/bed/chair/attackby(obj/item/W as obj, mob/user as mob, params)
..()
/obj/structure/chair/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/assembly/shock_kit))
var/obj/item/assembly/shock_kit/SK = W
if(!SK.status)
to_chat(user, "<span class='notice'>[SK] is not ready to be attached!</span>")
return
user.drop_item()
var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc)
var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc)
playsound(src.loc, W.usesound, 50, 1)
E.dir = dir
E.part = SK
SK.loc = E
SK.master = E
qdel(src)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/stool/bed/chair/attack_tk(mob/user as mob)
/obj/structure/chair/MouseDrop(over_object, src_location, over_location)
. = ..()
if(over_object == usr && Adjacent(usr))
if(!item_chair || has_buckled_mobs())
return
if(usr.incapacitated())
to_chat(usr, "<span class='warning'>You can't do that right now!</span>")
return
usr.visible_message("<span class='notice'>[usr] grabs \the [src.name].</span>", "<span class='notice'>You grab \the [src.name].</span>")
var/C = new item_chair(loc)
usr.put_in_hands(C)
qdel(src)
/obj/structure/chair/attack_tk(mob/user as mob)
if(buckled_mob)
..()
else
rotate()
return
/obj/structure/stool/bed/chair/handle_rotation() //making this into a seperate proc so office chairs can call it on Move()
if(src.dir == NORTH)
src.layer = FLY_LAYER
else
src.layer = OBJ_LAYER
/obj/structure/chair/proc/handle_rotation(direction) //making this into a seperate proc so office chairs can call it on Move()
handle_layer()
if(buckled_mob)
buckled_mob.dir = dir
/obj/structure/stool/bed/chair/verb/rotate()
/obj/structure/chair/proc/handle_layer()
if(buckled_mob && dir == NORTH)
layer = FLY_LAYER
else
layer = OBJ_LAYER
/obj/structure/chair/post_buckle_mob(mob/living/M)
. = ..()
handle_layer()
/obj/structure/chair/post_unbuckle_mob()
. = ..()
handle_layer()
/obj/structure/chair/setDir(newdir)
..()
handle_rotation(newdir)
/obj/structure/chair/verb/rotate()
set name = "Rotate Chair"
set category = "Object"
set src in oview(1)
@@ -72,7 +110,7 @@
setDir(turn(dir, 90))
handle_rotation()
/obj/structure/stool/bed/chair/AltClick(mob/user)
/obj/structure/chair/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
@@ -81,27 +119,28 @@
rotate()
// Chair types
/obj/structure/stool/bed/chair/wood
/obj/structure/chair/wood
burn_state = FLAMMABLE
burntime = 20
buildstackamount = 3
buildstacktype = /obj/item/stack/sheet/wood
// TODO: Special ash subtype that looks like charred chair legs
item_chair = /obj/item/chair/wood
/obj/structure/stool/bed/chair/wood/narsie_act()
/obj/structure/chair/wood/narsie_act()
return
/obj/structure/stool/bed/chair/wood/normal
/obj/structure/chair/wood/normal
icon_state = "wooden_chair"
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
/obj/structure/stool/bed/chair/wood/wings
/obj/structure/chair/wood/wings
icon_state = "wooden_chair_wings"
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
item_chair = /obj/item/chair/wood/wings
/obj/structure/stool/bed/chair/comfy
/obj/structure/chair/comfy
name = "comfy chair"
desc = "It looks comfy."
icon_state = "comfychair"
@@ -109,55 +148,69 @@
burn_state = FLAMMABLE
burntime = 30
buildstackamount = 2
item_chair = null
var/image/armrest = null
/obj/structure/stool/bed/chair/comfy/New()
armrest = image("icons/obj/objects.dmi", "comfychair_armrest")
armrest.layer = MOB_LAYER + 0.1
/obj/structure/chair/comfy/New()
armrest = image("icons/obj/chairs.dmi", "comfychair_armrest")
armrest.layer = ABOVE_MOB_LAYER
return ..()
/obj/structure/stool/bed/chair/comfy/post_buckle_mob(mob/living/M)
/obj/structure/chair/comfy/Destroy()
QDEL_NULL(armrest)
return ..()
/obj/structure/chair/comfy/post_buckle_mob(mob/living/M)
..()
if(buckled_mob)
overlays += armrest
else
overlays -= armrest
/obj/structure/stool/bed/chair/comfy/brown
/obj/structure/chair/comfy/post_unbuckle_mob(mob/living/M)
..()
if(buckled_mob)
overlays -= armrest
else
overlays += armrest
/obj/structure/chair/comfy/brown
color = rgb(141,70,0)
/obj/structure/stool/bed/chair/comfy/red
/obj/structure/chair/comfy/red
color = rgb(218,2,10)
/obj/structure/stool/bed/chair/comfy/teal
/obj/structure/chair/comfy/teal
color = rgb(0,234,250)
/obj/structure/stool/bed/chair/comfy/black
/obj/structure/chair/comfy/black
color = rgb(60,60,60)
/obj/structure/stool/bed/chair/comfy/green
/obj/structure/chair/comfy/green
color = rgb(1,196,8)
/obj/structure/stool/bed/chair/comfy/purp
/obj/structure/chair/comfy/purp
color = rgb(112,2,176)
/obj/structure/stool/bed/chair/comfy/blue
/obj/structure/chair/comfy/blue
color = rgb(2,9,210)
/obj/structure/stool/bed/chair/comfy/beige
/obj/structure/chair/comfy/beige
color = rgb(255,253,195)
/obj/structure/stool/bed/chair/comfy/lime
/obj/structure/chair/comfy/lime
color = rgb(255,251,0)
/obj/structure/stool/bed/chair/office
anchored = 0
movable = 1
/obj/structure/chair/office
anchored = FALSE
movable = TRUE
item_chair = null
buildstackamount = 5
/obj/structure/stool/bed/chair/office/Bump(atom/A)
/obj/structure/chair/office/Bump(atom/A)
..()
if(!buckled_mob) return
if(!buckled_mob)
return
if(propelled)
var/mob/living/occupant = buckled_mob
@@ -175,25 +228,190 @@
victim.take_organ_damage(10)
occupant.visible_message("<span class='danger'>[occupant] crashed into \the [A]!</span>")
/obj/structure/stool/bed/chair/office/light
/obj/structure/chair/office/light
icon_state = "officechair_white"
/obj/structure/stool/bed/chair/office/dark
/obj/structure/chair/office/dark
icon_state = "officechair_dark"
/obj/structure/stool/bed/chair/barber
/obj/structure/chair/barber
icon_state = "barber_chair"
buildstackamount = 1
item_chair = null
/obj/structure/stool/bed/chair/sofa
// Sofas
/obj/structure/chair/sofa
name = "sofa"
icon_state = "sofamiddle"
anchored = 1
anchored = TRUE
item_chair = null
buildstackamount = 1
/obj/structure/stool/bed/chair/sofa/left
/obj/structure/chair/sofa/left
icon_state = "sofaend_left"
/obj/structure/stool/bed/chair/sofa/right
/obj/structure/chair/sofa/right
icon_state = "sofaend_right"
/obj/structure/stool/bed/chair/sofa/corner
/obj/structure/chair/sofa/corner
icon_state = "sofacorner"
/obj/structure/chair/stool
name = "stool"
desc = "Apply butt."
icon_state = "stool"
can_buckle = FALSE
item_chair = /obj/item/chair/stool
/obj/structure/chair/stool/bar
name = "bar stool"
desc = "It has some unsavory stains on it..."
icon_state = "bar"
item_chair = /obj/item/chair/stool/bar
/obj/structure/chair/stool/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
if(prob(70))
new buildstacktype(loc, buildstackamount)
qdel(src)
return
if(3.0)
if(prob(50))
new buildstacktype(loc, buildstackamount)
qdel(src)
return
/obj/structure/chair/stool/blob_act()
if(prob(75))
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/item/chair
name = "chair"
desc = "Bar brawl essential."
icon = 'icons/obj/chairs.dmi'
icon_state = "chair_toppled"
item_state = "chair"
lefthand_file = 'icons/mob/inhands/chairs_lefthand.dmi'
righthand_file = 'icons/mob/inhands/chairs_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
force = 8
throwforce = 10
throw_range = 3
hitsound = 'sound/items/trayhit1.ogg'
hit_reaction_chance = 50
materials = list(MAT_METAL = 2000)
var/break_chance = 5 //Likely hood of smashing the chair.
var/obj/structure/chair/origin_type = /obj/structure/chair
/obj/item/chair/stool
name = "stool"
icon = 'icons/obj/chairs.dmi'
icon_state = "stool_toppled"
item_state = "stool"
force = 10
throwforce = 10
w_class = WEIGHT_CLASS_HUGE
origin_type = /obj/structure/chair/stool
break_chance = 0 //It's too sturdy.
var/obj/structure/chair/stool/origin = null
/obj/item/chair/stool/bar
name = "bar stool"
icon_state = "bar_toppled"
item_state = "stool_bar"
origin_type = /obj/structure/chair/stool/bar
/obj/item/chair/attack_self(mob/user)
plant(user)
/obj/item/chair/proc/plant(mob/user)
for(var/obj/A in get_turf(loc))
if(istype(A, /obj/structure/chair))
to_chat(user, "<span class='danger'>There is already a chair here.</span>")
return
user.visible_message("<span class='notice'>[user] rights \the [src.name].</span>", "<span class='notice'>You right \the [name].</span>")
var/obj/structure/chair/C = new origin_type(get_turf(loc))
C.setDir(dir)
qdel(src)
/obj/item/chair/proc/smash(mob/living/user)
var/stack_type = initial(origin_type.buildstacktype)
if(!stack_type)
return
var/remaining_mats = initial(origin_type.buildstackamount)
remaining_mats-- //Part of the chair was rendered completely unusable. It magically dissapears. Maybe make some dirt?
if(remaining_mats)
for(var/M=1 to remaining_mats)
new stack_type(get_turf(loc))
qdel(src)
/obj/item/chair/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == UNARMED_ATTACK && prob(hit_reaction_chance))
owner.visible_message("<span class='danger'>[owner] fends off [attack_text] with [src]!</span>")
return 1
return 0
/obj/item/chair/afterattack(atom/target, mob/living/carbon/user, proximity)
..()
if(!proximity)
return
if(prob(break_chance))
user.visible_message("<span class='danger'>[user] smashes \the [src] to pieces against \the [target]</span>")
if(iscarbon(target))
var/mob/living/carbon/C = target
if(C.health < C.maxHealth*0.5)
C.apply_effect(6, STUN, 0)
C.apply_effect(6, WEAKEN, 0)
C.apply_effect(6, STUTTER, 0)
playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1)
smash(user)
/obj/item/chair/stool/attack_self(mob/user as mob)
..()
origin.loc = get_turf(src)
user.unEquip(src)
user.visible_message("<span class='notice'>[user] puts [src] down.</span>", "<span class='notice'>You put [src] down.</span>")
qdel(src)
/obj/item/chair/stool/attack(mob/M as mob, mob/user as mob)
if(prob(5) && istype(M,/mob/living))
user.visible_message("<span class='danger'>[user] breaks [src] over [M]'s back!.</span>")
user.unEquip(src)
var/obj/item/stack/sheet/metal/m = new/obj/item/stack/sheet/metal
m.loc = get_turf(src)
qdel(src)
var/mob/living/T = M
T.Weaken(5)
return
..()
/obj/item/chair/wood
name = "wooden chair"
icon_state = "wooden_chair_toppled"
item_state = "woodenchair"
resistance_flags = FLAMMABLE
max_integrity = 70
hitsound = 'sound/weapons/genhit1.ogg'
origin_type = /obj/structure/chair/wood
materials = null
break_chance = 50
/obj/item/chair/wood/narsie_act()
return
/obj/item/chair/wood/wings
icon_state = "wooden_chair_wings_toppled"
origin_type = /obj/structure/chair/wood/wings
/obj/structure/chair/old
name = "strange chair"
desc = "You sit in this. Either by will or force. Looks REALLY uncomfortable."
icon_state = "chairold"
item_chair = null
@@ -1,77 +0,0 @@
/obj/structure/stool
name = "stool"
desc = "Apply butt."
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
anchored = 1.0
var/buildstackamount = 1
var/buildstacktype = /obj/item/stack/sheet/metal
/obj/structure/stool/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
if(prob(70))
new buildstacktype(loc, buildstackamount)
qdel(src)
return
if(3.0)
if(prob(50))
new buildstacktype(loc, buildstackamount)
qdel(src)
return
return
/obj/structure/stool/blob_act()
if(prob(75))
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/stool/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/wrench))
playsound(loc, W.usesound, 50, 1)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/stool/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params, skip_fucking_stool_shit = 0)
if(skip_fucking_stool_shit)
return ..(over_object)
if(istype(over_object, /mob/living/carbon/human))
var/mob/living/carbon/human/H = over_object
if(H==usr && !H.restrained() && !H.stat && in_range(src, over_object))
var/obj/item/stool/S = new/obj/item/stool()
S.origin = src
loc = S
H.put_in_hands(S)
H.visible_message("<span class='warning'>[H] grabs [src] from the floor!</span>", "<span class='warning'>You grab [src] from the floor!</span>")
/obj/item/stool
name = "stool"
desc = "Uh-hoh, bar is heating up."
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
force = 10
throwforce = 10
w_class = WEIGHT_CLASS_HUGE
var/obj/structure/stool/origin = null
/obj/item/stool/attack_self(mob/user as mob)
..()
origin.loc = get_turf(src)
user.unEquip(src)
user.visible_message("<span class='notice'>[user] puts [src] down.</span>", "<span class='notice'>You put [src] down.</span>")
qdel(src)
/obj/item/stool/attack(mob/M as mob, mob/user as mob)
if(prob(5) && istype(M,/mob/living))
user.visible_message("<span class='danger'>[user] breaks [src] over [M]'s back!.</span>")
user.unEquip(src)
var/obj/item/stack/sheet/metal/m = new/obj/item/stack/sheet/metal
m.loc = get_turf(src)
qdel(src)
var/mob/living/T = M
T.Weaken(5)
return
..()
@@ -1,21 +1,20 @@
/obj/structure/stool/bed/chair/wheelchair
/obj/structure/chair/wheelchair
name = "wheelchair"
desc = "You sit in this. Either by will or force."
icon = 'icons/obj/objects.dmi'
icon_state = "wheelchair"
anchored = 0
movable = 1
item_chair = null
anchored = FALSE
movable = TRUE
var/move_delay = null
/obj/structure/stool/bed/chair/wheelchair/handle_rotation()
/obj/structure/chair/wheelchair/handle_rotation()
overlays = null
var/image/O = image(icon = icon, icon_state = "[icon_state]_overlay", layer = FLY_LAYER, dir = src.dir)
overlays += O
if(buckled_mob)
buckled_mob.dir = dir
/obj/structure/stool/bed/chair/wheelchair/relaymove(mob/user, direction)
/obj/structure/chair/wheelchair/relaymove(mob/user, direction)
if(propelled)
return 0
@@ -67,9 +66,11 @@
else
. = 1
/obj/structure/stool/bed/chair/wheelchair/Bump(atom/A)
/obj/structure/chair/wheelchair/Bump(atom/A)
..()
if(!buckled_mob) return
if(!buckled_mob)
return
if(istype(A, /obj/machinery/door))
A.Bumped(buckled_mob)
@@ -93,14 +94,14 @@
occupant.visible_message("<span class='danger'>[occupant] crashed into \the [A]!</span>")
/obj/structure/stool/bed/chair/wheelchair/bike
/obj/structure/chair/wheelchair/bike
name = "bicycle"
desc = "Two wheels of FURY!"
//placeholder until i get a bike sprite
icon = 'icons/vehicles/motorcycle.dmi'
icon_state = "motorcycle_4dir"
/obj/structure/stool/bed/chair/wheelchair/bike/relaymove(mob/user, direction)
/obj/structure/chair/wheelchair/bike/relaymove(mob/user, direction)
if(propelled)
return 0
+1 -1
View File
@@ -278,7 +278,7 @@
icon_state = "mist"
layer = MOB_LAYER + 1
anchored = 1
mouse_opacity = 0
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
/obj/machinery/shower/attack_hand(mob/M as mob)
on = !on