mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 03:25:49 +01:00
Merge remote-tracking branch 'upstream/master' into pull-facing
To trigger the RUSTG CI
This commit is contained in:
@@ -9,28 +9,23 @@
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
var/list/barsigns=list()
|
||||
var/list/hiddensigns
|
||||
var/emagged = 0
|
||||
var/state = 0
|
||||
var/prev_sign = ""
|
||||
var/panel_open = 0
|
||||
|
||||
/obj/structure/sign/barsign/New()
|
||||
..()
|
||||
/obj/structure/sign/barsign/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
|
||||
//filling the barsigns list
|
||||
//filling the barsigns list
|
||||
for(var/bartype in subtypesof(/datum/barsign))
|
||||
var/datum/barsign/signinfo = new bartype
|
||||
if(!signinfo.hidden)
|
||||
barsigns += signinfo
|
||||
|
||||
|
||||
//randomly assigning a sign
|
||||
//randomly assigning a sign
|
||||
set_sign(pick(barsigns))
|
||||
|
||||
|
||||
|
||||
/obj/structure/sign/barsign/proc/set_sign(var/datum/barsign/sign)
|
||||
/obj/structure/sign/barsign/proc/set_sign(datum/barsign/sign)
|
||||
if(!istype(sign))
|
||||
return
|
||||
icon_state = sign.icon
|
||||
@@ -73,7 +68,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/structure/sign/barsign/attackby(var/obj/item/I, var/mob/user)
|
||||
/obj/structure/sign/barsign/attackby(obj/item/I, mob/user)
|
||||
if( istype(I, /obj/item/screwdriver))
|
||||
if(!panel_open)
|
||||
to_chat(user, "<span class='notice'>You open the maintenance panel.</span>")
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
var/can_be_emaged = FALSE
|
||||
var/wall_mounted = 0 //never solid (You can always pass over it)
|
||||
var/lastbang
|
||||
var/sound = 'sound/machines/click.ogg'
|
||||
var/open_sound = 'sound/machines/closet_open.ogg'
|
||||
var/close_sound = 'sound/machines/closet_close.ogg'
|
||||
var/open_sound_volume = 35
|
||||
var/close_sound_volume = 50
|
||||
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
|
||||
var/material_drop = /obj/item/stack/sheet/metal
|
||||
var/material_drop_amount = 2
|
||||
@@ -72,10 +75,14 @@
|
||||
|
||||
/obj/structure/closet/proc/dump_contents()
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(T)
|
||||
for(var/mob/AM1 in src) //Does the same as below but removes the mobs first to avoid forcing players to step on items in the locker (e.g. soap) when opened.
|
||||
AM1.forceMove(T)
|
||||
if(throwing) // you keep some momentum when getting out of a thrown closet
|
||||
step(AM, dir)
|
||||
step(AM1, dir)
|
||||
for(var/atom/movable/AM2 in src)
|
||||
AM2.forceMove(T)
|
||||
if(throwing) // you keep some momentum when getting out of a thrown closet
|
||||
step(AM2, dir)
|
||||
if(throwing)
|
||||
throwing.finalize(FALSE)
|
||||
|
||||
@@ -90,10 +97,7 @@
|
||||
|
||||
icon_state = icon_opened
|
||||
opened = TRUE
|
||||
if(sound)
|
||||
playsound(loc, sound, 15, 1, -3)
|
||||
else
|
||||
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
playsound(loc, open_sound, open_sound_volume, TRUE, -3)
|
||||
density = 0
|
||||
return TRUE
|
||||
|
||||
@@ -136,10 +140,7 @@
|
||||
|
||||
icon_state = icon_closed
|
||||
opened = FALSE
|
||||
if(sound)
|
||||
playsound(loc, sound, 15, 1, -3)
|
||||
else
|
||||
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
playsound(loc, close_sound, close_sound_volume, TRUE, -3)
|
||||
density = 1
|
||||
return TRUE
|
||||
|
||||
@@ -311,7 +312,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/closet/container_resist(var/mob/living/L)
|
||||
/obj/structure/closet/container_resist(mob/living/L)
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
if(opened)
|
||||
if(L.loc == src)
|
||||
@@ -349,11 +350,6 @@
|
||||
BD.attack_hand(usr)
|
||||
open()
|
||||
|
||||
/obj/structure/closet/tesla_act(var/power)
|
||||
..()
|
||||
visible_message("<span class='danger'>[src] is blown apart by the bolt of electricity!</span>", "<span class='danger'>You hear a metallic screeching sound.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/get_remote_view_fullscreens(mob/user)
|
||||
if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS)))
|
||||
user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1)
|
||||
|
||||
@@ -8,7 +8,10 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
integrity_failure = 0
|
||||
sound = 'sound/effects/rustle2.ogg'
|
||||
open_sound = 'sound/machines/cardboard_box.ogg'
|
||||
close_sound = 'sound/machines/cardboard_box.ogg'
|
||||
open_sound_volume = 35
|
||||
close_sound_volume = 35
|
||||
material_drop = /obj/item/stack/sheet/cardboard
|
||||
var/amt = 4
|
||||
var/move_delay = 0
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
material_drop = /obj/item/stack/sheet/wood
|
||||
open_sound = 'sound/machines/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/machines/wooden_closet_close.ogg'
|
||||
open_sound_volume = 25
|
||||
close_sound_volume = 50
|
||||
|
||||
/obj/structure/closet/coffin/update_icon()
|
||||
if(!opened)
|
||||
@@ -19,5 +23,6 @@
|
||||
icon_state = "sarc"
|
||||
icon_closed = "sarc"
|
||||
icon_opened = "sarc_open"
|
||||
sound = 'sound/effects/stonedoor_openclose.ogg'
|
||||
open_sound = 'sound/effects/stonedoor_openclose.ogg'
|
||||
close_sound = 'sound/effects/stonedoor_openclose.ogg'
|
||||
material_drop = /obj/item/stack/sheet/mineral/sandstone
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
. = ..()
|
||||
. += "<span class='notice'>Use a multitool to lock/unlock it.</span>"
|
||||
|
||||
/obj/structure/closet/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/living/user as mob) //Marker -Agouri
|
||||
/obj/structure/closet/fireaxecabinet/attackby(obj/item/O as obj, mob/living/user as mob) //Marker -Agouri
|
||||
if(isrobot(user) || locked)
|
||||
if(istype(O, /obj/item/multitool))
|
||||
to_chat(user, "<span class='warning'>Resetting circuitry...</span>")
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
icon_closed = "cabinet_closed"
|
||||
icon_opened = "cabinet_open"
|
||||
resistance_flags = FLAMMABLE
|
||||
open_sound = 'sound/machines/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/machines/wooden_closet_close.ogg'
|
||||
open_sound_volume = 25
|
||||
close_sound_volume = 50
|
||||
max_integrity = 70
|
||||
|
||||
/obj/structure/closet/cabinet/update_icon()
|
||||
|
||||
@@ -149,5 +149,5 @@
|
||||
new /obj/item/clothing/head/soft/blue(src)
|
||||
new /obj/item/clothing/suit/storage/paramedic(src)
|
||||
new /obj/item/clothing/suit/storage/paramedic(src)
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
new /obj/item/clothing/suit/bio_suit/virology( src )
|
||||
new /obj/item/clothing/head/bio_hood/virology( src )
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/oxygen(src)
|
||||
new /obj/item/tank/internals/oxygen(src)
|
||||
|
||||
|
||||
/obj/structure/closet/l3closet/security
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
icon_off = "cabinetdetective_broken"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
open_sound = 'sound/machines/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/machines/wooden_closet_close.ogg'
|
||||
open_sound_volume = 25
|
||||
close_sound_volume = 50
|
||||
|
||||
/obj/structure/closet/secure_closet/bar/populate_contents()
|
||||
new /obj/item/reagent_containers/food/drinks/cans/beer(src)
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
new /obj/item/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/gloves/fingerless(src)
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/clothing/head/soft(src)
|
||||
new /obj/item/door_remote/quartermaster(src)
|
||||
new /obj/item/organ/internal/cyberimp/eyes/meson(src)
|
||||
new /obj/item/organ/internal/eyes/cybernetic/meson(src)
|
||||
|
||||
@@ -34,10 +34,11 @@
|
||||
new /obj/item/holosign_creator/engineering(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/clothing/head/beret/eng(src)
|
||||
new /obj/item/clothing/glasses/meson/engine(src)
|
||||
new /obj/item/door_remote/chief_engineer(src)
|
||||
new /obj/item/rpd(src)
|
||||
new /obj/item/reagent_containers/food/drinks/mug/ce(src)
|
||||
new /obj/item/organ/internal/cyberimp/eyes/meson(src)
|
||||
new /obj/item/organ/internal/eyes/cybernetic/meson(src)
|
||||
new /obj/item/clothing/accessory/medal/engineering(src)
|
||||
new /obj/item/holosign_creator/atmos(src)
|
||||
|
||||
@@ -109,7 +110,7 @@
|
||||
new /obj/item/clothing/under/rank/engineer/skirt(src)
|
||||
new /obj/item/clothing/suit/storage/hazardvest(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/clothing/glasses/meson/engine(src)
|
||||
new /obj/item/cartridge/engineering(src)
|
||||
new /obj/item/clothing/head/beret/eng(src)
|
||||
|
||||
@@ -138,10 +139,11 @@
|
||||
new /obj/item/grenade/gas/oxygen(src)
|
||||
new /obj/item/clothing/suit/storage/hazardvest(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/holosign_creator/atmos(src)
|
||||
new /obj/item/watertank/atmos(src)
|
||||
new /obj/item/clothing/suit/fire/atmos(src)
|
||||
new /obj/item/clothing/head/hardhat/atmos(src)
|
||||
new /obj/item/clothing/glasses/meson/engine/tray(src)
|
||||
new /obj/item/rpd(src)
|
||||
new /obj/item/destTagger(src)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
else
|
||||
icon_state = icon_opened
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/ex_act(var/severity)
|
||||
/obj/structure/closet/secure_closet/freezer/ex_act(severity)
|
||||
// IF INDIANA JONES CAN DO IT SO CAN YOU
|
||||
|
||||
// Bomb in here? (using same search as space transits searching for nuke disk)
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
req_access = list(ACCESS_SURGERY)
|
||||
|
||||
/obj/structure/closet/secure_closet/medical2/populate_contents()
|
||||
new /obj/item/tank/anesthetic(src)
|
||||
new /obj/item/tank/anesthetic(src)
|
||||
new /obj/item/tank/anesthetic(src)
|
||||
new /obj/item/tank/internals/anesthetic(src)
|
||||
new /obj/item/tank/internals/anesthetic(src)
|
||||
new /obj/item/tank/internals/anesthetic(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
|
||||
@@ -32,6 +32,10 @@
|
||||
icon_off = "cabinetdetective_broken"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
open_sound = 'sound/machines/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/machines/wooden_closet_close.ogg'
|
||||
open_sound_volume = 25
|
||||
close_sound_volume = 50
|
||||
|
||||
/obj/structure/closet/secure_closet/personal/cabinet/update_icon()
|
||||
if(broken)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
// new /obj/item/cartridge/signal/toxins(src)
|
||||
new /obj/item/radio/headset/headset_sci(src)
|
||||
new /obj/item/tank/air(src)
|
||||
new /obj/item/tank/internals/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/shoes/sandal/white(src)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/radio/headset/heads/rd(src)
|
||||
new /obj/item/tank/air(src)
|
||||
new /obj/item/tank/internals/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/suit/armor/reactive/teleport(src)
|
||||
new /obj/item/flash(src)
|
||||
|
||||
@@ -60,7 +60,6 @@
|
||||
return
|
||||
if(allowed(user))
|
||||
locked = !locked
|
||||
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
visible_message("<span class='notice'>The locker has been [locked ? null : "un"]locked by [user].</span>")
|
||||
update_icon()
|
||||
else
|
||||
@@ -115,7 +114,7 @@
|
||||
else
|
||||
icon_state = icon_opened
|
||||
|
||||
/obj/structure/closet/secure_closet/container_resist(var/mob/living/L)
|
||||
/obj/structure/closet/secure_closet/container_resist(mob/living/L)
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
if(opened)
|
||||
if(L.loc == src)
|
||||
|
||||
@@ -27,12 +27,13 @@
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/clothing/shoes/laceup(src)
|
||||
new /obj/item/radio/headset/heads/captain/alt(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/gloves/color/captain(src)
|
||||
new /obj/item/storage/belt/rapier(src)
|
||||
new /obj/item/gun/energy/gun(src)
|
||||
new /obj/item/door_remote/captain(src)
|
||||
new /obj/item/reagent_containers/food/drinks/mug/cap(src)
|
||||
new /obj/item/tank/emergency_oxygen/double(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/double(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/hop
|
||||
@@ -50,6 +51,7 @@
|
||||
new /obj/item/clothing/head/hopcap(src)
|
||||
new /obj/item/cartridge/hop(src)
|
||||
new /obj/item/radio/headset/heads/hop(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/storage/box/ids(src)
|
||||
new /obj/item/storage/box/PDAs(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
@@ -218,7 +220,7 @@
|
||||
new /obj/item/clothing/suit/storage/brigdoc(src)
|
||||
new /obj/item/clothing/under/rank/security/brigphys(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/radio/headset/headset_sec/alt(src)
|
||||
new /obj/item/radio/headset/headset_sec/alt/brig_phys(src)
|
||||
new /obj/item/clothing/shoes/sandal/white(src)
|
||||
|
||||
|
||||
@@ -272,6 +274,7 @@
|
||||
new /obj/item/paicard(src)
|
||||
new /obj/item/flash(src)
|
||||
new /obj/item/clothing/glasses/hud/skills/sunglasses(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/gloves/color/white(src)
|
||||
new /obj/item/clothing/shoes/centcom(src)
|
||||
new /obj/item/clothing/under/lawyer/oldman(src)
|
||||
@@ -323,6 +326,8 @@
|
||||
icon_off = "cabinetdetective_broken"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
open_sound = 'sound/machines/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/machines/wooden_closet_close.ogg'
|
||||
|
||||
/obj/structure/closet/secure_closet/detective/populate_contents()
|
||||
new /obj/item/clothing/under/det(src)
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
var/intialOxy = 0
|
||||
var/timer = 240 //eventually the person will be freed
|
||||
|
||||
/obj/structure/closet/statue/Initialize(mapload, var/mob/living/L)
|
||||
/obj/structure/closet/statue/Initialize(mapload, mob/living/L)
|
||||
. = ..()
|
||||
if(ishuman(L) || iscorgi(L))
|
||||
if(L.buckled)
|
||||
L.buckled = 0
|
||||
L.anchored = 0
|
||||
L.forceMove(src)
|
||||
L.mutations |= MUTE
|
||||
ADD_TRAIT(L, TRAIT_MUTE, STATUE_MUTE)
|
||||
max_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
|
||||
intialTox = L.getToxLoss()
|
||||
intialFire = L.getFireLoss()
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
for(var/mob/living/M in src)
|
||||
M.forceMove(loc)
|
||||
M.mutations -= MUTE
|
||||
REMOVE_TRAIT(M, TRAIT_MUTE, STATUE_MUTE)
|
||||
M.take_overall_damage((M.health - obj_integrity - 100),0) //any new damage the statue incurred is transfered to the mob
|
||||
|
||||
..()
|
||||
|
||||
@@ -25,23 +25,23 @@
|
||||
/obj/structure/closet/emcloset/populate_contents()
|
||||
switch(pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0)))
|
||||
if("small")
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
if("aid")
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/storage/firstaid/o2(src)
|
||||
if("tank")
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
if("both")
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/storage/firstaid/o2(src)
|
||||
if("nothing")
|
||||
@@ -57,7 +57,7 @@
|
||||
qdel(src)*/
|
||||
|
||||
/obj/structure/closet/emcloset/legacy/populate_contents()
|
||||
new /obj/item/tank/oxygen(src)
|
||||
new /obj/item/tank/internals/oxygen(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
/*
|
||||
@@ -73,7 +73,7 @@
|
||||
/obj/structure/closet/firecloset/populate_contents()
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/tank/oxygen/red(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/flashlight(src)
|
||||
new /obj/item/tank/oxygen/red(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
@@ -140,6 +140,7 @@
|
||||
icon_closed = "radsuitcloset"
|
||||
|
||||
/obj/structure/closet/radiation/populate_contents()
|
||||
new /obj/item/geiger_counter(src)
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
|
||||
@@ -190,7 +191,7 @@
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/flashlight(src)
|
||||
new /obj/item/tank/oxygen/red(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
|
||||
@@ -6,8 +6,11 @@
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
climbable = TRUE
|
||||
// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
|
||||
var/rigged = FALSE
|
||||
open_sound = 'sound/machines/crate_open.ogg'
|
||||
close_sound = 'sound/machines/crate_close.ogg'
|
||||
open_sound_volume = 35
|
||||
close_sound_volume = 50
|
||||
var/obj/item/paper/manifest/manifest
|
||||
// A list of beacon names that the crate will announce the arrival of, when delivered.
|
||||
var/list/announce_beacons = list()
|
||||
@@ -45,7 +48,7 @@
|
||||
do_sparks(5, 1, src)
|
||||
return 2
|
||||
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
playsound(loc, open_sound, open_sound_volume, TRUE, -3)
|
||||
for(var/obj/O in src) //Objects
|
||||
O.forceMove(loc)
|
||||
for(var/mob/M in src) //Mobs
|
||||
@@ -64,7 +67,7 @@
|
||||
if(!src.can_close())
|
||||
return FALSE
|
||||
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
|
||||
playsound(loc, close_sound, close_sound_volume, TRUE, -3)
|
||||
var/itemcount = 0
|
||||
for(var/obj/O in get_turf(src))
|
||||
if(itemcount >= storage_capacity)
|
||||
@@ -148,8 +151,8 @@
|
||||
src.toggle(user, by_hand = TRUE)
|
||||
|
||||
// Called when a crate is delivered by MULE at a location, for notifying purposes
|
||||
/obj/structure/closet/crate/proc/notifyRecipient(var/destination)
|
||||
var/msg = "[capitalize(name)] has arrived at [destination]."
|
||||
/obj/structure/closet/crate/proc/notifyRecipient(destination)
|
||||
var/list/msg = list("[capitalize(name)] has arrived at [destination].")
|
||||
if(destination in announce_beacons)
|
||||
for(var/obj/machinery/requests_console/D in GLOB.allRequestConsoles)
|
||||
if(D.department in src.announce_beacons[destination])
|
||||
@@ -254,7 +257,7 @@
|
||||
if(locked)
|
||||
overlays += sparks
|
||||
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
|
||||
playsound(src.loc, "sparks", 60, 1)
|
||||
playsound(src.loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
src.locked = 0
|
||||
src.broken = 1
|
||||
update_icon()
|
||||
@@ -269,7 +272,7 @@
|
||||
else
|
||||
overlays += sparks
|
||||
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
playsound(src, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
src.locked = 0
|
||||
update_icon()
|
||||
if(!opened && prob(20/severity))
|
||||
@@ -371,6 +374,8 @@
|
||||
icon_opened = "largebinopen"
|
||||
icon_closed = "largebin"
|
||||
anchored = TRUE
|
||||
open_sound = 'sound/effects/bin_open.ogg'
|
||||
close_sound = 'sound/effects/bin_close.ogg'
|
||||
|
||||
/obj/structure/closet/crate/can/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
@@ -385,16 +390,6 @@
|
||||
icon_opened = "radiationopen"
|
||||
icon_closed = "radiation"
|
||||
|
||||
/obj/structure/closet/crate/radiation/populate_contents()
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
|
||||
/obj/structure/closet/crate/secure/weapon
|
||||
desc = "A secure weapons crate."
|
||||
name = "weapons crate"
|
||||
@@ -433,6 +428,8 @@
|
||||
greenlight = "largebing"
|
||||
sparks = "largebinsparks"
|
||||
emag = "largebinemag"
|
||||
open_sound = 'sound/effects/bin_open.ogg'
|
||||
close_sound = 'sound/effects/bin_close.ogg'
|
||||
|
||||
/obj/structure/closet/crate/large
|
||||
name = "large crate"
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
var/already_opened = 0
|
||||
var/content_mob = null
|
||||
var/amount = 1
|
||||
open_sound = 'sound/machines/wooden_closet_open.ogg'
|
||||
close_sound = 'sound/machines/wooden_closet_close.ogg'
|
||||
open_sound_volume = 25
|
||||
close_sound_volume = 50
|
||||
|
||||
/obj/structure/closet/critter/can_open()
|
||||
if(welded)
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
density = 1
|
||||
var/obj/item/paper/manifest/manifest
|
||||
|
||||
/obj/structure/largecrate/New()
|
||||
..()
|
||||
/obj/structure/largecrate/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/largecrate/update_icon()
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
icon_opened = "emergopen"
|
||||
|
||||
/obj/structure/closet/walllocker/emerglocker/populate_contents()
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
@@ -44,8 +44,7 @@
|
||||
if(prob(50))
|
||||
empulse(src, 4, 10)
|
||||
else
|
||||
for(var/mob/living/M in range(10, loc))
|
||||
M.apply_effect(rand(5, 25), IRRADIATE)
|
||||
radiation_pulse(get_turf(src), 500, 2)
|
||||
|
||||
/obj/structure/fusionreactor/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* # Disaster counter.
|
||||
*
|
||||
* Tracks how many shifts it has been since the counter with that ID was exploded.
|
||||
*/
|
||||
/obj/structure/disaster_counter
|
||||
name = "disaster counter"
|
||||
desc = "This device will count how many shifts it has been since a major disaster in this area. A safe workplace is a productive workplace."
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
icon_state = "frame"
|
||||
anchored = TRUE
|
||||
maptext_y = 10 // Offset by 10 so it renders properly
|
||||
/// ID of the counter. Must be overriden. Use alphanumerics with no spaces only, as this is used in the filesystem.
|
||||
var/counter_id
|
||||
/// Current count number
|
||||
var/current_count = 0
|
||||
/// Record count
|
||||
var/record_count = 0
|
||||
|
||||
/obj/structure/disaster_counter/examine(mob/user)
|
||||
. = ..()
|
||||
. += "The display reads 'Currently [max(current_count, 0)] shifts without an accident, with a record of [record_count] shifts!'"
|
||||
|
||||
/obj/structure/disaster_counter/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!counter_id)
|
||||
stack_trace("Disaster counter at [x],[y],[z] does not have a counter_id set. Deleting...")
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
// If we still exist, put ourselves in
|
||||
SSpersistent_data.register(src)
|
||||
|
||||
/obj/structure/disaster_counter/ex_act(severity)
|
||||
current_count = -1
|
||||
persistent_save()
|
||||
update_maptext()
|
||||
. = ..()
|
||||
|
||||
/obj/structure/disaster_counter/Destroy()
|
||||
if(counter_id)
|
||||
SSpersistent_data.registered_atoms -= src // Take us out the list
|
||||
return ..()
|
||||
|
||||
/obj/structure/disaster_counter/proc/update_maptext()
|
||||
maptext = "<span class='maptext' style='text-align: center'>[max(current_count, 0)]/[record_count]</span>"
|
||||
|
||||
/obj/structure/disaster_counter/persistent_load()
|
||||
// Just incase some bad actor sets the counter ID to "../../../../Windows/System32"
|
||||
// Yes I am that paranoid
|
||||
if(counter_id != paranoid_sanitize(counter_id))
|
||||
stack_trace("Counter ID did not pass sanitization for disaster counter at [x],[y],[z]. Potential attempt at filesystem manipulation.")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/savefile/S = new /savefile("data/disaster_counters/[counter_id].sav")
|
||||
S["count"] >> current_count
|
||||
S["record"] >> record_count
|
||||
|
||||
if(isnull(current_count))
|
||||
current_count = 0
|
||||
else
|
||||
current_count++ // Increase by 1 since this is the next shift without a disaster (yet)
|
||||
|
||||
if(isnull(record_count))
|
||||
record_count = current_count
|
||||
else
|
||||
// NEW RECORD
|
||||
if(current_count > record_count)
|
||||
record_count = current_count
|
||||
log_debug("Persistent data for [src] loaded (current_count: [current_count] | record_count: [record_count])")
|
||||
update_maptext()
|
||||
|
||||
/obj/structure/disaster_counter/persistent_save()
|
||||
if(counter_id != paranoid_sanitize(counter_id))
|
||||
stack_trace("Counter ID did not pass sanitization for disaster counter at [x],[y],[z]. Potential attempt at filesystem manipulation.")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/savefile/S = new /savefile("data/disaster_counters/[counter_id].sav")
|
||||
|
||||
S["count"] << current_count
|
||||
S["record"] << record_count
|
||||
log_debug("Persistent data for [src] saved (current_count: [current_count] | record_count: [record_count])")
|
||||
|
||||
// Prefab definitions to make mapping easier
|
||||
/obj/structure/disaster_counter/supermatter
|
||||
name = "supermatter disaster counter"
|
||||
counter_id = "supermatter"
|
||||
|
||||
/obj/structure/disaster_counter/chemistry
|
||||
name = "chemistry disaster counter"
|
||||
counter_id = "chemistry"
|
||||
|
||||
/obj/structure/disaster_counter/scichem
|
||||
name = "science chemistry disaster counter"
|
||||
counter_id = "scichem"
|
||||
|
||||
/obj/structure/disaster_counter/toxins
|
||||
name = "toxins launch room disaster counter"
|
||||
counter_id = "toxinslaunch"
|
||||
@@ -20,10 +20,10 @@
|
||||
var/material_type = /obj/item/stack/sheet/metal
|
||||
var/material_amt = 4
|
||||
|
||||
/obj/structure/door_assembly/New()
|
||||
/obj/structure/door_assembly/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
update_name()
|
||||
..()
|
||||
|
||||
/obj/structure/door_assembly/Destroy()
|
||||
QDEL_NULL(electronics)
|
||||
@@ -75,7 +75,7 @@
|
||||
state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS
|
||||
to_chat(user, "<span class='notice'>You wire the airlock assembly.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && W.icon_state != "door_electronics_smoked")
|
||||
else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && !istype(W, /obj/item/airlock_electronics/destroyed))
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...")
|
||||
|
||||
@@ -187,6 +187,7 @@
|
||||
door.name = base_name
|
||||
door.previous_airlock = previous_assembly
|
||||
electronics.forceMove(door)
|
||||
electronics = null
|
||||
qdel(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -124,14 +124,6 @@
|
||||
noglass = TRUE
|
||||
material_type = /obj/item/stack/sheet/plasteel
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_shuttle
|
||||
name = "shuttle airlock assembly"
|
||||
icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi'
|
||||
base_name = "shuttle airlock"
|
||||
overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi'
|
||||
airlock_type = /obj/machinery/door/airlock/shuttle
|
||||
glass_type = /obj/machinery/door/airlock/shuttle/glass
|
||||
|
||||
/obj/structure/door_assembly/multi_tile
|
||||
name = "large airlock assembly"
|
||||
icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi'
|
||||
@@ -143,14 +135,14 @@
|
||||
glass_type = /obj/machinery/door/airlock/multi_tile/glass
|
||||
material_amt = 8
|
||||
|
||||
/obj/structure/door_assembly/multi_tile/New()
|
||||
/obj/structure/door_assembly/multi_tile/Initialize(mapload)
|
||||
. = ..()
|
||||
if(dir in list(EAST, WEST))
|
||||
bound_width = width * world.icon_size
|
||||
bound_height = world.icon_size
|
||||
else
|
||||
bound_width = world.icon_size
|
||||
bound_height = width * world.icon_size
|
||||
..()
|
||||
|
||||
/obj/structure/door_assembly/multi_tile/Move()
|
||||
. = ..()
|
||||
@@ -169,7 +161,7 @@
|
||||
airlock_type = /obj/machinery/door/airlock/cult
|
||||
glass_type = /obj/machinery/door/airlock/cult/glass
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_cult/New()
|
||||
/obj/structure/door_assembly/door_assembly_cult/Initialize(mapload)
|
||||
. = ..()
|
||||
icon = SSticker.cultdat?.airlock_runed_icon_file
|
||||
overlays_file = SSticker.cultdat?.airlock_runed_overlays_file
|
||||
@@ -181,7 +173,7 @@
|
||||
airlock_type = /obj/machinery/door/airlock/cult/unruned
|
||||
glass_type = /obj/machinery/door/airlock/cult/unruned/glass
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_cult/unruned/New()
|
||||
/obj/structure/door_assembly/door_assembly_cult/unruned/Initialize(mapload)
|
||||
. = ..()
|
||||
icon = SSticker.cultdat?.airlock_unruned_icon_file
|
||||
overlays_file = SSticker.cultdat?.airlock_unruned_overlays_file
|
||||
|
||||
@@ -7,19 +7,22 @@
|
||||
var/last_time = 1.0
|
||||
var/delay_time = 50
|
||||
|
||||
/obj/structure/chair/e_chair/New()
|
||||
..()
|
||||
/obj/structure/chair/e_chair/Initialize(mapload, obj/item/assembly/shock_kit/sk)
|
||||
. = ..()
|
||||
overlays += image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1, dir)
|
||||
spawn(2)
|
||||
if(isnull(part)) //This e-chair was not custom built
|
||||
part = new(src)
|
||||
var/obj/item/clothing/head/helmet/part1 = new(part)
|
||||
var/obj/item/radio/electropack/part2 = new(part)
|
||||
part2.frequency = 1445
|
||||
part2.code = 6
|
||||
part2.master = part
|
||||
part.part1 = part1
|
||||
part.part2 = part2
|
||||
|
||||
if(sk)
|
||||
part = sk
|
||||
|
||||
if(isnull(part)) //This e-chair was not custom built
|
||||
part = new(src)
|
||||
var/obj/item/clothing/head/helmet/part1 = new(part)
|
||||
var/obj/item/radio/electropack/part2 = new(part)
|
||||
part2.set_frequency(1445)
|
||||
part2.code = 6
|
||||
part2.master = part
|
||||
part.part1 = part1
|
||||
part.part2 = part2
|
||||
|
||||
/obj/structure/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/wrench))
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
var/opened = 0
|
||||
var/material_drop = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/structure/extinguisher_cabinet/New(turf/loc, direction = null)
|
||||
..()
|
||||
/obj/structure/extinguisher_cabinet/Initialize(mapload, direction = null)
|
||||
. = ..()
|
||||
if(direction)
|
||||
setDir(direction)
|
||||
set_pixel_offsets_from_dir(28, -28, 30, -30)
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
anchored = TRUE
|
||||
icon = 'icons/turf/walls/wall.dmi'
|
||||
icon_state = "wall"
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
var/mineral = /obj/item/stack/sheet/metal
|
||||
var/mineral_amount = 2
|
||||
@@ -33,10 +35,22 @@
|
||||
/turf/simulated/wall/r_wall/rust)
|
||||
smooth = SMOOTH_TRUE
|
||||
|
||||
/obj/structure/falsewall/New(loc)
|
||||
..()
|
||||
/obj/structure/falsewall/Initialize(mapload)
|
||||
. = ..()
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/falsewall/examine_status(mob/user)
|
||||
var/healthpercent = (obj_integrity/max_integrity) * 100
|
||||
switch(healthpercent)
|
||||
if(100)
|
||||
return "<span class='notice'>It looks fully intact.</span>"
|
||||
if(70 to 99)
|
||||
return "<span class='warning'>It looks slightly damaged.</span>"
|
||||
if(40 to 70)
|
||||
return "<span class='warning'>It looks moderately damaged.</span>"
|
||||
if(0 to 40)
|
||||
return "<span class='danger'>It looks heavily damaged.</span>"
|
||||
|
||||
/obj/structure/falsewall/ratvar_act()
|
||||
new /obj/structure/falsewall/brass(loc)
|
||||
qdel(src)
|
||||
@@ -159,6 +173,10 @@
|
||||
walltype = /turf/simulated/wall/r_wall
|
||||
mineral = /obj/item/stack/sheet/plasteel
|
||||
|
||||
/obj/structure/falsewall/reinforced/examine_status(mob/user)
|
||||
. = ..()
|
||||
. += "<br><span class='notice'>The outer <b>grille</b> is fully intact.</span>" //not going to fake other states of disassembly
|
||||
|
||||
/obj/structure/falsewall/reinforced/ChangeToWall(delete = 1)
|
||||
var/turf/T = get_turf(src)
|
||||
T.ChangeTurf(/turf/simulated/wall/r_wall)
|
||||
@@ -179,7 +197,7 @@
|
||||
walltype = /turf/simulated/wall/mineral/uranium
|
||||
var/active = null
|
||||
var/last_event = 0
|
||||
canSmoothWith = list(/obj/structure/falsewall/uranium, /turf/simulated/wall/mineral/uranium)
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/uranium, /obj/structure/falsewall/uranium, /turf/simulated/wall/indestructible/uranium)
|
||||
|
||||
/obj/structure/falsewall/uranium/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
radiate()
|
||||
@@ -191,16 +209,13 @@
|
||||
|
||||
/obj/structure/falsewall/uranium/proc/radiate()
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
if(world.time > last_event + 15)
|
||||
active = 1
|
||||
for(var/mob/living/L in range(3,src))
|
||||
L.apply_effect(12,IRRADIATE,0)
|
||||
for(var/turf/simulated/wall/mineral/uranium/T in range(3,src))
|
||||
radiation_pulse(src, 150)
|
||||
for(var/turf/simulated/wall/mineral/uranium/T in orange(1, src))
|
||||
T.radiate()
|
||||
last_event = world.time
|
||||
active = null
|
||||
return
|
||||
return
|
||||
/*
|
||||
* Other misc falsewall types
|
||||
*/
|
||||
@@ -271,7 +286,7 @@
|
||||
icon_state = "plasma"
|
||||
mineral = /obj/item/stack/sheet/mineral/abductor
|
||||
walltype = /turf/simulated/wall/mineral/abductor
|
||||
canSmoothWith = list(/obj/structure/falsewall/alien, /turf/simulated/wall/mineral/alien)
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/abductor, /obj/structure/falsewall/abductor, /turf/simulated/wall/indestructible/alien)
|
||||
|
||||
|
||||
/obj/structure/falsewall/bananium
|
||||
@@ -289,7 +304,7 @@
|
||||
icon_state = "sandstone"
|
||||
mineral = /obj/item/stack/sheet/mineral/sandstone
|
||||
walltype = /turf/simulated/wall/mineral/sandstone
|
||||
canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/simulated/wall/mineral/sandstone)
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/sandstone, /turf/simulated/wall/indestructible/sandstone, /obj/structure/falsewall/sandstone)
|
||||
|
||||
/obj/structure/falsewall/wood
|
||||
name = "wooden wall"
|
||||
@@ -326,7 +341,7 @@
|
||||
mineral = /obj/item/stack/sheet/mineral/titanium
|
||||
walltype = /turf/simulated/wall/mineral/titanium
|
||||
smooth = SMOOTH_MORE
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater)
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/titanium, /obj/machinery/door/airlock/titanium, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater)
|
||||
|
||||
/obj/structure/falsewall/plastitanium
|
||||
desc = "An evil wall of plasma and titanium."
|
||||
@@ -335,7 +350,7 @@
|
||||
mineral = /obj/item/stack/sheet/mineral/plastitanium
|
||||
walltype = /turf/simulated/wall/mineral/plastitanium
|
||||
smooth = SMOOTH_MORE
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/plastitanium, /turf/simulated/wall/mineral/plastitanium/nodiagonal, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater)
|
||||
canSmoothWith = list(/turf/simulated/wall/mineral/plastitanium, /turf/simulated/wall/indestructible/syndicate, /turf/simulated/wall/mineral/plastitanium/nodiagonal, /obj/machinery/door/airlock/titanium, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater, /turf/simulated/wall/indestructible/opsglass, /obj/structure/window/full/plastitanium)
|
||||
|
||||
/obj/structure/falsewall/brass
|
||||
name = "clockwork wall"
|
||||
@@ -349,8 +364,8 @@
|
||||
walltype = /turf/simulated/wall/clockwork
|
||||
mineral = /obj/item/stack/tile/brass
|
||||
|
||||
/obj/structure/falsewall/brass/New(loc)
|
||||
..()
|
||||
/obj/structure/falsewall/brass/Initialize(mapload)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(src)
|
||||
new /obj/effect/temp_visual/ratvar/wall/false(T)
|
||||
new /obj/effect/temp_visual/ratvar/beam/falsewall(T)
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
icon = 'icons/obj/flora/pinetrees.dmi'
|
||||
icon_state = "pine_1"
|
||||
|
||||
/obj/structure/flora/tree/pine/New()
|
||||
..()
|
||||
/obj/structure/flora/tree/pine/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "pine_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/tree/pine/xmas
|
||||
@@ -24,24 +24,20 @@
|
||||
icon = 'icons/obj/flora/pinetrees.dmi'
|
||||
icon_state = "pine_c"
|
||||
|
||||
/obj/structure/flora/tree/pine/xmas/New()
|
||||
..()
|
||||
icon_state = "pine_c"
|
||||
|
||||
/obj/structure/flora/tree/dead
|
||||
icon = 'icons/obj/flora/deadtrees.dmi'
|
||||
icon_state = "tree_1"
|
||||
|
||||
/obj/structure/flora/tree/dead/New()
|
||||
..()
|
||||
/obj/structure/flora/tree/dead/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "tree_[rand(1, 6)]"
|
||||
|
||||
/obj/structure/flora/tree/palm
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
icon_state = "palm1"
|
||||
|
||||
/obj/structure/flora/tree/palm/New()
|
||||
..()
|
||||
/obj/structure/flora/tree/palm/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("palm1","palm2")
|
||||
pixel_x = 0
|
||||
|
||||
@@ -55,23 +51,23 @@
|
||||
/obj/structure/flora/grass/brown
|
||||
icon_state = "snowgrass1bb"
|
||||
|
||||
/obj/structure/flora/grass/brown/New()
|
||||
..()
|
||||
/obj/structure/flora/grass/brown/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "snowgrass[rand(1, 3)]bb"
|
||||
|
||||
|
||||
/obj/structure/flora/grass/green
|
||||
icon_state = "snowgrass1gb"
|
||||
|
||||
/obj/structure/flora/grass/green/New()
|
||||
..()
|
||||
/obj/structure/flora/grass/green/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "snowgrass[rand(1, 3)]gb"
|
||||
|
||||
/obj/structure/flora/grass/both
|
||||
icon_state = "snowgrassall1"
|
||||
|
||||
/obj/structure/flora/grass/both/New()
|
||||
..()
|
||||
/obj/structure/flora/grass/both/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "snowgrassall[rand(1, 3)]"
|
||||
|
||||
|
||||
@@ -83,8 +79,8 @@
|
||||
anchored = 1
|
||||
max_integrity = 15
|
||||
|
||||
/obj/structure/flora/bush/New()
|
||||
..()
|
||||
/obj/structure/flora/bush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "snowbush[rand(1, 6)]"
|
||||
|
||||
//newbushes
|
||||
@@ -96,113 +92,113 @@
|
||||
anchored = 1
|
||||
max_integrity = 15
|
||||
|
||||
/obj/structure/flora/ausbushes/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "firstbush_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/reedbush
|
||||
icon_state = "reedbush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/reedbush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/reedbush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "reedbush_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/leafybush
|
||||
icon_state = "leafybush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/leafybush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/leafybush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "leafybush_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/palebush
|
||||
icon_state = "palebush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/palebush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/palebush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "palebush_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/stalkybush
|
||||
icon_state = "stalkybush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/stalkybush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/stalkybush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "stalkybush_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/grassybush
|
||||
icon_state = "grassybush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/grassybush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/grassybush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "grassybush_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/fernybush
|
||||
icon_state = "fernybush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/fernybush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/fernybush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "fernybush_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/sunnybush
|
||||
icon_state = "sunnybush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/sunnybush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/sunnybush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "sunnybush_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/genericbush
|
||||
icon_state = "genericbush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/genericbush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/genericbush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "genericbush_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/pointybush
|
||||
icon_state = "pointybush_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/pointybush/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/pointybush/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "pointybush_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/lavendergrass
|
||||
icon_state = "lavendergrass_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/lavendergrass/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/lavendergrass/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "lavendergrass_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/ywflowers
|
||||
icon_state = "ywflowers_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/ywflowers/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/ywflowers/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "ywflowers_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/brflowers
|
||||
icon_state = "brflowers_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/brflowers/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/brflowers/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "brflowers_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/ppflowers
|
||||
icon_state = "ppflowers_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/ppflowers/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/ppflowers/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "ppflowers_[rand(1, 4)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/sparsegrass
|
||||
icon_state = "sparsegrass_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/sparsegrass/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/sparsegrass/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "sparsegrass_[rand(1, 3)]"
|
||||
|
||||
/obj/structure/flora/ausbushes/fullgrass
|
||||
icon_state = "fullgrass_1"
|
||||
|
||||
/obj/structure/flora/ausbushes/fullgrass/New()
|
||||
..()
|
||||
/obj/structure/flora/ausbushes/fullgrass/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "fullgrass_[rand(1, 3)]"
|
||||
|
||||
|
||||
@@ -227,9 +223,10 @@
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/equipped(mob/living/user)
|
||||
. = ..()
|
||||
var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user)
|
||||
I.override = 1
|
||||
user.add_alt_appearance("sneaking_mission", I, GLOB.player_list)
|
||||
if(wielded)
|
||||
var/image/I = image(icon, user, icon_state)
|
||||
I.override = TRUE
|
||||
user.add_alt_appearance("sneaking_mission", I, GLOB.player_list)
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/dropped(mob/living/user)
|
||||
..()
|
||||
@@ -250,8 +247,8 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/flora/rock/New()
|
||||
..()
|
||||
/obj/structure/flora/rock/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "rock[rand(1,5)]"
|
||||
|
||||
/obj/structure/flora/rock/pile
|
||||
@@ -259,8 +256,8 @@
|
||||
desc = "some rocks"
|
||||
icon_state = "rockpile1"
|
||||
|
||||
/obj/structure/flora/rock/pile/New()
|
||||
..()
|
||||
/obj/structure/flora/rock/pile/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "rockpile[rand(1,5)]"
|
||||
|
||||
/obj/structure/flora/rock/icy
|
||||
@@ -308,7 +305,7 @@
|
||||
var/indestructable = 0
|
||||
var/stump = 0
|
||||
|
||||
/obj/structure/bush/New()
|
||||
/obj/structure/bush/Initialize(mapload)
|
||||
. = ..()
|
||||
if(prob(20))
|
||||
opacity = 1
|
||||
@@ -323,7 +320,7 @@
|
||||
A.loc = get_turf(src)
|
||||
*/
|
||||
|
||||
/obj/structure/bush/attackby(var/obj/I as obj, var/mob/user as mob, params)
|
||||
/obj/structure/bush/attackby(obj/I as obj, mob/user as mob, params)
|
||||
//hatchets can clear away undergrowth
|
||||
if(istype(I, /obj/item/hatchet) && !stump)
|
||||
if(indestructable)
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = BELOW_OBJ_LAYER
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
var/state = GIRDER_NORMAL
|
||||
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
|
||||
max_integrity = 200
|
||||
@@ -412,7 +414,7 @@
|
||||
metalUsed = 1
|
||||
metal_type = /obj/item/stack/sheet/runed_metal
|
||||
|
||||
/obj/structure/girder/cult/New()
|
||||
/obj/structure/girder/cult/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = SSticker.cultdat?.cult_girder_icon_state
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
flags = CONDUCT
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
pressure_resistance = 5*ONE_ATMOSPHERE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
level = 3
|
||||
@@ -20,10 +21,10 @@
|
||||
var/shockcooldown = 0
|
||||
var/my_shockcooldown = 1 SECONDS
|
||||
|
||||
/obj/structure/grille/fence/
|
||||
/obj/structure/grille/fence
|
||||
var/width = 3
|
||||
|
||||
/obj/structure/grille/fence/New()
|
||||
/obj/structure/grille/fence/Initialize(mapload)
|
||||
. = ..()
|
||||
if(width > 1)
|
||||
if(dir in list(EAST, WEST))
|
||||
@@ -116,28 +117,28 @@
|
||||
var/atom/movable/mover = caller
|
||||
. = . || mover.checkpass(PASSGRILLE)
|
||||
|
||||
/obj/structure/grille/attackby(obj/item/W, mob/user, params)
|
||||
/obj/structure/grille/attackby(obj/item/I, mob/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
add_fingerprint(user)
|
||||
if(istype(W, /obj/item/stack/rods) && broken)
|
||||
var/obj/item/stack/rods/R = W
|
||||
if(!shock(user, 90))
|
||||
user.visible_message("<span class='notice'>[user] rebuilds the broken grille.</span>", \
|
||||
"<span class='notice'>You rebuild the broken grille.</span>")
|
||||
new grille_type(loc)
|
||||
R.use(1)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(I, /obj/item/stack/rods) && broken)
|
||||
repair(user, I)
|
||||
|
||||
//window placing begin
|
||||
else if(is_glass_sheet(W))
|
||||
build_window(W, user)
|
||||
else if(is_glass_sheet(I))
|
||||
build_window(I, user)
|
||||
return
|
||||
//window placing end
|
||||
|
||||
else if(istype(W, /obj/item/shard) || !shock(user, 70))
|
||||
else if(istype(I, /obj/item/shard) || !shock(user, 70))
|
||||
return ..()
|
||||
|
||||
/obj/structure/grille/proc/repair(mob/user, obj/item/stack/rods/R)
|
||||
user.visible_message("<span class='notice'>[user] rebuilds the broken grille.</span>",
|
||||
"<span class='notice'>You rebuild the broken grille.</span>")
|
||||
new grille_type(loc)
|
||||
R.use(1)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/grille/wirecutter_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(shock(user, 100))
|
||||
@@ -159,54 +160,37 @@
|
||||
"<span class='notice'>You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.</span>")
|
||||
|
||||
/obj/structure/grille/proc/build_window(obj/item/stack/sheet/S, mob/user)
|
||||
var/dir_to_set = NORTH
|
||||
var/dir_to_set = SOUTHWEST
|
||||
if(!istype(S) || !user)
|
||||
return
|
||||
if(broken)
|
||||
to_chat(user, "<span class='warning'>You must repair or replace [src] first!</span>")
|
||||
return
|
||||
if(S.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need at least one sheet of glass for that!</span>")
|
||||
if(S.get_amount() < 2)
|
||||
to_chat(user, "<span class='warning'>You need at least two sheets of glass for that!</span>")
|
||||
return
|
||||
if(!anchored)
|
||||
to_chat(user, "<span class='warning'>[src] needs to be fastened to the floor first!</span>")
|
||||
return
|
||||
if(!getRelativeDirection(src, user) && (user.loc != loc)) //essentially a cardinal direction adjacent or sharing same loc check
|
||||
to_chat(user, "<span class='warning'>You can't reach.</span>")
|
||||
return
|
||||
if(loc == user.loc)
|
||||
dir_to_set = user.dir
|
||||
else
|
||||
if(x == user.x)
|
||||
if(y > user.y)
|
||||
dir_to_set = SOUTH
|
||||
else
|
||||
dir_to_set = NORTH
|
||||
else if(y == user.y)
|
||||
if(x > user.x)
|
||||
dir_to_set = WEST
|
||||
else
|
||||
dir_to_set = EAST
|
||||
for(var/obj/structure/window/WINDOW in loc)
|
||||
if(WINDOW.dir == dir_to_set)
|
||||
to_chat(user, "<span class='notice'>There is already a window facing this way there.</span>")
|
||||
return
|
||||
to_chat(user, "<span class='warning'>There is already a window there!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start placing the window...</span>")
|
||||
if(do_after(user, 20, target = src))
|
||||
if(!loc || !anchored) //Grille destroyed or unanchored while waiting
|
||||
return
|
||||
for(var/obj/structure/window/WINDOW in loc)
|
||||
if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting.
|
||||
to_chat(user, "<span class='notice'>There is already a window facing this way there.</span>")
|
||||
return
|
||||
var/obj/structure/window/W = new S.created_window(get_turf(src))
|
||||
S.use(1)
|
||||
for(var/obj/structure/window/WINDOW in loc) //checking this for a 2nd time to check if a window was made while we were waiting.
|
||||
to_chat(user, "<span class='warning'>There is already a window there!</span>")
|
||||
return
|
||||
var/obj/structure/window/W = new S.full_window(drop_location())
|
||||
W.setDir(dir_to_set)
|
||||
W.ini_dir = dir_to_set
|
||||
W.anchored = FALSE
|
||||
W.state = WINDOW_OUT_OF_FRAME
|
||||
to_chat(user, "<span class='notice'>You place the [W] on [src].</span>")
|
||||
air_update_turf(TRUE)
|
||||
W.update_nearby_icons()
|
||||
W.state = WINDOW_OUT_OF_FRAME
|
||||
S.use(2)
|
||||
to_chat(user, "<span class='notice'>You place the [W] on [src].</span>")
|
||||
|
||||
|
||||
/obj/structure/grille/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
||||
@@ -270,7 +254,7 @@
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(C)
|
||||
playsound(src, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
|
||||
tesla_zap(src, 3, C.newavail() * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot.
|
||||
tesla_zap(src, 3, C.newavail() * 0.01, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_ALLOW_DUPLICATES) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot.
|
||||
C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock.
|
||||
return ..()
|
||||
|
||||
@@ -290,8 +274,8 @@
|
||||
desc = "A strangely-shaped grille."
|
||||
broken_type = /obj/structure/grille/ratvar/broken
|
||||
|
||||
/obj/structure/grille/ratvar/New()
|
||||
..()
|
||||
/obj/structure/grille/ratvar/Initialize(mapload)
|
||||
. = ..()
|
||||
if(broken)
|
||||
new /obj/effect/temp_visual/ratvar/grille/broken(get_turf(src))
|
||||
else
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
|
||||
var/obj/item/holosign_creator/projector
|
||||
|
||||
/obj/structure/holosign/New(loc, source_projector)
|
||||
/obj/structure/holosign/Initialize(mapload, source_projector)
|
||||
. = ..()
|
||||
if(source_projector)
|
||||
projector = source_projector
|
||||
projector.signs += src
|
||||
..()
|
||||
|
||||
/obj/structure/holosign/Destroy()
|
||||
if(projector)
|
||||
@@ -62,6 +62,8 @@
|
||||
|
||||
/obj/structure/holosign/barrier/engineering
|
||||
icon_state = "holosign_engi"
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
rad_insulation = RAD_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/holosign/barrier/atmos
|
||||
name = "holo firelock"
|
||||
@@ -72,9 +74,11 @@
|
||||
anchored = TRUE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
alpha = 150
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
rad_insulation = RAD_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/holosign/barrier/atmos/New()
|
||||
..()
|
||||
/obj/structure/holosign/barrier/atmos/Initialize(mapload)
|
||||
. = ..()
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/holosign/barrier/atmos/CanAtmosPass(turf/T)
|
||||
@@ -118,7 +122,7 @@
|
||||
if(!shockcd)
|
||||
if(isliving(user))
|
||||
var/mob/living/M = user
|
||||
M.electrocute_act(15, "Energy Barrier", safety = TRUE)
|
||||
M.electrocute_act(15, "Energy Barrier")
|
||||
shockcd = TRUE
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
|
||||
@@ -130,6 +134,6 @@
|
||||
return
|
||||
|
||||
var/mob/living/M = AM
|
||||
M.electrocute_act(15, "Energy Barrier", safety = TRUE)
|
||||
M.electrocute_act(15, "Energy Barrier")
|
||||
shockcd = TRUE
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
|
||||
@@ -59,10 +59,12 @@
|
||||
qdel(src)
|
||||
else
|
||||
visible_message("[src] slowly deflates.")
|
||||
spawn(50)
|
||||
var/obj/item/inflatable/R = new intact(loc)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
addtimer(CALLBACK(src, .proc/deflate), 5 SECONDS)
|
||||
|
||||
/obj/structure/inflatable/proc/deflate()
|
||||
var/obj/item/inflatable/R = new intact(loc)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/verb/hand_deflate()
|
||||
set name = "Deflate"
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
var/const/max_signs = 4
|
||||
|
||||
|
||||
/obj/structure/janitorialcart/New()
|
||||
..()
|
||||
/obj/structure/janitorialcart/Initialize(mapload)
|
||||
. = ..()
|
||||
create_reagents(100)
|
||||
GLOB.janitorial_equipment += src
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
icon_state = "metal"
|
||||
max_integrity = 200
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50)
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
var/initial_state
|
||||
var/state = 0 //closed, 1 == open
|
||||
var/isSwitchingStates = 0
|
||||
@@ -21,12 +23,9 @@
|
||||
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
|
||||
var/damageSound = null
|
||||
|
||||
/obj/structure/mineral_door/New(location)
|
||||
..()
|
||||
initial_state = icon_state
|
||||
|
||||
/obj/structure/mineral_door/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
initial_state = icon_state
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/mineral_door/Destroy()
|
||||
@@ -156,11 +155,13 @@
|
||||
icon_state = "silver"
|
||||
sheetType = /obj/item/stack/sheet/mineral/silver
|
||||
max_integrity = 300
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/gold
|
||||
name = "gold door"
|
||||
icon_state = "gold"
|
||||
sheetType = /obj/item/stack/sheet/mineral/gold
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/uranium
|
||||
name = "uranium door"
|
||||
@@ -177,6 +178,7 @@
|
||||
|
||||
/obj/structure/mineral_door/transparent
|
||||
opacity = 0
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/transparent/Close()
|
||||
..()
|
||||
@@ -210,6 +212,7 @@
|
||||
icon_state = "diamond"
|
||||
sheetType = /obj/item/stack/sheet/mineral/diamond
|
||||
max_integrity = 1000
|
||||
rad_insulation = RAD_EXTREME_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/wood
|
||||
name = "wood door"
|
||||
@@ -220,6 +223,7 @@
|
||||
hardness = 1
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 200
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/mineral_door/resin
|
||||
name = "resin door"
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
integrity_failure = 100
|
||||
var/list/ui_users = list()
|
||||
|
||||
/obj/structure/mirror/New(turf/T, newdir = SOUTH, building = FALSE)
|
||||
..()
|
||||
/obj/structure/mirror/Initialize(mapload, newdir = SOUTH, building = FALSE)
|
||||
. = ..()
|
||||
if(building)
|
||||
switch(newdir)
|
||||
if(NORTH)
|
||||
@@ -147,10 +147,10 @@
|
||||
if(voice_mutation)
|
||||
if(H.dna.GetSEState(voice_mutation))
|
||||
H.dna.SetSEState(voice_mutation, FALSE)
|
||||
genemutcheck(H, voice_mutation, null, MUTCHK_FORCED)
|
||||
singlemutcheck(H, voice_mutation, MUTCHK_FORCED)
|
||||
else
|
||||
H.dna.SetSEState(voice_mutation, TRUE)
|
||||
genemutcheck(H, voice_mutation, null, MUTCHK_FORCED)
|
||||
singlemutcheck(H, voice_mutation, MUTCHK_FORCED)
|
||||
|
||||
if(voice_choice)
|
||||
curse(user)
|
||||
|
||||
@@ -51,16 +51,17 @@
|
||||
desc = "Top-of-the-line Nanotrasen technology allows for cloning of crew members from off-station upon bluespace request."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "borgcharger1(old)"
|
||||
anchored = 1
|
||||
density = 1
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/respawner/attack_ghost(mob/dead/observer/user as mob)
|
||||
var/response = alert(user, "Are you sure you want to spawn like this?\n(If you do this, you won't be able to be cloned!)","Respawn?","Yes","No")
|
||||
/obj/structure/respawner/attack_ghost(mob/dead/observer/user)
|
||||
var/response = alert(user, "Are you sure you want to spawn here?\n(If you do this, you won't be able to be cloned!)", "Respawn?", "Yes", "No")
|
||||
if(response == "Yes")
|
||||
user.forceMove(get_turf(src))
|
||||
log_admin("[key_name(user)] was incarnated by a respawner machine.")
|
||||
message_admins("[key_name_admin(user)] was incarnated by a respawner machine.")
|
||||
user.incarnate_ghost()
|
||||
var/mob/living/carbon/human/new_human = user.incarnate_ghost()
|
||||
new_human.mind.offstation_role = TRUE // To prevent them being an antag objective
|
||||
|
||||
/obj/structure/ghost_beacon
|
||||
name = "ethereal beacon"
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
container_type = OPENCONTAINER
|
||||
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
|
||||
|
||||
/obj/structure/mopbucket/New()
|
||||
..()
|
||||
/obj/structure/mopbucket/Initialize(mapload)
|
||||
. = ..()
|
||||
create_reagents(100)
|
||||
GLOB.janitorial_equipment += src
|
||||
|
||||
/obj/structure/mopbucket/full/New()
|
||||
..()
|
||||
/obj/structure/mopbucket/full/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent("water", 100)
|
||||
|
||||
/obj/structure/mopbucket/Destroy()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
if(M)
|
||||
var/mob/dead/observer/G = M.get_ghost()
|
||||
|
||||
if(M.mind && M.mind.is_revivable() && !M.mind.suicided)
|
||||
if(M.mind && !M.mind.suicided)
|
||||
if(M.client)
|
||||
icon_state = "morgue3"
|
||||
desc = initial(desc) + "\n[status_descriptors[4]]"
|
||||
@@ -161,7 +161,7 @@
|
||||
QDEL_NULL(connected)
|
||||
return ..()
|
||||
|
||||
/obj/structure/morgue/container_resist(var/mob/living/L)
|
||||
/obj/structure/morgue/container_resist(mob/living/L)
|
||||
var/mob/living/carbon/CM = L
|
||||
if(!istype(CM))
|
||||
return
|
||||
@@ -391,7 +391,7 @@
|
||||
QDEL_NULL(connected)
|
||||
return ..()
|
||||
|
||||
/obj/structure/crematorium/container_resist(var/mob/living/L)
|
||||
/obj/structure/crematorium/container_resist(mob/living/L)
|
||||
var/mob/living/carbon/CM = L
|
||||
if(!istype(CM))
|
||||
return
|
||||
@@ -457,6 +457,10 @@
|
||||
name = "crematorium igniter"
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "crema_switch"
|
||||
power_channel = EQUIP
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 100
|
||||
active_power_usage = 5000
|
||||
anchored = 1.0
|
||||
req_access = list(ACCESS_CREMATORIUM)
|
||||
var/on = 0
|
||||
@@ -469,13 +473,17 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/crema_switch/attack_hand(mob/user)
|
||||
if(allowed(usr) || user.can_advanced_admin_interact())
|
||||
for(var/obj/structure/crematorium/C in world)
|
||||
if(C.id == id)
|
||||
if(!C.cremating)
|
||||
C.cremate(user)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Access denied.</span>")
|
||||
if(powered(power_channel)) // Do we have power?
|
||||
if(allowed(usr) || user.can_advanced_admin_interact())
|
||||
use_power(400000)
|
||||
for(var/obj/structure/crematorium/C in world)
|
||||
if(C.id == id)
|
||||
if(!C.cremating)
|
||||
C.cremate(user)
|
||||
|
||||
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Access denied.</span>")
|
||||
|
||||
/mob/proc/update_morgue()
|
||||
if(stat == DEAD)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
icon_state = "nboard0[notices]"
|
||||
|
||||
//attaching papers!!
|
||||
/obj/structure/noticeboard/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
/obj/structure/noticeboard/attackby(obj/item/O as obj, mob/user as mob, params)
|
||||
if(istype(O, /obj/item/paper))
|
||||
if(notices < 5)
|
||||
O.add_fingerprint(user)
|
||||
|
||||
@@ -7,7 +7,7 @@ SAFE CODES
|
||||
*/
|
||||
|
||||
#define DRILL_SPARK_CHANCE 15
|
||||
#define DRILL_TIME 300 SECONDS
|
||||
#define DRILL_TIME 120 SECONDS
|
||||
#define SOUND_CHANCE 10
|
||||
|
||||
GLOBAL_LIST_EMPTY(safes)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
layer = 3.5
|
||||
max_integrity = 100
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
|
||||
/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
||||
switch(damage_type)
|
||||
@@ -152,10 +153,10 @@
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "xeno_warning"
|
||||
|
||||
/obj/structure/sign/redcross
|
||||
/obj/structure/sign/lifestar
|
||||
name = "medbay"
|
||||
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here.'"
|
||||
icon_state = "redcross"
|
||||
desc = "The Star of Life, a symbol of Medical Aid."
|
||||
icon_state = "lifestar"
|
||||
|
||||
/obj/structure/sign/greencross
|
||||
name = "medbay"
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
spirit_board_pick_letter(user)
|
||||
|
||||
|
||||
/obj/structure/spirit_board/proc/spirit_board_pick_letter(var/mob/M)
|
||||
/obj/structure/spirit_board/proc/spirit_board_pick_letter(mob/M)
|
||||
if(!spirit_board_checks(M))
|
||||
return 0
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
visible_message("<span class='notice'>The planchette slowly moves... and stops at the letter \"[planchette]\".</span>")
|
||||
|
||||
|
||||
/obj/structure/spirit_board/proc/spirit_board_checks(var/mob/M)
|
||||
/obj/structure/spirit_board/proc/spirit_board_checks(mob/M)
|
||||
//cooldown
|
||||
var/bonus = 0
|
||||
if(M.ckey == lastuser)
|
||||
|
||||
@@ -46,9 +46,6 @@
|
||||
user.visible_message("[user] rubs some dust off from the [name]'s surface.", \
|
||||
"<span class='notice'>You rub some dust off from the [name]'s surface.</span>")
|
||||
|
||||
/obj/structure/statue/CanAtmosPass()
|
||||
return !density
|
||||
|
||||
/obj/structure/statue/deconstruct(disassembled = TRUE)
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
if(material_drop_type)
|
||||
@@ -90,10 +87,9 @@
|
||||
|
||||
/obj/structure/statue/uranium/proc/radiate()
|
||||
if(!active)
|
||||
if(world.time > last_event+15)
|
||||
if(world.time > last_event + 15)
|
||||
active = 1
|
||||
for(var/mob/living/L in range(3,src))
|
||||
L.apply_effect(12,IRRADIATE,0)
|
||||
radiation_pulse(src, 30)
|
||||
last_event = world.time
|
||||
active = null
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
comfort = 0
|
||||
flags = NODECONSTRUCT
|
||||
|
||||
/obj/structure/bed/nest/New()
|
||||
/obj/structure/bed/nest/Initialize(mapload)
|
||||
. = ..()
|
||||
nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=MOB_LAYER - 0.2)
|
||||
return ..()
|
||||
|
||||
/obj/structure/bed/nest/user_unbuckle_mob(mob/living/user)
|
||||
if(has_buckled_mobs())
|
||||
|
||||
@@ -19,12 +19,6 @@
|
||||
var/propelled = FALSE // Check for fire-extinguisher-driven chairs
|
||||
var/comfort = 0
|
||||
|
||||
/obj/structure/chair/New()
|
||||
..()
|
||||
spawn(3) //sorry. i don't think there's a better way to do this.
|
||||
handle_rotation()
|
||||
return
|
||||
|
||||
/obj/structure/chair/narsie_act()
|
||||
if(prob(20))
|
||||
var/obj/structure/chair/wood/W = new/obj/structure/chair/wood(get_turf(src))
|
||||
@@ -47,10 +41,9 @@
|
||||
to_chat(user, "<span class='notice'>[SK] is not ready to be attached!</span>")
|
||||
return
|
||||
user.drop_item()
|
||||
var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc)
|
||||
var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(get_turf(src), SK)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
E.dir = dir
|
||||
E.part = SK
|
||||
SK.loc = E
|
||||
SK.master = E
|
||||
qdel(src)
|
||||
|
||||
@@ -156,3 +156,6 @@
|
||||
|
||||
else
|
||||
. = 1
|
||||
|
||||
/obj/structure/chair/wheelchair/bike/wrench_act(mob/user, obj/item/I)
|
||||
return
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
var/deconstruction_ready = TRUE
|
||||
var/flipped = 0
|
||||
|
||||
/obj/structure/table/New()
|
||||
..()
|
||||
/obj/structure/table/Initialize(mapload)
|
||||
. = ..()
|
||||
if(flipped)
|
||||
update_icon()
|
||||
|
||||
@@ -70,11 +70,11 @@
|
||||
if(istype(src, /obj/structure/table/reinforced))
|
||||
base = "rtable"
|
||||
if(istype(src, /obj/structure/table/wood/poker))
|
||||
base = "poker"
|
||||
base = "poker"
|
||||
if(istype(src, /obj/structure/table/wood/fancy))
|
||||
base = "fancy"
|
||||
base = "fancy"
|
||||
if(istype(src, /obj/structure/table/wood/fancy/black))
|
||||
base = "fancyblack"
|
||||
base = "fancyblack"
|
||||
|
||||
icon_state = "[base]flip[type][type == 1 ? subtype : ""]"
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
return 1
|
||||
if(mover.throwing)
|
||||
return 1
|
||||
if(locate(/obj/structure/table) in get_turf(mover))
|
||||
if(length(get_atoms_of_type(get_turf(mover), /obj/structure/table) - mover))
|
||||
return 1
|
||||
if(flipped)
|
||||
if(get_dir(loc, target) == dir)
|
||||
@@ -394,7 +394,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
var/list/debris = list()
|
||||
|
||||
/obj/structure/table/glass/New()
|
||||
/obj/structure/table/glass/Initialize(mapload)
|
||||
. = ..()
|
||||
debris += new frame
|
||||
debris += new /obj/item/shard
|
||||
@@ -503,16 +503,16 @@
|
||||
buildstack = /obj/item/stack/tile/carpet
|
||||
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
|
||||
|
||||
/obj/structure/table/wood/fancy/New()
|
||||
/obj/structure/table/wood/fancy/Initialize(mapload)
|
||||
. = ..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table.dmi' //so that the tables place correctly in the map editor
|
||||
..()
|
||||
|
||||
/obj/structure/table/wood/fancy/black
|
||||
icon_state = "fancy_table_black"
|
||||
buildstack = /obj/item/stack/tile/carpet/black
|
||||
|
||||
/obj/structure/table/wood/fancy/black/New()
|
||||
..()
|
||||
/obj/structure/table/wood/fancy/black/Initialize(mapload)
|
||||
. = ..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_black.dmi' //so that the tables place correctly in the map editor
|
||||
|
||||
/*
|
||||
@@ -591,7 +591,7 @@
|
||||
verbs -= /obj/structure/table/verb/do_flip
|
||||
typecache_can_hold = typecacheof(typecache_can_hold)
|
||||
for(var/atom/movable/held in get_turf(src))
|
||||
if(is_type_in_typecache(held, typecache_can_hold))
|
||||
if(!held.anchored && held.move_resist != INFINITY && is_type_in_typecache(held, typecache_can_hold))
|
||||
held_items += held.UID()
|
||||
|
||||
/obj/structure/table/tray/Move(NewLoc, direct)
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
/obj/structure/dispenser/plasma
|
||||
starting_oxygen_tanks = 0
|
||||
|
||||
/obj/structure/dispenser/New()
|
||||
..()
|
||||
/obj/structure/dispenser/Initialize(mapload)
|
||||
. = ..()
|
||||
initialize_tanks()
|
||||
update_icon()
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
|
||||
/obj/structure/dispenser/proc/initialize_tanks()
|
||||
for(var/I in 1 to starting_plasma_tanks)
|
||||
var/obj/item/tank/plasma/P = new(src)
|
||||
var/obj/item/tank/internals/plasma/P = new(src)
|
||||
stored_plasma_tanks.Add(P)
|
||||
|
||||
for(var/I in 1 to starting_oxygen_tanks)
|
||||
var/obj/item/tank/oxygen/O = new(src)
|
||||
var/obj/item/tank/internals/oxygen/O = new(src)
|
||||
stored_oxygen_tanks.Add(O)
|
||||
|
||||
/obj/structure/dispenser/update_icon()
|
||||
@@ -89,11 +89,11 @@
|
||||
return TRUE
|
||||
|
||||
/obj/structure/dispenser/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/tank/oxygen) || istype(I, /obj/item/tank/air) || istype(I, /obj/item/tank/anesthetic))
|
||||
if(istype(I, /obj/item/tank/internals/oxygen) || istype(I, /obj/item/tank/internals/air) || istype(I, /obj/item/tank/internals/anesthetic))
|
||||
try_insert_tank(user, stored_oxygen_tanks, I)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/tank/plasma))
|
||||
if(istype(I, /obj/item/tank/internals/plasma))
|
||||
try_insert_tank(user, stored_plasma_tanks, I)
|
||||
return
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
if(!LAZYLEN(tank_list))
|
||||
return // There are no tanks left to withdraw.
|
||||
|
||||
var/obj/item/tank/T = tank_list[1]
|
||||
var/obj/item/tank/internals/T = tank_list[1]
|
||||
tank_list.Remove(T)
|
||||
|
||||
if(!user.put_in_hands(T))
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
|
||||
var/list/disallowed_mobs = list(/mob/living/silicon/ai)
|
||||
|
||||
/obj/structure/transit_tube/station/New()
|
||||
..()
|
||||
/obj/structure/transit_tube/station/Initialize(mapload)
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/transit_tube/station/Destroy()
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
return TRUE
|
||||
else return ..()
|
||||
|
||||
/obj/structure/transit_tube_pod/proc/follow_tube(var/reverse_launch)
|
||||
/obj/structure/transit_tube_pod/proc/follow_tube(reverse_launch)
|
||||
if(moving)
|
||||
return
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
var/mob/living/swirlie = null //the mob being given a swirlie
|
||||
|
||||
|
||||
/obj/structure/toilet/New()
|
||||
..()
|
||||
/obj/structure/toilet/Initialize(mapload)
|
||||
. = ..()
|
||||
open = round(rand(0, 1))
|
||||
update_icon()
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(src.loc, "swing_hit", 25, 1)
|
||||
swirlie.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie]'s head!</span>", "<span class='userdanger'>[user] slams the toilet seat onto [swirlie]'s head!</span>", "<span class='italics'>You hear reverberating porcelain.</span>")
|
||||
swirlie.adjustBruteLoss(5)
|
||||
swirlie.apply_damage(5, BRUTE, BODY_ZONE_HEAD)
|
||||
return
|
||||
|
||||
if(cistern && !open)
|
||||
@@ -101,8 +101,8 @@
|
||||
swirlie = null
|
||||
else
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
GM.visible_message("<span class='danger'>[user] slams [GM.name] into [src]!</span>", "<span class='userdanger'>[user] slams [GM.name] into [src]!</span>")
|
||||
GM.adjustBruteLoss(5)
|
||||
GM.visible_message("<span class='danger'>[user] slams [GM.name]'s head into [src]!</span>", "<span class='userdanger'>[user] slams [GM.name]'s head into [src]!</span>")
|
||||
GM.apply_damage(5, BRUTE, BODY_ZONE_HEAD)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need a tighter grip!</span>")
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
/obj/structure/toilet/secret
|
||||
var/secret_type = null
|
||||
|
||||
/obj/structure/toilet/secret/New()
|
||||
/obj/structure/toilet/secret/Initialize(mapload)
|
||||
. = ..()
|
||||
if(secret_type)
|
||||
var/obj/item/secret = new secret_type(src)
|
||||
@@ -212,8 +212,8 @@
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
user.visible_message("<span class='danger'>[user] slams [GM] into [src]!</span>", "<span class='notice'>You slam [GM] into [src]!</span>")
|
||||
GM.adjustBruteLoss(8)
|
||||
user.visible_message("<span class='danger'>[user] slams [GM]'s head into [src]!</span>", "<span class='danger'>You slam [GM]'s head into [src]!</span>")
|
||||
GM.apply_damage(8, BRUTE, BODY_ZONE_HEAD)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need a tighter grip!</span>")
|
||||
|
||||
@@ -240,6 +240,10 @@
|
||||
pixel_x = 0
|
||||
pixel_y = 32
|
||||
|
||||
#define SHOWER_FREEZING "freezing"
|
||||
#define SHOWER_NORMAL "normal"
|
||||
#define SHOWER_BOILING "boiling"
|
||||
|
||||
/obj/machinery/shower
|
||||
name = "shower"
|
||||
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
|
||||
@@ -248,11 +252,11 @@
|
||||
density = 0
|
||||
anchored = 1
|
||||
use_power = NO_POWER_USE
|
||||
var/on = 0
|
||||
var/obj/effect/mist/mymist = null
|
||||
var/ismist = 0 //needs a var so we can make it linger~
|
||||
var/watertemp = "normal" //freezing, normal, or boiling
|
||||
var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process()
|
||||
///Is the shower on or off?
|
||||
var/on = FALSE
|
||||
///What temperature the shower reagents are set to.
|
||||
var/current_temperature = SHOWER_NORMAL
|
||||
///What sound will be played on loop when the shower is on and pouring water.
|
||||
var/datum/looping_sound/showering/soundloop
|
||||
|
||||
/obj/machinery/shower/New(turf/T, newdir = SOUTH, building = FALSE)
|
||||
@@ -270,7 +274,6 @@
|
||||
layer = FLY_LAYER
|
||||
|
||||
/obj/machinery/shower/Destroy()
|
||||
QDEL_NULL(mymist)
|
||||
QDEL_NULL(soundloop)
|
||||
return ..()
|
||||
|
||||
@@ -280,47 +283,45 @@
|
||||
name = "mist"
|
||||
icon = 'icons/obj/watercloset.dmi'
|
||||
icon_state = "mist"
|
||||
layer = MOB_LAYER + 1
|
||||
anchored = 1
|
||||
layer = FLY_LAYER
|
||||
anchored = TRUE
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/machinery/shower/attack_hand(mob/M as mob)
|
||||
/obj/machinery/shower/attack_hand(mob/M)
|
||||
on = !on
|
||||
update_icon()
|
||||
handle_mist()
|
||||
add_fingerprint(M)
|
||||
if(on)
|
||||
START_PROCESSING(SSmachines, src)
|
||||
process()
|
||||
soundloop.start()
|
||||
if(M.loc == loc)
|
||||
wash(M)
|
||||
check_heat(M)
|
||||
M.water_act(100, convertHeat(), src)
|
||||
for(var/atom/movable/G in src.loc)
|
||||
G.clean_blood()
|
||||
G.water_act(100, convertHeat(), src)
|
||||
else
|
||||
soundloop.stop()
|
||||
var/turf/simulated/T = loc
|
||||
if(istype(T) && !T.density)
|
||||
T.MakeSlippery(TURF_WET_WATER, 5 SECONDS)
|
||||
|
||||
/obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob, params)
|
||||
/obj/machinery/shower/attackby(obj/item/I, mob/user, params)
|
||||
if(I.type == /obj/item/analyzer)
|
||||
to_chat(user, "<span class='notice'>The water temperature seems to be [watertemp].</span>")
|
||||
if(on)
|
||||
I.water_act(100, convertHeat(), src)
|
||||
to_chat(user, "<span class='notice'>The water temperature seems to be [current_temperature].</span>")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/shower/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with the [I].</span>")
|
||||
if(I.use_tool(src, user, 50, volume = I.tool_volume))
|
||||
switch(watertemp)
|
||||
if("normal")
|
||||
watertemp = "freezing"
|
||||
if("freezing")
|
||||
watertemp = "boiling"
|
||||
if("boiling")
|
||||
watertemp = "normal"
|
||||
user.visible_message("<span class='notice'>[user] adjusts the shower with the [I].</span>", "<span class='notice'>You adjust [src] to [watertemp].</span>")
|
||||
update_icon() //letsa update whenever we change the temperature, since the mist might need to change
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>You begin to adjust the temperature valve with [I].</span>")
|
||||
if(I.use_tool(src, user, 50))
|
||||
switch(current_temperature)
|
||||
if(SHOWER_NORMAL)
|
||||
current_temperature = SHOWER_FREEZING
|
||||
if(SHOWER_FREEZING)
|
||||
current_temperature = SHOWER_BOILING
|
||||
if(SHOWER_BOILING)
|
||||
current_temperature = SHOWER_NORMAL
|
||||
user.visible_message("<span class='notice'>[user] adjusts the shower with \the [I].</span>", "<span class='notice'>You adjust the shower with \the [I] to [current_temperature] temperature.</span>")
|
||||
add_hiddenprint(user)
|
||||
handle_mist()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/shower/welder_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
@@ -331,111 +332,103 @@
|
||||
return
|
||||
visible_message("<span class='notice'>[user] begins slicing [src] free...</span>", "<span class='notice'>You begin slicing [src] free...</span>", "<span class='warning'>You hear welding.</span>")
|
||||
if(I.use_tool(src, user, 40, volume = I.tool_volume))
|
||||
if(mymist)
|
||||
qdel(mymist)
|
||||
user.visible_message("<span class='notice'>[user] cuts [src] loose!</span>", "<span class='notice'>You cut [src] loose!</span>")
|
||||
var/obj/item/mounted/shower/S = new /obj/item/mounted/shower(get_turf(user))
|
||||
transfer_prints_to(S, TRUE)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/shower/update_icon() //this makes the shower mist up or clear mist (depending on water temperature)
|
||||
overlays.Cut() //once it's been on for a while, in addition to handling the water overlay.
|
||||
/obj/machinery/shower/update_icon()
|
||||
cut_overlays()
|
||||
if(on)
|
||||
overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
|
||||
var/mist_time = 50 //5 seconds at normal temperature to build up mist
|
||||
if(watertemp == "freezing")
|
||||
mist_time = 70 //7 seconds on freezing temperature to disperse existing mist
|
||||
if(watertemp == "boiling")
|
||||
mist_time = 20 //2 seconds on boiling temperature to build up mist
|
||||
addtimer(CALLBACK(src, .proc/update_mist), mist_time)
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/update_mist), 250) //25 seconds for mist to disperse after being turned off
|
||||
var/mutable_appearance/water_falling = mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER)
|
||||
add_overlay(water_falling)
|
||||
|
||||
/obj/machinery/shower/proc/update_mist()
|
||||
/obj/machinery/shower/proc/handle_mist()
|
||||
// If there is no mist, and the shower was turned on (on a non-freezing temp): make mist in 5 seconds
|
||||
// If there was already mist, and the shower was turned off (or made cold): remove the existing mist in 25 sec
|
||||
var/obj/effect/mist/mist = locate() in loc
|
||||
if(!mist && on && current_temperature != SHOWER_FREEZING)
|
||||
addtimer(CALLBACK(src, .proc/make_mist), 5 SECONDS)
|
||||
|
||||
if(mist && (!on || current_temperature == SHOWER_FREEZING))
|
||||
addtimer(CALLBACK(src, .proc/clear_mist), 25 SECONDS)
|
||||
|
||||
|
||||
/obj/machinery/shower/proc/make_mist()
|
||||
var/obj/effect/mist/mist = locate() in loc
|
||||
if(!mist && on && current_temperature != SHOWER_FREEZING)
|
||||
new /obj/effect/mist(loc)
|
||||
|
||||
/obj/machinery/shower/proc/clear_mist()
|
||||
var/obj/effect/mist/mist = locate() in loc
|
||||
if(mist && (!on || current_temperature == SHOWER_FREEZING))
|
||||
qdel(mist)
|
||||
|
||||
/obj/machinery/shower/Crossed(atom/movable/AM)
|
||||
..()
|
||||
if(on)
|
||||
if(watertemp == "freezing")
|
||||
if(mymist)
|
||||
qdel(mymist)
|
||||
ismist = 0
|
||||
return
|
||||
if(mymist)
|
||||
return
|
||||
ismist = 1
|
||||
mymist = new /obj/effect/mist(loc)
|
||||
else
|
||||
if(mymist)
|
||||
qdel(mymist)
|
||||
ismist = 0
|
||||
|
||||
/obj/machinery/shower/Crossed(atom/movable/O, oldloc)
|
||||
..()
|
||||
wash(O)
|
||||
if(ismob(O))
|
||||
mobpresent += 1
|
||||
check_heat(O)
|
||||
|
||||
/obj/machinery/shower/Uncrossed(atom/movable/O)
|
||||
if(ismob(O))
|
||||
mobpresent -= 1
|
||||
..()
|
||||
wash(AM)
|
||||
|
||||
/obj/machinery/shower/proc/convertHeat()
|
||||
switch(watertemp)
|
||||
if("boiling")
|
||||
switch(current_temperature)
|
||||
if(SHOWER_BOILING)
|
||||
return 340.15
|
||||
if("normal")
|
||||
if(SHOWER_NORMAL)
|
||||
return 310.15
|
||||
if("freezing")
|
||||
if(SHOWER_FREEZING)
|
||||
return 230.15
|
||||
|
||||
//Yes, showers are super powerful as far as washing goes.
|
||||
/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
|
||||
if(!on) return
|
||||
|
||||
if(istype(O, /obj/item))
|
||||
var/obj/item/I = O
|
||||
/obj/machinery/shower/proc/wash(atom/A)
|
||||
if(isitem(A))
|
||||
var/obj/item/I = A
|
||||
I.extinguish()
|
||||
|
||||
O.water_act(100, convertHeat(), src)
|
||||
A.water_act(100, convertHeat(), src)
|
||||
|
||||
if(isliving(O))
|
||||
var/mob/living/L = O
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
check_heat(L)
|
||||
L.ExtinguishMob()
|
||||
L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
|
||||
to_chat(L, "<span class='warning'>You've been drenched in water!</span>")
|
||||
L.clean_blood()
|
||||
|
||||
if(isturf(loc))
|
||||
var/turf/tile = loc
|
||||
loc.clean_blood()
|
||||
for(var/obj/effect/E in tile)
|
||||
if(is_cleanable(E))
|
||||
qdel(E)
|
||||
A.clean_blood(radiation_clean = TRUE)
|
||||
|
||||
/obj/machinery/shower/process()
|
||||
if(!on || !mobpresent)
|
||||
return
|
||||
for(var/mob/living/carbon/C in loc)
|
||||
if(prob(33))
|
||||
wash(C) //re-applies water and re-cleans mob while they remain under the shower, 33% chance per process to avoid message spam/quick death
|
||||
check_heat(C)
|
||||
if(on)
|
||||
if(isturf(loc))
|
||||
var/turf/tile = loc
|
||||
tile.water_act(100, convertHeat(), src)
|
||||
tile.clean_blood(radiation_clean = TRUE)
|
||||
for(var/obj/effect/E in tile)
|
||||
if(is_cleanable(E))
|
||||
qdel(E)
|
||||
for(var/A in loc)
|
||||
wash(A)
|
||||
else
|
||||
on = FALSE
|
||||
soundloop.stop()
|
||||
handle_mist()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/shower/proc/check_heat(mob/M as mob)
|
||||
if(!on || watertemp == "normal")
|
||||
/obj/machinery/shower/proc/check_heat(mob/M)
|
||||
if(current_temperature == SHOWER_NORMAL)
|
||||
return
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
|
||||
if(watertemp == "freezing")
|
||||
if(current_temperature == SHOWER_FREEZING)
|
||||
//C.bodytemperature = max(80, C.bodytemperature - 80)
|
||||
to_chat(C, "<span class='warning'>The water is freezing!</span>")
|
||||
return
|
||||
if(watertemp == "boiling")
|
||||
|
||||
else if(current_temperature == SHOWER_BOILING)
|
||||
//C.bodytemperature = min(500, C.bodytemperature + 35)
|
||||
C.adjustFireLoss(5)
|
||||
to_chat(C, "<span class='danger'>The water is searing!</span>")
|
||||
return
|
||||
|
||||
#undef SHOWER_FREEZING
|
||||
#undef SHOWER_NORMAL
|
||||
#undef SHOWER_BOILING
|
||||
|
||||
/obj/item/bikehorn/rubberducky
|
||||
name = "rubber ducky"
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to rotate it clockwise.</span>"
|
||||
|
||||
/obj/structure/windoor_assembly/New(loc, set_dir)
|
||||
..()
|
||||
/obj/structure/windoor_assembly/Initialize(mapload, set_dir)
|
||||
. = ..()
|
||||
if(set_dir)
|
||||
dir = set_dir
|
||||
ini_dir = dir
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
if("02")
|
||||
//Adding airlock electronics for access. Step 6 complete.
|
||||
if(istype(W, /obj/item/airlock_electronics))
|
||||
if(istype(W, /obj/item/airlock_electronics) && !istype(W, /obj/item/airlock_electronics/destroyed))
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...")
|
||||
user.drop_item()
|
||||
|
||||
@@ -1,26 +1,3 @@
|
||||
GLOBAL_LIST_INIT(wcBar, pick(list("#0d8395", "#58b5c3", "#58c366", "#90d79a", "#ffffff")))
|
||||
GLOBAL_LIST_INIT(wcBrig, pick(list("#aa0808", "#7f0606", "#ff0000")))
|
||||
GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8fcf44", "#ffffff")))
|
||||
|
||||
/obj/proc/color_windows(obj/W)
|
||||
var/list/wcBarAreas = list(/area/crew_quarters/bar)
|
||||
var/list/wcBrigAreas = list(/area/security, /area/shuttle/gamma)
|
||||
|
||||
var/newcolor
|
||||
var/turf/T = get_turf(W)
|
||||
if(!istype(T))
|
||||
return
|
||||
var/area/A = T.loc
|
||||
|
||||
if(is_type_in_list(A,wcBarAreas))
|
||||
newcolor = GLOB.wcBar
|
||||
else if(is_type_in_list(A,wcBrigAreas))
|
||||
newcolor = GLOB.wcBrig
|
||||
else
|
||||
newcolor = GLOB.wcCommon
|
||||
|
||||
return newcolor
|
||||
|
||||
/obj/structure/window
|
||||
name = "window"
|
||||
desc = "A window."
|
||||
@@ -30,10 +7,12 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
pressure_resistance = 4*ONE_ATMOSPHERE
|
||||
anchored = TRUE
|
||||
flags = ON_BORDER
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2
|
||||
can_be_unanchored = TRUE
|
||||
max_integrity = 25
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
var/ini_dir = null
|
||||
var/state = WINDOW_OUT_OF_FRAME
|
||||
var/reinf = FALSE
|
||||
@@ -41,11 +20,10 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
var/decon_speed = null
|
||||
var/fulltile = FALSE
|
||||
var/shardtype = /obj/item/shard
|
||||
var/glass_decal = /obj/effect/decal/cleanable/glass
|
||||
var/glass_type = /obj/item/stack/sheet/glass
|
||||
var/glass_amount = 1
|
||||
var/cancolor = FALSE
|
||||
var/image/crack_overlay
|
||||
var/list/debris = list()
|
||||
var/mutable_appearance/crack_overlay
|
||||
var/real_explosion_block //ignore this, just use explosion_block
|
||||
var/breaksound = "shatter"
|
||||
var/hitsound = 'sound/effects/Glasshit.ogg'
|
||||
@@ -69,8 +47,9 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
if(!anchored && !fulltile)
|
||||
. += "<span class='notice'>Alt-click to rotate it.</span>"
|
||||
|
||||
/obj/structure/window/New(Loc, direct)
|
||||
..()
|
||||
/obj/structure/window/Initialize(mapload, direct)
|
||||
. = ..()
|
||||
|
||||
if(direct)
|
||||
setDir(direct)
|
||||
if(reinf && anchored)
|
||||
@@ -78,42 +57,20 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
|
||||
ini_dir = dir
|
||||
|
||||
if(!color && cancolor)
|
||||
color = color_windows(src)
|
||||
|
||||
// Precreate our own debris
|
||||
|
||||
var/shards = 1
|
||||
if(fulltile)
|
||||
shards++
|
||||
setDir()
|
||||
|
||||
if(decon_speed == null && fulltile)
|
||||
decon_speed = 2 SECONDS
|
||||
|
||||
var/rods = 0
|
||||
if(reinf)
|
||||
rods++
|
||||
if(fulltile)
|
||||
rods++
|
||||
|
||||
for(var/i in 1 to shards)
|
||||
debris += new shardtype(src)
|
||||
if(rods)
|
||||
debris += new /obj/item/stack/rods(src, rods)
|
||||
|
||||
//windows only block while reinforced and fulltile, so we'll use the proc
|
||||
real_explosion_block = explosion_block
|
||||
explosion_block = EXPLOSION_BLOCK_PROC
|
||||
|
||||
/obj/structure/window/Initialize()
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/window/narsie_act()
|
||||
color = NARSIE_WINDOW_COLOUR
|
||||
for(var/obj/item/shard/shard in debris)
|
||||
shard.color = NARSIE_WINDOW_COLOUR
|
||||
|
||||
/obj/structure/window/ratvar_act()
|
||||
if(!fulltile)
|
||||
@@ -209,7 +166,15 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
return 1 //skip the afterattack
|
||||
|
||||
add_fingerprint(user)
|
||||
if(istype(I, /obj/item/grab) && get_dist(src, user) < 2)
|
||||
if(istype(I, /obj/item/stack/rods) && user.a_intent == INTENT_HELP)
|
||||
for(var/obj/structure/grille/G in get_turf(src))
|
||||
if(!G.broken)
|
||||
continue
|
||||
to_chat(user, "<span class='notice'>You start rebuilding the broken grille.</span>")
|
||||
if(do_after(user, 4 SECONDS, FALSE, G))
|
||||
G.repair(user, I)
|
||||
|
||||
else if(istype(I, /obj/item/grab) && get_dist(src, user) < 2)
|
||||
var/obj/item/grab/G = I
|
||||
if(isliving(G.affecting))
|
||||
var/mob/living/M = G.affecting
|
||||
@@ -236,8 +201,8 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
M.Weaken(5)
|
||||
M.apply_damage(30)
|
||||
take_damage(75)
|
||||
return
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/window/crowbar_act(mob/user, obj/item/I)
|
||||
@@ -323,6 +288,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
WELDER_ATTEMPT_REPAIR_MESSAGE
|
||||
if(I.use_tool(src, user, 40, volume = I.tool_volume))
|
||||
obj_integrity = max_integrity
|
||||
update_nearby_icons()
|
||||
WELDER_REPAIR_SUCCESS_MESSAGE
|
||||
|
||||
/obj/structure/window/proc/check_state(checked_state)
|
||||
@@ -370,13 +336,20 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
if(!disassembled)
|
||||
playsound(src, breaksound, 70, 1)
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
for(var/i in debris)
|
||||
var/obj/item/I = i
|
||||
I.forceMove(loc)
|
||||
transfer_fingerprints_to(I)
|
||||
for(var/obj/item/shard/debris in spawnDebris(drop_location()))
|
||||
transfer_fingerprints_to(debris) // transfer fingerprints to shards only
|
||||
qdel(src)
|
||||
update_nearby_icons()
|
||||
|
||||
/obj/structure/window/proc/spawnDebris(location)
|
||||
. = list()
|
||||
. += new shardtype(location)
|
||||
. += new glass_decal(location)
|
||||
if(reinf)
|
||||
. += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
|
||||
if(fulltile)
|
||||
. += new shardtype(location)
|
||||
|
||||
/obj/structure/window/verb/rotate()
|
||||
set name = "Rotate Window Counter-Clockwise"
|
||||
set category = "Object"
|
||||
@@ -478,14 +451,16 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
if(!fulltile)
|
||||
return
|
||||
var/ratio = obj_integrity / max_integrity
|
||||
ratio = CEILING(ratio*4, 1) * 25
|
||||
ratio = CEILING(ratio * 4, 1) * 25
|
||||
|
||||
if(smooth)
|
||||
queue_smooth(src)
|
||||
overlays -= crack_overlay
|
||||
|
||||
cut_overlay(crack_overlay)
|
||||
if(ratio > 75)
|
||||
return
|
||||
crack_overlay = image('icons/obj/structures.dmi',"damage[ratio]",-(layer+0.1))
|
||||
overlays += crack_overlay
|
||||
crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
|
||||
add_overlay(crack_overlay)
|
||||
|
||||
/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
@@ -503,9 +478,9 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
desc = "It looks rather strong. Might take a few good hits to shatter it."
|
||||
icon_state = "rwindow"
|
||||
reinf = TRUE
|
||||
cancolor = TRUE
|
||||
heat_resistance = 1600
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
max_integrity = 50
|
||||
explosion_block = 1
|
||||
glass_type = /obj/item/stack/sheet/rglass
|
||||
@@ -574,12 +549,14 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
name = "plasma window"
|
||||
desc = "A window made out of a plasma-silicate alloy. It looks insanely tough to break and burn through."
|
||||
icon_state = "plasmawindow"
|
||||
glass_decal = /obj/effect/decal/cleanable/glass/plasma
|
||||
shardtype = /obj/item/shard/plasma
|
||||
glass_type = /obj/item/stack/sheet/plasmaglass
|
||||
heat_resistance = 32000
|
||||
max_integrity = 150
|
||||
explosion_block = 1
|
||||
armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/obj/structure/window/plasmabasic/BlockSuperconductivity()
|
||||
return 1
|
||||
@@ -588,12 +565,14 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
name = "reinforced plasma window"
|
||||
desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof."
|
||||
icon_state = "plasmarwindow"
|
||||
glass_decal = /obj/effect/decal/cleanable/glass/plasma
|
||||
shardtype = /obj/item/shard/plasma
|
||||
glass_type = /obj/item/stack/sheet/plasmarglass
|
||||
reinf = TRUE
|
||||
max_integrity = 500
|
||||
explosion_block = 2
|
||||
armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
damage_deflection = 21
|
||||
|
||||
/obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
@@ -615,35 +594,39 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
icon_state = "window"
|
||||
max_integrity = 50
|
||||
smooth = SMOOTH_TRUE
|
||||
cancolor = TRUE
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced)
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
|
||||
|
||||
/obj/structure/window/full/plasmabasic
|
||||
name = "plasma window"
|
||||
desc = "A plasma-glass alloy window. It looks insanely tough to break. It appears it's also insanely tough to burn through."
|
||||
icon = 'icons/obj/smooth_structures/plasma_window.dmi'
|
||||
icon_state = "plasmawindow"
|
||||
glass_decal = /obj/effect/decal/cleanable/glass/plasma
|
||||
shardtype = /obj/item/shard/plasma
|
||||
glass_type = /obj/item/stack/sheet/plasmaglass
|
||||
heat_resistance = 32000
|
||||
max_integrity = 300
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced)
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
|
||||
explosion_block = 1
|
||||
armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/obj/structure/window/full/plasmareinforced
|
||||
name = "reinforced plasma window"
|
||||
desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof."
|
||||
icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
|
||||
icon_state = "rplasmawindow"
|
||||
glass_decal = /obj/effect/decal/cleanable/glass/plasma
|
||||
shardtype = /obj/item/shard/plasma
|
||||
glass_type = /obj/item/stack/sheet/plasmarglass
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
|
||||
reinf = TRUE
|
||||
max_integrity = 1000
|
||||
explosion_block = 2
|
||||
armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/obj/structure/window/full/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
return
|
||||
@@ -654,14 +637,14 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
|
||||
icon_state = "r_window"
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced)
|
||||
canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass)
|
||||
max_integrity = 100
|
||||
reinf = TRUE
|
||||
heat_resistance = 1600
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
explosion_block = 1
|
||||
glass_type = /obj/item/stack/sheet/rglass
|
||||
cancolor = TRUE
|
||||
|
||||
/obj/structure/window/full/reinforced/tinted
|
||||
name = "tinted window"
|
||||
@@ -674,7 +657,6 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
icon = 'icons/obj/smooth_structures/rice_window.dmi'
|
||||
icon_state = "ice_window"
|
||||
max_integrity = 150
|
||||
cancolor = FALSE
|
||||
|
||||
/obj/structure/window/full/shuttle
|
||||
name = "shuttle window"
|
||||
@@ -696,24 +678,21 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
/obj/structure/window/full/shuttle/tinted
|
||||
opacity = TRUE
|
||||
|
||||
/obj/structure/window/plastitanium
|
||||
/obj/structure/window/full/plastitanium
|
||||
name = "plastitanium window"
|
||||
desc = "An evil looking window of plasma and titanium."
|
||||
icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
|
||||
icon_state = "plastitanium_window"
|
||||
dir = FULLTILE_WINDOW_DIR
|
||||
max_integrity = 100
|
||||
fulltile = TRUE
|
||||
flags = PREVENT_CLICK_UNDER
|
||||
reinf = TRUE
|
||||
heat_resistance = 1600
|
||||
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = null
|
||||
explosion_block = 3
|
||||
level = 3
|
||||
glass_type = /obj/item/stack/sheet/plastitaniumglass
|
||||
glass_amount = 2
|
||||
canSmoothWith = list(/turf/simulated/wall/indestructible/opsglass, /obj/structure/window/full/plastitanium)
|
||||
|
||||
/obj/structure/window/reinforced/clockwork
|
||||
name = "brass window"
|
||||
@@ -726,19 +705,18 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
explosion_block = 2 //fancy AND hard to destroy. the most useful combination.
|
||||
glass_type = /obj/item/stack/tile/brass
|
||||
reinf = FALSE
|
||||
cancolor = 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
|
||||
..()
|
||||
QDEL_LIST(debris)
|
||||
if(fulltile)
|
||||
new /obj/effect/temp_visual/ratvar/window(get_turf(src))
|
||||
debris += new/obj/item/stack/tile/brass(src, 2)
|
||||
else
|
||||
debris += new/obj/item/stack/tile/brass(src, 1)
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/spawnDebris(location)
|
||||
. = list()
|
||||
. += new /obj/item/stack/tile/brass(location, (fulltile ? 2 : 1))
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/setDir(direct)
|
||||
if(!made_glow)
|
||||
@@ -749,7 +727,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e",
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/ratvar_act()
|
||||
obj_integrity = max_integrity
|
||||
update_icon()
|
||||
update_nearby_icons()
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/narsie_act()
|
||||
take_damage(rand(25, 75), BRUTE)
|
||||
|
||||
Reference in New Issue
Block a user