Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -30,16 +30,16 @@
|
||||
if(!anchored)
|
||||
if(istype(P, /obj/item/weapon/weldingtool))
|
||||
if(state != EMPTY_CORE)
|
||||
user << "<span class='warning'>The core must be empty to deconstruct it!</span>"
|
||||
to_chat(user, "<span class='warning'>The core must be empty to deconstruct it!</span>")
|
||||
return
|
||||
var/obj/item/weapon/weldingtool/WT = P
|
||||
if(!WT.isOn())
|
||||
user << "<span class='warning'>The welder must be on for this task!</span>"
|
||||
to_chat(user, "<span class='warning'>The welder must be on for this task!</span>")
|
||||
return
|
||||
playsound(loc, WT.usesound, 50, 1)
|
||||
user << "<span class='notice'>You start to deconstruct the frame...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to deconstruct the frame...</span>")
|
||||
if(do_after(user, 20*P.toolspeed, target = src) && src && state == EMPTY_CORE && WT && WT.remove_fuel(0, user))
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You deconstruct the frame.</span>")
|
||||
deconstruct(TRUE)
|
||||
return
|
||||
else
|
||||
@@ -49,7 +49,7 @@
|
||||
if(!user.drop_item())
|
||||
return
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You place the circuit board inside the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You place the circuit board inside the frame.</span>")
|
||||
update_icon()
|
||||
state = CIRCUIT_CORE
|
||||
circuit = P
|
||||
@@ -58,13 +58,13 @@
|
||||
if(CIRCUIT_CORE)
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You screw the circuit board into place.</span>"
|
||||
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
|
||||
state = SCREWED_CORE
|
||||
update_icon()
|
||||
return
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the circuit board.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the circuit board.</span>")
|
||||
state = EMPTY_CORE
|
||||
update_icon()
|
||||
circuit.forceMove(loc)
|
||||
@@ -73,7 +73,7 @@
|
||||
if(SCREWED_CORE)
|
||||
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You unfasten the circuit board.</span>"
|
||||
to_chat(user, "<span class='notice'>You unfasten the circuit board.</span>")
|
||||
state = CIRCUIT_CORE
|
||||
update_icon()
|
||||
return
|
||||
@@ -81,21 +81,21 @@
|
||||
var/obj/item/stack/cable_coil/C = P
|
||||
if(C.get_amount() >= 5)
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to add cables to the frame...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to add cables to the frame...</span>")
|
||||
if(do_after(user, 20, target = src) && state == SCREWED_CORE && C.use(5))
|
||||
user << "<span class='notice'>You add cables to the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You add cables to the frame.</span>")
|
||||
state = CABLED_CORE
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>You need five lengths of cable to wire the AI core!</span>"
|
||||
to_chat(user, "<span class='warning'>You need five lengths of cable to wire the AI core!</span>")
|
||||
return
|
||||
if(CABLED_CORE)
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
if(brain)
|
||||
user << "<span class='warning'>Get that [brain.name] out of there first!</span>"
|
||||
to_chat(user, "<span class='warning'>Get that [brain.name] out of there first!</span>")
|
||||
else
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the cables.</span>")
|
||||
state = SCREWED_CORE
|
||||
update_icon()
|
||||
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc )
|
||||
@@ -106,18 +106,18 @@
|
||||
var/obj/item/stack/sheet/rglass/G = P
|
||||
if(G.get_amount() >= 2)
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to put in the glass panel...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to put in the glass panel...</span>")
|
||||
if(do_after(user, 20, target = src) && state == CABLED_CORE && G.use(2))
|
||||
user << "<span class='notice'>You put in the glass panel.</span>"
|
||||
to_chat(user, "<span class='notice'>You put in the glass panel.</span>")
|
||||
state = GLASS_CORE
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>You need two sheets of reinforced glass to insert them into the AI core!</span>"
|
||||
to_chat(user, "<span class='warning'>You need two sheets of reinforced glass to insert them into the AI core!</span>")
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/aiModule))
|
||||
if(brain && brain.laws.id != DEFAULT_AI_LAWID)
|
||||
user << "<span class='warning'>The installed [brain.name] already has set laws!</span>"
|
||||
to_chat(user, "<span class='warning'>The installed [brain.name] already has set laws!</span>")
|
||||
return
|
||||
var/obj/item/weapon/aiModule/module = P
|
||||
module.install(laws, user)
|
||||
@@ -126,22 +126,22 @@
|
||||
if(istype(P, /obj/item/device/mmi) && !brain)
|
||||
var/obj/item/device/mmi/M = P
|
||||
if(!M.brainmob)
|
||||
user << "<span class='warning'>Sticking an empty [M.name] into the frame would sort of defeat the purpose!</span>"
|
||||
to_chat(user, "<span class='warning'>Sticking an empty [M.name] into the frame would sort of defeat the purpose!</span>")
|
||||
return
|
||||
if(M.brainmob.stat == DEAD)
|
||||
user << "<span class='warning'>Sticking a dead [M.name] into the frame would sort of defeat the purpose!</span>"
|
||||
to_chat(user, "<span class='warning'>Sticking a dead [M.name] into the frame would sort of defeat the purpose!</span>")
|
||||
return
|
||||
|
||||
if(!M.brainmob.client)
|
||||
user << "<span class='warning'>Sticking an inactive [M.name] into the frame would sort of defeat the purpose.</span>"
|
||||
to_chat(user, "<span class='warning'>Sticking an inactive [M.name] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
|
||||
if((config) && (!config.allow_ai) || jobban_isbanned(M.brainmob, "AI"))
|
||||
user << "<span class='warning'>This [M.name] does not seem to fit!</span>"
|
||||
to_chat(user, "<span class='warning'>This [M.name] does not seem to fit!</span>")
|
||||
return
|
||||
|
||||
if(!M.brainmob.mind)
|
||||
user << "<span class='warning'>This [M.name] is mindless!</span>"
|
||||
to_chat(user, "<span class='warning'>This [M.name] is mindless!</span>")
|
||||
return
|
||||
|
||||
if(!user.drop_item())
|
||||
@@ -149,13 +149,13 @@
|
||||
|
||||
M.forceMove(src)
|
||||
brain = M
|
||||
user << "<span class='notice'>You add [M.name] to the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You add [M.name] to the frame.</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/crowbar) && brain)
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the brain.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the brain.</span>")
|
||||
brain.forceMove(loc)
|
||||
brain = null
|
||||
update_icon()
|
||||
@@ -164,7 +164,7 @@
|
||||
if(GLASS_CORE)
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You remove the glass panel.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the glass panel.</span>")
|
||||
state = CABLED_CORE
|
||||
update_icon()
|
||||
new /obj/item/stack/sheet/rglass(loc, 2)
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You connect the monitor.</span>"
|
||||
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
|
||||
if(brain)
|
||||
ticker.mode.remove_antag_for_borging(brain.brainmob.mind)
|
||||
if(!istype(brain.laws, /datum/ai_laws/ratvar))
|
||||
@@ -194,7 +194,7 @@
|
||||
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, P.usesound, 50, 1)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
to_chat(user, "<span class='notice'>You disconnect the monitor.</span>")
|
||||
state = GLASS_CORE
|
||||
update_icon()
|
||||
return
|
||||
@@ -251,7 +251,7 @@ That prevents a few funky behaviors.
|
||||
/atom/proc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card)
|
||||
if(istype(card))
|
||||
if(card.flush)
|
||||
user << "<span class='boldannounce'>ERROR</span>: AI flush is in progress, cannot execute transfer protocol."
|
||||
to_chat(user, "<span class='boldannounce'>ERROR</span>: AI flush is in progress, cannot execute transfer protocol.")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -264,12 +264,12 @@ That prevents a few funky behaviors.
|
||||
AI.control_disabled = 0
|
||||
AI.radio_enabled = 1
|
||||
AI.forceMove(loc) // to replace the terminal.
|
||||
AI << "You have been uploaded to a stationary terminal. Remote device connection restored."
|
||||
user << "<span class='boldnotice'>Transfer successful</span>: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed."
|
||||
to_chat(AI, "You have been uploaded to a stationary terminal. Remote device connection restored.")
|
||||
to_chat(user, "<span class='boldnotice'>Transfer successful</span>: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.")
|
||||
card.AI = null
|
||||
qdel(src)
|
||||
else //If for some reason you use an empty card on an empty AI terminal.
|
||||
user << "There is no AI loaded on this terminal!"
|
||||
to_chat(user, "There is no AI loaded on this terminal!")
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/aicore
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
name = "glowing resin"
|
||||
desc = "Blue bioluminescence shines from beneath the surface."
|
||||
icon_state = "weednode"
|
||||
luminosity = 1
|
||||
light_range = 1
|
||||
var/node_range = NODERANGE
|
||||
|
||||
/obj/structure/alien/weeds/node/New()
|
||||
@@ -238,19 +238,19 @@
|
||||
if(user.getorgan(/obj/item/organ/alien/plasmavessel))
|
||||
switch(status)
|
||||
if(BURST)
|
||||
user << "<span class='notice'>You clear the hatched egg.</span>"
|
||||
to_chat(user, "<span class='notice'>You clear the hatched egg.</span>")
|
||||
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
|
||||
qdel(src)
|
||||
return
|
||||
if(GROWING)
|
||||
user << "<span class='notice'>The child is not developed yet.</span>"
|
||||
to_chat(user, "<span class='notice'>The child is not developed yet.</span>")
|
||||
return
|
||||
if(GROWN)
|
||||
user << "<span class='notice'>You retrieve the child.</span>"
|
||||
to_chat(user, "<span class='notice'>You retrieve the child.</span>")
|
||||
Burst(0)
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>It feels slimy.</span>"
|
||||
to_chat(user, "<span class='notice'>It feels slimy.</span>")
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
|
||||
|
||||
@@ -70,10 +70,10 @@
|
||||
|
||||
/obj/structure/sign/barsign/attack_hand(mob/user)
|
||||
if (!src.allowed(user))
|
||||
user << "<span class='info'>Access denied.</span>"
|
||||
to_chat(user, "<span class='info'>Access denied.</span>")
|
||||
return
|
||||
if (broken)
|
||||
user << "<span class ='danger'>The controls seem unresponsive.</span>"
|
||||
to_chat(user, "<span class ='danger'>The controls seem unresponsive.</span>")
|
||||
return
|
||||
pick_sign()
|
||||
|
||||
@@ -83,14 +83,14 @@
|
||||
/obj/structure/sign/barsign/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(!allowed(user))
|
||||
user << "<span class='info'>Access denied.</span>"
|
||||
to_chat(user, "<span class='info'>Access denied.</span>")
|
||||
return
|
||||
if(!panel_open)
|
||||
user << "<span class='notice'>You open the maintenance panel.</span>"
|
||||
to_chat(user, "<span class='notice'>You open the maintenance panel.</span>")
|
||||
set_sign(new /datum/barsign/hiddensigns/signoff)
|
||||
panel_open = 1
|
||||
else
|
||||
user << "<span class='notice'>You close the maintenance panel.</span>"
|
||||
to_chat(user, "<span class='notice'>You close the maintenance panel.</span>")
|
||||
if(!broken && !emagged)
|
||||
set_sign(pick(barsigns))
|
||||
else if(emagged)
|
||||
@@ -102,17 +102,17 @@
|
||||
else if(istype(I, /obj/item/stack/cable_coil) && panel_open)
|
||||
var/obj/item/stack/cable_coil/C = I
|
||||
if(emagged) //Emagged, not broken by EMP
|
||||
user << "<span class='warning'>Sign has been damaged beyond repair!</span>"
|
||||
to_chat(user, "<span class='warning'>Sign has been damaged beyond repair!</span>")
|
||||
return
|
||||
else if(!broken)
|
||||
user << "<span class='warning'>This sign is functioning properly!</span>"
|
||||
to_chat(user, "<span class='warning'>This sign is functioning properly!</span>")
|
||||
return
|
||||
|
||||
if(C.use(2))
|
||||
user << "<span class='notice'>You replace the burnt wiring.</span>"
|
||||
to_chat(user, "<span class='notice'>You replace the burnt wiring.</span>")
|
||||
broken = 0
|
||||
else
|
||||
user << "<span class='warning'>You need at least two lengths of cable!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two lengths of cable!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -126,9 +126,9 @@
|
||||
|
||||
/obj/structure/sign/barsign/emag_act(mob/user)
|
||||
if(broken || emagged)
|
||||
user << "<span class='warning'>Nothing interesting happens!</span>"
|
||||
to_chat(user, "<span class='warning'>Nothing interesting happens!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You emag the barsign. Takeover in progress...</span>"
|
||||
to_chat(user, "<span class='notice'>You emag the barsign. Takeover in progress...</span>")
|
||||
sleep(100) //10 seconds
|
||||
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
|
||||
emagged = 1
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"<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>"
|
||||
to_chat(M, "<span class='warning'>You fail to unbuckle yourself!</span>")
|
||||
return
|
||||
if(!M.buckled)
|
||||
return
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
if(istype(W,/obj/item/roller/robo))
|
||||
var/obj/item/roller/robo/R = W
|
||||
if(R.loaded)
|
||||
user << "<span class='warning'>You already have a roller bed docked!</span>"
|
||||
to_chat(user, "<span class='warning'>You already have a roller bed docked!</span>")
|
||||
return
|
||||
|
||||
if(has_buckled_mobs())
|
||||
@@ -78,7 +78,7 @@
|
||||
if(has_buckled_mobs())
|
||||
return 0
|
||||
if(usr.incapacitated())
|
||||
usr << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(usr, "<span class='warning'>You can't do that right now!</span>")
|
||||
return 0
|
||||
usr.visible_message("[usr] collapses \the [src.name].", "<span class='notice'>You collapse \the [src.name].</span>")
|
||||
var/obj/structure/bed/roller/B = new foldabletype(get_turf(src))
|
||||
@@ -108,7 +108,7 @@
|
||||
if(istype(I, /obj/item/roller/robo))
|
||||
var/obj/item/roller/robo/R = I
|
||||
if(R.loaded)
|
||||
user << "<span class='warning'>[R] already has a roller bed loaded!</span>"
|
||||
to_chat(user, "<span class='warning'>[R] already has a roller bed loaded!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] loads [src].</span>", "<span class='notice'>You load [src] into [R].</span>")
|
||||
R.loaded = new/obj/structure/bed/roller(R)
|
||||
@@ -141,7 +141,7 @@
|
||||
|
||||
/obj/item/roller/robo/examine(mob/user)
|
||||
..()
|
||||
user << "The dock is [loaded ? "loaded" : "empty"]"
|
||||
to_chat(user, "The dock is [loaded ? "loaded" : "empty"]")
|
||||
|
||||
/obj/item/roller/robo/deploy_roller(mob/user, atom/location)
|
||||
if(loaded)
|
||||
@@ -150,7 +150,7 @@
|
||||
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>"
|
||||
to_chat(user, "<span class='warning'>The dock is empty!</span>")
|
||||
|
||||
//Dog bed
|
||||
|
||||
|
||||
@@ -15,6 +15,18 @@
|
||||
var/item_chair = /obj/item/chair // if null it can't be picked up
|
||||
layer = OBJ_LAYER
|
||||
|
||||
/obj/structure/chair/Initialize()
|
||||
..()
|
||||
if(!anchored) //why would you put these on the shuttle?
|
||||
addtimer(CALLBACK(src, .proc/RemoveFromLatejoin), 0)
|
||||
|
||||
/obj/structure/chair/Destroy()
|
||||
RemoveFromLatejoin()
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/proc/RemoveFromLatejoin()
|
||||
latejoin -= src //These may be here due to the arrivals shuttle
|
||||
|
||||
/obj/structure/chair/deconstruct()
|
||||
// If we have materials, and don't have the NOCONSTRUCT flag
|
||||
if(buildstacktype && (!(flags & NODECONSTRUCT)))
|
||||
@@ -95,7 +107,7 @@
|
||||
/obj/structure/chair/AltClick(mob/user)
|
||||
..()
|
||||
if(user.incapacitated())
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
@@ -136,11 +148,15 @@
|
||||
var/image/armrest = null
|
||||
item_chair = null
|
||||
|
||||
/obj/structure/chair/comfy/New()
|
||||
/obj/structure/chair/comfy/Initialize()
|
||||
armrest = image("icons/obj/chairs.dmi", "comfychair_armrest")
|
||||
armrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/comfy/Destroy()
|
||||
QDEL_NULL(armrest)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/comfy/post_buckle_mob(mob/living/M)
|
||||
..()
|
||||
if(has_buckled_mobs())
|
||||
@@ -194,7 +210,7 @@
|
||||
if(!item_chair || !usr.can_hold_items() || has_buckled_mobs() || src.flags & NODECONSTRUCT)
|
||||
return
|
||||
if(usr.incapacitated())
|
||||
usr << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(usr, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
usr.visible_message("<span class='notice'>[usr] grabs \the [src.name].</span>", "<span class='notice'>You grab \the [src.name].</span>")
|
||||
var/C = new item_chair(loc)
|
||||
@@ -234,10 +250,10 @@
|
||||
/obj/item/chair/proc/plant(mob/user)
|
||||
for(var/obj/A in get_turf(loc))
|
||||
if(istype(A,/obj/structure/chair))
|
||||
user << "<span class='danger'>There is already a chair here.</span>"
|
||||
to_chat(user, "<span class='danger'>There is already a chair here.</span>")
|
||||
return
|
||||
if(A.density && !(A.flags & ON_BORDER))
|
||||
user << "<span class='danger'>There is already something here.</span>"
|
||||
to_chat(user, "<span class='danger'>There is already something here.</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'>[user] rights \the [src.name].</span>", "<span class='notice'>You right \the [name].</span>")
|
||||
|
||||
@@ -29,10 +29,10 @@ LINEN BINS
|
||||
user.drop_item()
|
||||
if(layer == initial(layer))
|
||||
layer = ABOVE_MOB_LAYER
|
||||
user << "<span class='notice'>You cover yourself with [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You cover yourself with [src].</span>")
|
||||
else
|
||||
layer = initial(layer)
|
||||
user << "<span class='notice'>You smooth [src] out beneath you.</span>"
|
||||
to_chat(user, "<span class='notice'>You smooth [src] out beneath you.</span>")
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
@@ -42,7 +42,7 @@ LINEN BINS
|
||||
transfer_fingerprints_to(C)
|
||||
C.add_fingerprint(user)
|
||||
qdel(src)
|
||||
user << "<span class='notice'>You tear [src] up.</span>"
|
||||
to_chat(user, "<span class='notice'>You tear [src] up.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -216,11 +216,11 @@ LINEN BINS
|
||||
/obj/structure/bedsheetbin/examine(mob/user)
|
||||
..()
|
||||
if(amount < 1)
|
||||
user << "There are no bed sheets in the bin."
|
||||
to_chat(user, "There are no bed sheets in the bin.")
|
||||
else if(amount == 1)
|
||||
user << "There is one bed sheet in the bin."
|
||||
to_chat(user, "There is one bed sheet in the bin.")
|
||||
else
|
||||
user << "There are [amount] bed sheets in the bin."
|
||||
to_chat(user, "There are [amount] bed sheets in the bin.")
|
||||
|
||||
|
||||
/obj/structure/bedsheetbin/update_icon()
|
||||
@@ -245,15 +245,15 @@ LINEN BINS
|
||||
I.loc = src
|
||||
sheets.Add(I)
|
||||
amount++
|
||||
user << "<span class='notice'>You put [I] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
|
||||
update_icon()
|
||||
else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
|
||||
if(!user.drop_item())
|
||||
user << "<span class='warning'>\The [I] is stuck to your hand, you cannot hide it among the sheets!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot hide it among the sheets!</span>")
|
||||
return
|
||||
I.loc = src
|
||||
hidden = I
|
||||
user << "<span class='notice'>You hide [I] among the sheets.</span>"
|
||||
to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>")
|
||||
|
||||
|
||||
|
||||
@@ -277,12 +277,12 @@ LINEN BINS
|
||||
|
||||
B.loc = user.loc
|
||||
user.put_in_hands(B)
|
||||
user << "<span class='notice'>You take [B] out of [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take [B] out of [src].</span>")
|
||||
update_icon()
|
||||
|
||||
if(hidden)
|
||||
hidden.loc = user.loc
|
||||
user << "<span class='notice'>[hidden] falls out of [B]!</span>"
|
||||
to_chat(user, "<span class='notice'>[hidden] falls out of [B]!</span>")
|
||||
hidden = null
|
||||
|
||||
|
||||
@@ -300,7 +300,7 @@ LINEN BINS
|
||||
B = new /obj/item/weapon/bedsheet(loc)
|
||||
|
||||
B.loc = loc
|
||||
user << "<span class='notice'>You telekinetically remove [B] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You telekinetically remove [B] from [src].</span>")
|
||||
update_icon()
|
||||
|
||||
if(hidden)
|
||||
|
||||
@@ -72,11 +72,11 @@
|
||||
/obj/structure/closet/examine(mob/user)
|
||||
..()
|
||||
if(anchored)
|
||||
user << "It is anchored to the ground."
|
||||
to_chat(user, "It is anchored to the ground.")
|
||||
if(broken)
|
||||
user << "<span class='notice'>It appears to be broken.</span>"
|
||||
to_chat(user, "<span class='notice'>It appears to be broken.</span>")
|
||||
else if(secure && !opened)
|
||||
user << "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>"
|
||||
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>")
|
||||
|
||||
/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height == 0 || wall_mounted)
|
||||
@@ -90,7 +90,7 @@
|
||||
for(var/mob/living/L in T)
|
||||
if(L.anchored || horizontal && L.mob_size > MOB_SIZE_TINY && L.density)
|
||||
if(user)
|
||||
user << "<span class='danger'>There's something large on top of [src], preventing it from opening.</span>" //you... think? there's something standing on it ffs
|
||||
to_chat(user, "<span class='danger'>There's something large on top of [src], preventing it from opening.</span>" )
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
for(var/mob/living/L in T)
|
||||
if(L.anchored || horizontal && L.mob_size > MOB_SIZE_TINY && L.density)
|
||||
if(user)
|
||||
user << "<span class='danger'>There's something too large in [src], preventing it from closing.</span>"
|
||||
to_chat(user, "<span class='danger'>There's something too large in [src], preventing it from closing.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
user << "<span class='notice'>You begin cutting \the [src] apart...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin cutting \the [src] apart...</span>")
|
||||
playsound(loc, cutting_sound, 40, 1)
|
||||
if(do_after(user, 40*WT.toolspeed, 1, target = src))
|
||||
if(!opened || !WT.isOn())
|
||||
@@ -229,7 +229,7 @@
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.remove_fuel(0, user))
|
||||
return
|
||||
user << "<span class='notice'>You begin [welded ? "unwelding":"welding"] \the [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin [welded ? "unwelding":"welding"] \the [src]...</span>")
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 40, 1)
|
||||
if(do_after(user, 40*WT.toolspeed, 1, target = src))
|
||||
if(opened || !WT.isOn())
|
||||
@@ -334,7 +334,7 @@
|
||||
if(iscarbon(usr) || issilicon(usr) || isdrone(usr))
|
||||
attack_hand(usr)
|
||||
else
|
||||
usr << "<span class='warning'>This mob type can't use this verb.</span>"
|
||||
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
|
||||
|
||||
// Objects that try to exit a locker by stepping were doing so successfully,
|
||||
// and due to an oversight in turf/Enter() were going through walls. That
|
||||
@@ -361,7 +361,7 @@
|
||||
//okay, so the closet is either welded or locked... resist!!!
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user << "<span class='notice'>You lean on the back of [src] and start pushing the door open.</span>"
|
||||
to_chat(user, "<span class='notice'>You lean on the back of [src] and start pushing the door open.</span>")
|
||||
visible_message("<span class='warning'>[src] begins to shake violently!</span>")
|
||||
if(do_after(user,(breakout_time * 60 * 10), target = src)) //minutes * 60seconds * 10deciseconds
|
||||
if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) )
|
||||
@@ -372,7 +372,7 @@
|
||||
bust_open()
|
||||
else
|
||||
if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
|
||||
user << "<span class='warning'>You fail to break out of [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>You fail to break out of [src]!</span>")
|
||||
|
||||
/obj/structure/closet/proc/bust_open()
|
||||
welded = 0 //applies to all lockers
|
||||
@@ -383,7 +383,7 @@
|
||||
/obj/structure/closet/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(opened || !secure)
|
||||
return
|
||||
@@ -400,9 +400,9 @@
|
||||
"<span class='notice'>You [locked ? null : "un"]lock [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='notice'>Access Denied</span>"
|
||||
to_chat(user, "<span class='notice'>Access Denied</span>")
|
||||
else if(secure && broken)
|
||||
user << "<span class='warning'>\The [src] is broken!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is broken!</span>")
|
||||
|
||||
/obj/structure/closet/emag_act(mob/user)
|
||||
if(secure && !broken)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
name = "body bag"
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/wirecutters))
|
||||
user << "<span class='notice'>You cut the tag off [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You cut the tag off [src].</span>")
|
||||
name = "body bag"
|
||||
tagged = 0
|
||||
update_icon()
|
||||
@@ -77,10 +77,10 @@
|
||||
if(opened)
|
||||
return 0
|
||||
if(contents.len >= mob_storage_capacity / 2)
|
||||
usr << "<span class='warning'>There are too many things inside of [src] to fold it up!</span>"
|
||||
to_chat(usr, "<span class='warning'>There are too many things inside of [src] to fold it up!</span>")
|
||||
return 0
|
||||
for(var/obj/item/bodybag/bluespace/B in src)
|
||||
usr << "<span class='warning'>You can't recursively fold bluespace body bags!</span>" //Nice try
|
||||
to_chat(usr, "<span class='warning'>You can't recursively fold bluespace body bags!</span>" )
|
||||
return 0
|
||||
visible_message("<span class='notice'>[usr] folds up [src].</span>")
|
||||
var/obj/item/bodybag/B = new foldedbag_path(get_turf(src))
|
||||
@@ -88,5 +88,5 @@
|
||||
for(var/atom/movable/A in contents)
|
||||
A.forceMove(B)
|
||||
if(isliving(A))
|
||||
A << "<span class='userdanger'>You're suddenly forced into a tiny, compressed space!</span>"
|
||||
to_chat(A, "<span class='userdanger'>You're suddenly forced into a tiny, compressed space!</span>")
|
||||
qdel(src)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
var/obj/item/weapon/card/id/I = W.GetID()
|
||||
if(istype(I))
|
||||
if(broken)
|
||||
user << "<span class='danger'>It appears to be broken.</span>"
|
||||
to_chat(user, "<span class='danger'>It appears to be broken.</span>")
|
||||
return
|
||||
if(!I || !I.registered_name)
|
||||
return
|
||||
@@ -52,6 +52,6 @@
|
||||
registered_name = I.registered_name
|
||||
desc = "Owned by [I.registered_name]."
|
||||
else
|
||||
user << "<span class='danger'>Access Denied.</span>"
|
||||
to_chat(user, "<span class='danger'>Access Denied.</span>")
|
||||
else
|
||||
return ..()
|
||||
@@ -181,10 +181,7 @@
|
||||
new /obj/item/weapon/holosign_creator/security(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/clothing/suit/armor/vest/det_suit(src)
|
||||
new /obj/item/ammo_box/c38(src)
|
||||
new /obj/item/ammo_box/c38(src)
|
||||
new /obj/item/weapon/storage/belt/holster(src)
|
||||
new /obj/item/weapon/gun/ballistic/revolver/detective(src)
|
||||
new /obj/item/weapon/storage/belt/holster/full(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/injection
|
||||
name = "lethal injections"
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
if(petrified_mob)
|
||||
S.mind.transfer_to(petrified_mob)
|
||||
petrified_mob.Weaken(5)
|
||||
petrified_mob << "<span class='notice'>You slowly come back to your senses. You are in control of yourself again!</span>"
|
||||
to_chat(petrified_mob, "<span class='notice'>You slowly come back to your senses. You are in control of yourself again!</span>")
|
||||
qdel(S)
|
||||
|
||||
for(var/obj/O in src)
|
||||
|
||||
@@ -45,14 +45,14 @@
|
||||
/obj/structure/closet/crate/open(mob/living/user)
|
||||
. = ..()
|
||||
if(. && manifest)
|
||||
user << "<span class='notice'>The manifest is torn off [src].</span>"
|
||||
to_chat(user, "<span class='notice'>The manifest is torn off [src].</span>")
|
||||
playsound(src, 'sound/items/poster_ripped.ogg', 75, 1)
|
||||
manifest.forceMove(get_turf(src))
|
||||
manifest = null
|
||||
update_icon()
|
||||
|
||||
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
|
||||
user << "<span class='notice'>You tear the manifest off of [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You tear the manifest off of [src].</span>")
|
||||
playsound(src, 'sound/items/poster_ripped.ogg', 75, 1)
|
||||
|
||||
manifest.forceMove(loc)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/structure/closet/crate/bin/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/storage/bag/trash))
|
||||
var/obj/item/weapon/storage/bag/trash/T = W
|
||||
user << "<span class='notice'>You fill the bag.</span>"
|
||||
to_chat(user, "<span class='notice'>You fill the bag.</span>")
|
||||
for(var/obj/item/O in src)
|
||||
if(T.can_be_inserted(O, 1))
|
||||
O.loc = T
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
if(manifest)
|
||||
tear_manifest(user)
|
||||
else
|
||||
user << "<span class='warning'>You need a crowbar to pry this open!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a crowbar to pry this open!</span>")
|
||||
|
||||
/obj/structure/closet/crate/large/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/structure/closet/crate/secure/proc/boom(mob/user)
|
||||
if(user)
|
||||
user << "<span class='danger'>The crate's anti-tamper system activates!</span>"
|
||||
to_chat(user, "<span class='danger'>The crate's anti-tamper system activates!</span>")
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)] has detonated [src.name]."
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
|
||||
@@ -34,9 +34,9 @@
|
||||
/obj/structure/displaycase/examine(mob/user)
|
||||
..()
|
||||
if(showpiece)
|
||||
user << "<span class='notice'>There's [showpiece] inside.</span>"
|
||||
to_chat(user, "<span class='notice'>There's [showpiece] inside.</span>")
|
||||
if(alert)
|
||||
user << "<span class='notice'>Hooked up with an anti-theft system.</span>"
|
||||
to_chat(user, "<span class='notice'>Hooked up with an anti-theft system.</span>")
|
||||
|
||||
|
||||
/obj/structure/displaycase/proc/dump()
|
||||
@@ -117,47 +117,47 @@
|
||||
/obj/structure/displaycase/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(W.GetID() && !broken)
|
||||
if(allowed(user))
|
||||
user << "<span class='notice'>You [open ? "close":"open"] the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
|
||||
toggle_lock(user)
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == INTENT_HELP && !broken)
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(obj_integrity < max_integrity && WT.remove_fuel(5, user))
|
||||
user << "<span class='notice'>You begin repairing [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You begin repairing [src].</span>")
|
||||
playsound(loc, WT.usesound, 40, 1)
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
obj_integrity = max_integrity
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
update_icon()
|
||||
user << "<span class='notice'>You repair [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You repair [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is already in good condition!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
|
||||
return
|
||||
else if(!alert && istype(W,/obj/item/weapon/crowbar)) //Only applies to the lab cage and player made display cases
|
||||
if(broken)
|
||||
if(showpiece)
|
||||
user << "<span class='notice'>Remove the displayed object first.</span>"
|
||||
to_chat(user, "<span class='notice'>Remove the displayed object first.</span>")
|
||||
else
|
||||
user << "<span class='notice'>You remove the destroyed case</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the destroyed case</span>")
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>")
|
||||
if(do_after(user, 20*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You [open ? "close":"open"] the [src]</span>"
|
||||
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
|
||||
toggle_lock(user)
|
||||
else if(open && !showpiece)
|
||||
if(user.drop_item())
|
||||
W.loc = src
|
||||
showpiece = W
|
||||
user << "<span class='notice'>You put [W] on display</span>"
|
||||
to_chat(user, "<span class='notice'>You put [W] on display</span>")
|
||||
update_icon()
|
||||
else if(istype(W, /obj/item/stack/sheet/glass) && broken)
|
||||
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>"
|
||||
to_chat(user, "<span class='warning'>You need two glass sheets to fix the case!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start fixing [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
G.use(2)
|
||||
broken = 0
|
||||
@@ -177,7 +177,7 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (showpiece && (broken || open))
|
||||
dump()
|
||||
user << "<span class='notice'>You deactivate the hover field built into the case.</span>"
|
||||
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
return
|
||||
@@ -203,7 +203,7 @@
|
||||
|
||||
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/wrench)) //The player can only deconstruct the wooden frame
|
||||
user << "<span class='notice'>You start disassembling [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 30*I.toolspeed, target = src))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
@@ -211,18 +211,18 @@
|
||||
qdel(src)
|
||||
|
||||
else if(istype(I, /obj/item/weapon/electronics/airlock))
|
||||
user << "<span class='notice'>You start installing the electronics into [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start installing the electronics into [src]...</span>")
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 30, target = src) && user.transferItemToLoc(I,src))
|
||||
electronics = I
|
||||
user << "<span class='notice'>You install the airlock electronics.</span>"
|
||||
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
|
||||
|
||||
else if(istype(I, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = I
|
||||
if(G.get_amount() < 10)
|
||||
user << "<span class='warning'>You need ten glass sheets to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need ten glass sheets to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [G] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [G] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
G.use(10)
|
||||
var/obj/structure/displaycase/display = new(src.loc)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/mob/living/L = locate() in buckled_mobs
|
||||
if(!L)
|
||||
return
|
||||
user << "<span class='notice'>You attempt to sacrifice [L] by invoking the sacrificial ritual.</span>"
|
||||
to_chat(user, "<span class='notice'>You attempt to sacrifice [L] by invoking the sacrificial ritual.</span>")
|
||||
L.gib()
|
||||
message_admins("[key_name_admin(user)] has sacrificed [key_name_admin(L)] on the sacrifical altar.")
|
||||
|
||||
@@ -30,10 +30,10 @@
|
||||
|
||||
/obj/structure/healingfountain/attack_hand(mob/living/user)
|
||||
if(last_process + time_between_uses > world.time)
|
||||
user << "<span class='notice'>The fountain appears to be empty.</span>"
|
||||
to_chat(user, "<span class='notice'>The fountain appears to be empty.</span>")
|
||||
return
|
||||
last_process = world.time
|
||||
user << "<span class='notice'>The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.</span>"
|
||||
to_chat(user, "<span class='notice'>The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.</span>")
|
||||
user.reagents.add_reagent("godblood",20)
|
||||
update_icons()
|
||||
addtimer(CALLBACK(src, .proc/update_icons), time_between_uses)
|
||||
|
||||
@@ -501,7 +501,7 @@
|
||||
|
||||
if(mineral && mineral != "glass")
|
||||
mineral = null //I know this is stupid, but until we change glass to a boolean it's how this code works.
|
||||
user << "<span class='notice'>You change the paintjob on the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You change the paintjob on the airlock assembly.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
@@ -513,7 +513,7 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if( !WT.isOn() )
|
||||
return
|
||||
user << "<span class='notice'>You disassemble the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You disassemble the airlock assembly.</span>")
|
||||
deconstruct(TRUE)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
@@ -533,11 +533,11 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if( src.anchored )
|
||||
return
|
||||
user << "<span class='notice'>You secure the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You secure the airlock assembly.</span>")
|
||||
src.name = "secured airlock assembly"
|
||||
src.anchored = 1
|
||||
else
|
||||
user << "There is another door here!"
|
||||
to_chat(user, "There is another door here!")
|
||||
|
||||
else
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
@@ -547,14 +547,14 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(!anchored )
|
||||
return
|
||||
user << "<span class='notice'>You unsecure the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You unsecure the airlock assembly.</span>")
|
||||
name = "airlock assembly"
|
||||
anchored = 0
|
||||
|
||||
else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored )
|
||||
var/obj/item/stack/cable_coil/C = W
|
||||
if (C.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one length of cable to wire the airlock assembly!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one length of cable to wire the airlock assembly!</span>")
|
||||
return
|
||||
user.visible_message("[user] wires the airlock assembly.", \
|
||||
"<span class='notice'>You start to wire the airlock assembly...</span>")
|
||||
@@ -562,7 +562,7 @@
|
||||
if(C.get_amount() < 1 || state != 0) return
|
||||
C.use(1)
|
||||
src.state = 1
|
||||
user << "<span class='notice'>You wire the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You wire the airlock assembly.</span>")
|
||||
src.name = "wired airlock assembly"
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 )
|
||||
@@ -573,7 +573,7 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if( src.state != 1 )
|
||||
return
|
||||
user << "<span class='notice'>You cut the wires from the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You cut the wires from the airlock assembly.</span>")
|
||||
new/obj/item/stack/cable_coil(get_turf(user), 1)
|
||||
src.state = 0
|
||||
src.name = "secured airlock assembly"
|
||||
@@ -589,7 +589,7 @@
|
||||
return
|
||||
|
||||
W.loc = src
|
||||
user << "<span class='notice'>You install the airlock electronics.</span>"
|
||||
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
|
||||
src.state = 2
|
||||
src.name = "near finished airlock assembly"
|
||||
src.electronics = W
|
||||
@@ -603,7 +603,7 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if( src.state != 2 )
|
||||
return
|
||||
user << "<span class='notice'>You remove the airlock electronics.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
|
||||
src.state = 1
|
||||
src.name = "wired airlock assembly"
|
||||
var/obj/item/weapon/electronics/airlock/ae
|
||||
@@ -624,11 +624,11 @@
|
||||
if(do_after(user, 40, target = src))
|
||||
if(G.get_amount() < 1 || mineral) return
|
||||
if (G.type == /obj/item/stack/sheet/rglass)
|
||||
user << "<span class='notice'>You install reinforced glass windows into the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You install reinforced glass windows into the airlock assembly.</span>")
|
||||
heat_proof_finished = 1 //reinforced glass makes the airlock heat-proof
|
||||
name = "near finished heat-proofed window airlock assembly"
|
||||
else
|
||||
user << "<span class='notice'>You install regular glass windows into the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You install regular glass windows into the airlock assembly.</span>")
|
||||
name = "near finished window airlock assembly"
|
||||
G.use(1)
|
||||
mineral = "glass"
|
||||
@@ -651,7 +651,7 @@
|
||||
"<span class='notice'>You start to install [G.name] into the airlock assembly...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(G.get_amount() < 2 || mineral) return
|
||||
user << "<span class='notice'>You install [M] plating into the airlock assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You install [M] plating into the airlock assembly.</span>")
|
||||
G.use(2)
|
||||
mineral = "[M]"
|
||||
name = "near finished [M] airlock assembly"
|
||||
@@ -665,7 +665,7 @@
|
||||
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(src.loc && state == 2)
|
||||
user << "<span class='notice'>You finish the airlock.</span>"
|
||||
to_chat(user, "<span class='notice'>You finish the airlock.</span>")
|
||||
var/obj/machinery/door/airlock/door
|
||||
if(mineral == "glass")
|
||||
door = new src.glass_type( src.loc )
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
for(var/m in buckled_mobs)
|
||||
var/mob/living/buckled_mob = m
|
||||
buckled_mob.electrocute_act(85, src, 1)
|
||||
buckled_mob << "<span class='userdanger'>You feel a deep shock course through your body!</span>"
|
||||
to_chat(buckled_mob, "<span class='userdanger'>You feel a deep shock course through your body!</span>")
|
||||
spawn(1)
|
||||
buckled_mob.electrocute_act(85, src, 1)
|
||||
visible_message("<span class='danger'>The electric chair went off!</span>", "<span class='italics'>You hear a deep sharp shock!</span>")
|
||||
|
||||
@@ -39,11 +39,11 @@
|
||||
|
||||
/obj/structure/extinguisher_cabinet/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/wrench) && !stored_extinguisher)
|
||||
user << "<span class='notice'>You start unsecuring [name]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start unsecuring [name]...</span>")
|
||||
playsound(loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 60*I.toolspeed, target = src))
|
||||
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You unsecure [name].</span>"
|
||||
to_chat(user, "<span class='notice'>You unsecure [name].</span>")
|
||||
deconstruct(TRUE)
|
||||
return
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
return
|
||||
contents += I
|
||||
stored_extinguisher = I
|
||||
user << "<span class='notice'>You place [I] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You place [I] in [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
toggle_cabinet(user)
|
||||
@@ -70,7 +70,7 @@
|
||||
return
|
||||
if(stored_extinguisher)
|
||||
user.put_in_hands(stored_extinguisher)
|
||||
user << "<span class='notice'>You take [stored_extinguisher] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take [stored_extinguisher] from [src].</span>")
|
||||
stored_extinguisher = null
|
||||
if(!opened)
|
||||
opened = 1
|
||||
@@ -83,7 +83,7 @@
|
||||
/obj/structure/extinguisher_cabinet/attack_tk(mob/user)
|
||||
if(stored_extinguisher)
|
||||
stored_extinguisher.forceMove(loc)
|
||||
user << "<span class='notice'>You telekinetically remove [stored_extinguisher] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You telekinetically remove [stored_extinguisher] from [src].</span>")
|
||||
stored_extinguisher = null
|
||||
opened = 1
|
||||
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
/obj/structure/extinguisher_cabinet/proc/toggle_cabinet(mob/user)
|
||||
if(opened && broken)
|
||||
user << "<span class='warning'>[src] is broken open.</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is broken open.</span>")
|
||||
else
|
||||
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
opened = !opened
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
sleep(5)
|
||||
if(!QDELETED(src))
|
||||
density = 0
|
||||
SetOpacity(0)
|
||||
set_opacity(0)
|
||||
update_icon()
|
||||
else
|
||||
var/srcturf = get_turf(src)
|
||||
@@ -64,7 +64,7 @@
|
||||
density = 1
|
||||
sleep(5)
|
||||
if(!QDELETED(src))
|
||||
SetOpacity(1)
|
||||
set_opacity(1)
|
||||
update_icon()
|
||||
air_update_turf(1)
|
||||
opening = 0
|
||||
@@ -94,22 +94,22 @@
|
||||
|
||||
/obj/structure/falsewall/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(opening)
|
||||
user << "<span class='warning'>You must wait until the door has stopped moving!</span>"
|
||||
to_chat(user, "<span class='warning'>You must wait until the door has stopped moving!</span>")
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(density)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.density)
|
||||
user << "<span class='warning'>[src] is blocked!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is blocked!</span>")
|
||||
return
|
||||
if(!isfloorturf(T))
|
||||
user << "<span class='warning'>[src] bolts must be tightened on the floor!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] bolts must be tightened on the floor!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] tightens some bolts on the wall.</span>", "<span class='notice'>You tighten the bolts on the wall.</span>")
|
||||
ChangeToWall()
|
||||
else
|
||||
user << "<span class='warning'>You can't reach, close it first!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't reach, close it first!</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
|
||||
@@ -29,22 +29,22 @@
|
||||
else if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == INTENT_HELP && !broken)
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
if(obj_integrity < max_integrity && WT.remove_fuel(2, user))
|
||||
user << "<span class='notice'>You begin repairing [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You begin repairing [src].</span>")
|
||||
playsound(loc, WT.usesound, 40, 1)
|
||||
if(do_after(user, 40*I.toolspeed, target = src))
|
||||
obj_integrity = max_integrity
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
update_icon()
|
||||
user << "<span class='notice'>You repair [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You repair [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is already in good condition!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
|
||||
return
|
||||
else if(istype(I, /obj/item/stack/sheet/glass) && broken)
|
||||
var/obj/item/stack/sheet/glass/G = I
|
||||
if(G.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two glass sheets to fix [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>You need two glass sheets to fix [src]!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start fixing [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && G.use(2))
|
||||
broken = 0
|
||||
obj_integrity = max_integrity
|
||||
@@ -53,13 +53,13 @@
|
||||
if(istype(I, /obj/item/weapon/twohanded/fireaxe) && !fireaxe)
|
||||
var/obj/item/weapon/twohanded/fireaxe/F = I
|
||||
if(F.wielded)
|
||||
user << "<span class='warning'>Unwield the [F.name] first.</span>"
|
||||
to_chat(user, "<span class='warning'>Unwield the [F.name] first.</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
fireaxe = F
|
||||
F.forceMove(src)
|
||||
user << "<span class='caution'>You place the [F.name] back in the [name].</span>"
|
||||
to_chat(user, "<span class='caution'>You place the [F.name] back in the [name].</span>")
|
||||
update_icon()
|
||||
return
|
||||
else if(!broken)
|
||||
@@ -111,7 +111,7 @@
|
||||
if(fireaxe)
|
||||
user.put_in_hands(fireaxe)
|
||||
fireaxe = null
|
||||
user << "<span class='caution'>You take the fire axe from the [name].</span>"
|
||||
to_chat(user, "<span class='caution'>You take the fire axe from the [name].</span>")
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
return
|
||||
@@ -165,10 +165,10 @@
|
||||
add_overlay("glass_raised")
|
||||
|
||||
/obj/structure/fireaxecabinet/proc/toggle_lock(mob/user)
|
||||
user << "<span class = 'caution'> Resetting circuitry...</span>"
|
||||
to_chat(user, "<span class = 'caution'> Resetting circuitry...</span>")
|
||||
playsound(src, 'sound/machines/locktoggle.ogg', 50, 1)
|
||||
if(do_after(user, 20, target = src))
|
||||
user << "<span class='caution'>You [locked ? "disable" : "re-enable"] the locking modules.</span>"
|
||||
to_chat(user, "<span class='caution'>You [locked ? "disable" : "re-enable"] the locking modules.</span>")
|
||||
locked = !locked
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
|
||||
/obj/structure/fireplace/proc/try_light(obj/item/O, mob/user)
|
||||
if(lit)
|
||||
user << "<span class='warning'>It's already lit!</span>"
|
||||
to_chat(user, "<span class='warning'>It's already lit!</span>")
|
||||
return FALSE
|
||||
if(!fuel_added)
|
||||
user << "<span class='warning'>[src] needs some fuel to burn!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] needs some fuel to burn!</span>")
|
||||
return FALSE
|
||||
var/msg = O.ignition_effect(src, user)
|
||||
if(msg)
|
||||
@@ -43,8 +43,7 @@
|
||||
var/space_remaining = MAXIMUM_BURN_TIMER - burn_time_remaining()
|
||||
var/space_for_logs = round(space_remaining / LOG_BURN_TIMER)
|
||||
if(space_for_logs < 1)
|
||||
user << "<span class='warning'>You can't fit any more of [T] in \
|
||||
[src]!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't fit any more of [T] in [src]!</span>")
|
||||
return
|
||||
var/logs_used = min(space_for_logs, wood.amount)
|
||||
wood.use(logs_used)
|
||||
@@ -88,20 +87,20 @@
|
||||
|
||||
/obj/structure/fireplace/proc/adjust_light()
|
||||
if(!lit)
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
return
|
||||
|
||||
switch(burn_time_remaining())
|
||||
if(0 to 500)
|
||||
SetLuminosity(1)
|
||||
set_light(1)
|
||||
if(500 to 1000)
|
||||
SetLuminosity(2)
|
||||
set_light(2)
|
||||
if(1000 to 1500)
|
||||
SetLuminosity(3)
|
||||
set_light(3)
|
||||
if(1500 to 2000)
|
||||
SetLuminosity(4)
|
||||
set_light(4)
|
||||
if(2000 to MAXIMUM_BURN_TIMER)
|
||||
SetLuminosity(6)
|
||||
set_light(6)
|
||||
|
||||
/obj/structure/fireplace/process()
|
||||
if(!lit)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/seed_vault/Destroy()
|
||||
new/obj/structure/fluff/empty_terrarium(get_turf(src))
|
||||
..()
|
||||
return ..()
|
||||
|
||||
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
|
||||
/obj/effect/mob_spawn/human/ash_walker
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
|
||||
new_spawn.real_name = random_unique_lizard_name(gender)
|
||||
new_spawn << "<b>Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!</b>"
|
||||
to_chat(new_spawn, "<b>Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!</b>")
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.underwear = "Nude"
|
||||
@@ -74,20 +74,20 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/exile/Destroy()
|
||||
new/obj/structure/fluff/empty_sleeper(get_turf(src))
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/human/exile/special(mob/living/new_spawn)
|
||||
new_spawn.real_name = "Wish Granter's Victim ([rand(0,999)])"
|
||||
var/wish = rand(1,4)
|
||||
switch(wish)
|
||||
if(1)
|
||||
new_spawn << "<b>You wished to kill, and kill you did. You've lost track of how many, but the spark of excitement that murder once held has winked out. You feel only regret.</b>"
|
||||
to_chat(new_spawn, "<b>You wished to kill, and kill you did. You've lost track of how many, but the spark of excitement that murder once held has winked out. You feel only regret.</b>")
|
||||
if(2)
|
||||
new_spawn << "<b>You wished for unending wealth, but no amount of money was worth this existence. Maybe charity might redeem your soul?</b>"
|
||||
to_chat(new_spawn, "<b>You wished for unending wealth, but no amount of money was worth this existence. Maybe charity might redeem your soul?</b>")
|
||||
if(3)
|
||||
new_spawn << "<b>You wished for power. Little good it did you, cast out of the light. You are the [gender == MALE ? "king" : "queen"] of a hell that holds no subjects. You feel only remorse.</b>"
|
||||
to_chat(new_spawn, "<b>You wished for power. Little good it did you, cast out of the light. You are the [gender == MALE ? "king" : "queen"] of a hell that holds no subjects. You feel only remorse.</b>")
|
||||
if(4)
|
||||
new_spawn << "<b>You wished for immortality, even as your friends lay dying behind you. No matter how many times you cast yourself into the lava, you awaken in this room again within a few days. There is no escape.</b>"
|
||||
to_chat(new_spawn, "<b>You wished for immortality, even as your friends lay dying behind you. No matter how many times you cast yourself into the lava, you awaken in this room again within a few days. There is no escape.</b>")
|
||||
|
||||
//Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom.
|
||||
/obj/effect/mob_spawn/human/golem
|
||||
@@ -140,9 +140,9 @@
|
||||
// also a tiny chance of being called "Plasma Meme"
|
||||
// which is clearly a feature
|
||||
|
||||
new_spawn << "[initial(X.info_text)]"
|
||||
to_chat(new_spawn, "[initial(X.info_text)]")
|
||||
if(!owner)
|
||||
new_spawn << "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked."
|
||||
to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.")
|
||||
else
|
||||
new_spawn.mind.store_memory("<b>Serve [owner.real_name], your creator.</b>")
|
||||
new_spawn.mind.enslave_mind_to_creator(owner)
|
||||
@@ -210,7 +210,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/hermit/Destroy()
|
||||
new/obj/structure/fluff/empty_cryostasis_sleeper(get_turf(src))
|
||||
..()
|
||||
return ..()
|
||||
|
||||
//Broken rejuvenation pod: Spawns in animal hospitals in lavaland. Ghosts become disoriented interns and are advised to search for help.
|
||||
/obj/effect/mob_spawn/human/doctor/alive/lavaland
|
||||
@@ -250,7 +250,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/prisoner_transport/Destroy()
|
||||
new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src))
|
||||
..()
|
||||
return ..()
|
||||
|
||||
//Space Hotel Staff
|
||||
/obj/effect/mob_spawn/human/hotel_staff //not free antag u little shits
|
||||
|
||||
@@ -14,16 +14,16 @@
|
||||
. = ..()
|
||||
switch(state)
|
||||
if(GIRDER_REINF)
|
||||
user << "<span class='notice'>The support struts are <b>screwed</b> in place.</span>"
|
||||
to_chat(user, "<span class='notice'>The support struts are <b>screwed</b> in place.</span>")
|
||||
if(GIRDER_REINF_STRUTS)
|
||||
user << "<span class='notice'>The support struts are <i>unscrewed</i> and the inner <b>grille</b> is intact.</span>"
|
||||
to_chat(user, "<span class='notice'>The support struts are <i>unscrewed</i> and the inner <b>grille</b> is intact.</span>")
|
||||
if(GIRDER_NORMAL)
|
||||
if(can_displace)
|
||||
user << "<span class='notice'>The bolts are <b>wrenched</b> in place.</span>"
|
||||
to_chat(user, "<span class='notice'>The bolts are <b>wrenched</b> in place.</span>")
|
||||
if(GIRDER_DISPLACED)
|
||||
user << "<span class='notice'>The bolts are <i>loosened</i>, but the <b>screws</b> are holding [src] together.</span>"
|
||||
to_chat(user, "<span class='notice'>The bolts are <i>loosened</i>, but the <b>screws</b> are holding [src] together.</span>")
|
||||
if(GIRDER_DISASSEMBLED)
|
||||
user << "<span class='notice'>[src] is disassembled! You probably shouldn't be able to see this examine message.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] is disassembled! You probably shouldn't be able to see this examine message.</span>")
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
@@ -36,69 +36,69 @@
|
||||
if(state != GIRDER_DISPLACED)
|
||||
return
|
||||
state = GIRDER_DISASSEMBLED
|
||||
user << "<span class='notice'>You disassemble the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You disassemble the girder.</span>")
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 2)
|
||||
M.add_fingerprint(user)
|
||||
qdel(src)
|
||||
else if(state == GIRDER_REINF)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>You start unsecuring support struts...</span>"
|
||||
to_chat(user, "<span class='notice'>You start unsecuring support struts...</span>")
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(state != GIRDER_REINF)
|
||||
return
|
||||
user << "<span class='notice'>You unsecure the support struts.</span>"
|
||||
to_chat(user, "<span class='notice'>You unsecure the support struts.</span>")
|
||||
state = GIRDER_REINF_STRUTS
|
||||
else if(state == GIRDER_REINF_STRUTS)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>You start securing support struts...</span>"
|
||||
to_chat(user, "<span class='notice'>You start securing support struts...</span>")
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(state != GIRDER_REINF_STRUTS)
|
||||
return
|
||||
user << "<span class='notice'>You secure the support struts.</span>"
|
||||
to_chat(user, "<span class='notice'>You secure the support struts.</span>")
|
||||
state = GIRDER_REINF
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(!isfloorturf(loc))
|
||||
user << "<span class='warning'>A floor must be present to secure the girder!</span>"
|
||||
to_chat(user, "<span class='warning'>A floor must be present to secure the girder!</span>")
|
||||
return
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>You start securing the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>You start securing the girder...</span>")
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You secure the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You secure the girder.</span>")
|
||||
var/obj/structure/girder/G = new (loc)
|
||||
transfer_fingerprints_to(G)
|
||||
qdel(src)
|
||||
else if(state == GIRDER_NORMAL && can_displace)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>You start unsecuring the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>You start unsecuring the girder...</span>")
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You unsecure the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You unsecure the girder.</span>")
|
||||
var/obj/structure/girder/displaced/D = new (loc)
|
||||
transfer_fingerprints_to(D)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
user << "<span class='notice'>You start slicing apart the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>You start slicing apart the girder...</span>")
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You slice apart the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You slice apart the girder.</span>")
|
||||
var/obj/item/stack/sheet/metal/M = new (loc, 2)
|
||||
M.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer))
|
||||
var/obj/item/weapon/pickaxe/drill/jackhammer/D = W
|
||||
user << "<span class='notice'>You smash through the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>You smash through the girder!</span>")
|
||||
new /obj/item/stack/sheet/metal(get_turf(src))
|
||||
D.playDigSound()
|
||||
qdel(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == GIRDER_REINF_STRUTS)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>You start removing the inner grille...</span>"
|
||||
to_chat(user, "<span class='notice'>You start removing the inner grille...</span>")
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You remove the inner grille.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the inner grille.</span>")
|
||||
new /obj/item/stack/sheet/plasteel(get_turf(src))
|
||||
var/obj/structure/girder/G = new (loc)
|
||||
transfer_fingerprints_to(G)
|
||||
@@ -106,40 +106,40 @@
|
||||
|
||||
else if(istype(W, /obj/item/stack))
|
||||
if(iswallturf(loc))
|
||||
user << "<span class='warning'>There is already a wall present!</span>"
|
||||
to_chat(user, "<span class='warning'>There is already a wall present!</span>")
|
||||
return
|
||||
if(!isfloorturf(src.loc))
|
||||
user << "<span class='warning'>A floor must be present to build a false wall!</span>"
|
||||
to_chat(user, "<span class='warning'>A floor must be present to build a false wall!</span>")
|
||||
return
|
||||
if (locate(/obj/structure/falsewall) in src.loc.contents)
|
||||
user << "<span class='warning'>There is already a false wall present!</span>"
|
||||
to_chat(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.get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two rods to create a false wall!</span>"
|
||||
to_chat(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>"
|
||||
to_chat(user, "<span class='notice'>You start building a reinforced false wall...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
if(!src.loc || !S || S.get_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>"
|
||||
to_chat(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.get_amount() < 5)
|
||||
user << "<span class='warning'>You need at least five rods to add plating!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least five rods to add plating!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding plating...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding plating...</span>")
|
||||
if (do_after(user, 40, target = src))
|
||||
if(!src.loc || !S || S.get_amount() < 5)
|
||||
return
|
||||
S.use(5)
|
||||
user << "<span class='notice'>You add the plating.</span>"
|
||||
to_chat(user, "<span class='notice'>You add the plating.</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/closed/wall/mineral/iron)
|
||||
transfer_fingerprints_to(T)
|
||||
@@ -153,27 +153,27 @@
|
||||
if(istype(S,/obj/item/stack/sheet/metal))
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(S.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two sheets of metal to create a false wall!</span>"
|
||||
to_chat(user, "<span class='warning'>You need two sheets of metal to create a false wall!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start building a false wall...</span>"
|
||||
to_chat(user, "<span class='notice'>You start building a false wall...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
if(!src.loc || !S || S.get_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>"
|
||||
to_chat(user, "<span class='notice'>You create a false wall. Push on it to open or close the passage.</span>")
|
||||
var/obj/structure/falsewall/F = new (loc)
|
||||
transfer_fingerprints_to(F)
|
||||
qdel(src)
|
||||
else
|
||||
if(S.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two sheets of metal to finish a wall!</span>"
|
||||
to_chat(user, "<span class='warning'>You need two sheets of metal to finish a wall!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding plating...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding plating...</span>")
|
||||
if (do_after(user, 40, target = src))
|
||||
if(loc == null || S.get_amount() < 2)
|
||||
return
|
||||
S.use(2)
|
||||
user << "<span class='notice'>You add the plating.</span>"
|
||||
to_chat(user, "<span class='notice'>You add the plating.</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/closed/wall)
|
||||
transfer_fingerprints_to(T)
|
||||
@@ -183,14 +183,14 @@
|
||||
if(istype(S,/obj/item/stack/sheet/plasteel))
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(S.get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two sheets to create a false wall!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two sheets to create a false wall!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start building a reinforced false wall...</span>"
|
||||
to_chat(user, "<span class='notice'>You start building a reinforced false wall...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
if(!src.loc || !S || S.get_amount() < 2)
|
||||
return
|
||||
S.use(2)
|
||||
user << "<span class='notice'>You create a reinforced false wall. Push on it to open or close the passage.</span>"
|
||||
to_chat(user, "<span class='notice'>You create a reinforced false wall. Push on it to open or close the passage.</span>")
|
||||
var/obj/structure/falsewall/reinforced/FW = new (loc)
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
@@ -198,12 +198,12 @@
|
||||
if(state == GIRDER_REINF)
|
||||
if(S.get_amount() < 1)
|
||||
return
|
||||
user << "<span class='notice'>You start finalizing the reinforced wall...</span>"
|
||||
to_chat(user, "<span class='notice'>You start finalizing the reinforced wall...</span>")
|
||||
if(do_after(user, 50, target = src))
|
||||
if(!src.loc || !S || S.get_amount() < 1)
|
||||
return
|
||||
S.use(1)
|
||||
user << "<span class='notice'>You fully reinforce the wall.</span>"
|
||||
to_chat(user, "<span class='notice'>You fully reinforce the wall.</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/closed/wall/r_wall)
|
||||
transfer_fingerprints_to(T)
|
||||
@@ -212,12 +212,12 @@
|
||||
else
|
||||
if(S.get_amount() < 1)
|
||||
return
|
||||
user << "<span class='notice'>You start reinforcing the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>You start reinforcing the girder...</span>")
|
||||
if (do_after(user, 60, target = src))
|
||||
if(!src.loc || !S || S.get_amount() < 1)
|
||||
return
|
||||
S.use(1)
|
||||
user << "<span class='notice'>You reinforce the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You reinforce the girder.</span>")
|
||||
var/obj/structure/girder/reinforced/R = new (loc)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
@@ -227,27 +227,27 @@
|
||||
var/M = S.sheettype
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(S.get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two sheets to create a false wall!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two sheets to create a false wall!</span>")
|
||||
return
|
||||
if(do_after(user, 20, target = src))
|
||||
if(!src.loc || !S || S.get_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>"
|
||||
to_chat(user, "<span class='notice'>You create a false wall. Push on it to open or close the passage.</span>")
|
||||
var/F = text2path("/obj/structure/falsewall/[M]")
|
||||
var/obj/structure/FW = new F (loc)
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
else
|
||||
if(S.get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two sheets to add plating!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two sheets to add plating!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding plating...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding plating...</span>")
|
||||
if (do_after(user, 40, target = src))
|
||||
if(!src.loc || !S || S.get_amount() < 2)
|
||||
return
|
||||
S.use(2)
|
||||
user << "<span class='notice'>You add the plating.</span>"
|
||||
to_chat(user, "<span class='notice'>You add the plating.</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(text2path("/turf/closed/wall/mineral/[M]"))
|
||||
transfer_fingerprints_to(T)
|
||||
@@ -262,7 +262,7 @@
|
||||
if(!user.drop_item())
|
||||
return
|
||||
P.loc = src.loc
|
||||
user << "<span class='notice'>You fit the pipe into \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You fit the pipe into \the [src].</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -341,21 +341,21 @@
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0,user))
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
user << "<span class='notice'>You start slicing apart the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>You start slicing apart the girder...</span>")
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if( !WT.isOn() )
|
||||
return
|
||||
user << "<span class='notice'>You slice apart the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You slice apart the girder.</span>")
|
||||
var/obj/item/stack/sheet/runed_metal/R = new(get_turf(src))
|
||||
R.amount = 1
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
|
||||
user << "<span class='notice'>You start slicing apart the girder...</span>"
|
||||
to_chat(user, "<span class='notice'>You start slicing apart the girder...</span>")
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You slice apart the girder.</span>"
|
||||
to_chat(user, "<span class='notice'>You slice apart the girder.</span>")
|
||||
var/obj/item/stack/sheet/runed_metal/R = new(get_turf(src))
|
||||
R.amount = 1
|
||||
transfer_fingerprints_to(R)
|
||||
@@ -363,7 +363,7 @@
|
||||
|
||||
else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer))
|
||||
var/obj/item/weapon/pickaxe/drill/jackhammer/D = W
|
||||
user << "<span class='notice'>Your jackhammer smashes through the girder!</span>"
|
||||
to_chat(user, "<span class='notice'>Your jackhammer smashes through the girder!</span>")
|
||||
var/obj/item/stack/sheet/runed_metal/R = new(get_turf(src))
|
||||
R.amount = 2
|
||||
transfer_fingerprints_to(R)
|
||||
@@ -373,7 +373,7 @@
|
||||
else if(istype(W, /obj/item/stack/sheet/runed_metal))
|
||||
var/obj/item/stack/sheet/runed_metal/R = W
|
||||
if(R.get_amount() < 1)
|
||||
user << "<span class='warning'>You need at least one sheet of runed metal to construct a runed wall!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least one sheet of runed metal to construct a runed wall!</span>")
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] begins laying runed metal on [src]...</span>", "<span class='notice'>You begin constructing a runed wall...</span>")
|
||||
if(do_after(user, 50, target = src))
|
||||
@@ -395,3 +395,25 @@
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/girder/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd)
|
||||
switch(the_rcd.mode)
|
||||
if(RCD_FLOORWALL)
|
||||
return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 8)
|
||||
if(RCD_DECONSTRUCT)
|
||||
return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 13)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/girder/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode)
|
||||
var/turf/T = get_turf(src)
|
||||
switch(passed_mode)
|
||||
if(RCD_FLOORWALL)
|
||||
to_chat(user, "<span class='notice'>You finish a wall.</span>")
|
||||
T.ChangeTurf(/turf/closed/wall)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
if(RCD_DECONSTRUCT)
|
||||
to_chat(user, "<span class='notice'>You deconstruct the girder.</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -18,6 +18,29 @@
|
||||
var/grille_type = null
|
||||
var/broken_type = /obj/structure/grille/broken
|
||||
|
||||
/obj/structure/grille/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd)
|
||||
switch(the_rcd.mode)
|
||||
if(RCD_DECONSTRUCT)
|
||||
return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5)
|
||||
if(RCD_WINDOWGRILLE)
|
||||
return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 10)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/grille/rcd_act(mob/user, var/obj/item/weapon/rcd/the_rcd, passed_mode)
|
||||
switch(passed_mode)
|
||||
if(RCD_DECONSTRUCT)
|
||||
to_chat(user, "<span class='notice'>You deconstruct the grille.</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
if(RCD_WINDOWGRILLE)
|
||||
if(locate(/obj/structure/window) in loc)
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You construct the window.</span>")
|
||||
var/obj/structure/window/WD = new the_rcd.window_type(loc)
|
||||
WD.anchored = TRUE
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/structure/grille/ratvar_act()
|
||||
if(broken)
|
||||
new /obj/structure/grille/ratvar/broken(src.loc)
|
||||
@@ -110,16 +133,16 @@
|
||||
if (!broken)
|
||||
var/obj/item/stack/ST = W
|
||||
if (ST.get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two sheets of glass for that!</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two sheets of glass for that!</span>")
|
||||
return
|
||||
var/dir_to_set = SOUTHWEST
|
||||
if(!anchored)
|
||||
user << "<span class='warning'>[src] needs to be fastened to the floor first!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] needs to be fastened to the floor first!</span>")
|
||||
return
|
||||
for(var/obj/structure/window/WINDOW in loc)
|
||||
user << "<span class='warning'>There is already a window there!</span>"
|
||||
to_chat(user, "<span class='warning'>There is already a window there!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start placing the window...</span>"
|
||||
to_chat(user, "<span class='notice'>You start placing the window...</span>")
|
||||
if(do_after(user,20, target = src))
|
||||
if(!src.loc || !anchored) //Grille broken or unanchored while waiting
|
||||
return
|
||||
@@ -135,7 +158,7 @@
|
||||
WD.anchored = 0
|
||||
WD.state = 0
|
||||
ST.use(2)
|
||||
user << "<span class='notice'>You place [WD] on [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You place [WD] on [src].</span>")
|
||||
return
|
||||
//window placing end
|
||||
|
||||
@@ -230,17 +253,12 @@
|
||||
|
||||
/obj/structure/grille/ratvar/New()
|
||||
..()
|
||||
change_construction_value(1)
|
||||
if(broken)
|
||||
new /obj/effect/overlay/temp/ratvar/grille/broken(get_turf(src))
|
||||
else
|
||||
new /obj/effect/overlay/temp/ratvar/grille(get_turf(src))
|
||||
new /obj/effect/overlay/temp/ratvar/beam/grille(get_turf(src))
|
||||
|
||||
/obj/structure/grille/ratvar/Destroy()
|
||||
change_construction_value(-1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/grille/ratvar/narsie_act()
|
||||
take_damage(rand(1, 3), BRUTE)
|
||||
if(src)
|
||||
@@ -261,4 +279,3 @@
|
||||
rods_broken = 0
|
||||
grille_type = /obj/structure/grille/ratvar
|
||||
broken_type = null
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
if(!user.drop_item())
|
||||
return
|
||||
contents += I
|
||||
user << "<span class='notice'>You place [I] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You place [I] in [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
|
||||
/obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user)
|
||||
if(reagents.total_volume < 1)
|
||||
user << "<span class='warning'>[src] is out of water!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is out of water!</span>")
|
||||
return 0
|
||||
else
|
||||
reagents.trans_to(mop, 5)
|
||||
user << "<span class='notice'>You wet [mop] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You wet [mop] in [src].</span>")
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
return 1
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
return
|
||||
I.loc = src
|
||||
updateUsrDialog()
|
||||
user << "<span class='notice'>You put [I] into [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -51,40 +51,40 @@
|
||||
if(!mymop)
|
||||
m.janicart_insert(user, src)
|
||||
else
|
||||
user << fail_msg
|
||||
to_chat(user, fail_msg)
|
||||
|
||||
else if(istype(I, /obj/item/weapon/storage/bag/trash))
|
||||
if(!mybag)
|
||||
var/obj/item/weapon/storage/bag/trash/t=I
|
||||
t.janicart_insert(user, src)
|
||||
else
|
||||
user << fail_msg
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/spray/cleaner))
|
||||
if(!myspray)
|
||||
put_in_cart(I, user)
|
||||
myspray=I
|
||||
update_icon()
|
||||
else
|
||||
user << fail_msg
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/device/lightreplacer))
|
||||
if(!myreplacer)
|
||||
var/obj/item/device/lightreplacer/l=I
|
||||
l.janicart_insert(user,src)
|
||||
else
|
||||
user << fail_msg
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/weapon/caution))
|
||||
if(signs < max_signs)
|
||||
put_in_cart(I, user)
|
||||
signs++
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='warning'>[src] can't hold any more signs!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] can't hold any more signs!</span>")
|
||||
else if(mybag)
|
||||
mybag.attackby(I, user)
|
||||
else if(istype(I, /obj/item/weapon/crowbar))
|
||||
user.visible_message("[user] begins to empty the contents of [src].", "<span class='notice'>You begin to empty the contents of [src]...</span>")
|
||||
if(do_after(user, 30*I.toolspeed, target = src))
|
||||
usr << "<span class='notice'>You empty the contents of [src]'s bucket onto the floor.</span>"
|
||||
to_chat(usr, "<span class='notice'>You empty the contents of [src]'s bucket onto the floor.</span>")
|
||||
reagents.reaction(src.loc)
|
||||
src.reagents.clear_reagents()
|
||||
else
|
||||
@@ -117,29 +117,29 @@
|
||||
if(href_list["garbage"])
|
||||
if(mybag)
|
||||
user.put_in_hands(mybag)
|
||||
user << "<span class='notice'>You take [mybag] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take [mybag] from [src].</span>")
|
||||
mybag = null
|
||||
if(href_list["mop"])
|
||||
if(mymop)
|
||||
user.put_in_hands(mymop)
|
||||
user << "<span class='notice'>You take [mymop] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take [mymop] from [src].</span>")
|
||||
mymop = null
|
||||
if(href_list["spray"])
|
||||
if(myspray)
|
||||
user.put_in_hands(myspray)
|
||||
user << "<span class='notice'>You take [myspray] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take [myspray] from [src].</span>")
|
||||
myspray = null
|
||||
if(href_list["replacer"])
|
||||
if(myreplacer)
|
||||
user.put_in_hands(myreplacer)
|
||||
user << "<span class='notice'>You take [myreplacer] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take [myreplacer] from [src].</span>")
|
||||
myreplacer = null
|
||||
if(href_list["sign"])
|
||||
if(signs)
|
||||
var/obj/item/weapon/caution/Sign = locate() in src
|
||||
if(Sign)
|
||||
user.put_in_hands(Sign)
|
||||
user << "<span class='notice'>You take \a [Sign] from [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You take \a [Sign] from [src].</span>")
|
||||
signs--
|
||||
else
|
||||
WARNING("Signs ([signs]) didn't match contents")
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/obj/item/stack/rods/R = I
|
||||
if(R.get_amount() >= 4)
|
||||
R.use(4)
|
||||
user << "<span class='notice'>You add spikes to the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You add spikes to the frame.</span>")
|
||||
var/obj/F = new /obj/structure/kitchenspike(src.loc)
|
||||
transfer_fingerprints_to(F)
|
||||
qdel(src)
|
||||
@@ -27,7 +27,7 @@
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
if(!WT.remove_fuel(0, user))
|
||||
return
|
||||
user << "<span class='notice'>You begin cutting \the [src] apart...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin cutting \the [src] apart...</span>")
|
||||
playsound(src.loc, WT.usesound, 40, 1)
|
||||
if(do_after(user, 40*WT.toolspeed, 1, target = src))
|
||||
if(!WT.isOn())
|
||||
@@ -64,10 +64,10 @@
|
||||
if(!has_buckled_mobs())
|
||||
playsound(loc, I.usesound, 100, 1)
|
||||
if(do_after(user, 20*I.toolspeed, target = src))
|
||||
user << "<span class='notice'>You pry the spikes out of the frame.</span>"
|
||||
to_chat(user, "<span class='notice'>You pry the spikes out of the frame.</span>")
|
||||
deconstruct(TRUE)
|
||||
else
|
||||
user << "<span class='notice'>You can't do that while something's on the spike!</span>"
|
||||
to_chat(user, "<span class='notice'>You can't do that while something's on the spike!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
M.adjustBruteLoss(30)
|
||||
if(!do_after(M, 1200, target = src))
|
||||
if(M && M.buckled)
|
||||
M << "<span class='warning'>You fail to free yourself!</span>"
|
||||
to_chat(M, "<span class='warning'>You fail to free yourself!</span>")
|
||||
return
|
||||
if(!M.buckled)
|
||||
return
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
else if(down)
|
||||
go_down(user,is_ghost)
|
||||
else
|
||||
user << "<span class='warning'>[src] doesn't seem to lead anywhere!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] doesn't seem to lead anywhere!</span>")
|
||||
|
||||
if(!is_ghost)
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -39,11 +39,9 @@
|
||||
new/obj/structure/lattice/clockwork/large(loc)
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C, mob/user, params)
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = C
|
||||
if(WT.remove_fuel(0, user))
|
||||
user << "<span class='notice'>Slicing [name] joints ...</span>"
|
||||
deconstruct()
|
||||
if(istype(C, /obj/item/weapon/wirecutters))
|
||||
to_chat(user, "<span class='notice'>Slicing [name] joints ...</span>")
|
||||
deconstruct()
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "You are dead. Insert quarter to continue."
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle1"
|
||||
light_color = LIGHT_COLOR_FIRE
|
||||
|
||||
var/icon_state_active = "candle1_lit"
|
||||
var/icon_state_inactive = "candle1"
|
||||
@@ -37,10 +38,10 @@
|
||||
float(linked_minds.len)
|
||||
if(linked_minds.len)
|
||||
START_PROCESSING(SSobj, src)
|
||||
SetLuminosity(lit_luminosity)
|
||||
set_light(lit_luminosity)
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
SetLuminosity(0)
|
||||
set_light(0)
|
||||
|
||||
/obj/structure/life_candle/update_icon()
|
||||
if(linked_minds.len)
|
||||
@@ -51,9 +52,9 @@
|
||||
/obj/structure/life_candle/examine(mob/user)
|
||||
. = ..()
|
||||
if(linked_minds.len)
|
||||
user << "[src] is active, and linked to [linked_minds.len] souls."
|
||||
to_chat(user, "[src] is active, and linked to [linked_minds.len] souls.")
|
||||
else
|
||||
user << "It is static, still, unmoving."
|
||||
to_chat(user, "It is static, still, unmoving.")
|
||||
|
||||
/obj/structure/life_candle/process()
|
||||
if(!linked_minds.len)
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
|
||||
At 7:30 AM on March 8th, 2017, ArcLumin died in a fatal car crash on impact.
|
||||
Rest in peace, man. You did good work.
|
||||
When a contributor for SS13 dies, all codebases feel it and suffer.
|
||||
We may disagree on whether farts should be a thing, or what color to paint the bikeshed,
|
||||
but we are all contributors together.
|
||||
|
||||
Goodbye, man. We'll miss you.
|
||||
|
||||
This memorial has been designed for him and any future coders to perish.
|
||||
|
||||
*/
|
||||
|
||||
/obj/structure/fluff/arc
|
||||
name = "Tomb of the Unknown Employee"
|
||||
desc = "Here rests an unknown employee\nUnknown by name or rank\nWhose acts will not be forgotten"
|
||||
icon = 'icons/obj/tomb.dmi'
|
||||
icon_state = "memorial"
|
||||
density = 1
|
||||
anchored = 1
|
||||
@@ -125,9 +125,9 @@
|
||||
/obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W,/obj/item/weapon/pickaxe))
|
||||
var/obj/item/weapon/pickaxe/digTool = W
|
||||
user << "<span class='notice'>You start digging the [name]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start digging the [name]...</span>")
|
||||
if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src)
|
||||
user << "<span class='notice'>You finish digging.</span>"
|
||||
to_chat(user, "<span class='notice'>You finish digging.</span>")
|
||||
deconstruct(TRUE)
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
attack_hand(user)
|
||||
@@ -165,7 +165,7 @@
|
||||
sheetType = /obj/item/stack/sheet/mineral/uranium
|
||||
obj_integrity = 300
|
||||
max_integrity = 300
|
||||
luminosity = 2
|
||||
light_range = 2
|
||||
|
||||
/obj/structure/mineral_door/sandstone
|
||||
name = "sandstone door"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
var/userloc = H.loc
|
||||
|
||||
//see code/modules/mob/new_player/preferences.dm at approx line 545 for comments!
|
||||
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
|
||||
//this is largely copypasted from there.
|
||||
|
||||
//handle facial hair (if necessary)
|
||||
@@ -66,12 +66,12 @@
|
||||
if(broken)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(WT.remove_fuel(0, user))
|
||||
user << "<span class='notice'>You begin repairing [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin repairing [src]...</span>")
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
if(do_after(user, 10*I.toolspeed, target = src))
|
||||
if(!user || !WT || !WT.isOn())
|
||||
return
|
||||
user << "<span class='notice'>You repair [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You repair [src].</span>")
|
||||
broken = 0
|
||||
icon_state = initial(icon_state)
|
||||
desc = initial(desc)
|
||||
@@ -164,7 +164,7 @@
|
||||
H.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
|
||||
|
||||
else
|
||||
H << "<span class='notice'>Invalid color. Your color is not bright enough.</span>"
|
||||
to_chat(H, "<span class='notice'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
H.update_body()
|
||||
H.update_hair()
|
||||
@@ -179,14 +179,14 @@
|
||||
if(H.gender == "male")
|
||||
if(alert(H, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes")
|
||||
H.gender = "female"
|
||||
H << "<span class='notice'>Man, you feel like a woman!</span>"
|
||||
to_chat(H, "<span class='notice'>Man, you feel like a woman!</span>")
|
||||
else
|
||||
return
|
||||
|
||||
else
|
||||
if(alert(H, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes")
|
||||
H.gender = "male"
|
||||
H << "<span class='notice'>Whoa man, you feel like a man!</span>"
|
||||
to_chat(H, "<span class='notice'>Whoa man, you feel like a man!</span>")
|
||||
else
|
||||
return
|
||||
H.dna.update_ui_block(DNA_GENDER_BLOCK)
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/mop))
|
||||
if(reagents.total_volume < 1)
|
||||
user << "[src] is out of water!</span>"
|
||||
to_chat(user, "[src] is out of water!</span>")
|
||||
else
|
||||
reagents.trans_to(I, 5)
|
||||
user << "<span class='notice'>You wet [I] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You wet [I] in [src].</span>")
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
else
|
||||
return ..()
|
||||
@@ -50,10 +50,10 @@
|
||||
|
||||
/obj/structure/bodycontainer/attack_hand(mob/user)
|
||||
if(locked)
|
||||
user << "<span class='danger'>It's locked.</span>"
|
||||
to_chat(user, "<span class='danger'>It's locked.</span>")
|
||||
return
|
||||
if(!connected)
|
||||
user << "That doesn't appear to have a tray."
|
||||
to_chat(user, "That doesn't appear to have a tray.")
|
||||
return
|
||||
if(connected.loc == src)
|
||||
open()
|
||||
@@ -89,7 +89,7 @@
|
||||
open()
|
||||
|
||||
/obj/structure/bodycontainer/relay_container_resist(mob/living/user, obj/O)
|
||||
user << "<span class='notice'>You slam yourself into the side of [O].</span>"
|
||||
to_chat(user, "<span class='notice'>You slam yourself into the side of [O].</span>")
|
||||
container_resist(user)
|
||||
|
||||
/obj/structure/bodycontainer/proc/open()
|
||||
@@ -156,7 +156,7 @@ var/global/list/crematoriums = new/list()
|
||||
var/id = 1
|
||||
|
||||
/obj/structure/bodycontainer/crematorium/attack_robot(mob/user) //Borgs can't use crematoriums without help
|
||||
user << "<span class='warning'>[src] is locked against you.</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is locked against you.</span>")
|
||||
return
|
||||
|
||||
/obj/structure/bodycontainer/crematorium/Destroy()
|
||||
@@ -203,7 +203,7 @@ var/global/list/crematoriums = new/list()
|
||||
if (M.stat != DEAD)
|
||||
M.emote("scream")
|
||||
if(user)
|
||||
user.attack_log +="\[[time_stamp()]\] Cremated <b>[M]/[M.ckey]</b>"
|
||||
user.log_message("Cremated <b>[M]/[M.ckey]</b>", INDIVIDUAL_ATTACK_LOG)
|
||||
log_attack("\[[time_stamp()]\] <b>[user]/[user.ckey]</b> cremated <b>[M]/[M.ckey]</b>")
|
||||
else
|
||||
log_attack("\[[time_stamp()]\] <b>UNKNOWN</b> cremated <b>[M]/[M.ckey]</b>")
|
||||
@@ -258,7 +258,7 @@ var/global/list/crematoriums = new/list()
|
||||
connected.close()
|
||||
add_fingerprint(user)
|
||||
else
|
||||
user << "<span class='warning'>That's not connected to anything!</span>"
|
||||
to_chat(user, "<span class='warning'>That's not connected to anything!</span>")
|
||||
|
||||
/obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user)
|
||||
if(!istype(O, /atom/movable) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user)
|
||||
|
||||
@@ -83,18 +83,18 @@
|
||||
cur_acc[i] = "n"
|
||||
|
||||
for(var/line in lines)
|
||||
//world << line
|
||||
//to_chat(world, line)
|
||||
for(var/beat in splittext(lowertext(line), ","))
|
||||
//world << "beat: [beat]"
|
||||
//to_chat(world, "beat: [beat]")
|
||||
var/list/notes = splittext(beat, "/")
|
||||
for(var/note in splittext(notes[1], "-"))
|
||||
//world << "note: [note]"
|
||||
//to_chat(world, "note: [note]")
|
||||
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
|
||||
playing = 0
|
||||
return
|
||||
if(lentext(note) == 0)
|
||||
continue
|
||||
//world << "Parse: [copytext(note,1,2)]"
|
||||
//to_chat(world, "Parse: [copytext(note,1,2)]")
|
||||
var/cur_note = text2ascii(note) - 96
|
||||
if(cur_note < 1 || cur_note > 7)
|
||||
continue
|
||||
@@ -218,12 +218,12 @@
|
||||
else
|
||||
tempo = sanitize_tempo(5) // default 120 BPM
|
||||
if(lines.len > 50)
|
||||
usr << "Too many lines!"
|
||||
to_chat(usr, "Too many lines!")
|
||||
lines.Cut(51)
|
||||
var/linenum = 1
|
||||
for(var/l in lines)
|
||||
if(lentext(l) > 50)
|
||||
usr << "Line [linenum] too long!"
|
||||
to_chat(usr, "Line [linenum] too long!")
|
||||
lines.Remove(l)
|
||||
else
|
||||
linenum++
|
||||
@@ -339,7 +339,7 @@
|
||||
|
||||
/obj/structure/piano/attack_hand(mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
interact(user)
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
if (istype(O, /obj/item/weapon/wrench))
|
||||
if (!anchored && !isinspace())
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
user << "<span class='notice'> You begin to tighten \the [src] to the floor...</span>"
|
||||
to_chat(user, "<span class='notice'> You begin to tighten \the [src] to the floor...</span>")
|
||||
if (do_after(user, 20*O.toolspeed, target = src))
|
||||
user.visible_message( \
|
||||
"[user] tightens \the [src]'s casters.", \
|
||||
@@ -366,7 +366,7 @@
|
||||
anchored = 1
|
||||
else if(anchored)
|
||||
playsound(src.loc, O.usesound, 50, 1)
|
||||
user << "<span class='notice'> You begin to loosen \the [src]'s casters...</span>"
|
||||
to_chat(user, "<span class='notice'> You begin to loosen \the [src]'s casters...</span>")
|
||||
if (do_after(user, 40*O.toolspeed, target = src))
|
||||
user.visible_message( \
|
||||
"[user] loosens \the [src]'s casters.", \
|
||||
|
||||
@@ -26,16 +26,16 @@
|
||||
/obj/structure/noticeboard/attackby(obj/item/weapon/O, mob/user, params)
|
||||
if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo))
|
||||
if(!allowed(user))
|
||||
user << "<span class='info'>You are not authorized to add notices</span>"
|
||||
to_chat(user, "<span class='info'>You are not authorized to add notices</span>")
|
||||
return
|
||||
if(notices < 5)
|
||||
if(!user.transferItemToLoc(O, src))
|
||||
return
|
||||
notices++
|
||||
icon_state = "nboard0[notices]"
|
||||
user << "<span class='notice'>You pin the [O] to the noticeboard.</span>"
|
||||
to_chat(user, "<span class='notice'>You pin the [O] to the noticeboard.</span>")
|
||||
else
|
||||
user << "<span class='notice'>The notice board is full</span>"
|
||||
to_chat(user, "<span class='notice'>The notice board is full</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
add_fingerprint(usr)
|
||||
P.attackby(I, usr)
|
||||
else
|
||||
usr << "<span class='notice'>You'll need something to write with!</span>"
|
||||
to_chat(usr, "<span class='notice'>You'll need something to write with!</span>")
|
||||
|
||||
if(href_list["read"])
|
||||
var/obj/item/I = locate(href_list["read"]) in contents
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
. = ..()
|
||||
switch(state)
|
||||
if(PLASTIC_FLAPS_NORMAL)
|
||||
user << "<span class='notice'>[src] are <b>screwed</b> to the floor.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] are <b>screwed</b> to the floor.</span>")
|
||||
if(PLASTIC_FLAPS_DETACHED)
|
||||
user << "<span class='notice'>[src] are no longer <i>screwed</i> to the floor, and the flaps can be <b>cut</b> apart.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] are no longer <i>screwed</i> to the floor, and the flaps can be <b>cut</b> apart.</span>")
|
||||
|
||||
/obj/structure/plasticflaps/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
@@ -28,7 +28,7 @@
|
||||
return
|
||||
state = PLASTIC_FLAPS_DETACHED
|
||||
anchored = FALSE
|
||||
user << "<span class='notice'>You unscrew [src] from the floor.</span>"
|
||||
to_chat(user, "<span class='notice'>You unscrew [src] from the floor.</span>")
|
||||
else if(state == PLASTIC_FLAPS_DETACHED)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] screws [src] to the floor.</span>", "<span class='notice'>You start to screw [src] to the floor...</span>", "You hear rustling noises.")
|
||||
@@ -37,7 +37,7 @@
|
||||
return
|
||||
state = PLASTIC_FLAPS_NORMAL
|
||||
anchored = TRUE
|
||||
user << "<span class='notice'>You screw [src] from the floor.</span>"
|
||||
to_chat(user, "<span class='notice'>You screw [src] from the floor.</span>")
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
if(state == PLASTIC_FLAPS_DETACHED)
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
@@ -45,7 +45,7 @@
|
||||
if(do_after(user, 50*W.toolspeed, target = src))
|
||||
if(state != PLASTIC_FLAPS_DETACHED)
|
||||
return
|
||||
user << "<span class='notice'>You cut apart [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You cut apart [src].</span>")
|
||||
var/obj/item/stack/sheet/plastic/five/P = new(loc)
|
||||
P.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
@@ -43,10 +43,10 @@
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(anchored)
|
||||
user << "Unweld the [src] first!"
|
||||
to_chat(user, "Unweld the [src] first!")
|
||||
if(do_after(user, 80*W.toolspeed, target = src))
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
user << "You dismantle the [src]."
|
||||
to_chat(user, "You dismantle the [src].")
|
||||
new framebuildstacktype(loc, framebuildstackamount)
|
||||
new buildstacktype(loc, buildstackamount)
|
||||
qdel(src)
|
||||
@@ -63,7 +63,7 @@
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
anchored = 1
|
||||
user << "<span class='notice'>You weld \the [src] to the floor.</span>"
|
||||
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
|
||||
if(1)
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
@@ -74,7 +74,7 @@
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
anchored = 0
|
||||
user << "<span class='notice'>You cut \the [src] free from the floor.</span>"
|
||||
to_chat(user, "<span class='notice'>You cut \the [src] free from the floor.</span>")
|
||||
//Finishing the frame
|
||||
else if(istype(W,/obj/item/stack/sheet))
|
||||
if(finished)
|
||||
@@ -82,7 +82,7 @@
|
||||
var/obj/item/stack/sheet/S = W
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
if(S.get_amount() < 5)
|
||||
user << "<span class='warning'>You need five sheets of glass to create a reflector!</span>"
|
||||
to_chat(user, "<span class='warning'>You need five sheets of glass to create a reflector!</span>")
|
||||
return
|
||||
else
|
||||
S.use(5)
|
||||
@@ -90,7 +90,7 @@
|
||||
qdel (src)
|
||||
if(istype(W,/obj/item/stack/sheet/rglass))
|
||||
if(S.get_amount() < 10)
|
||||
user << "<span class='warning'>You need ten sheets of reinforced glass to create a double reflector!</span>"
|
||||
to_chat(user, "<span class='warning'>You need ten sheets of reinforced glass to create a double reflector!</span>")
|
||||
return
|
||||
else
|
||||
S.use(10)
|
||||
@@ -116,7 +116,7 @@
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
return
|
||||
if (src.anchored)
|
||||
usr << "<span class='warning'>It is fastened to the floor!</span>"
|
||||
to_chat(usr, "<span class='warning'>It is fastened to the floor!</span>")
|
||||
return 0
|
||||
src.setDir(turn(src.dir, 270))
|
||||
return 1
|
||||
@@ -125,7 +125,7 @@
|
||||
/obj/structure/reflector/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
else
|
||||
rotate()
|
||||
|
||||
@@ -49,9 +49,9 @@ FLOOR SAFES
|
||||
/obj/structure/safe/proc/check_unlocked(mob/user, canhear)
|
||||
if(user && canhear)
|
||||
if(tumbler_1_pos == tumbler_1_open)
|
||||
user << "<span class='italics'>You hear a [pick("tonk", "krunk", "plunk")] from [src].</span>"
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("tonk", "krunk", "plunk")] from [src].</span>")
|
||||
if(tumbler_2_pos == tumbler_2_open)
|
||||
user << "<span class='italics'>You hear a [pick("tink", "krink", "plink")] from [src].</span>"
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("tink", "krink", "plink")] from [src].</span>")
|
||||
if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open)
|
||||
if(user) visible_message("<i><b>[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!</b></i>")
|
||||
return 1
|
||||
@@ -103,13 +103,13 @@ FLOOR SAFES
|
||||
|
||||
if(href_list["open"])
|
||||
if(check_unlocked())
|
||||
user << "<span class='notice'>You [open ? "close" : "open"] [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You [open ? "close" : "open"] [src].</span>")
|
||||
open = !open
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>You can't [open ? "close" : "open"] [src], the lock is engaged!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't [open ? "close" : "open"] [src], the lock is engaged!</span>")
|
||||
return
|
||||
|
||||
if(href_list["decrement"])
|
||||
@@ -117,11 +117,11 @@ FLOOR SAFES
|
||||
if(dial == tumbler_1_pos + 1 || dial == tumbler_1_pos - 71)
|
||||
tumbler_1_pos = decrement(tumbler_1_pos)
|
||||
if(canhear)
|
||||
user << "<span class='italics'>You hear a [pick("clack", "scrape", "clank")] from [src].</span>"
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("clack", "scrape", "clank")] from [src].</span>")
|
||||
if(tumbler_1_pos == tumbler_2_pos + 37 || tumbler_1_pos == tumbler_2_pos - 35)
|
||||
tumbler_2_pos = decrement(tumbler_2_pos)
|
||||
if(canhear)
|
||||
user << "<span class='italics'>You hear a [pick("click", "chink", "clink")] from [src].</span>"
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("click", "chink", "clink")] from [src].</span>")
|
||||
check_unlocked(user, canhear)
|
||||
updateUsrDialog()
|
||||
return
|
||||
@@ -131,11 +131,11 @@ FLOOR SAFES
|
||||
if(dial == tumbler_1_pos - 1 || dial == tumbler_1_pos + 71)
|
||||
tumbler_1_pos = increment(tumbler_1_pos)
|
||||
if(canhear)
|
||||
user << "<span class='italics'>You hear a [pick("clack", "scrape", "clank")] from [src].</span>"
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("clack", "scrape", "clank")] from [src].</span>")
|
||||
if(tumbler_1_pos == tumbler_2_pos - 37 || tumbler_1_pos == tumbler_2_pos + 35)
|
||||
tumbler_2_pos = increment(tumbler_2_pos)
|
||||
if(canhear)
|
||||
user << "<span class='italics'>You hear a [pick("click", "chink", "clink")] from [src].</span>"
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("click", "chink", "clink")] from [src].</span>")
|
||||
check_unlocked(user, canhear)
|
||||
updateUsrDialog()
|
||||
return
|
||||
@@ -156,17 +156,17 @@ FLOOR SAFES
|
||||
if(I.w_class + space <= maxspace)
|
||||
space += I.w_class
|
||||
if(!user.drop_item())
|
||||
user << "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the safe!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the safe!</span>")
|
||||
return
|
||||
I.forceMove(src)
|
||||
user << "<span class='notice'>You put [I] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>[I] won't fit in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>[I] won't fit in [src].</span>")
|
||||
return
|
||||
else if(istype(I, /obj/item/clothing/neck/stethoscope))
|
||||
user << "<span class='warning'>Hold [I] in one of your hands while you manipulate the dial!</span>"
|
||||
to_chat(user, "<span class='warning'>Hold [I] in one of your hands while you manipulate the dial!</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -44,18 +44,18 @@
|
||||
/obj/structure/showcase/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver) && !anchored)
|
||||
if(deconstruction_state == SHOWCASE_SCREWDRIVERED)
|
||||
user << "<span class='notice'>You screw the screws back into the showcase.</span>"
|
||||
to_chat(user, "<span class='notice'>You screw the screws back into the showcase.</span>")
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
deconstruction_state = SHOWCASE_CONSTRUCTED
|
||||
else if (deconstruction_state == SHOWCASE_CONSTRUCTED)
|
||||
user << "<span class='notice'>You unscrew the screws.</span>"
|
||||
to_chat(user, "<span class='notice'>You unscrew the screws.</span>")
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
deconstruction_state = SHOWCASE_SCREWDRIVERED
|
||||
|
||||
if(istype(W, /obj/item/weapon/crowbar) && deconstruction_state == SHOWCASE_SCREWDRIVERED)
|
||||
if(do_after(user, 20*W.toolspeed, target = src))
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user << "<span class='notice'>You start to crowbar the showcase apart...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to crowbar the showcase apart...</span>")
|
||||
new /obj/item/stack/sheet/metal (get_turf(src), 4)
|
||||
qdel(src)
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
|
||||
switch(deconstruction_state)
|
||||
if(SHOWCASE_CONSTRUCTED)
|
||||
user << "The showcase is fully constructed."
|
||||
to_chat(user, "The showcase is fully constructed.")
|
||||
if(SHOWCASE_SCREWDRIVERED)
|
||||
user << "The showcase has its screws loosened."
|
||||
to_chat(user, "The showcase has its screws loosened.")
|
||||
else
|
||||
user << "If you see this, something is wrong."
|
||||
to_chat(user, "If you see this, something is wrong.")
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
light_amount = T.get_lumcount()
|
||||
|
||||
|
||||
if(light_amount > 2)
|
||||
M << "<span class='warning'>It's too bright here to use [src.name]!</span>"
|
||||
if(light_amount > 0.2)
|
||||
to_chat(M, "<span class='warning'>It's too bright here to use [src.name]!</span>")
|
||||
return 0
|
||||
|
||||
//mobs in range check
|
||||
@@ -66,12 +66,12 @@
|
||||
for(var/mob/living/L in orange(1,src))
|
||||
if(L.ckey && L.client)
|
||||
if((world.time - L.client.inactivity) < (world.time - 300) || L.stat != CONSCIOUS || L.restrained())//no playing with braindeads or corpses or handcuffed dudes.
|
||||
M << "<span class='warning'>[L] doesn't seem to be paying attention...</span>"
|
||||
to_chat(M, "<span class='warning'>[L] doesn't seem to be paying attention...</span>")
|
||||
else
|
||||
users_in_range++
|
||||
|
||||
if(users_in_range < 2)
|
||||
M << "<span class='warning'>There aren't enough people to use the [src.name]!</span>"
|
||||
to_chat(M, "<span class='warning'>There aren't enough people to use the [src.name]!</span>")
|
||||
return 0
|
||||
|
||||
return 1
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
/obj/structure/statue/uranium
|
||||
obj_integrity = 300
|
||||
luminosity = 2
|
||||
light_range = 2
|
||||
material_drop_type = /obj/item/stack/sheet/mineral/uranium
|
||||
var/last_event = 0
|
||||
var/active = null
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/structure/table_frame/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start disassembling [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 30*I.toolspeed, target = src))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
@@ -32,41 +32,41 @@
|
||||
else if(istype(I, /obj/item/stack/sheet/plasteel))
|
||||
var/obj/item/stack/sheet/plasteel/P = I
|
||||
if(P.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one plasteel sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one plasteel sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [P] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [P] to [src]...</span>")
|
||||
if(do_after(user, 50, target = src) && P.use(1))
|
||||
make_new_table(/obj/structure/table/reinforced)
|
||||
else if(istype(I, /obj/item/stack/sheet/metal))
|
||||
var/obj/item/stack/sheet/metal/M = I
|
||||
if(M.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one metal sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one metal sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [M] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [M] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && M.use(1))
|
||||
make_new_table(/obj/structure/table)
|
||||
else if(istype(I, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = I
|
||||
if(G.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one glass sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one glass sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [G] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [G] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && G.use(1))
|
||||
make_new_table(/obj/structure/table/glass)
|
||||
else if(istype(I, /obj/item/stack/sheet/mineral/silver))
|
||||
var/obj/item/stack/sheet/mineral/silver/S = I
|
||||
if(S.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one silver sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one silver sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [S] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [S] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && S.use(1))
|
||||
make_new_table(/obj/structure/table/optable)
|
||||
else if(istype(I, /obj/item/stack/tile/carpet))
|
||||
var/obj/item/stack/tile/carpet/C = I
|
||||
if(C.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one carpet sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one carpet sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [C] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/fancy)
|
||||
else
|
||||
@@ -108,18 +108,18 @@
|
||||
if(istype(I, /obj/item/stack/sheet/mineral/wood))
|
||||
var/obj/item/stack/sheet/mineral/wood/W = I
|
||||
if(W.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one wood sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one wood sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [W] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [W] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && W.use(1))
|
||||
make_new_table(/obj/structure/table/wood)
|
||||
return
|
||||
else if(istype(I, /obj/item/stack/tile/carpet))
|
||||
var/obj/item/stack/tile/carpet/C = I
|
||||
if(C.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one carpet sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one carpet sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [C] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [C] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && C.use(1))
|
||||
make_new_table(/obj/structure/table/wood/poker)
|
||||
else
|
||||
@@ -145,9 +145,9 @@
|
||||
if(istype(I, /obj/item/stack/tile/brass))
|
||||
var/obj/item/stack/tile/brass/W = I
|
||||
if(W.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one brass sheet to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need one brass sheet to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start adding [W] to [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start adding [W] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && W.use(1))
|
||||
make_new_table(/obj/structure/table/reinforced/brass)
|
||||
else
|
||||
|
||||
@@ -61,10 +61,10 @@
|
||||
if(user.a_intent == INTENT_GRAB && user.pulling && isliving(user.pulling))
|
||||
var/mob/living/pushed_mob = user.pulling
|
||||
if(pushed_mob.buckled)
|
||||
user << "<span class='warning'>[pushed_mob] is buckled to [pushed_mob.buckled]!</span>"
|
||||
to_chat(user, "<span class='warning'>[pushed_mob] is buckled to [pushed_mob.buckled]!</span>")
|
||||
return
|
||||
if(user.grab_state < GRAB_AGGRESSIVE)
|
||||
user << "<span class='warning'>You need a better grip to do that!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
|
||||
return
|
||||
tablepush(user, pushed_mob)
|
||||
user.stop_pulling()
|
||||
@@ -100,14 +100,14 @@
|
||||
/obj/structure/table/attackby(obj/item/I, mob/user, params)
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && deconstruction_ready)
|
||||
user << "<span class='notice'>You start disassembling [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 20*I.toolspeed, target = src))
|
||||
deconstruct(TRUE)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/wrench) && deconstruction_ready)
|
||||
user << "<span class='notice'>You start deconstructing [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start deconstructing [src]...</span>")
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 40*I.toolspeed, target = src))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
@@ -300,16 +300,16 @@
|
||||
if(WT.remove_fuel(0, user))
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
if(deconstruction_ready)
|
||||
user << "<span class='notice'>You start strengthening the reinforced table...</span>"
|
||||
to_chat(user, "<span class='notice'>You start strengthening the reinforced table...</span>")
|
||||
if (do_after(user, 50*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You strengthen the table.</span>"
|
||||
to_chat(user, "<span class='notice'>You strengthen the table.</span>")
|
||||
deconstruction_ready = 0
|
||||
else
|
||||
user << "<span class='notice'>You start weakening the reinforced table...</span>"
|
||||
to_chat(user, "<span class='notice'>You start weakening the reinforced table...</span>")
|
||||
if (do_after(user, 50*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You weaken the table.</span>"
|
||||
to_chat(user, "<span class='notice'>You weaken the table.</span>")
|
||||
deconstruction_ready = 1
|
||||
else
|
||||
. = ..()
|
||||
@@ -498,7 +498,7 @@
|
||||
if(building)
|
||||
return
|
||||
building = TRUE
|
||||
user << "<span class='notice'>You start constructing a rack...</span>"
|
||||
to_chat(user, "<span class='notice'>You start constructing a rack...</span>")
|
||||
if(do_after(user, 50, target = src, progress=TRUE))
|
||||
if(!user.drop_item())
|
||||
return
|
||||
|
||||
@@ -54,18 +54,18 @@
|
||||
default_unfasten_wrench(user, I, time = 20)
|
||||
return
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
user << "<span class='notice'>[I] does not fit into [src].</span>"
|
||||
to_chat(user, "<span class='notice'>[I] does not fit into [src].</span>")
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
if(full)
|
||||
user << "<span class='notice'>[src] can't hold any more of [I].</span>"
|
||||
to_chat(user, "<span class='notice'>[src] can't hold any more of [I].</span>")
|
||||
return
|
||||
|
||||
if(!user.drop_item())
|
||||
return
|
||||
I.loc = src
|
||||
user << "<span class='notice'>You put [I] in [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tank_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
T.density = 1
|
||||
T.layer = OBJ_LAYER + 0.01
|
||||
T.loc = loc
|
||||
user << "<span class='notice'>You slide the target into the stake.</span>"
|
||||
to_chat(user, "<span class='notice'>You slide the target into the stake.</span>")
|
||||
|
||||
/obj/structure/target_stake/attack_hand(mob/user)
|
||||
if(pinned_target)
|
||||
@@ -43,10 +43,10 @@
|
||||
if(ishuman(user))
|
||||
if(!user.get_active_held_item())
|
||||
user.put_in_hands(pinned_target)
|
||||
user << "<span class='notice'>You take the target out of the stake.</span>"
|
||||
to_chat(user, "<span class='notice'>You take the target out of the stake.</span>")
|
||||
else
|
||||
pinned_target.loc = get_turf(user)
|
||||
user << "<span class='notice'>You take the target out of the stake.</span>"
|
||||
to_chat(user, "<span class='notice'>You take the target out of the stake.</span>")
|
||||
|
||||
/obj/structure/target_stake/bullet_act(obj/item/projectile/P)
|
||||
if(pinned_target)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
var/mob/living/GM = user.pulling
|
||||
if(user.grab_state >= GRAB_AGGRESSIVE)
|
||||
if(GM.buckled || GM.has_buckled_mobs())
|
||||
user << "<span class='warning'>[GM] is attached to something!</span>"
|
||||
to_chat(user, "<span class='warning'>[GM] is attached to something!</span>")
|
||||
return
|
||||
for(var/obj/structure/transit_tube_pod/pod in loc)
|
||||
pod.visible_message("<span class='warning'>[user] starts putting [GM] into the [pod]!</span>")
|
||||
|
||||
@@ -37,12 +37,12 @@
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(tube_construction)
|
||||
for(var/obj/structure/transit_tube_pod/pod in src.loc)
|
||||
user << "<span class='warning'>Remove the pod first!</span>"
|
||||
to_chat(user, "<span class='warning'>Remove the pod first!</span>")
|
||||
return
|
||||
user.visible_message("[user] starts to deattach \the [src].", "<span class='notice'>You start to deattach the [name]...</span>")
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
if(do_after(user, 35*W.toolspeed, target = src))
|
||||
user << "<span class='notice'>You deattach the [name].</span>"
|
||||
to_chat(user, "<span class='notice'>You deattach the [name].</span>")
|
||||
var/obj/structure/c_transit_tube/R = new tube_construction(loc)
|
||||
R.setDir(dir)
|
||||
transfer_fingerprints_to(R)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/structure/c_transit_tube/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||
to_chat(user, "<span class='notice'>Alt-click to rotate it clockwise.</span>")
|
||||
|
||||
/obj/structure/c_transit_tube/proc/tube_rotate()
|
||||
setDir(turn(dir, -90))
|
||||
@@ -46,7 +46,7 @@
|
||||
/obj/structure/c_transit_tube/AltClick(mob/user)
|
||||
..()
|
||||
if(user.incapacitated())
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
@@ -64,13 +64,13 @@
|
||||
|
||||
/obj/structure/c_transit_tube/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You start attaching the [name]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start attaching the [name]...</span>")
|
||||
add_fingerprint(user)
|
||||
playsound(src.loc, I.usesound, 50, 1)
|
||||
if(do_after(user, 40*I.toolspeed, target = src))
|
||||
if(QDELETED(src))
|
||||
return
|
||||
user << "<span class='notice'>You attach the [name].</span>"
|
||||
to_chat(user, "<span class='notice'>You attach the [name].</span>")
|
||||
var/obj/structure/transit_tube/R = new build_type(loc, dir)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
@@ -69,9 +69,9 @@
|
||||
if(!moving)
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user << "<span class='notice'>You start trying to escape from the pod...</span>"
|
||||
to_chat(user, "<span class='notice'>You start trying to escape from the pod...</span>")
|
||||
if(do_after(user, 600, target = src))
|
||||
user << "<span class='notice'>You manage to open the pod.</span>"
|
||||
to_chat(user, "<span class='notice'>You manage to open the pod.</span>")
|
||||
empty_pod()
|
||||
|
||||
/obj/structure/transit_tube_pod/proc/empty_pod(atom/location)
|
||||
|
||||
@@ -4,58 +4,82 @@
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "trap"
|
||||
density = 0
|
||||
anchored = TRUE
|
||||
alpha = 30 //initially quite hidden when not "recharging"
|
||||
var/last_trigger = 0
|
||||
var/time_between_triggers = 600 //takes a minute to recharge
|
||||
|
||||
/obj/structure/trap/Crossed(atom/movable/AM)
|
||||
if(last_trigger + time_between_triggers > world.time)
|
||||
return
|
||||
alpha = initial(alpha)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
last_trigger = world.time
|
||||
alpha = 200
|
||||
trap_effect(L)
|
||||
animate(src, alpha = initial(alpha), time = time_between_triggers)
|
||||
var/list/static/ignore_typecache
|
||||
|
||||
var/datum/effect_system/spark_spread/spark_system
|
||||
|
||||
/obj/structure/trap/Initialize(mapload)
|
||||
..()
|
||||
spark_system = new
|
||||
spark_system.set_up(4,1,src)
|
||||
spark_system.attach(src)
|
||||
|
||||
if(!ignore_typecache)
|
||||
ignore_typecache = typecacheof(list(
|
||||
/obj/effect,
|
||||
/mob/dead))
|
||||
|
||||
/obj/structure/trap/Destroy()
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
. = ..()
|
||||
|
||||
/obj/structure/trap/examine(mob/user)
|
||||
..()
|
||||
if(!isliving(user)) //bad ghosts, stop trying to powergame from beyond the grave
|
||||
if(!isliving(user))
|
||||
return
|
||||
user << "You reveal a trap!"
|
||||
if(get_dist(user, src) <= 1)
|
||||
to_chat(user, "<span class='notice'>You reveal [src]!</span>")
|
||||
flare()
|
||||
|
||||
/obj/structure/trap/proc/flare()
|
||||
// Makes the trap visible, and starts the cooldown until it's
|
||||
// able to be triggered again.
|
||||
visible_message("<span class='warning'>[src] flares brightly!</span>")
|
||||
alpha = 200
|
||||
animate(src, alpha = initial(alpha), time = time_between_triggers)
|
||||
last_trigger = world.time
|
||||
spark_system.start()
|
||||
|
||||
/obj/structure/trap/Crossed(atom/movable/AM)
|
||||
if(last_trigger + time_between_triggers > world.time)
|
||||
return
|
||||
// Don't want the traps triggered by sparks, ghosts or projectiles.
|
||||
if(is_type_in_typecache(AM, ignore_typecache))
|
||||
return
|
||||
flare()
|
||||
if(isliving(AM))
|
||||
trap_effect(AM)
|
||||
|
||||
/obj/structure/trap/proc/trap_effect(mob/living/L)
|
||||
return
|
||||
|
||||
/obj/structure/trap/stun
|
||||
name = "shock trap"
|
||||
desc = "A trap that will shock you, it will burn your flesh and render you immobile, You'd better avoid it."
|
||||
desc = "A trap that will shock and render you immobile. You'd better avoid it."
|
||||
icon_state = "trap-shock"
|
||||
|
||||
/obj/structure/trap/stun/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>You are paralyzed from the intense shock!</B></span>"
|
||||
L.electrocute_act(30, src, safety=1) // electrocute act does a message.
|
||||
L.Weaken(5)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/particle_effect/sparks/electricity(Lturf)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
|
||||
|
||||
/obj/structure/trap/fire
|
||||
name = "flame trap"
|
||||
desc = "A trap that will set you ablaze. You'd better avoid it."
|
||||
icon_state = "trap-fire"
|
||||
|
||||
|
||||
/obj/structure/trap/fire/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>Spontaneous combustion!</B></span>"
|
||||
to_chat(L, "<span class='danger'><B>Spontaneous combustion!</B></span>")
|
||||
L.Weaken(1)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/hotspot(Lturf)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
|
||||
/obj/structure/trap/fire/flare()
|
||||
..()
|
||||
new /obj/effect/hotspot(get_turf(src))
|
||||
|
||||
|
||||
/obj/structure/trap/chill
|
||||
@@ -63,12 +87,11 @@
|
||||
desc = "A trap that will chill you to the bone. You'd better avoid it."
|
||||
icon_state = "trap-frost"
|
||||
|
||||
|
||||
/obj/structure/trap/chill/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>You're frozen solid!</B></span>"
|
||||
to_chat(L, "<span class='danger'><B>You're frozen solid!</B></span>")
|
||||
L.Weaken(1)
|
||||
L.bodytemperature -= 300
|
||||
new /obj/effect/particle_effect/sparks(get_turf(L))
|
||||
L.apply_status_effect(/datum/status_effect/freon)
|
||||
|
||||
|
||||
/obj/structure/trap/damage
|
||||
@@ -78,12 +101,14 @@
|
||||
|
||||
|
||||
/obj/structure/trap/damage/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>The ground quakes beneath your feet!</B></span>"
|
||||
to_chat(L, "<span class='danger'><B>The ground quakes beneath your feet!</B></span>")
|
||||
L.Weaken(5)
|
||||
L.adjustBruteLoss(35)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
new /obj/structure/flora/rock(Lturf)
|
||||
|
||||
/obj/structure/trap/damage/flare()
|
||||
..()
|
||||
var/obj/structure/flora/rock/giant_rock = new(get_turf(src))
|
||||
QDEL_IN(giant_rock, 200)
|
||||
|
||||
|
||||
/obj/structure/trap/ward
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/mob/living/GM = user.pulling
|
||||
if(user.grab_state >= GRAB_AGGRESSIVE)
|
||||
if(GM.loc != get_turf(src))
|
||||
user << "<span class='warning'>[GM] needs to be on [src]!</span>"
|
||||
to_chat(user, "<span class='warning'>[GM] needs to be on [src]!</span>")
|
||||
return
|
||||
if(!swirlie)
|
||||
if(open)
|
||||
@@ -49,18 +49,18 @@
|
||||
GM.visible_message("<span class='danger'>[user] slams [GM.name] into [src]!</span>", "<span class='userdanger'>[user] slams you into [src]!</span>")
|
||||
GM.adjustBruteLoss(5)
|
||||
else
|
||||
user << "<span class='warning'>You need a tighter grip!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a tighter grip!</span>")
|
||||
|
||||
else if(cistern && !open)
|
||||
if(!contents.len)
|
||||
user << "<span class='notice'>The cistern is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>The cistern is empty.</span>")
|
||||
else
|
||||
var/obj/item/I = pick(contents)
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(I)
|
||||
else
|
||||
I.loc = get_turf(src)
|
||||
user << "<span class='notice'>You find [I] in the cistern.</span>"
|
||||
to_chat(user, "<span class='notice'>You find [I] in the cistern.</span>")
|
||||
w_items -= I.w_class
|
||||
else
|
||||
open = !open
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/crowbar))
|
||||
user << "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...</span>")
|
||||
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(do_after(user, 30*I.toolspeed, target = src))
|
||||
user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "<span class='notice'>You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!</span>", "<span class='italics'>You hear grinding porcelain.</span>")
|
||||
@@ -83,24 +83,24 @@
|
||||
else if(cistern)
|
||||
if(user.a_intent != INTENT_HARM)
|
||||
if(I.w_class > WEIGHT_CLASS_NORMAL)
|
||||
user << "<span class='warning'>[I] does not fit!</span>"
|
||||
to_chat(user, "<span class='warning'>[I] does not fit!</span>")
|
||||
return
|
||||
if(w_items + I.w_class > WEIGHT_CLASS_HUGE)
|
||||
user << "<span class='warning'>The cistern is full!</span>"
|
||||
to_chat(user, "<span class='warning'>The cistern is full!</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
user << "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the cistern!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [I] is stuck to your hand, you cannot put it in the cistern!</span>")
|
||||
return
|
||||
I.loc = src
|
||||
w_items += I.w_class
|
||||
user << "<span class='notice'>You carefully place [I] into the cistern.</span>"
|
||||
to_chat(user, "<span class='notice'>You carefully place [I] into the cistern.</span>")
|
||||
|
||||
else 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>"
|
||||
to_chat(user, "<span class='notice'>You fill [RG] from [src]. Gross.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -123,47 +123,47 @@
|
||||
var/mob/living/GM = user.pulling
|
||||
if(user.grab_state >= GRAB_AGGRESSIVE)
|
||||
if(GM.loc != get_turf(src))
|
||||
user << "<span class='notice'>[GM.name] needs to be on [src].</span>"
|
||||
to_chat(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='danger'>You slam [GM] into [src]!</span>")
|
||||
GM.adjustBruteLoss(8)
|
||||
else
|
||||
user << "<span class='warning'>You need a tighter grip!</span>"
|
||||
to_chat(user, "<span class='warning'>You need a tighter grip!</span>")
|
||||
|
||||
else if(exposed)
|
||||
if(!hiddenitem)
|
||||
user << "<span class='notice'>There is nothing in the drain holder.</span>"
|
||||
to_chat(user, "<span class='notice'>There is nothing in the drain holder.</span>")
|
||||
else
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(hiddenitem)
|
||||
else
|
||||
hiddenitem.forceMove(get_turf(src))
|
||||
user << "<span class='notice'>You fish [hiddenitem] out of the drain enclosure.</span>"
|
||||
to_chat(user, "<span class='notice'>You fish [hiddenitem] out of the drain enclosure.</span>")
|
||||
hiddenitem = null
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/urinal/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
user << "<span class='notice'>You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...</span>")
|
||||
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(do_after(user, 20*I.toolspeed, target = src))
|
||||
user.visible_message("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!", "<span class='notice'>You [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!</span>", "<span class='italics'>You hear metal and squishing noises.</span>")
|
||||
exposed = !exposed
|
||||
else if(exposed)
|
||||
if (hiddenitem)
|
||||
user << "<span class='warning'>There is already something in the drain enclosure.</span>"
|
||||
to_chat(user, "<span class='warning'>There is already something in the drain enclosure.</span>")
|
||||
return
|
||||
if(I.w_class > 1)
|
||||
user << "<span class='warning'>[I] is too large for the drain enclosure.</span>"
|
||||
to_chat(user, "<span class='warning'>[I] is too large for the drain enclosure.</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
user << "<span class='warning'>\[I] is stuck to your hand, you cannot put it in the drain enclosure!</span>"
|
||||
to_chat(user, "<span class='warning'>\[I] is stuck to your hand, you cannot put it in the drain enclosure!</span>")
|
||||
return
|
||||
I.forceMove(src)
|
||||
hiddenitem = I
|
||||
user << "<span class='notice'>You place [I] into the drain enclosure.</span>"
|
||||
to_chat(user, "<span class='notice'>You place [I] into the drain enclosure.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/urinalcake
|
||||
@@ -217,9 +217,9 @@
|
||||
|
||||
/obj/machinery/shower/attackby(obj/item/I, mob/user, params)
|
||||
if(I.type == /obj/item/device/analyzer)
|
||||
user << "<span class='notice'>The water temperature seems to be [watertemp].</span>"
|
||||
to_chat(user, "<span class='notice'>The water temperature seems to be [watertemp].</span>")
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with \the [I]...</span>")
|
||||
if(do_after(user, 50*I.toolspeed, target = src))
|
||||
switch(watertemp)
|
||||
if("normal")
|
||||
@@ -381,11 +381,11 @@
|
||||
/obj/machinery/shower/proc/check_heat(mob/living/carbon/C)
|
||||
if(watertemp == "freezing")
|
||||
C.bodytemperature = max(80, C.bodytemperature - 80)
|
||||
C << "<span class='warning'>The water is freezing!</span>"
|
||||
to_chat(C, "<span class='warning'>The water is freezing!</span>")
|
||||
else if(watertemp == "boiling")
|
||||
C.bodytemperature = min(500, C.bodytemperature + 35)
|
||||
C.adjustFireLoss(5)
|
||||
C << "<span class='danger'>The water is searing!</span>"
|
||||
to_chat(C, "<span class='danger'>The water is searing!</span>")
|
||||
|
||||
|
||||
|
||||
@@ -406,6 +406,7 @@
|
||||
desc = "A sink used for washing one's hands and face."
|
||||
anchored = 1
|
||||
var/busy = 0 //Something's being washed at the moment
|
||||
var/dispensedreagent = "water" // for whenever plumbing happens
|
||||
|
||||
|
||||
/obj/structure/sink/attack_hand(mob/living/user)
|
||||
@@ -417,7 +418,7 @@
|
||||
return
|
||||
|
||||
if(busy)
|
||||
user << "<span class='notice'>Someone's already washing here.</span>"
|
||||
to_chat(user, "<span class='notice'>Someone's already washing here.</span>")
|
||||
return
|
||||
var/selected_area = parse_zone(user.zone_selected)
|
||||
var/washing_face = 0
|
||||
@@ -449,15 +450,18 @@
|
||||
|
||||
/obj/structure/sink/attackby(obj/item/O, mob/user, params)
|
||||
if(busy)
|
||||
user << "<span class='warning'>Someone's already washing here!</span>"
|
||||
to_chat(user, "<span class='warning'>Someone's already washing here!</span>")
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/weapon/reagent_containers))
|
||||
var/obj/item/weapon/reagent_containers/RG = O
|
||||
if(RG.container_type & OPENCONTAINER)
|
||||
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].</span>"
|
||||
return 1
|
||||
if(!RG.reagents.holder_full())
|
||||
RG.reagents.add_reagent("[dispensedreagent]", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
|
||||
to_chat(user, "<span class='notice'>You fill [RG] from [src].</span>")
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>\The [RG] is full.</span>")
|
||||
return FALSE
|
||||
|
||||
if(istype(O, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/B = O
|
||||
@@ -475,16 +479,16 @@
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/weapon/mop))
|
||||
O.reagents.add_reagent("water", 5)
|
||||
user << "<span class='notice'>You wet [O] in [src].</span>"
|
||||
O.reagents.add_reagent("[dispensedreagent]", 5)
|
||||
to_chat(user, "<span class='notice'>You wet [O] in [src].</span>")
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = O
|
||||
user << "<span class='notice'>You place [O] under a stream of water...</span>"
|
||||
user.drop_item()
|
||||
M.loc = get_turf(src)
|
||||
M.Expand()
|
||||
if(istype(O, /obj/item/stack/medical/gauze))
|
||||
var/obj/item/stack/medical/gauze/G = O
|
||||
new /obj/item/weapon/reagent_containers/glass/rag(src.loc)
|
||||
to_chat(user, "<span class='notice'>You tear off a strip of gauze and make a rag.</span>")
|
||||
G.use(1)
|
||||
return
|
||||
|
||||
if(!istype(O))
|
||||
@@ -493,7 +497,7 @@
|
||||
return
|
||||
|
||||
if(user.a_intent != INTENT_HARM)
|
||||
user << "<span class='notice'>You start washing [O]...</span>"
|
||||
to_chat(user, "<span class='notice'>You start washing [O]...</span>")
|
||||
busy = 1
|
||||
if(!do_after(user, 40, target = src))
|
||||
busy = 0
|
||||
@@ -501,6 +505,9 @@
|
||||
busy = 0
|
||||
O.clean_blood()
|
||||
O.acid_level = 0
|
||||
create_reagents(5)
|
||||
reagents.add_reagent("[dispensedreagent]", 5)
|
||||
reagents.reaction(O, TOUCH)
|
||||
user.visible_message("<span class='notice'>[user] washes [O] using [src].</span>", \
|
||||
"<span class='notice'>You wash [O] using [src].</span>")
|
||||
return 1
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/obj/structure/windoor_assembly/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||
to_chat(user, "<span class='notice'>Alt-click to rotate it clockwise.</span>")
|
||||
|
||||
/obj/structure/windoor_assembly/New(loc, set_dir)
|
||||
..()
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You disassemble the windoor assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You disassemble the windoor assembly.</span>")
|
||||
var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5)
|
||||
RG.add_fingerprint(user)
|
||||
if(secure)
|
||||
@@ -112,7 +112,7 @@
|
||||
if(istype(W, /obj/item/weapon/wrench) && !anchored)
|
||||
for(var/obj/machinery/door/window/WD in loc)
|
||||
if(WD.dir == dir)
|
||||
user << "<span class='warning'>There is already a windoor in that location!</span>"
|
||||
to_chat(user, "<span class='warning'>There is already a windoor in that location!</span>")
|
||||
return
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("[user] secures the windoor assembly to the floor.", "<span class='notice'>You start to secure the windoor assembly to the floor...</span>")
|
||||
@@ -122,9 +122,9 @@
|
||||
return
|
||||
for(var/obj/machinery/door/window/WD in loc)
|
||||
if(WD.dir == dir)
|
||||
user << "<span class='warning'>There is already a windoor in that location!</span>"
|
||||
to_chat(user, "<span class='warning'>There is already a windoor in that location!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You secure the windoor assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You secure the windoor assembly.</span>")
|
||||
anchored = 1
|
||||
if(secure)
|
||||
name = "secure anchored windoor assembly"
|
||||
@@ -139,7 +139,7 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(!src || !anchored)
|
||||
return
|
||||
user << "<span class='notice'>You unsecure the windoor assembly.</span>"
|
||||
to_chat(user, "<span class='notice'>You unsecure the windoor assembly.</span>")
|
||||
anchored = 0
|
||||
if(secure)
|
||||
name = "secure windoor assembly"
|
||||
@@ -150,16 +150,16 @@
|
||||
else if(istype(W, /obj/item/stack/sheet/plasteel) && !secure)
|
||||
var/obj/item/stack/sheet/plasteel/P = W
|
||||
if(P.get_amount() < 2)
|
||||
user << "<span class='warning'>You need more plasteel to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need more plasteel to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You start to reinforce the windoor with plasteel...</span>"
|
||||
to_chat(user, "<span class='notice'>You start to reinforce the windoor with plasteel...</span>")
|
||||
|
||||
if(do_after(user,40, target = src))
|
||||
if(!src || secure || P.get_amount() < 2)
|
||||
return
|
||||
|
||||
P.use(2)
|
||||
user << "<span class='notice'>You reinforce the windoor.</span>"
|
||||
to_chat(user, "<span class='notice'>You reinforce the windoor.</span>")
|
||||
secure = 1
|
||||
if(anchored)
|
||||
name = "secure anchored windoor assembly"
|
||||
@@ -175,9 +175,9 @@
|
||||
return
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if(!CC.use(1))
|
||||
user << "<span class='warning'>You need more cable to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You need more cable to do this!</span>")
|
||||
return
|
||||
user << "<span class='notice'>You wire the windoor.</span>"
|
||||
to_chat(user, "<span class='notice'>You wire the windoor.</span>")
|
||||
state = "02"
|
||||
if(secure)
|
||||
name = "secure wired windoor assembly"
|
||||
@@ -197,7 +197,7 @@
|
||||
if(!src || state != "02")
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You cut the windoor wires.</span>"
|
||||
to_chat(user, "<span class='notice'>You cut the windoor wires.</span>")
|
||||
new/obj/item/stack/cable_coil(get_turf(user), 1)
|
||||
state = "01"
|
||||
if(secure)
|
||||
@@ -217,7 +217,7 @@
|
||||
if(!src || electronics)
|
||||
W.loc = src.loc
|
||||
return
|
||||
user << "<span class='notice'>You install the airlock electronics.</span>"
|
||||
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
|
||||
name = "near finished windoor assembly"
|
||||
electronics = W
|
||||
else
|
||||
@@ -234,7 +234,7 @@
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(!src || !electronics)
|
||||
return
|
||||
user << "<span class='notice'>You remove the airlock electronics.</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the airlock electronics.</span>")
|
||||
name = "wired windoor assembly"
|
||||
var/obj/item/weapon/electronics/airlock/ae
|
||||
ae = electronics
|
||||
@@ -255,7 +255,7 @@
|
||||
//Crowbar to complete the assembly, Step 7 complete.
|
||||
else if(istype(W, /obj/item/weapon/crowbar))
|
||||
if(!electronics)
|
||||
usr << "<span class='warning'>The assembly is missing electronics!</span>"
|
||||
to_chat(usr, "<span class='warning'>The assembly is missing electronics!</span>")
|
||||
return
|
||||
usr << browse(null, "window=windoor_access")
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
@@ -266,7 +266,7 @@
|
||||
if(loc && electronics)
|
||||
|
||||
density = 1 //Shouldn't matter but just incase
|
||||
user << "<span class='notice'>You finish the windoor.</span>"
|
||||
to_chat(user, "<span class='notice'>You finish the windoor.</span>")
|
||||
|
||||
if(secure)
|
||||
var/obj/machinery/door/window/brigdoor/windoor = new /obj/machinery/door/window/brigdoor(loc)
|
||||
@@ -326,13 +326,13 @@
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
return
|
||||
if(anchored)
|
||||
usr << "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
|
||||
var/target_dir = turn(dir, 270)
|
||||
|
||||
if(!valid_window_location(loc, target_dir))
|
||||
usr << "<span class='warning'>[src] cannot be rotated in that direction!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot be rotated in that direction!</span>")
|
||||
return FALSE
|
||||
|
||||
setDir(target_dir)
|
||||
@@ -344,7 +344,7 @@
|
||||
/obj/structure/windoor_assembly/AltClick(mob/user)
|
||||
..()
|
||||
if(user.incapacitated())
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
@@ -360,11 +360,11 @@
|
||||
return
|
||||
|
||||
if(facing == "l")
|
||||
usr << "<span class='notice'>The windoor will now slide to the right.</span>"
|
||||
to_chat(usr, "<span class='notice'>The windoor will now slide to the right.</span>")
|
||||
facing = "r"
|
||||
else
|
||||
facing = "l"
|
||||
usr << "<span class='notice'>The windoor will now slide to the left.</span>"
|
||||
to_chat(usr, "<span class='notice'>The windoor will now slide to the left.</span>")
|
||||
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -10,8 +10,10 @@
|
||||
max_integrity = 25
|
||||
obj_integrity = 25
|
||||
var/ini_dir = null
|
||||
var/state = 0
|
||||
var/state = WINDOW_OUT_OF_FRAME
|
||||
var/reinf = 0
|
||||
var/heat_resistance = 800
|
||||
var/decon_speed = 30
|
||||
var/wtype = "glass"
|
||||
var/fulltile = 0
|
||||
var/glass_type = /obj/item/stack/sheet/glass
|
||||
@@ -25,15 +27,15 @@
|
||||
|
||||
/obj/structure/window/examine(mob/user)
|
||||
..()
|
||||
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||
to_chat(user, "<span class='notice'>Alt-click to rotate it clockwise.</span>")
|
||||
|
||||
/obj/structure/window/New(Loc,re=0)
|
||||
/obj/structure/window/Initialize(mapload, direct)
|
||||
..()
|
||||
obj_integrity = max_integrity
|
||||
if(re)
|
||||
reinf = re
|
||||
if(reinf)
|
||||
state = 2*anchored
|
||||
if(direct)
|
||||
setDir(direct)
|
||||
if(reinf && anchored)
|
||||
state = WINDOW_SCREWED_TO_FRAME
|
||||
|
||||
ini_dir = dir
|
||||
air_update_turf(1)
|
||||
@@ -55,6 +57,20 @@
|
||||
if(rods)
|
||||
debris += new /obj/item/stack/rods(src, rods)
|
||||
|
||||
/obj/structure/window/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd)
|
||||
switch(the_rcd.mode)
|
||||
if(RCD_DECONSTRUCT)
|
||||
return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/window/rcd_act(mob/user, var/obj/item/weapon/rcd/the_rcd)
|
||||
switch(the_rcd.mode)
|
||||
if(RCD_DECONSTRUCT)
|
||||
to_chat(user, "<span class='notice'>You deconstruct the window.</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/structure/window/narsie_act()
|
||||
add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
|
||||
for(var/obj/item/weapon/shard/shard in debris)
|
||||
@@ -140,74 +156,77 @@
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
if(obj_integrity < max_integrity)
|
||||
if(WT.remove_fuel(0,user))
|
||||
user << "<span class='notice'>You begin repairing [src]...</span>"
|
||||
to_chat(user, "<span class='notice'>You begin repairing [src]...</span>")
|
||||
playsound(loc, WT.usesound, 40, 1)
|
||||
if(do_after(user, 40*I.toolspeed, target = src))
|
||||
obj_integrity = max_integrity
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
update_nearby_icons()
|
||||
user << "<span class='notice'>You repair [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You repair [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is already in good condition!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
|
||||
return
|
||||
|
||||
|
||||
if(!(flags&NODECONSTRUCT))
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
playsound(loc, I.usesound, 75, 1)
|
||||
if(reinf && (state == 2 || state == 1))
|
||||
user << (state == 2 ? "<span class='notice'>You begin to unscrew the window from the frame...</span>" : "<span class='notice'>You begin to screw the window to the frame...</span>")
|
||||
else if(reinf && state == 0)
|
||||
user << (anchored ? "<span class='notice'>You begin to unscrew the frame from the floor...</span>" : "<span class='notice'>You begin to screw the frame to the floor...</span>")
|
||||
else if(!reinf)
|
||||
user << (anchored ? "<span class='notice'>You begin to unscrew the window from the floor...</span>" : "<span class='notice'>You begin to screw the window to the floor...</span>")
|
||||
|
||||
if(do_after(user, 30*I.toolspeed, target = src))
|
||||
if(reinf && (state == 1 || state == 2))
|
||||
//If state was unfastened, fasten it, else do the reverse
|
||||
state = (state == 1 ? 2 : 1)
|
||||
user << (state == 1 ? "<span class='notice'>You unfasten the window from the frame.</span>" : "<span class='notice'>You fasten the window to the frame.</span>")
|
||||
else if(reinf && state == 0)
|
||||
if(reinf)
|
||||
if(state == WINDOW_SCREWED_TO_FRAME || state == WINDOW_IN_FRAME)
|
||||
to_chat(user, "<span class='notice'>You begin to [state == WINDOW_SCREWED_TO_FRAME ? "unscrew the window from":"screw the window to"] the frame...</span>")
|
||||
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
||||
state = (state == WINDOW_IN_FRAME ? WINDOW_SCREWED_TO_FRAME : WINDOW_IN_FRAME)
|
||||
to_chat(user, "<span class='notice'>You [state == WINDOW_IN_FRAME ? "unfasten the window from":"fasten the window to"] the frame.</span>")
|
||||
else if(state == WINDOW_OUT_OF_FRAME)
|
||||
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the frame from":"screw the frame to"] the floor...</span>")
|
||||
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
||||
anchored = !anchored
|
||||
update_nearby_icons()
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "fasten the frame to":"unfasten the frame from"] the floor.</span>")
|
||||
else //if we're not reinforced, we don't need to check or update state
|
||||
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
|
||||
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
|
||||
anchored = !anchored
|
||||
update_nearby_icons()
|
||||
user << (anchored ? "<span class='notice'>You fasten the frame to the floor.</span>" : "<span class='notice'>You unfasten the frame from the floor.</span>")
|
||||
else if(!reinf)
|
||||
anchored = !anchored
|
||||
update_nearby_icons()
|
||||
user << (anchored ? "<span class='notice'>You fasten the window to the floor.</span>" : "<span class='notice'>You unfasten the window.</span>")
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
|
||||
return
|
||||
|
||||
else if (istype(I, /obj/item/weapon/crowbar) && reinf && (state == 0 || state == 1))
|
||||
user << (state == 0 ? "<span class='notice'>You begin to lever the window into the frame...</span>" : "<span class='notice'>You begin to lever the window out of the frame...</span>")
|
||||
|
||||
else if (istype(I, /obj/item/weapon/crowbar) && reinf && (state == WINDOW_OUT_OF_FRAME || state == WINDOW_IN_FRAME))
|
||||
to_chat(user, "<span class='notice'>You begin to lever the window [state == WINDOW_OUT_OF_FRAME ? "into":"out of"] the frame...</span>")
|
||||
playsound(loc, I.usesound, 75, 1)
|
||||
if(do_after(user, 40*I.toolspeed, target = src))
|
||||
//If state was out of frame, put into frame, else do the reverse
|
||||
state = (state == 0 ? 1 : 0)
|
||||
user << (state == 1 ? "<span class='notice'>You pry the window into the frame.</span>" : "<span class='notice'>You pry the window out of the frame.</span>")
|
||||
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
||||
state = (state == WINDOW_OUT_OF_FRAME ? WINDOW_IN_FRAME : WINDOW_OUT_OF_FRAME)
|
||||
to_chat(user, "<span class='notice'>You pry the window [state == WINDOW_IN_FRAME ? "into":"out of"] the frame.</span>")
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/weapon/wrench) && !anchored)
|
||||
playsound(loc, I.usesound, 75, 1)
|
||||
user << "<span class='notice'> You begin to disassemble [src]...</span>"
|
||||
if(do_after(user, 40*I.toolspeed, target = src))
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'> You begin to disassemble [src]...</span>")
|
||||
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_state_and_anchored, state, anchored)))
|
||||
var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount)
|
||||
G.add_fingerprint(user)
|
||||
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You successfully disassemble [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You successfully disassemble [src].</span>")
|
||||
qdel(src)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/window/proc/check_state(checked_state)
|
||||
if(state == checked_state)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/window/proc/check_anchored(checked_anchored)
|
||||
if(anchored == checked_anchored)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored)
|
||||
return check_state(checked_state) && check_anchored(checked_anchored)
|
||||
|
||||
/obj/structure/window/mech_melee_attack(obj/mecha/M)
|
||||
if(!can_be_reached())
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/window/proc/can_be_reached(mob/user)
|
||||
if(!fulltile)
|
||||
if(get_dir(user,src) & dir)
|
||||
@@ -238,11 +257,9 @@
|
||||
if(!disassembled)
|
||||
playsound(src, "shatter", 70, 1)
|
||||
var/turf/T = loc
|
||||
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
for(var/i in debris)
|
||||
var/obj/item/I = i
|
||||
|
||||
I.loc = T
|
||||
transfer_fingerprints_to(I)
|
||||
qdel(src)
|
||||
@@ -257,13 +274,13 @@
|
||||
return
|
||||
|
||||
if(anchored)
|
||||
usr << "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
|
||||
var/target_dir = turn(dir, 90)
|
||||
|
||||
if(!valid_window_location(loc, target_dir))
|
||||
usr << "<span class='warning'>[src] cannot be rotated in that direction!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot be rotated in that direction!</span>")
|
||||
return FALSE
|
||||
|
||||
setDir(target_dir)
|
||||
@@ -272,7 +289,6 @@
|
||||
add_fingerprint(usr)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/structure/window/verb/revrotate()
|
||||
set name = "Rotate Window Clockwise"
|
||||
set category = "Object"
|
||||
@@ -282,13 +298,13 @@
|
||||
return
|
||||
|
||||
if(anchored)
|
||||
usr << "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot be rotated while it is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
|
||||
var/target_dir = turn(dir, 270)
|
||||
|
||||
if(!valid_window_location(loc, target_dir))
|
||||
usr << "<span class='warning'>[src] cannot be rotated in that direction!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] cannot be rotated in that direction!</span>")
|
||||
return FALSE
|
||||
|
||||
setDir(target_dir)
|
||||
@@ -300,7 +316,7 @@
|
||||
/obj/structure/window/AltClick(mob/user)
|
||||
..()
|
||||
if(user.incapacitated())
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
@@ -352,7 +368,8 @@
|
||||
add_overlay(crack_overlay)
|
||||
|
||||
/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > T0C + (reinf ? 1600 : 800))
|
||||
|
||||
if(exposed_temperature > (T0C + heat_resistance))
|
||||
take_damage(round(exposed_volume / 100), BURN, 0, 0)
|
||||
..()
|
||||
|
||||
@@ -374,6 +391,7 @@
|
||||
name = "reinforced window"
|
||||
icon_state = "rwindow"
|
||||
reinf = 1
|
||||
heat_resistance = 1600
|
||||
armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 80, acid = 100)
|
||||
max_integrity = 50
|
||||
explosion_block = 1
|
||||
@@ -391,6 +409,11 @@
|
||||
name = "frosted window"
|
||||
icon_state = "fwindow"
|
||||
|
||||
/obj/structure/window/reinforced/highpressure
|
||||
name = "high pressure window"
|
||||
max_integrity = 1000
|
||||
heat_resistance = 50000
|
||||
pressure_resistance = 4*ONE_ATMOSPHERE
|
||||
|
||||
/* Full Tile Windows (more obj_integrity) */
|
||||
|
||||
@@ -400,8 +423,9 @@
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 50
|
||||
fulltile = 1
|
||||
flags = NONE
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
|
||||
glass_amount = 2
|
||||
|
||||
/obj/structure/window/fulltile/unanchored
|
||||
@@ -413,8 +437,22 @@
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 100
|
||||
fulltile = 1
|
||||
flags = NONE
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
|
||||
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
|
||||
level = 3
|
||||
glass_amount = 2
|
||||
|
||||
/obj/structure/window/reinforced/highpressure/fulltile
|
||||
icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
|
||||
icon_state = "r_window"
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 1000
|
||||
fulltile = 1
|
||||
flags = NONE
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
|
||||
level = 3
|
||||
glass_amount = 2
|
||||
|
||||
@@ -426,8 +464,9 @@
|
||||
icon_state = "tinted_window"
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
fulltile = 1
|
||||
flags = NONE
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile/)
|
||||
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile/)
|
||||
level = 3
|
||||
glass_amount = 2
|
||||
|
||||
@@ -448,7 +487,9 @@
|
||||
max_integrity = 100
|
||||
wtype = "shuttle"
|
||||
fulltile = 1
|
||||
flags = NONE
|
||||
reinf = 1
|
||||
heat_resistance = 1600
|
||||
armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 80, acid = 100)
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = null
|
||||
@@ -472,27 +513,22 @@
|
||||
max_integrity = 80
|
||||
armor = list(melee = 60, bullet = 25, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 80, acid = 100)
|
||||
explosion_block = 2 //fancy AND hard to destroy. the most useful combination.
|
||||
decon_speed = 40
|
||||
glass_type = /obj/item/stack/tile/brass
|
||||
glass_amount = 1
|
||||
reinf = FALSE
|
||||
var/made_glow = FALSE
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/New(loc, direct)
|
||||
/obj/structure/window/reinforced/clockwork/Initialize(mapload, direct)
|
||||
if(fulltile)
|
||||
made_glow = TRUE
|
||||
..()
|
||||
for(var/obj/item/I in debris)
|
||||
debris -= I
|
||||
qdel(I)
|
||||
var/amount_of_gears = 2
|
||||
if(!fulltile)
|
||||
if(direct)
|
||||
var/obj/effect/E = new /obj/effect/overlay/temp/ratvar/window/single(get_turf(src))
|
||||
setDir(direct)
|
||||
ini_dir = direct
|
||||
E.setDir(direct)
|
||||
made_glow = TRUE
|
||||
else
|
||||
if(fulltile)
|
||||
new /obj/effect/overlay/temp/ratvar/window(get_turf(src))
|
||||
made_glow = TRUE
|
||||
amount_of_gears = 4
|
||||
for(var/i in 1 to amount_of_gears)
|
||||
debris += new/obj/item/clockwork/alloy_shards/medium/gear_bit()
|
||||
@@ -530,11 +566,11 @@
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = null
|
||||
fulltile = 1
|
||||
flags = NONE
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 120
|
||||
level = 3
|
||||
glass_amount = 2
|
||||
made_glow = TRUE
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/fulltile/unanchored
|
||||
anchored = FALSE
|
||||
|
||||
Reference in New Issue
Block a user