Merge branch 'master' of https://github.com/tgstation/-tg-station into flapping_intensifies

Conflicts:
	code/game/machinery/computer/shuttle.dm
This commit is contained in:
Incoming
2015-10-24 23:32:55 -04:00
703 changed files with 52344 additions and 21227 deletions
@@ -1,91 +1,94 @@
//Alium nests. Essentially beds with an unbuckle delay that only aliums can buckle mobs to.
/obj/structure/stool/bed/nest
name = "alien nest"
desc = "It's a gruesome pile of thick, sticky resin shaped like a nest."
icon = 'icons/obj/smooth_structures/alien/nest.dmi'
icon_state = "nest"
var/health = 100
smooth = SMOOTH_TRUE
can_be_unanchored = 0
canSmoothWith = null
var/image/nest_overlay
/obj/structure/stool/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)
if(buckled_mob && buckled_mob.buckled == src)
var/mob/living/M = buckled_mob
if(user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
unbuckle_mob()
add_fingerprint(user)
return
if(M != user)
M.visible_message(\
"[user.name] pulls [M.name] free from the sticky nest!",\
"<span class='notice'>[user.name] pulls you free from the gelatinous resin.</span>",\
"<span class='italics'>You hear squelching...</span>")
else
M.visible_message(\
"<span class='warning'>[M.name] struggles to break free from the gelatinous resin!</span>",\
"<span class='notice'>You struggle to break free from the gelatinous resin... (Stay still for two minutes.)</span>",\
"<span class='italics'>You hear squelching...</span>")
if(!do_after(M, 1200, target = src))
if(M && M.buckled)
M << "<span class='warning'>You fail to unbuckle yourself!</span>"
return
if(!M.buckled)
return
M.visible_message(\
"<span class='warning'>[M.name] breaks free from the gelatinous resin!</span>",\
"<span class='notice'>You break free from the gelatinous resin!</span>",\
"<span class='italics'>You hear squelching...</span>")
unbuckle_mob()
add_fingerprint(user)
/obj/structure/stool/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() || user.stat || M.buckled || istype(user, /mob/living/silicon/pai) )
return
if(M.getorgan(/obj/item/organ/internal/alien/plasmavessel))
return
if(!user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
return
unbuckle_mob()
if(buckle_mob(M))
M.visible_message(\
"[user.name] secretes a thick vile goo, securing [M.name] into [src]!",\
"<span class='danger'>[user.name] drenches you in a foul-smelling resin, trapping you in [src]!</span>",\
"<span class='italics'>You hear squelching...</span>")
/obj/structure/stool/bed/nest/post_buckle_mob(mob/living/M)
if(M == buckled_mob)
M.pixel_y = 0
M.pixel_x = initial(M.pixel_x) + 2
M.layer = MOB_LAYER - 0.3
overlays += nest_overlay
else
M.pixel_x = M.get_standard_pixel_x_offset(M.lying)
M.pixel_y = M.get_standard_pixel_y_offset(M.lying)
M.layer = initial(M.layer)
overlays -= nest_overlay
/obj/structure/stool/bed/nest/attackby(obj/item/weapon/W, mob/user, params)
var/aforce = W.force
health = max(0, health - aforce)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
visible_message("<span class='danger'>[user] hits [src] with [W]!</span>")
healthcheck()
/obj/structure/stool/bed/nest/proc/healthcheck()
if(health <=0)
density = 0
qdel(src)
return
//Alium nests. Essentially beds with an unbuckle delay that only aliums can buckle mobs to.
/obj/structure/bed/nest
name = "alien nest"
desc = "It's a gruesome pile of thick, sticky resin shaped like a nest."
icon = 'icons/obj/smooth_structures/alien/nest.dmi'
icon_state = "nest"
var/health = 100
smooth = SMOOTH_TRUE
can_be_unanchored = 0
canSmoothWith = null
buildstacktype = null
var/image/nest_overlay
/obj/structure/bed/nest/New()
nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=MOB_LAYER - 0.2)
return ..()
/obj/structure/bed/nest/user_unbuckle_mob(mob/living/user)
if(buckled_mob && buckled_mob.buckled == src)
var/mob/living/M = buckled_mob
if(user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
unbuckle_mob()
add_fingerprint(user)
return
if(M != user)
M.visible_message(\
"[user.name] pulls [M.name] free from the sticky nest!",\
"<span class='notice'>[user.name] pulls you free from the gelatinous resin.</span>",\
"<span class='italics'>You hear squelching...</span>")
else
M.visible_message(\
"<span class='warning'>[M.name] struggles to break free from the gelatinous resin!</span>",\
"<span class='notice'>You struggle to break free from the gelatinous resin... (Stay still for two minutes.)</span>",\
"<span class='italics'>You hear squelching...</span>")
if(!do_after(M, 1200, target = src))
if(M && M.buckled)
M << "<span class='warning'>You fail to unbuckle yourself!</span>"
return
if(!M.buckled)
return
M.visible_message(\
"<span class='warning'>[M.name] breaks free from the gelatinous resin!</span>",\
"<span class='notice'>You break free from the gelatinous resin!</span>",\
"<span class='italics'>You hear squelching...</span>")
unbuckle_mob()
add_fingerprint(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() || user.stat || M.buckled || istype(user,
/mob/living/silicon/pai) )
return
if(M.getorgan(/obj/item/organ/internal/alien/plasmavessel))
return
if(!user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
return
unbuckle_mob()
if(buckle_mob(M))
M.visible_message(\
"[user.name] secretes a thick vile goo, securing [M.name] into [src]!",\
"<span class='danger'>[user.name] drenches you in a foul-smelling resin, trapping you in [src]!</span>",\
"<span class='italics'>You hear squelching...</span>")
/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
M.layer = MOB_LAYER - 0.3
overlays += nest_overlay
else
M.pixel_x = M.get_standard_pixel_x_offset(M.lying)
M.pixel_y = M.get_standard_pixel_y_offset(M.lying)
M.layer = initial(M.layer)
overlays -= nest_overlay
/obj/structure/bed/nest/attackby(obj/item/weapon/W, mob/user, params)
var/aforce = W.force
health = max(0, health - aforce)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
visible_message("<span class='danger'>[user] hits [src] with [W]!</span>")
healthcheck()
/obj/structure/bed/nest/proc/healthcheck()
if(health <=0)
density = 0
qdel(src)
return
@@ -1,152 +1,178 @@
/* Beds... get your mind out of the gutter, they're for sleeping!
* Contains:
* Beds
* Roller beds
*/
/*
* Beds
*/
/obj/structure/stool/bed
name = "bed"
desc = "This is used to lie in, sleep in or strap on."
icon_state = "bed"
can_buckle = 1
buckle_lying = 1
burn_state = 0 //Burnable
burntime = 30
/obj/structure/stool/bed/alien
name = "resting contraption"
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
icon_state = "abed"
/obj/structure/stool/bed/Move(atom/newloc, direct) //Some bed children move
. = ..()
if(buckled_mob)
if(!buckled_mob.Move(loc, direct))
loc = buckled_mob.loc //we gotta go back
last_move = buckled_mob.last_move
inertia_dir = last_move
buckled_mob.inertia_dir = last_move
. = 0
/obj/structure/stool/bed/Process_Spacemove(movement_dir = 0)
if(buckled_mob)
return buckled_mob.Process_Spacemove(movement_dir)
return ..()
/obj/structure/stool/bed/CanPass(atom/movable/mover, turf/target, height=1.5)
if(mover == buckled_mob)
return 1
return ..()
/obj/structure/stool/bed/attack_paw(mob/user)
return src.attack_hand(user)
/obj/structure/stool/bed/attack_animal(mob/living/simple_animal/M)//No more buckling hostile mobs to chairs to render them immobile forever
if(M.environment_smash)
new /obj/item/stack/sheet/metal(src.loc)
qdel(src)
return
/*
* Roller beds
*/
/obj/structure/stool/bed/roller
name = "roller bed"
icon = 'icons/obj/rollerbed.dmi'
icon_state = "down"
anchored = 0
burn_state = -1 //Not Burnable
/obj/structure/stool/bed/roller/post_buckle_mob(mob/living/M)
if(M == buckled_mob)
density = 1
icon_state = "up"
M.pixel_y = initial(M.pixel_y)
else
density = 0
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)
/obj/item/roller
name = "roller bed"
desc = "A collapsed roller bed that can be carried around."
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded"
w_class = 4 // 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)
R.add_fingerprint(user)
qdel(src)
/obj/structure/stool/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))
return
if(buckled_mob)
return 0
usr.visible_message("[usr] collapses \the [src.name].", "<span class='notice'>You collapse \the [src.name].</span>")
new/obj/item/roller(get_turf(src))
qdel(src)
return
/obj/item/roller/robo //ROLLER ROBO DA!
name = "roller bed dock"
var/loaded = null
/obj/item/roller/robo/New()
loaded = new /obj/structure/stool/bed/roller(src)
desc = "A collapsed roller bed that can be ejected for emergency use. Must be collected or replaced after use."
..()
/obj/item/roller/robo/examine(mob/user)
..()
user << "The dock is [loaded ? "loaded" : "empty"]"
/obj/item/roller/robo/attack_self(mob/user)
if(loaded)
var/obj/structure/stool/bed/roller/R = loaded
R.loc = user.loc
user.visible_message("[user] deploys [loaded].", "<span class='notice'>You deploy [loaded].</span>")
loaded = null
else
user << "<span class='warning'>The dock is empty!</span>"
/obj/item/roller/robo/afterattack(obj/target, mob/user , proximity)
if(istype(target,/obj/structure/stool/bed/roller))
if(!proximity)
return
if(loaded)
user << "<span class='warning'>You already have a roller bed docked!</span>"
return
var/obj/structure/stool/bed/roller/R = target
if(R.buckled_mob)
R.user_unbuckle_mob(user)
loaded = target
target.loc = src
user.visible_message("[user] collects [loaded].", "<span class='notice'>You collect [loaded].</span>")
..()
/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
/obj/structure/stool/bed/dogbed/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/stack/sheet/mineral/wood(loc, 10)
qdel(src)
/* Beds... get your mind out of the gutter, they're for sleeping!
* Contains:
* Beds
* Roller beds
*/
/*
* Beds
*/
/obj/structure/bed
name = "bed"
desc = "This is used to lie in, sleep in or strap on."
icon_state = "bed"
icon = 'icons/obj/objects.dmi'
anchored = 1
can_buckle = 1
buckle_lying = 1
burn_state = 0 //Burnable
burntime = 30
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 2
var/foldabletype //to fold into an item (e.g. roller bed item)
/obj/structure/bed/alien
name = "resting contraption"
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
icon_state = "abed"
/obj/structure/bed/attack_paw(mob/user)
return src.attack_hand(user)
/obj/structure/bed/attack_animal(mob/living/simple_animal/M)//No more buckling hostile mobs to chairs to render them immobile forever
if(M.environment_smash)
new /obj/item/stack/sheet/metal(src.loc)
qdel(src)
/obj/structure/bed/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
return
if(2)
if(prob(70))
if(buildstacktype)
new buildstacktype(loc, buildstackamount)
qdel(src)
return
if(3)
if(prob(50))
if(buildstacktype)
new buildstacktype(loc, buildstackamount)
qdel(src)
return
/obj/structure/bed/blob_act()
if(prob(75))
if(buildstacktype)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/bed/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(buildstacktype)
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/structure/bed/MouseDrop(over_object, src_location, over_location)
. = ..()
if(foldabletype)
if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src)))
if(!ishuman(usr))
return
if(buckled_mob)
return 0
usr.visible_message("[usr] collapses \the [src.name].", "<span class='notice'>You collapse \the [src.name].</span>")
new foldabletype(get_turf(src))
qdel(src)
/*
* Roller beds
*/
/obj/structure/bed/roller
name = "roller bed"
icon = 'icons/obj/rollerbed.dmi'
icon_state = "down"
anchored = 0
burn_state = -1 //Not Burnable
foldabletype = /obj/item/roller
/obj/structure/bed/roller/post_buckle_mob(mob/living/M)
if(M == buckled_mob)
density = 1
icon_state = "up"
M.pixel_y = initial(M.pixel_y)
else
density = 0
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)
/obj/item/roller
name = "roller bed"
desc = "A collapsed roller bed that can be carried around."
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded"
w_class = 4 // Can't be put in backpacks.
/obj/item/roller/attack_self(mob/user)
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
R.add_fingerprint(user)
qdel(src)
/obj/item/roller/robo //ROLLER ROBO DA!
name = "roller bed dock"
var/loaded = null
/obj/item/roller/robo/New()
loaded = new /obj/structure/bed/roller(src)
desc = "A collapsed roller bed that can be ejected for emergency use. Must be collected or replaced after use."
..()
/obj/item/roller/robo/examine(mob/user)
..()
user << "The dock is [loaded ? "loaded" : "empty"]"
/obj/item/roller/robo/attack_self(mob/user)
if(loaded)
var/obj/structure/bed/roller/R = loaded
R.loc = user.loc
user.visible_message("[user] deploys [loaded].", "<span class='notice'>You deploy [loaded].</span>")
loaded = null
else
user << "<span class='warning'>The dock is empty!</span>"
/obj/item/roller/robo/afterattack(obj/target, mob/user , proximity)
if(istype(target,/obj/structure/bed/roller))
if(!proximity)
return
if(loaded)
user << "<span class='warning'>You already have a roller bed docked!</span>"
return
var/obj/structure/bed/roller/R = target
if(R.buckled_mob)
R.user_unbuckle_mob(user)
loaded = target
target.loc = src
user.visible_message("[user] collects [loaded].", "<span class='notice'>You collect [loaded].</span>")
..()
//Dog bed
/obj/structure/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
buildstacktype = /obj/item/stack/sheet/mineral/wood
buildstackamount = 10
//Stool
/obj/structure/bed/stool
name = "stool"
desc = "Apply butt."
icon_state = "stool"
can_buckle = 0
buildstackamount = 1
@@ -1,152 +1,149 @@
/obj/structure/stool/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete
name = "chair"
desc = "You sit in this. Either by will or force.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "chair"
buckle_lying = 0 //you sit in a chair, not lay
burn_state = -1 //Not Burnable
/obj/structure/stool/bed/chair/New()
..()
spawn(3) //sorry. i don't think there's a better way to do this.
handle_layer()
return
/obj/structure/stool/bed/chair/Move(atom/newloc, direct)
..()
handle_rotation()
/obj/structure/stool/bed/chair/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/assembly/shock_kit))
if(!user.drop_item())
return
var/obj/item/assembly/shock_kit/SK = W
var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
E.dir = dir
E.part = SK
SK.loc = E
SK.master = E
qdel(src)
/obj/structure/stool/bed/chair/attack_tk(mob/user)
if(buckled_mob)
..()
else
rotate()
return
/obj/structure/stool/bed/chair/proc/handle_rotation(direction)
if(buckled_mob)
buckled_mob.buckled = null //Temporary, so Move() succeeds.
if(!direction || !buckled_mob.Move(get_step(src, direction), direction))
buckled_mob.buckled = src
dir = buckled_mob.dir
return 0
buckled_mob.buckled = src //Restoring
handle_layer()
return 1
/obj/structure/stool/bed/chair/proc/handle_layer()
if(dir == NORTH)
src.layer = FLY_LAYER
else
src.layer = OBJ_LAYER
/obj/structure/stool/bed/chair/proc/spin()
src.dir = turn(src.dir, 90)
handle_layer()
if(buckled_mob)
buckled_mob.dir = dir
/obj/structure/stool/bed/chair/verb/rotate()
set name = "Rotate Chair"
set category = "Object"
set src in oview(1)
if(config.ghost_interaction)
spin()
else
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
spin()
/obj/structure/stool/bed/chair/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
// Chair types
/obj/structure/stool/bed/chair/wood
burn_state = 0 //Burnable
burntime = 20
/obj/structure/stool/bed/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
icon_state = "wooden_chair_wings"
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
/obj/structure/stool/bed/chair/wood/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/stack/sheet/mineral/wood(src.loc)
qdel(src)
else
..()
/obj/structure/stool/bed/chair/comfy
name = "comfy chair"
desc = "It looks comfy.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "comfychair"
color = rgb(255,255,255)
burn_state = 0 //Burnable
burntime = 30
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
return ..()
/obj/structure/stool/bed/chair/comfy/post_buckle_mob(mob/living/M)
if(buckled_mob)
overlays += armrest
else
overlays -= armrest
/obj/structure/stool/bed/chair/comfy/brown
color = rgb(255,113,0)
/obj/structure/stool/bed/chair/comfy/beige
color = rgb(255,253,195)
/obj/structure/stool/bed/chair/comfy/teal
color = rgb(0,255,255)
/obj/structure/stool/bed/chair/comfy/black
color = rgb(167,164,153)
/obj/structure/stool/bed/chair/comfy/lime
color = rgb(255,251,0)
/obj/structure/stool/bed/chair/office
anchored = 0
/obj/structure/stool/bed/chair/office/light
icon_state = "officechair_white"
/obj/structure/stool/bed/chair/office/dark
icon_state = "officechair_dark"
/obj/structure/bed/chair
name = "chair"
desc = "You sit in this. Either by will or force.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "chair"
buckle_lying = 0 //you sit in a chair, not lay
burn_state = -1 //Not Burnable
buildstackamount = 1
/obj/structure/bed/chair/New()
..()
spawn(3) //sorry. i don't think there's a better way to do this.
handle_layer()
/obj/structure/bed/chair/Move(atom/newloc, direct)
..()
handle_rotation()
/obj/structure/bed/chair/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/assembly/shock_kit))
if(!user.drop_item())
return
var/obj/item/assembly/shock_kit/SK = W
var/obj/structure/bed/chair/e_chair/E = new /obj/structure/bed/chair/e_chair(src.loc)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
E.dir = dir
E.part = SK
SK.loc = E
SK.master = E
qdel(src)
/obj/structure/bed/chair/attack_tk(mob/user)
if(buckled_mob)
..()
else
rotate()
return
/obj/structure/bed/chair/proc/handle_rotation(direction)
if(buckled_mob)
buckled_mob.buckled = null //Temporary, so Move() succeeds.
if(!direction || !buckled_mob.Move(get_step(src, direction), direction))
buckled_mob.buckled = src
dir = buckled_mob.dir
return 0
buckled_mob.buckled = src //Restoring
handle_layer()
return 1
/obj/structure/bed/chair/proc/handle_layer()
if(dir == NORTH)
src.layer = FLY_LAYER
else
src.layer = OBJ_LAYER
/obj/structure/bed/chair/proc/spin()
src.dir = turn(src.dir, 90)
handle_layer()
if(buckled_mob)
buckled_mob.dir = dir
/obj/structure/bed/chair/verb/rotate()
set name = "Rotate Chair"
set category = "Object"
set src in oview(1)
if(config.ghost_interaction)
spin()
else
if(!usr || !isturf(usr.loc))
return
if(usr.stat || usr.restrained())
return
spin()
/obj/structure/bed/chair/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
// Chair types
/obj/structure/bed/chair/wood
burn_state = 0 //Burnable
burntime = 20
buildstacktype = /obj/item/stack/sheet/mineral/wood
buildstackamount = 3
/obj/structure/bed/chair/wood/normal
icon_state = "wooden_chair"
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
/obj/structure/bed/chair/wood/wings
icon_state = "wooden_chair_wings"
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
/obj/structure/bed/chair/comfy
name = "comfy chair"
desc = "It looks comfy.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "comfychair"
color = rgb(255,255,255)
burn_state = 0 //Burnable
burntime = 30
buildstackamount = 2
var/image/armrest = null
/obj/structure/bed/chair/comfy/New()
armrest = image("icons/obj/objects.dmi", "comfychair_armrest")
armrest.layer = MOB_LAYER + 0.1
return ..()
/obj/structure/bed/chair/comfy/post_buckle_mob(mob/living/M)
if(buckled_mob)
overlays += armrest
else
overlays -= armrest
/obj/structure/bed/chair/comfy/brown
color = rgb(255,113,0)
/obj/structure/bed/chair/comfy/beige
color = rgb(255,253,195)
/obj/structure/bed/chair/comfy/teal
color = rgb(0,255,255)
/obj/structure/bed/chair/comfy/black
color = rgb(167,164,153)
/obj/structure/bed/chair/comfy/lime
color = rgb(255,251,0)
/obj/structure/bed/chair/office
anchored = 0
buildstackamount = 5
/obj/structure/bed/chair/office/light
icon_state = "officechair_white"
/obj/structure/bed/chair/office/dark
icon_state = "officechair_dark"
@@ -26,9 +26,6 @@
/obj/structure/closet/New()
..()
if(type == /obj/structure/closet && ticker && ticker.current_state == GAME_STATE_PREGAME && prob(20)) //only roundstart generic closets
new /obj/structure/closet/cardboard(src.loc)
qdel(src)
update_icon()
/obj/structure/closet/initialize()
@@ -125,7 +122,7 @@
if(istype(AM, /mob/living))
var/mob/living/L = AM
if(L.buckled || L.mob_size > max_mob_size) //buckled mobs and mobs too big for the container don't get inside closets.
if(L.buckled || L.buckled_mob || L.mob_size > max_mob_size) //buckled mobs, mobs with another mob attached, and mobs too big for the container don't get inside closets.
return 0
if(L.mob_size > MOB_SIZE_TINY) //decently sized mobs take more space than objects.
var/mobs_stored = 0
@@ -136,6 +133,7 @@
if(L.client)
L.client.perspective = EYE_PERSPECTIVE
L.client.eye = src
L.stop_pulling()
else if(!istype(AM, /obj/item) && !istype(AM, /obj/effect/dummy/chameleon))
return 0
else if(AM.density || AM.anchored)
@@ -143,6 +141,8 @@
else if(AM.flags & NODROP)
return 0
AM.loc = src
if(AM.pulledby)
AM.pulledby.stop_pulling()
return 1
/obj/structure/closet/proc/close()
@@ -4,6 +4,7 @@
icon_state = "cardboard"
health = 10
mob_storage_capacity = 1
burn_state = 0 //Burnable
burntime = 20
can_weld_shut = 0
cutting_tool = /obj/item/weapon/wirecutters
@@ -11,7 +12,7 @@
cutting_sound = 'sound/items/poster_ripped.ogg'
material_drop = /obj/item/stack/sheet/cardboard
var/move_delay = 0
var/egg_cooldown = 0
var/egged = 0
/obj/structure/closet/cardboard/relaymove(mob/user, direction)
if(opened || move_delay || user.stat || user.stunned || user.weakened || user.paralysis || !isturf(loc) || !has_gravity(loc))
@@ -26,7 +27,7 @@
/obj/structure/closet/cardboard/open()
if(opened || !can_open())
return 0
if(!egg_cooldown)
if(!egged)
var/mob/living/Snake = null
for(var/mob/living/L in src.contents)
Snake = L
@@ -37,10 +38,8 @@
for(var/mob/living/L in alerted)
if(!L.stat)
L.do_alert_animation(L)
egged = 1
alerted << sound('sound/machines/chime.ogg')
egg_cooldown = 1
spawn(3000)
egg_cooldown = 0
..()
/mob/living/proc/do_alert_animation(atom/A)
@@ -66,6 +66,7 @@
new /obj/item/weapon/caution(src)
new /obj/item/weapon/holosign_creator(src)
new /obj/item/device/lightreplacer(src)
new /obj/item/weapon/soap(src)
new /obj/item/weapon/storage/bag/trash(src)
new /obj/item/clothing/shoes/galoshes(src)
new /obj/item/weapon/watertank/janitor(src)
@@ -187,9 +188,6 @@
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/head/hardhat/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
return
/obj/structure/closet/wardrobe/engineering_yellow
@@ -1,5 +1,5 @@
/obj/structure/closet/l3closet
name = "level-3 biohazard suit closet"
name = "level-3 biohazard gear closet"
desc = "It's a storage unit for level-3 biohazard gear."
icon_state = "bio"
@@ -7,6 +7,7 @@
..()
new /obj/item/clothing/suit/bio_suit/general( src )
new /obj/item/clothing/head/bio_hood/general( src )
new /obj/item/weapon/storage/bag/bio( src )
/obj/structure/closet/l3closet/virology
icon_state = "bio_viro"
@@ -16,7 +17,7 @@
contents = list()
new /obj/item/clothing/suit/bio_suit/virology( src )
new /obj/item/clothing/head/bio_hood/virology( src )
new /obj/item/weapon/storage/bag/bio( src )
/obj/structure/closet/l3closet/security
icon_state = "bio_sec"
@@ -45,4 +46,5 @@
..()
contents = list()
new /obj/item/clothing/suit/bio_suit/scientist( src )
new /obj/item/clothing/head/bio_hood/scientist( src )
new /obj/item/clothing/head/bio_hood/scientist( src )
new /obj/item/weapon/storage/bag/bio( src )
@@ -89,4 +89,5 @@
new /obj/item/tapeproj/engineering(src)
new /obj/item/weapon/watertank/atmos(src)
new /obj/item/clothing/suit/fire/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
new /obj/item/clothing/glasses/meson/engine/tray(src)
@@ -95,8 +95,6 @@
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/storage/belt/security/full(src)
new /obj/item/ammo_box/magazine/wt550m9(src)
new /obj/item/weapon/gun/projectile/automatic/wt550(src)
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
@@ -214,3 +212,75 @@
new /obj/item/clothing/suit/judgerobe (src)
new /obj/item/clothing/head/powdered_wig (src)
new /obj/item/weapon/storage/briefcase(src)
/obj/structure/closet/secure_closet/armory1
name = "armory armor locker"
req_access = list(access_armory)
icon_state = "armory"
/obj/structure/closet/secure_closet/armory1/New()
..()
new /obj/item/clothing/suit/armor/laserproof(src)
new /obj/item/clothing/suit/armor/riot(src)
new /obj/item/clothing/suit/armor/riot(src)
new /obj/item/clothing/suit/armor/riot(src)
new /obj/item/clothing/head/helmet/riot(src)
new /obj/item/clothing/head/helmet/riot(src)
new /obj/item/clothing/head/helmet/riot(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot(src)
/obj/structure/closet/secure_closet/armory2
name = "armory ballistics locker"
req_access = list(access_armory)
icon_state = "armory"
/obj/structure/closet/secure_closet/armory2/New()
..()
new /obj/item/weapon/storage/box/firingpins(src)
new /obj/item/weapon/storage/box/rubbershot(src)
new /obj/item/weapon/storage/box/rubbershot(src)
new /obj/item/weapon/storage/box/rubbershot(src)
new /obj/item/weapon/gun/projectile/shotgun/riot(src)
new /obj/item/weapon/gun/projectile/shotgun/riot(src)
new /obj/item/weapon/gun/projectile/shotgun/riot(src)
/obj/structure/closet/secure_closet/armory3
name = "armory energy gun locker"
req_access = list(access_armory)
icon_state = "armory"
/obj/structure/closet/secure_closet/armory3/New()
..()
new /obj/item/weapon/storage/box/firingpins(src)
new /obj/item/weapon/gun/energy/ionrifle(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/weapon/gun/energy/laser(src)
new /obj/item/weapon/gun/energy/laser(src)
new /obj/item/weapon/gun/energy/laser(src)
/obj/structure/closet/secure_closet/tac
name = "armory tac locker"
req_access = list(access_armory)
icon_state = "tac"
/obj/structure/closet/secure_closet/tac/New()
..()
new /obj/item/weapon/gun/projectile/automatic/wt550(src)
new /obj/item/clothing/head/helmet/alt(src)
new /obj/item/clothing/mask/gas/sechailer(src)
new /obj/item/clothing/suit/armor/bulletproof(src)
/obj/structure/closet/secure_closet/lethalshots
name = "shotgun lethal rounds"
req_access = list(access_armory)
icon_state = "tac"
/obj/structure/closet/secure_closet/lethalshots/New()
..()
new /obj/item/weapon/storage/box/lethalshot(src)
new /obj/item/weapon/storage/box/lethalshot(src)
new /obj/item/weapon/storage/box/lethalshot(src)
@@ -133,6 +133,7 @@
/obj/structure/closet/radiation/New()
..()
new /obj/item/device/geiger_counter(src)
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
@@ -187,8 +187,8 @@
else
return 0
if(istype(AM, /obj/structure/stool/bed)) //This is only necessary because of rollerbeds and swivel chairs.
var/obj/structure/stool/bed/B = AM
if(istype(AM, /obj/structure/bed)) //This is only necessary because of rollerbeds and swivel chairs.
var/obj/structure/bed/B = AM
if(B.buckled_mob)
return 0
@@ -215,7 +215,7 @@
if(isliving(user))
var/mob/living/L = user
if(L.electrocute_act(17, src))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(5, 1, src)
s.start()
return
+21 -7
View File
@@ -12,6 +12,13 @@
var/alert = 0
var/open = 0
var/obj/item/weapon/electronics/airlock/electronics
var/start_showpiece_type = null //add type for items on display
/obj/structure/displaycase/New()
..()
if(start_showpiece_type)
showpiece = new start_showpiece_type (src)
update_icon()
/obj/structure/displaycase/ex_act(severity, target)
switch(severity)
@@ -123,12 +130,23 @@
user << "<span class='notice'>You [open ? "close":"open"] the [src]</span>"
open = !open
update_icon()
else if(open)
else if(open && !showpiece)
if(user.unEquip(W))
W.loc = src
showpiece = W
user << "<span class='notice'>You put [W] on display</span>"
update_icon()
else if(istype(W, /obj/item/stack/sheet/glass) && destroyed)
var/obj/item/stack/sheet/glass/G = W
if(G.get_amount() < 2)
user << "<span class='warning'>You need two glass sheets to fix the case!</span>"
return
user << "<span class='notice'>You start fixing the [src]...</span>"
if(do_after(user, 20, target = src))
G.use(2)
destroyed = 0
health = initial(health)
update_icon()
else
user.changeNext_move(CLICK_CD_MELEE)
src.health -= W.force
@@ -177,7 +195,7 @@
if(istype(I, /obj/item/weapon/electronics/airlock))
user << "<span class='notice'>You start installing the electronics into [src]...</span>"
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(user.unEquip(I) && do_after(user, 30, target = src))
if(user.unEquip(I) && do_after(user, 30, target = src))
I.loc = src
electronics = I
user << "<span class='notice'>You install the airlock electronics.</span>"
@@ -205,11 +223,7 @@
/obj/structure/displaycase/captain
alert = 1
/obj/structure/displaycase/captain/New()
..()
showpiece = new /obj/item/weapon/gun/energy/laser/captain (src)
update_icon()
start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain
/obj/structure/displaycase/labcage
name = "lab cage"
@@ -1,18 +1,18 @@
/obj/structure/stool/bed/chair/e_chair
/obj/structure/bed/chair/e_chair
name = "electric chair"
desc = "Looks absolutely SHOCKING!\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "echair0"
var/obj/item/assembly/shock_kit/part = null
var/last_time = 1
/obj/structure/stool/bed/chair/e_chair/New()
/obj/structure/bed/chair/e_chair/New()
..()
overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir)
return
/obj/structure/stool/bed/chair/e_chair/attackby(obj/item/weapon/W, mob/user, params)
/obj/structure/bed/chair/e_chair/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
var/obj/structure/stool/bed/chair/C = new /obj/structure/stool/bed/chair(loc)
var/obj/structure/bed/chair/C = new /obj/structure/bed/chair(loc)
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
C.dir = dir
part.loc = src.loc
@@ -22,13 +22,13 @@
return
return
/obj/structure/stool/bed/chair/e_chair/rotate()
/obj/structure/bed/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
/obj/structure/stool/bed/chair/e_chair/proc/shock()
/obj/structure/bed/chair/e_chair/proc/shock()
if(last_time + 50 > world.time)
return
last_time = world.time
@@ -44,7 +44,7 @@
A.updateicon()
flick("echair1", src)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(12, 1, src)
s.start()
if(buckled_mob)
+10 -2
View File
@@ -169,8 +169,7 @@
if(!active)
if(world.time > last_event+15)
active = 1
for(var/mob/living/L in range(3,src))
L.irradiate(4)
radiation_pulse(get_turf(src), 0, 3, 15, 1)
for(var/turf/simulated/wall/mineral/uranium/T in orange(1,src))
T.radiate()
last_event = world.time
@@ -262,3 +261,12 @@
mineral = "wood"
walltype = "wood"
canSmoothWith = list(/obj/structure/falsewall/wood, /turf/simulated/wall/mineral/wood)
/obj/structure/falsewall/iron
name = "rough metal wall"
desc = "A wall with rough metal plating."
icon = 'icons/turf/walls/iron_wall.dmi'
icon_state = ""
mineral = "metal"
walltype = "iron"
canSmoothWith = list(/obj/structure/falsewall/iron, /turf/simulated/wall/mineral/iron)
+35 -1
View File
@@ -84,7 +84,7 @@
transfer_fingerprints_to(G)
qdel(src)
else if(istype(W, /obj/item/stack/sheet))
else if(istype(W, /obj/item/stack))
if (istype(src.loc, /turf/simulated/wall))
user << "<span class='warning'>There is already a wall present!</span>"
return
@@ -95,6 +95,40 @@
user << "<span class='warning'>There is already a false wall present!</span>"
return
if(istype(W,/obj/item/stack/rods))
var/obj/item/stack/rods/S = W
if(state == GIRDER_DISPLACED)
if(S.amount < 2)
user << "<span class='warning'>You need at least two rods to create a false wall!</span>"
return
user << "<span class='notice'>You start building a reinforced false wall...</span>"
if(do_after(user, 20, target = src))
if(!src.loc || !S || S.amount < 2)
return
S.use(2)
user << "<span class='notice'>You create a false wall. Push on it to open or close the passage.</span>"
var/obj/structure/falsewall/iron/FW = new (loc)
transfer_fingerprints_to(FW)
qdel(src)
else
if(S.amount < 5)
user << "<span class='warning'>You need at least five rods to add plating!</span>"
return
user << "<span class='notice'>You start adding plating...</span>"
if (do_after(user, 40, target = src))
if(!src.loc || !S || S.amount < 5)
return
S.use(5)
user << "<span class='notice'>You add the plating.</span>"
var/turf/T = get_turf(src)
T.ChangeTurf(/turf/simulated/wall/mineral/iron)
transfer_fingerprints_to(T)
qdel(src)
return
if(!istype(W,/obj/item/stack/sheet))
return
var/obj/item/stack/sheet/S = W
switch(S.type)
+1 -1
View File
@@ -237,7 +237,7 @@
var/obj/structure/cable/C = T.get_cable_node()
if(C)
if(electrocute_mob(user, C, src))
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
return 1
+2 -2
View File
@@ -10,8 +10,8 @@
/obj/structure/hivebot_beacon/New()
..()
var/datum/effect/effect/system/smoke_spread/smoke = new
smoke.set_up(5, 0, src.loc)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(2, loc)
smoke.start()
visible_message("<span class='boldannounce'>The [src] warps in!</span>")
playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1)
+22 -18
View File
@@ -159,7 +159,7 @@
//old style PIMP-CART
/obj/structure/stool/bed/chair/janicart
/obj/structure/bed/chair/janicart
name = "janicart"
desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility."
icon = 'icons/obj/vehicles.dmi'
@@ -172,10 +172,10 @@
var/floorbuffer = 0
var/keytype = /obj/item/key/janitor
/obj/structure/stool/bed/chair/janicart/New()
/obj/structure/bed/chair/janicart/New()
handle_rotation()
/obj/structure/stool/bed/chair/janicart/Move(a, b, flag)
/obj/structure/bed/chair/janicart/Move(a, b, flag)
..()
if(floorbuffer)
var/turf/tile = loc
@@ -186,13 +186,13 @@
if(is_cleanable(A))
qdel(A)
/obj/structure/stool/bed/chair/janicart/examine(mob/user)
/obj/structure/bed/chair/janicart/examine(mob/user)
..()
if(floorbuffer)
user << "It has been upgraded with a floor buffer."
/obj/structure/stool/bed/chair/janicart/attackby(obj/item/I, mob/user, params)
/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user, params)
if(istype(I, keytype))
user << "Hold [I] in one of your hands while you drive this [callme]."
else if(istype(I, /obj/item/weapon/storage/bag/trash))
@@ -209,24 +209,24 @@
user << "<span class='notice'>You upgrade the [callme] with the floor buffer.</span>"
update_icon()
/obj/structure/stool/bed/chair/janicart/update_icon()
/obj/structure/bed/chair/janicart/update_icon()
overlays.Cut()
if(mybag)
overlays += "cart_garbage"
if(floorbuffer)
overlays += "cart_buffer"
/obj/structure/stool/bed/chair/janicart/attack_hand(mob/user)
if(mybag)
/obj/structure/bed/chair/janicart/attack_hand(mob/user)
if(..())
return 1
else if(mybag)
mybag.loc = get_turf(user)
user.put_in_hands(mybag)
mybag = null
update_icon()
else
..()
/obj/structure/stool/bed/chair/janicart/relaymove(mob/user, direction)
/obj/structure/bed/chair/janicart/relaymove(mob/user, direction)
if(user.stat || user.stunned || user.weakened || user.paralysis)
unbuckle_mob()
if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype))
@@ -241,7 +241,7 @@
else
user << "<span class='notice'>You'll need the keys in one of your hands to drive this [callme].</span>"
/obj/structure/stool/bed/chair/janicart/user_buckle_mob(mob/living/M, mob/user)
/obj/structure/bed/chair/janicart/user_buckle_mob(mob/living/M, mob/user)
if(user.incapacitated()) //user can't move the mob on the janicart's turf if incapacitated
return
for(var/atom/movable/A in get_turf(src)) //we check for obstacles on the turf.
@@ -252,13 +252,13 @@
..()
update_mob()
/obj/structure/stool/bed/chair/janicart/unbuckle_mob()
/obj/structure/bed/chair/janicart/unbuckle_mob(force = 0)
if(buckled_mob)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 0
..()
. = ..()
/obj/structure/stool/bed/chair/janicart/handle_rotation()
/obj/structure/bed/chair/janicart/handle_rotation()
if((dir == SOUTH) || (dir == WEST) || (dir == EAST))
layer = FLY_LAYER
else
@@ -271,8 +271,12 @@
update_mob()
/obj/structure/bed/chair/janicart/Bump(atom/movable/M)
. = ..()
if(istype(M, /obj/machinery/door) && buckled_mob)
M.Bumped(buckled_mob)
/obj/structure/stool/bed/chair/janicart/proc/update_mob()
/obj/structure/bed/chair/janicart/proc/update_mob()
if(buckled_mob)
buckled_mob.dir = dir
switch(dir)
@@ -310,7 +314,7 @@
icon = 'icons/obj/vehicles.dmi'
icon_state = "upgrade"
/obj/structure/stool/bed/chair/janicart/secway
/obj/structure/bed/chair/janicart/secway
name = "secway"
desc = "A brave security cyborg gave its life to help you look like a complete tool."
icon = 'icons/obj/vehicles.dmi'
@@ -318,7 +322,7 @@
callme = "secway"
keytype = /obj/item/key/security
/obj/structure/stool/bed/chair/janicart/secway/update_mob()
/obj/structure/bed/chair/janicart/secway/update_mob()
if(buckled_mob)
buckled_mob.dir = dir
buckled_mob.pixel_y = 4
+31 -7
View File
@@ -10,7 +10,8 @@
/obj/structure/mirror/attack_hand(mob/user)
if(shattered) return
if(shattered)
return
if(ishuman(user))
var/mob/living/carbon/human/H = user
@@ -23,7 +24,8 @@
//handle facial hair (if necessary)
if(H.gender == MALE)
var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_hair_styles_list
if(userloc != H.loc) return //no tele-grooming
if(userloc != H.loc)
return //no tele-grooming
if(new_style)
H.facial_hair_style = new_style
else
@@ -31,7 +33,8 @@
//handle normal hair
var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles_list
if(userloc != H.loc) return //no tele-grooming
if(userloc != H.loc)
return //no tele-grooming
if(new_style)
H.hair_style = new_style
@@ -39,7 +42,8 @@
/obj/structure/mirror/proc/shatter()
if(shattered) return
if(shattered)
return
shattered = 1
icon_state = "mirror_broke"
playsound(src, "shatter", 70, 1)
@@ -61,6 +65,19 @@
if(I.damtype == STAMINA)
return
if(shattered)
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
if(WT.remove_fuel(0, user))
user << "<span class='notice'>You begin repairing [src]...</span>"
playsound(src, 'sound/items/Welder.ogg', 100, 1)
if(do_after(user, 10, target = src))
if(!user || !WT || !WT.isOn())
return
user << "<span class='notice'>You repair [src].</span>"
shattered = 0
icon_state = initial(icon_state)
desc = initial(desc)
return
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
@@ -74,7 +91,8 @@
/obj/structure/mirror/attack_alien(mob/living/user)
user.do_attack_animation(src)
if(islarva(user)) return
if(islarva(user))
return
if(shattered)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
@@ -83,9 +101,11 @@
/obj/structure/mirror/attack_animal(mob/living/user)
if(!isanimal(user)) return
if(!isanimal(user))
return
var/mob/living/simple_animal/M = user
if(M.melee_damage_upper <= 0) return
if(M.melee_damage_upper <= 0)
return
M.do_attack_animation(src)
if(shattered)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
@@ -117,6 +137,10 @@
choosable_races += S.id
..()
/obj/structure/mirror/magic/lesser/New()
choosable_races = roundstart_species
..()
/obj/structure/mirror/magic/badmin/New()
for(var/speciestype in typesof(/datum/species) - /datum/species)
var/datum/species/S = new speciestype()
@@ -0,0 +1,58 @@
/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY
name = "plastic flaps"
desc = "Definitely can't get past those. No way."
icon = 'icons/obj/stationobjs.dmi' //Change this.
icon_state = "plasticflaps"
density = 0
anchored = 1
layer = 4
/obj/structure/plasticflaps/CanPass(atom/movable/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
return prob(60)
var/obj/structure/stool/bed/B = A
if (istype(A, /obj/structure/stool/bed) && (B.buckled_mob || B.density))//if it's a bed/chair and is dense or someone is buckled, it will not pass
return 0
if (istype(A, /obj/structure/closet/cardboard))
var/obj/structure/closet/cardboard/C = A
if(C.move_delay)
return 0
else if(istype(A, /mob/living)) // You Shall Not Pass!
var/mob/living/M = A
if(M.buckled && istype(M.buckled, /obj/machinery/bot/mulebot)) // mulebot passenger gets a free pass.
return 1
if(!M.lying && !M.ventcrawler && M.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass.
return 0
return ..()
/obj/structure/plasticflaps/ex_act(severity)
..()
switch(severity)
if (1)
qdel(src)
if (2)
if (prob(50))
qdel(src)
if (3)
if (prob(5))
qdel(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
/obj/structure/plasticflaps/mining/New() //set the turf below the flaps to block air
var/turf/T = get_turf(loc)
if(T)
T.blocks_air = 1
..()
/obj/structure/plasticflaps/mining/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor //wow this is terrible
var/turf/T = get_turf(loc)
if(T)
if(istype(T, /turf/simulated/floor))
T.blocks_air = 0
return ..()
+2 -2
View File
@@ -160,12 +160,12 @@
/obj/structure/sign/bluecross
name = "medbay"
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here.'"
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
icon_state = "bluecross"
/obj/structure/sign/bluecross_2
name = "medbay"
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here.'"
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
icon_state = "bluecross2"
/obj/structure/sign/goldenplaque
+1 -2
View File
@@ -176,8 +176,7 @@
if(!active)
if(world.time > last_event+15)
active = 1
for(var/mob/living/L in range(3,src))
L.irradiate(12)
radiation_pulse(get_turf(src), 3, 3, 12, 0)
last_event = world.time
active = null
return
@@ -1,35 +0,0 @@
/obj/structure/stool
name = "stool"
desc = "Apply butt."
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
anchored = 1
/obj/structure/stool/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
return
if(2)
if (prob(70))
new /obj/item/stack/sheet/metal(loc)
qdel(src)
return
if(3)
if (prob(50))
new /obj/item/stack/sheet/metal(loc)
qdel(src)
return
return
/obj/structure/stool/blob_act()
if(prob(75))
new /obj/item/stack/sheet/metal(src.loc)
qdel(src)
/obj/structure/stool/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
new /obj/item/stack/sheet/metal(src.loc)
qdel(src)
return
+10 -1
View File
@@ -56,6 +56,14 @@
update_icon()
return
if(istype(I, /obj/item/weapon/reagent_containers))
if (!open)
return
var/obj/item/weapon/reagent_containers/RG = I
RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
user << "<span class='notice'>You fill [RG] from [src]. Gross.</span>"
return
if(istype(I, /obj/item/weapon/grab))
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/weapon/grab/G = I
@@ -122,8 +130,9 @@
var/mob/living/GM = G.affecting
if(G.state >= GRAB_AGGRESSIVE)
if(GM.loc != get_turf(src))
user << "<span class='notice'>[GM.name] needs to on [src].</span>"
user << "<span class='notice'>[GM.name] needs to be on [src].</span>"
return
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='danger'>[user] slams [GM] into [src]!</span>", "<span class='notice'>You slam [GM] into [src]!</span>")
GM.adjustBruteLoss(8)
else