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:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+31 -31
View File
@@ -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
+5 -5
View File
@@ -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)
+11 -11
View File
@@ -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>")
+12 -12
View File
@@ -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)
+20 -20
View File
@@ -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)
+3 -3
View File
@@ -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)
+14 -14
View File
@@ -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>")
+6 -6
View File
@@ -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
+6 -6
View File
@@ -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
+10 -10
View File
@@ -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()
+9 -10
View File
@@ -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
+76 -54
View File
@@ -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
+28 -11
View File
@@ -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
+1 -1
View File
@@ -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
+14 -14
View File
@@ -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
+1 -1
View File
@@ -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)
+3 -5
View File
@@ -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)
+5 -4
View File
@@ -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)
+21
View File
@@ -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"
+6 -6
View File
@@ -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)
+2 -2
View File
@@ -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 ..()
+6 -6
View File
@@ -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)
+9 -9
View File
@@ -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.", \
+4 -4
View File
@@ -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
+5 -5
View File
@@ -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)
+8 -8
View File
@@ -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()
+12 -12
View File
@@ -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 ..()
+6 -6
View File
@@ -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.")
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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
+17 -17
View File
@@ -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
+9 -9
View File
@@ -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, \
+3 -3
View File
@@ -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)
+55 -30
View File
@@ -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
+44 -37
View File
@@ -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
+102 -66
View File
@@ -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