Merge remote-tracking branch 'upstream/master' into pull-facing

To trigger the RUSTG CI
This commit is contained in:
SabreML
2021-04-29 15:17:10 +01:00
1876 changed files with 74286 additions and 197037 deletions
+6 -11
View File
@@ -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)
+1 -2
View File
@@ -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
+15 -12
View 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))
+2 -2
View File
@@ -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)
+30 -15
View File
@@ -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)
+56 -59
View File
@@ -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)
+3 -1
View File
@@ -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
+32 -48
View File
@@ -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
+10 -6
View File
@@ -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)
+6 -4
View File
@@ -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"
+2 -2
View File
@@ -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"
+4 -4
View File
@@ -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)
+6 -5
View File
@@ -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"
+4 -4
View File
@@ -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()
+18 -10
View File
@@ -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)
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+4 -3
View File
@@ -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"
+2 -2
View File
@@ -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)
+2 -6
View File
@@ -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
+12 -12
View File
@@ -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
+106 -113
View File
@@ -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()
+61 -83
View File
@@ -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)