mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
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:
+94
-91
@@ -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
|
||||
+178
-152
@@ -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
|
||||
|
||||
|
||||
+149
-152
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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 ..()
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user