Merge branch 'master' into upstream-merge-31176

This commit is contained in:
LetterJay
2017-11-09 03:24:38 -06:00
committed by GitHub
1253 changed files with 77070 additions and 91353 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
/obj/structure/sign/barsign // All Signs are 64 by 32 pixels, they take two tiles
name = "Bar Sign"
desc = "A bar sign with no writing on it"
desc = "A bar sign with no writing on it."
icon = 'icons/obj/barsigns.dmi'
icon_state = "empty"
req_access = list(ACCESS_BAR)
@@ -21,10 +21,6 @@
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 2
/obj/structure/bed/examine(mob/user)
..()
to_chat(user, "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>")
/obj/structure/bed/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(buildstacktype)
@@ -105,7 +101,7 @@
desc = "A collapsed roller bed that can be carried around."
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded"
w_class = WEIGHT_CLASS_BULKY // Can't be put in backpacks.
w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere
/obj/item/roller/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/roller/robo))
@@ -117,7 +113,8 @@
R.loaded = new/obj/structure/bed/roller(R)
qdel(src) //"Load"
return
else return ..()
else
return ..()
/obj/item/roller/attack_self(mob/user)
deploy_roller(user, user.loc)
@@ -144,7 +141,7 @@
/obj/item/roller/robo/examine(mob/user)
..()
to_chat(user, "The dock is [loaded ? "loaded" : "empty"].")
to_chat(user, "The dock is [loaded ? "loaded" : "empty"]")
/obj/item/roller/robo/deploy_roller(mob/user, atom/location)
if(loaded)
@@ -197,5 +194,5 @@
/obj/structure/bed/alien
name = "resting contraption"
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
icon_state = "abed"
desc = "This looks similar to contraptions from Earth. Could aliens be stealing our technology?"
icon_state = "abed"
@@ -352,6 +352,7 @@
max_integrity = 150
buildstacktype = /obj/item/stack/tile/brass
buildstackamount = 1
item_chair = null
/obj/structure/chair/brass/Destroy()
STOP_PROCESSING(SSfastprocess, src)
@@ -1,367 +1,367 @@
// Closets for specific jobs
/obj/structure/closet/gmcloset
name = "formal closet"
desc = "It's a storage unit for formal clothing."
icon_door = "black"
/obj/structure/closet/gmcloset/PopulateContents()
..()
new /obj/item/clothing/head/that(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/reagent_containers/glass/rag(src)
new /obj/item/reagent_containers/glass/rag(src)
new /obj/item/storage/box/beanbag(src)
new /obj/item/clothing/suit/armor/vest/alt(src)
new /obj/item/clothing/glasses/sunglasses/reagent(src)
new /obj/item/storage/belt/bandolier(src)
/obj/structure/closet/chefcloset
name = "\proper chef's closet"
desc = "It's a storage unit for foodservice garments and mouse traps."
icon_door = "black"
/obj/structure/closet/chefcloset/PopulateContents()
..()
new /obj/item/clothing/under/waiter(src)
new /obj/item/clothing/under/waiter(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/accessory/waistcoat(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/apron/chef(src)
new /obj/item/clothing/head/soft/mime(src)
new /obj/item/clothing/head/soft/mime(src)
new /obj/item/storage/box/mousetraps(src)
new /obj/item/storage/box/mousetraps(src)
new /obj/item/clothing/suit/toggle/chef(src)
new /obj/item/clothing/under/rank/chef(src)
new /obj/item/clothing/head/chefhat(src)
new /obj/item/reagent_containers/glass/rag(src)
/obj/structure/closet/jcloset
name = "custodial closet"
desc = "It's a storage unit for janitorial clothes and gear."
icon_door = "mixed"
/obj/structure/closet/jcloset/PopulateContents()
..()
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/cartridge/janitor(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/head/soft/purple(src)
new /obj/item/paint/paint_remover(src)
new /obj/item/melee/flyswatter(src)
new /obj/item/device/flashlight(src)
for(var/i in 1 to 3)
new /obj/item/caution(src)
new /obj/item/holosign_creator(src)
new /obj/item/device/lightreplacer(src)
new /obj/item/soap(src)
new /obj/item/storage/bag/trash(src)
new /obj/item/clothing/shoes/galoshes(src)
new /obj/item/watertank/janitor(src)
new /obj/item/storage/belt/janitor(src)
/obj/structure/closet/lawcloset
name = "legal closet"
desc = "It's a storage unit for courtroom apparel and items."
icon_door = "blue"
/obj/structure/closet/lawcloset/PopulateContents()
..()
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/bluesuit(src)
new /obj/item/clothing/suit/toggle/lawyer(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/toggle/lawyer/purple(src)
new /obj/item/clothing/under/lawyer/blacksuit(src)
new /obj/item/clothing/suit/toggle/lawyer/black(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
/obj/structure/closet/wardrobe/chaplain_black
name = "chapel wardrobe"
desc = "It's a storage unit for Nanotrasen-approved religious attire."
icon_door = "black"
/obj/structure/closet/wardrobe/chaplain_black/PopulateContents()
new /obj/item/clothing/under/rank/chaplain(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/suit/nun(src)
new /obj/item/clothing/head/nun_hood(src)
new /obj/item/clothing/suit/studentuni(src)
new /obj/item/clothing/head/cage(src)
new /obj/item/clothing/suit/witchhunter(src)
new /obj/item/clothing/head/witchunter_hat(src)
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
new /obj/item/clothing/suit/holidaypriest(src)
new /obj/item/storage/backpack/cultpack (src)
new /obj/item/clothing/head/helmet/knight/templar(src)
new /obj/item/clothing/suit/armor/riot/knight/templar(src)
new /obj/item/storage/fancy/candle_box(src)
new /obj/item/storage/fancy/candle_box(src)
return
/obj/structure/closet/coffin
name = "coffin"
desc = "It's a burial receptacle for the dearly departed."
icon_state = "coffin"
resistance_flags = FLAMMABLE
max_integrity = 70
horizontal = TRUE
delivery_icon = "deliverycrate"
material_drop = /obj/item/stack/sheet/mineral/wood
material_drop_amount = 5
/obj/structure/closet/wardrobe/red
name = "security wardrobe"
icon_door = "red"
/obj/structure/closet/wardrobe/red/PopulateContents()
new /obj/item/clothing/suit/hooded/wintercoat/security(src)
new /obj/item/storage/backpack/security(src)
new /obj/item/storage/backpack/satchel/sec(src)
new /obj/item/storage/backpack/duffelbag/sec(src)
new /obj/item/storage/backpack/duffelbag/sec(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/security(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/jackboots(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/beret/sec(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft/sec(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/red(src)
return
/obj/structure/closet/wardrobe/cargotech
name = "cargo wardrobe"
icon_door = "orange"
/obj/structure/closet/wardrobe/cargotech/PopulateContents()
new /obj/item/clothing/suit/hooded/wintercoat/cargo(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/cargotech(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/black(src)
for(var/i in 1 to 3)
new /obj/item/clothing/gloves/fingerless(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft(src)
new /obj/item/device/radio/headset/headset_cargo(src)
/obj/structure/closet/wardrobe/atmospherics_yellow
name = "atmospherics wardrobe"
icon_door = "atmos_wardrobe"
/obj/structure/closet/wardrobe/atmospherics_yellow/PopulateContents()
new /obj/item/storage/backpack/duffelbag/engineering(src)
new /obj/item/storage/backpack/satchel/eng(src)
new /obj/item/storage/backpack/industrial(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/black(src)
return
/obj/structure/closet/wardrobe/engineering_yellow
name = "engineering wardrobe"
icon_door = "yellow"
/obj/structure/closet/wardrobe/engineering_yellow/PopulateContents()
new /obj/item/storage/backpack/duffelbag/engineering(src)
new /obj/item/storage/backpack/industrial(src)
new /obj/item/storage/backpack/satchel/eng(src)
new /obj/item/clothing/suit/hooded/wintercoat/engineering(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/engineer(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/hazardvest(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/workboots(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/hardhat(src)
return
/obj/structure/closet/wardrobe/white/medical
name = "medical doctor's wardrobe"
/obj/structure/closet/wardrobe/white/medical/PopulateContents()
new /obj/item/storage/backpack/duffelbag/med(src)
new /obj/item/storage/backpack/medic(src)
new /obj/item/storage/backpack/satchel/med(src)
new /obj/item/clothing/suit/hooded/wintercoat/medical(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/under/rank/medical/purple(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat/emt(src)
new /obj/item/clothing/suit/toggle/labcoat/emt(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/white(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft/emt(src)
return
/obj/structure/closet/wardrobe/robotics_black
name = "robotics wardrobe"
icon_door = "black"
/obj/structure/closet/wardrobe/robotics_black/PopulateContents()
new /obj/item/clothing/glasses/hud/diagnostic(src)
new /obj/item/clothing/glasses/hud/diagnostic(src)
new /obj/item/clothing/under/rank/roboticist(src)
new /obj/item/clothing/under/rank/roboticist(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
if(prob(40))
new /obj/item/clothing/mask/bandana/skull(src)
if(prob(40))
new /obj/item/clothing/mask/bandana/skull(src)
return
/obj/structure/closet/wardrobe/chemistry_white
name = "chemistry wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/chemistry_white/PopulateContents()
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/suit/toggle/labcoat/chemist(src)
new /obj/item/clothing/suit/toggle/labcoat/chemist(src)
new /obj/item/storage/backpack/chemistry(src)
new /obj/item/storage/backpack/chemistry(src)
new /obj/item/storage/backpack/satchel/chem(src)
new /obj/item/storage/backpack/satchel/chem(src)
new /obj/item/storage/bag/chemistry(src)
new /obj/item/storage/bag/chemistry(src)
return
/obj/structure/closet/wardrobe/genetics_white
name = "genetics wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/genetics_white/PopulateContents()
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/suit/toggle/labcoat/genetics(src)
new /obj/item/clothing/suit/toggle/labcoat/genetics(src)
new /obj/item/storage/backpack/genetics(src)
new /obj/item/storage/backpack/genetics(src)
new /obj/item/storage/backpack/satchel/gen(src)
new /obj/item/storage/backpack/satchel/gen(src)
return
/obj/structure/closet/wardrobe/virology_white
name = "virology wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/virology_white/PopulateContents()
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/suit/toggle/labcoat/virologist(src)
new /obj/item/clothing/suit/toggle/labcoat/virologist(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/storage/backpack/virology(src)
new /obj/item/storage/backpack/virology(src)
new /obj/item/storage/backpack/satchel/vir(src)
new /obj/item/storage/backpack/satchel/vir(src)
return
/obj/structure/closet/wardrobe/science_white
name = "science wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/science_white/PopulateContents()
new /obj/item/storage/backpack/science(src)
new /obj/item/storage/backpack/science(src)
new /obj/item/storage/backpack/satchel/tox(src)
new /obj/item/storage/backpack/satchel/tox(src)
new /obj/item/clothing/suit/hooded/wintercoat/science(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/scientist(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/toggle/labcoat/science(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/device/radio/headset/headset_sci(src)
for(var/i in 1 to 3)
new /obj/item/clothing/mask/gas(src)
return
/obj/structure/closet/wardrobe/botanist
name = "botanist wardrobe"
icon_door = "green"
/obj/structure/closet/wardrobe/botanist/PopulateContents()
new /obj/item/storage/backpack/botany(src)
new /obj/item/storage/backpack/botany(src)
new /obj/item/storage/backpack/satchel/hyd(src)
new /obj/item/storage/backpack/satchel/hyd(src)
new /obj/item/clothing/suit/hooded/wintercoat/hydro(src)
new /obj/item/clothing/suit/apron(src)
new /obj/item/clothing/suit/apron(src)
new /obj/item/clothing/suit/apron/overalls(src)
new /obj/item/clothing/suit/apron/overalls(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/hydroponics(src)
for(var/i in 1 to 3)
new /obj/item/clothing/mask/bandana(src)
/obj/structure/closet/wardrobe/curator
name = "treasure hunting wardrobe"
icon_door = "black"
/obj/structure/closet/wardrobe/curator/PopulateContents()
new /obj/item/clothing/head/fedora/curator(src)
new /obj/item/clothing/suit/curator(src)
new /obj/item/clothing/under/rank/curator/treasure_hunter(src)
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/storage/backpack/satchel/explorer(src)
// Closets for specific jobs
/obj/structure/closet/gmcloset
name = "formal closet"
desc = "It's a storage unit for formal clothing."
icon_door = "black"
/obj/structure/closet/gmcloset/PopulateContents()
..()
new /obj/item/clothing/head/that(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/reagent_containers/glass/rag(src)
new /obj/item/reagent_containers/glass/rag(src)
new /obj/item/storage/box/beanbag(src)
new /obj/item/clothing/suit/armor/vest/alt(src)
new /obj/item/clothing/glasses/sunglasses/reagent(src)
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/storage/belt/bandolier(src)
/obj/structure/closet/chefcloset
name = "\proper chef's closet"
desc = "It's a storage unit for foodservice garments and mouse traps."
icon_door = "black"
/obj/structure/closet/chefcloset/PopulateContents()
..()
new /obj/item/clothing/under/waiter(src)
new /obj/item/clothing/under/waiter(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/device/radio/headset/headset_srv(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/accessory/waistcoat(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/apron/chef(src)
new /obj/item/clothing/head/soft/mime(src)
new /obj/item/clothing/head/soft/mime(src)
new /obj/item/storage/box/mousetraps(src)
new /obj/item/storage/box/mousetraps(src)
new /obj/item/clothing/suit/toggle/chef(src)
new /obj/item/clothing/under/rank/chef(src)
new /obj/item/clothing/head/chefhat(src)
new /obj/item/reagent_containers/glass/rag(src)
/obj/structure/closet/jcloset
name = "custodial closet"
desc = "It's a storage unit for janitorial clothes and gear."
icon_door = "mixed"
/obj/structure/closet/jcloset/PopulateContents()
..()
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/cartridge/janitor(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/head/soft/purple(src)
new /obj/item/paint/paint_remover(src)
new /obj/item/melee/flyswatter(src)
new /obj/item/device/flashlight(src)
for(var/i in 1 to 3)
new /obj/item/caution(src)
new /obj/item/holosign_creator(src)
new /obj/item/device/lightreplacer(src)
new /obj/item/soap(src)
new /obj/item/storage/bag/trash(src)
new /obj/item/clothing/shoes/galoshes(src)
new /obj/item/watertank/janitor(src)
new /obj/item/storage/belt/janitor(src)
/obj/structure/closet/lawcloset
name = "legal closet"
desc = "It's a storage unit for courtroom apparel and items."
icon_door = "blue"
/obj/structure/closet/lawcloset/PopulateContents()
..()
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/bluesuit(src)
new /obj/item/clothing/suit/toggle/lawyer(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/toggle/lawyer/purple(src)
new /obj/item/clothing/under/lawyer/blacksuit(src)
new /obj/item/clothing/suit/toggle/lawyer/black(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
/obj/structure/closet/wardrobe/chaplain_black
name = "chapel wardrobe"
desc = "It's a storage unit for Nanotrasen-approved religious attire."
icon_door = "black"
/obj/structure/closet/wardrobe/chaplain_black/PopulateContents()
new /obj/item/clothing/under/rank/chaplain(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/suit/nun(src)
new /obj/item/clothing/head/nun_hood(src)
new /obj/item/clothing/suit/studentuni(src)
new /obj/item/clothing/head/cage(src)
new /obj/item/clothing/suit/witchhunter(src)
new /obj/item/clothing/head/witchunter_hat(src)
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
new /obj/item/clothing/suit/holidaypriest(src)
new /obj/item/storage/backpack/cultpack (src)
new /obj/item/clothing/head/helmet/knight/templar(src)
new /obj/item/clothing/suit/armor/riot/knight/templar(src)
new /obj/item/storage/fancy/candle_box(src)
new /obj/item/storage/fancy/candle_box(src)
return
/obj/structure/closet/coffin
name = "coffin"
desc = "It's a burial receptacle for the dearly departed."
icon_state = "coffin"
resistance_flags = FLAMMABLE
max_integrity = 70
horizontal = TRUE
delivery_icon = "deliverycrate"
material_drop = /obj/item/stack/sheet/mineral/wood
material_drop_amount = 5
/obj/structure/closet/wardrobe/red
name = "security wardrobe"
icon_door = "red"
/obj/structure/closet/wardrobe/red/PopulateContents()
new /obj/item/clothing/suit/hooded/wintercoat/security(src)
new /obj/item/storage/backpack/security(src)
new /obj/item/storage/backpack/satchel/sec(src)
new /obj/item/storage/backpack/duffelbag/sec(src)
new /obj/item/storage/backpack/duffelbag/sec(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/security(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/jackboots(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/beret/sec(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft/sec(src)
new /obj/item/clothing/mask/bandana/red(src)
new /obj/item/clothing/mask/bandana/red(src)
return
/obj/structure/closet/wardrobe/cargotech
name = "cargo wardrobe"
icon_door = "orange"
/obj/structure/closet/wardrobe/cargotech/PopulateContents()
new /obj/item/clothing/suit/hooded/wintercoat/cargo(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/cargotech(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/black(src)
for(var/i in 1 to 3)
new /obj/item/clothing/gloves/fingerless(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft(src)
new /obj/item/device/radio/headset/headset_cargo(src)
/obj/structure/closet/wardrobe/atmospherics_yellow
name = "atmospherics wardrobe"
icon_door = "atmos_wardrobe"
/obj/structure/closet/wardrobe/atmospherics_yellow/PopulateContents()
new /obj/item/storage/backpack/duffelbag/engineering(src)
new /obj/item/storage/backpack/satchel/eng(src)
new /obj/item/storage/backpack/industrial(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/atmospheric_technician(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/black(src)
return
/obj/structure/closet/wardrobe/engineering_yellow
name = "engineering wardrobe"
icon_door = "yellow"
/obj/structure/closet/wardrobe/engineering_yellow/PopulateContents()
new /obj/item/storage/backpack/duffelbag/engineering(src)
new /obj/item/storage/backpack/industrial(src)
new /obj/item/storage/backpack/satchel/eng(src)
new /obj/item/clothing/suit/hooded/wintercoat/engineering(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/engineer(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/hazardvest(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/workboots(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/hardhat(src)
return
/obj/structure/closet/wardrobe/white/medical
name = "medical doctor's wardrobe"
/obj/structure/closet/wardrobe/white/medical/PopulateContents()
new /obj/item/storage/backpack/duffelbag/med(src)
new /obj/item/storage/backpack/medic(src)
new /obj/item/storage/backpack/satchel/med(src)
new /obj/item/clothing/suit/hooded/wintercoat/medical(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/under/rank/medical/purple(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat/emt(src)
new /obj/item/clothing/suit/toggle/labcoat/emt(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/white(src)
for(var/i in 1 to 3)
new /obj/item/clothing/head/soft/emt(src)
return
/obj/structure/closet/wardrobe/robotics_black
name = "robotics wardrobe"
icon_door = "black"
/obj/structure/closet/wardrobe/robotics_black/PopulateContents()
new /obj/item/clothing/glasses/hud/diagnostic(src)
new /obj/item/clothing/glasses/hud/diagnostic(src)
new /obj/item/clothing/under/rank/roboticist(src)
new /obj/item/clothing/under/rank/roboticist(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/gloves/fingerless(src)
new /obj/item/clothing/head/soft/black(src)
new /obj/item/clothing/head/soft/black(src)
if(prob(40))
new /obj/item/clothing/mask/bandana/skull(src)
if(prob(40))
new /obj/item/clothing/mask/bandana/skull(src)
return
/obj/structure/closet/wardrobe/chemistry_white
name = "chemistry wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/chemistry_white/PopulateContents()
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/under/rank/chemist(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/suit/toggle/labcoat/chemist(src)
new /obj/item/clothing/suit/toggle/labcoat/chemist(src)
new /obj/item/storage/backpack/chemistry(src)
new /obj/item/storage/backpack/chemistry(src)
new /obj/item/storage/backpack/satchel/chem(src)
new /obj/item/storage/backpack/satchel/chem(src)
new /obj/item/storage/bag/chemistry(src)
new /obj/item/storage/bag/chemistry(src)
return
/obj/structure/closet/wardrobe/genetics_white
name = "genetics wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/genetics_white/PopulateContents()
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/under/rank/geneticist(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/suit/toggle/labcoat/genetics(src)
new /obj/item/clothing/suit/toggle/labcoat/genetics(src)
new /obj/item/storage/backpack/genetics(src)
new /obj/item/storage/backpack/genetics(src)
new /obj/item/storage/backpack/satchel/gen(src)
new /obj/item/storage/backpack/satchel/gen(src)
return
/obj/structure/closet/wardrobe/virology_white
name = "virology wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/virology_white/PopulateContents()
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/under/rank/virologist(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/suit/toggle/labcoat/virologist(src)
new /obj/item/clothing/suit/toggle/labcoat/virologist(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/storage/backpack/virology(src)
new /obj/item/storage/backpack/virology(src)
new /obj/item/storage/backpack/satchel/vir(src)
new /obj/item/storage/backpack/satchel/vir(src)
return
/obj/structure/closet/wardrobe/science_white
name = "science wardrobe"
icon_door = "white"
/obj/structure/closet/wardrobe/science_white/PopulateContents()
new /obj/item/storage/backpack/science(src)
new /obj/item/storage/backpack/science(src)
new /obj/item/storage/backpack/satchel/tox(src)
new /obj/item/storage/backpack/satchel/tox(src)
new /obj/item/clothing/suit/hooded/wintercoat/science(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/scientist(src)
for(var/i in 1 to 3)
new /obj/item/clothing/suit/toggle/labcoat/science(src)
for(var/i in 1 to 3)
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/device/radio/headset/headset_sci(src)
for(var/i in 1 to 3)
new /obj/item/clothing/mask/gas(src)
return
/obj/structure/closet/wardrobe/botanist
name = "botanist wardrobe"
icon_door = "green"
/obj/structure/closet/wardrobe/botanist/PopulateContents()
new /obj/item/storage/backpack/botany(src)
new /obj/item/storage/backpack/botany(src)
new /obj/item/storage/backpack/satchel/hyd(src)
new /obj/item/storage/backpack/satchel/hyd(src)
new /obj/item/clothing/suit/hooded/wintercoat/hydro(src)
new /obj/item/clothing/suit/apron(src)
new /obj/item/clothing/suit/apron(src)
new /obj/item/clothing/suit/apron/overalls(src)
new /obj/item/clothing/suit/apron/overalls(src)
for(var/i in 1 to 3)
new /obj/item/clothing/under/rank/hydroponics(src)
for(var/i in 1 to 3)
new /obj/item/clothing/mask/bandana(src)
/obj/structure/closet/wardrobe/curator
name = "treasure hunting wardrobe"
icon_door = "black"
/obj/structure/closet/wardrobe/curator/PopulateContents()
new /obj/item/clothing/head/fedora/curator(src)
new /obj/item/clothing/suit/curator(src)
new /obj/item/clothing/under/rank/curator/treasure_hunter(src)
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/storage/backpack/satchel/explorer(src)
@@ -72,6 +72,7 @@
new /obj/item/reagent_containers/hypospray/CMO(src)
new /obj/item/device/autosurgeon/cmo(src)
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/clothing/neck/petcollar(src)
/obj/structure/closet/secure_closet/animal
name = "animal control"
@@ -11,6 +11,7 @@
else
new /obj/item/storage/backpack/satchel/cap(src)
new /obj/item/clothing/neck/cloak/cap(src)
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/storage/backpack/duffelbag/captain(src)
new /obj/item/clothing/head/crown/fancy(src)
new /obj/item/clothing/suit/captunic(src)
@@ -27,7 +28,7 @@
new /obj/item/clothing/gloves/color/captain(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/storage/belt/sabre(src)
new /obj/item/gun/energy/e_gun(src)
new /obj/item/gun/energy/e_gun/cx(src)
new /obj/item/door_remote/captain(src)
/obj/structure/closet/secure_closet/hop
@@ -50,7 +51,7 @@
new /obj/item/device/assembly/flash/handheld(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/restraints/handcuffs/cable/zipties(src)
new /obj/item/gun/energy/e_gun(src)
new /obj/item/gun/energy/e_gun/cx(src)
new /obj/item/clothing/neck/petcollar(src)
new /obj/item/door_remote/civillian(src)
@@ -66,6 +67,8 @@
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/clothing/under/hosparadefem(src)
new /obj/item/clothing/under/hosparademale(src)
new /obj/item/clothing/under/rank/head_of_security/skirt(src)
new /obj/item/clothing/suit/armor/hos/trenchcoat/cloak(src)
new /obj/item/clothing/suit/armor/vest/leather(src)
new /obj/item/clothing/suit/armor/hos(src)
new /obj/item/clothing/under/rank/head_of_security/alt(src)
@@ -108,7 +111,6 @@
new /obj/item/clothing/gloves/krav_maga/sec(src)
new /obj/item/door_remote/head_of_security(src)
new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src)
new /obj/item/pinpointer/crew(src)
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
@@ -117,6 +119,7 @@
/obj/structure/closet/secure_closet/security/PopulateContents()
..()
new /obj/item/clothing/under/rank/security/skirt(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/head/helmet/sec(src)
new /obj/item/device/radio/headset/headset_sec(src)
@@ -1,180 +1,180 @@
/* Utility Closets
* Contains:
* Emergency Closet
* Fire Closet
* Tool Closet
* Radiation Closet
* Bombsuit Closet
* Hydrant
* First Aid
*/
/*
* Emergency Closet
*/
/obj/structure/closet/emcloset
name = "emergency closet"
desc = "It's a storage unit for emergency breath masks and O2 tanks."
icon_state = "emergency"
/obj/structure/closet/emcloset/anchored
anchored = TRUE
/obj/structure/closet/emcloset/PopulateContents()
..()
if (prob(40))
new /obj/item/storage/toolbox/emergency(src)
switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
if ("small")
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/internals/emergency_oxygen(src)
new /obj/item/storage/firstaid/o2(src)
new /obj/item/clothing/mask/breath(src)
if ("tank")
new /obj/item/tank/internals/air(src)
new /obj/item/clothing/mask/breath(src)
if ("both")
new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/clothing/mask/breath(src)
if ("nothing")
// doot
// teehee
if ("delete")
qdel(src)
//If you want to re-add fire, just add "fire" = 15 to the pick list.
/*if ("fire")
new /obj/structure/closet/firecloset(src.loc)
qdel(src)*/
/*
* Fire Closet
*/
/obj/structure/closet/firecloset
name = "fire-safety closet"
desc = "It's a storage unit for fire-fighting supplies."
icon_state = "fire"
/obj/structure/closet/firecloset/PopulateContents()
..()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/tank/internals/oxygen/red(src)
new /obj/item/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
/obj/structure/closet/firecloset/full/PopulateContents()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flashlight(src)
new /obj/item/tank/internals/oxygen/red(src)
new /obj/item/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
/*
* Tool Closet
*/
/obj/structure/closet/toolcloset
name = "tool closet"
desc = "It's a storage unit for tools."
icon_state = "eng"
icon_door = "eng_tool"
/obj/structure/closet/toolcloset/PopulateContents()
..()
if(prob(40))
new /obj/item/clothing/suit/hazardvest(src)
if(prob(70))
new /obj/item/device/flashlight(src)
if(prob(70))
new /obj/item/screwdriver(src)
if(prob(70))
new /obj/item/wrench(src)
if(prob(70))
new /obj/item/weldingtool(src)
if(prob(70))
new /obj/item/crowbar(src)
if(prob(70))
new /obj/item/wirecutters(src)
if(prob(70))
new /obj/item/device/t_scanner(src)
if(prob(20))
new /obj/item/storage/belt/utility(src)
if(prob(30))
new /obj/item/stack/cable_coil/random(src)
if(prob(30))
new /obj/item/stack/cable_coil/random(src)
if(prob(30))
new /obj/item/stack/cable_coil/random(src)
if(prob(20))
new /obj/item/device/multitool(src)
if(prob(5))
new /obj/item/clothing/gloves/color/yellow(src)
if(prob(40))
new /obj/item/clothing/head/hardhat(src)
/*
* Radiation Closet
*/
/obj/structure/closet/radiation
name = "radiation suit closet"
desc = "It's a storage unit for rad-protective suits."
icon_state = "eng"
icon_door = "eng_rad"
/obj/structure/closet/radiation/PopulateContents()
..()
new /obj/item/device/geiger_counter(src)
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
/*
* Bombsuit closet
*/
/obj/structure/closet/bombcloset
name = "\improper EOD closet"
desc = "It's a storage unit for explosion-protective suits."
icon_state = "bomb"
/obj/structure/closet/bombcloset/PopulateContents()
..()
new /obj/item/clothing/suit/bomb_suit( src )
new /obj/item/clothing/under/color/black( src )
new /obj/item/clothing/shoes/sneakers/black( src )
new /obj/item/clothing/head/bomb_hood( src )
/obj/structure/closet/bombclosetsecurity
name = "\improper EOD closet"
desc = "It's a storage unit for explosion-protective suits."
icon_state = "bomb"
/obj/structure/closet/bombclosetsecurity/PopulateContents()
new /obj/item/clothing/suit/bomb_suit/security( src )
new /obj/item/clothing/under/rank/security( src )
new /obj/item/clothing/shoes/sneakers/brown( src )
new /obj/item/clothing/head/bomb_hood/security( src )
/*
* Ammunition
*/
/obj/structure/closet/ammunitionlocker
name = "ammunition locker"
/obj/structure/closet/ammunitionlocker/PopulateContents()
..()
for(var/i in 1 to 8)
new /obj/item/ammo_casing/shotgun/beanbag(src)
/* Utility Closets
* Contains:
* Emergency Closet
* Fire Closet
* Tool Closet
* Radiation Closet
* Bombsuit Closet
* Hydrant
* First Aid
*/
/*
* Emergency Closet
*/
/obj/structure/closet/emcloset
name = "emergency closet"
desc = "It's a storage unit for emergency breath masks and O2 tanks."
icon_state = "emergency"
/obj/structure/closet/emcloset/anchored
anchored = TRUE
/obj/structure/closet/emcloset/PopulateContents()
..()
if (prob(40))
new /obj/item/storage/toolbox/emergency(src)
switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
if ("small")
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/internals/emergency_oxygen(src)
new /obj/item/storage/firstaid/o2(src)
new /obj/item/clothing/mask/breath(src)
if ("tank")
new /obj/item/tank/internals/air(src)
new /obj/item/clothing/mask/breath(src)
if ("both")
new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/clothing/mask/breath(src)
if ("nothing")
// doot
// teehee
if ("delete")
qdel(src)
//If you want to re-add fire, just add "fire" = 15 to the pick list.
/*if ("fire")
new /obj/structure/closet/firecloset(src.loc)
qdel(src)*/
/*
* Fire Closet
*/
/obj/structure/closet/firecloset
name = "fire-safety closet"
desc = "It's a storage unit for fire-fighting supplies."
icon_state = "fire"
/obj/structure/closet/firecloset/PopulateContents()
..()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/tank/internals/oxygen/red(src)
new /obj/item/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
/obj/structure/closet/firecloset/full/PopulateContents()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flashlight(src)
new /obj/item/tank/internals/oxygen/red(src)
new /obj/item/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
/*
* Tool Closet
*/
/obj/structure/closet/toolcloset
name = "tool closet"
desc = "It's a storage unit for tools."
icon_state = "eng"
icon_door = "eng_tool"
/obj/structure/closet/toolcloset/PopulateContents()
..()
if(prob(40))
new /obj/item/clothing/suit/hazardvest(src)
if(prob(70))
new /obj/item/device/flashlight(src)
if(prob(70))
new /obj/item/screwdriver(src)
if(prob(70))
new /obj/item/wrench(src)
if(prob(70))
new /obj/item/weldingtool(src)
if(prob(70))
new /obj/item/crowbar(src)
if(prob(70))
new /obj/item/wirecutters(src)
if(prob(70))
new /obj/item/device/t_scanner(src)
if(prob(20))
new /obj/item/storage/belt/utility(src)
if(prob(30))
new /obj/item/stack/cable_coil/random(src)
if(prob(30))
new /obj/item/stack/cable_coil/random(src)
if(prob(30))
new /obj/item/stack/cable_coil/random(src)
if(prob(20))
new /obj/item/device/multitool(src)
if(prob(5))
new /obj/item/clothing/gloves/color/yellow(src)
if(prob(40))
new /obj/item/clothing/head/hardhat(src)
/*
* Radiation Closet
*/
/obj/structure/closet/radiation
name = "radiation suit closet"
desc = "It's a storage unit for rad-protective suits."
icon_state = "eng"
icon_door = "eng_rad"
/obj/structure/closet/radiation/PopulateContents()
..()
new /obj/item/device/geiger_counter(src)
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
/*
* Bombsuit closet
*/
/obj/structure/closet/bombcloset
name = "\improper EOD closet"
desc = "It's a storage unit for explosion-protective suits."
icon_state = "bomb"
/obj/structure/closet/bombcloset/PopulateContents()
..()
new /obj/item/clothing/suit/bomb_suit(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/head/bomb_hood(src)
/obj/structure/closet/bombcloset/security/PopulateContents()
new /obj/item/clothing/suit/bomb_suit/security(src)
new /obj/item/clothing/under/rank/security(src)
new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/head/bomb_hood/security(src)
/obj/structure/closet/bombcloset/white/PopulateContents()
new /obj/item/clothing/suit/bomb_suit/white(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/head/bomb_hood/white(src)
/*
* Ammunition
*/
/obj/structure/closet/ammunitionlocker
name = "ammunition locker"
/obj/structure/closet/ammunitionlocker/PopulateContents()
..()
for(var/i in 1 to 8)
new /obj/item/ammo_casing/shotgun/beanbag(src)
+362 -362
View File
@@ -1,362 +1,362 @@
/obj/structure/displaycase
name = "display case"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox0"
desc = "A display case for prized possessions."
density = TRUE
anchored = TRUE
resistance_flags = ACID_PROOF
armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 100)
max_integrity = 200
integrity_failure = 50
var/obj/item/showpiece = null
var/alert = TRUE
var/open = FALSE
var/openable = TRUE
var/obj/item/electronics/airlock/electronics
var/start_showpiece_type = null //add type for items on display
/obj/structure/displaycase/Initialize()
. = ..()
if(start_showpiece_type)
showpiece = new start_showpiece_type (src)
update_icon()
/obj/structure/displaycase/Destroy()
if(electronics)
QDEL_NULL(electronics)
if(showpiece)
QDEL_NULL(showpiece)
return ..()
/obj/structure/displaycase/examine(mob/user)
..()
if(alert)
to_chat(user, "<span class='notice'>Hooked up with an anti-theft system.</span>")
if(showpiece)
to_chat(user, "<span class='notice'>There's [showpiece] inside.</span>")
/obj/structure/displaycase/proc/dump()
if (showpiece)
showpiece.forceMove(loc)
showpiece = null
/obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
/obj/structure/displaycase/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
dump()
if(!disassembled)
new /obj/item/shard( src.loc )
trigger_alarm()
qdel(src)
/obj/structure/displaycase/obj_break(damage_flag)
if(!broken && !(flags_1 & NODECONSTRUCT_1))
density = FALSE
broken = 1
new /obj/item/shard( src.loc )
playsound(src, "shatter", 70, 1)
update_icon()
trigger_alarm()
/obj/structure/displaycase/proc/trigger_alarm()
//Activate Anti-theft
if(alert)
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
playsound(src, 'sound/effects/alert.ogg', 50, 1)
/*
*/
/obj/structure/displaycase/proc/is_directional(atom/A)
try
getFlatIcon(A,defdir=4)
catch
return 0
return 1
/obj/structure/displaycase/proc/get_flat_icon_directional(atom/A)
//Get flatIcon even if dir is mismatched for directionless icons
//SLOW
var/icon/I
if(is_directional(A))
I = getFlatIcon(A)
else
var/old_dir = A.dir
A.setDir(2)
I = getFlatIcon(A)
A.setDir(old_dir)
return I
/obj/structure/displaycase/update_icon()
var/icon/I
if(open)
I = icon('icons/obj/stationobjs.dmi',"glassbox_open")
else
I = icon('icons/obj/stationobjs.dmi',"glassbox0")
if(broken)
I = icon('icons/obj/stationobjs.dmi',"glassboxb0")
if(showpiece)
var/icon/S = get_flat_icon_directional(showpiece)
S.Scale(17,17)
I.Blend(S,ICON_UNDERLAY,8,8)
src.icon = I
return
/obj/structure/displaycase/attackby(obj/item/W, mob/user, params)
if(W.GetID() && !broken && openable)
if(allowed(user))
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
toggle_lock(user)
else
to_chat(user, "<span class='warning'>Access denied.</span>")
else if(istype(W, /obj/item/weldingtool) && user.a_intent == INTENT_HELP && !broken)
var/obj/item/weldingtool/WT = W
if(obj_integrity < max_integrity && WT.remove_fuel(5, user))
to_chat(user, "<span class='notice'>You begin repairing [src].</span>")
playsound(loc, WT.usesound, 40, 1)
if(do_after(user, 40*W.toolspeed, target = src))
obj_integrity = max_integrity
playsound(loc, 'sound/items/welder2.ogg', 50, 1)
update_icon()
to_chat(user, "<span class='notice'>You repair [src].</span>")
else
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
else if(!alert && istype(W, /obj/item/crowbar) && openable) //Only applies to the lab cage and player made display cases
if(broken)
if(showpiece)
to_chat(user, "<span class='notice'>Remove the displayed object first.</span>")
else
to_chat(user, "<span class='notice'>You remove the destroyed case</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>")
if(do_after(user, 20*W.toolspeed, target = src))
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
toggle_lock(user)
else if(open && !showpiece)
if(user.transferItemToLoc(W, src))
showpiece = W
to_chat(user, "<span class='notice'>You put [W] on display</span>")
update_icon()
else if(istype(W, /obj/item/stack/sheet/glass) && broken)
var/obj/item/stack/sheet/glass/G = W
if(G.get_amount() < 2)
to_chat(user, "<span class='warning'>You need two glass sheets to fix the case!</span>")
return
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
if(do_after(user, 20, target = src))
G.use(2)
broken = 0
obj_integrity = max_integrity
update_icon()
else
return ..()
/obj/structure/displaycase/proc/toggle_lock(mob/user)
open = !open
update_icon()
/obj/structure/displaycase/attack_paw(mob/user)
return src.attack_hand(user)
/obj/structure/displaycase/attack_hand(mob/user)
user.changeNext_move(CLICK_CD_MELEE)
if (showpiece && (broken || open))
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
dump()
src.add_fingerprint(user)
update_icon()
return
else
//prevents remote "kicks" with TK
if (!Adjacent(user))
return
user.visible_message("<span class='danger'>[user] kicks the display case.</span>", null, null, COMBAT_MESSAGE_RANGE)
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
take_damage(2)
/obj/structure/displaycase_chassis
anchored = TRUE
density = FALSE
name = "display case chassis"
desc = "wooden base of display case"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox_chassis"
var/obj/item/electronics/airlock/electronics
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/wrench)) //The player can only deconstruct the wooden frame
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 30*I.toolspeed, target = src))
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
new /obj/item/stack/sheet/mineral/wood(get_turf(src), 5)
qdel(src)
else if(istype(I, /obj/item/electronics/airlock))
to_chat(user, "<span class='notice'>You start installing the electronics into [src]...</span>")
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 30, target = src) && user.transferItemToLoc(I,src))
electronics = I
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
else if(istype(I, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = I
if(G.get_amount() < 10)
to_chat(user, "<span class='warning'>You need ten glass sheets to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [G] to [src]...</span>")
if(do_after(user, 20, target = src))
G.use(10)
var/obj/structure/displaycase/display = new(src.loc)
if(electronics)
electronics.loc = display
display.electronics = electronics
if(electronics.one_access)
display.req_one_access = electronics.accesses
else
display.req_access = electronics.accesses
qdel(src)
else
return ..()
//The captains display case requiring specops ID access is intentional.
//The lab cage and captains display case do not spawn with electronics, which is why req_access is needed.
/obj/structure/displaycase/captain
alert = 1
start_showpiece_type = /obj/item/gun/energy/laser/captain
req_access = list(ACCESS_CENT_SPECOPS)
/obj/structure/displaycase/labcage
name = "lab cage"
desc = "A glass lab container for storing interesting creatures."
start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr
req_access = list(ACCESS_RD)
/obj/structure/displaycase/trophy
name = "trophy display case"
desc = "Store your trophies of accomplishment in here, and they will stay forever."
var/trophy_message = ""
var/placer_key = ""
var/added_roundstart = TRUE
var/is_locked = TRUE
alert = TRUE
integrity_failure = 0
openable = FALSE
/obj/structure/displaycase/trophy/Initialize()
. = ..()
GLOB.trophy_cases += src
/obj/structure/displaycase/trophy/Destroy()
GLOB.trophy_cases -= src
return ..()
/obj/structure/displaycase/trophy/examine(mob/user)
..()
if(trophy_message)
to_chat(user, "The plaque reads:")
to_chat(user, trophy_message)
/obj/structure/displaycase/trophy/attackby(obj/item/W, mob/user, params)
if(!user.Adjacent(src)) //no TK museology
return
if(user.a_intent == INTENT_HARM)
return ..()
if(user.is_holding_item_of_type(/obj/item/key/displaycase))
if(added_roundstart)
is_locked = !is_locked
to_chat(user, "You [!is_locked ? "un" : ""]lock the case.")
else
to_chat(user, "<span class='danger'>The lock is stuck shut!</span>")
return
if(is_locked)
to_chat(user, "<span class='danger'>The case is shut tight with an old fashioned physical lock. Maybe you should ask the curator for the key?</span>")
return
if(!added_roundstart)
to_chat(user, "You've already put something new in this case.")
return
if(is_type_in_typecache(W, GLOB.blacklisted_cargo_types))
to_chat(user, "<span class='danger'>The case rejects the [W].</span>")
return
for(var/a in W.GetAllContents())
if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types))
to_chat(user, "<span class='danger'>The case rejects the [W].</span>")
return
if(user.transferItemToLoc(W, src))
if(showpiece)
to_chat(user, "You press a button, and [showpiece] descends into the floor of the case.")
QDEL_NULL(showpiece)
to_chat(user, "You insert [W] into the case.")
showpiece = W
added_roundstart = FALSE
update_icon()
placer_key = user.ckey
trophy_message = W.desc //default value
var/chosen_plaque = stripped_input(user, "What would you like the plaque to say? Default value is item's description.", "Trophy Plaque")
if(chosen_plaque)
if(user.Adjacent(src))
trophy_message = chosen_plaque
to_chat(user, "You set the plaque's text.")
else
to_chat(user, "You are too far to set the plaque's text.")
SSpersistence.SaveTrophy(src)
return TRUE
else
to_chat(user, "<span class='warning'>\The [W] is stuck to your hand, you can't put it in the [src.name]!</span>")
return
/obj/structure/displaycase/trophy/dump()
if (showpiece)
if(added_roundstart)
visible_message("<span class='danger'>The [showpiece] crumbles to dust!</span>")
new /obj/effect/decal/cleanable/ash(loc)
QDEL_NULL(showpiece)
else
..()
/obj/item/key/displaycase
name = "display case key"
desc = "The key to the curator's display cases."
/obj/item/showpiece_dummy
name = "Cheap replica"
/obj/item/showpiece_dummy/Initialize(mapload, path)
. = ..()
var/obj/item/I = path
name = initial(I.name)
icon = initial(I.icon)
icon_state = initial(I.icon_state)
/obj/structure/displaycase
name = "display case"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox0"
desc = "A display case for prized possessions."
density = TRUE
anchored = TRUE
resistance_flags = ACID_PROOF
armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 100)
max_integrity = 200
integrity_failure = 50
var/obj/item/showpiece = null
var/alert = TRUE
var/open = FALSE
var/openable = TRUE
var/obj/item/electronics/airlock/electronics
var/start_showpiece_type = null //add type for items on display
/obj/structure/displaycase/Initialize()
. = ..()
if(start_showpiece_type)
showpiece = new start_showpiece_type (src)
update_icon()
/obj/structure/displaycase/Destroy()
if(electronics)
QDEL_NULL(electronics)
if(showpiece)
QDEL_NULL(showpiece)
return ..()
/obj/structure/displaycase/examine(mob/user)
..()
if(alert)
to_chat(user, "<span class='notice'>Hooked up with an anti-theft system.</span>")
if(showpiece)
to_chat(user, "<span class='notice'>There's [showpiece] inside.</span>")
/obj/structure/displaycase/proc/dump()
if (showpiece)
showpiece.forceMove(loc)
showpiece = null
/obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
/obj/structure/displaycase/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
dump()
if(!disassembled)
new /obj/item/shard( src.loc )
trigger_alarm()
qdel(src)
/obj/structure/displaycase/obj_break(damage_flag)
if(!broken && !(flags_1 & NODECONSTRUCT_1))
density = FALSE
broken = 1
new /obj/item/shard( src.loc )
playsound(src, "shatter", 70, 1)
update_icon()
trigger_alarm()
/obj/structure/displaycase/proc/trigger_alarm()
//Activate Anti-theft
if(alert)
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
playsound(src, 'sound/effects/alert.ogg', 50, 1)
/*
*/
/obj/structure/displaycase/proc/is_directional(atom/A)
try
getFlatIcon(A,defdir=4)
catch
return 0
return 1
/obj/structure/displaycase/proc/get_flat_icon_directional(atom/A)
//Get flatIcon even if dir is mismatched for directionless icons
//SLOW
var/icon/I
if(is_directional(A))
I = getFlatIcon(A)
else
var/old_dir = A.dir
A.setDir(2)
I = getFlatIcon(A)
A.setDir(old_dir)
return I
/obj/structure/displaycase/update_icon()
var/icon/I
if(open)
I = icon('icons/obj/stationobjs.dmi',"glassbox_open")
else
I = icon('icons/obj/stationobjs.dmi',"glassbox0")
if(broken)
I = icon('icons/obj/stationobjs.dmi',"glassboxb0")
if(showpiece)
var/icon/S = get_flat_icon_directional(showpiece)
S.Scale(17,17)
I.Blend(S,ICON_UNDERLAY,8,8)
src.icon = I
return
/obj/structure/displaycase/attackby(obj/item/W, mob/user, params)
if(W.GetID() && !broken && openable)
if(allowed(user))
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
toggle_lock(user)
else
to_chat(user, "<span class='warning'>Access denied.</span>")
else if(istype(W, /obj/item/weldingtool) && user.a_intent == INTENT_HELP && !broken)
var/obj/item/weldingtool/WT = W
if(obj_integrity < max_integrity && WT.remove_fuel(5, user))
to_chat(user, "<span class='notice'>You begin repairing [src].</span>")
playsound(loc, WT.usesound, 40, 1)
if(do_after(user, 40*W.toolspeed, target = src))
obj_integrity = max_integrity
playsound(loc, 'sound/items/welder2.ogg', 50, 1)
update_icon()
to_chat(user, "<span class='notice'>You repair [src].</span>")
else
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
else if(!alert && istype(W, /obj/item/crowbar) && openable) //Only applies to the lab cage and player made display cases
if(broken)
if(showpiece)
to_chat(user, "<span class='notice'>Remove the displayed object first.</span>")
else
to_chat(user, "<span class='notice'>You remove the destroyed case</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>")
if(do_after(user, 20*W.toolspeed, target = src))
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
toggle_lock(user)
else if(open && !showpiece)
if(user.transferItemToLoc(W, src))
showpiece = W
to_chat(user, "<span class='notice'>You put [W] on display</span>")
update_icon()
else if(istype(W, /obj/item/stack/sheet/glass) && broken)
var/obj/item/stack/sheet/glass/G = W
if(G.get_amount() < 2)
to_chat(user, "<span class='warning'>You need two glass sheets to fix the case!</span>")
return
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
if(do_after(user, 20, target = src))
G.use(2)
broken = 0
obj_integrity = max_integrity
update_icon()
else
return ..()
/obj/structure/displaycase/proc/toggle_lock(mob/user)
open = !open
update_icon()
/obj/structure/displaycase/attack_paw(mob/user)
return src.attack_hand(user)
/obj/structure/displaycase/attack_hand(mob/user)
user.changeNext_move(CLICK_CD_MELEE)
if (showpiece && (broken || open))
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
dump()
src.add_fingerprint(user)
update_icon()
return
else
//prevents remote "kicks" with TK
if (!Adjacent(user))
return
user.visible_message("<span class='danger'>[user] kicks the display case.</span>", null, null, COMBAT_MESSAGE_RANGE)
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
take_damage(2)
/obj/structure/displaycase_chassis
anchored = TRUE
density = FALSE
name = "display case chassis"
desc = "The wooden base of a display case."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox_chassis"
var/obj/item/electronics/airlock/electronics
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/wrench)) //The player can only deconstruct the wooden frame
to_chat(user, "<span class='notice'>You start disassembling [src]...</span>")
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 30*I.toolspeed, target = src))
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
new /obj/item/stack/sheet/mineral/wood(get_turf(src), 5)
qdel(src)
else if(istype(I, /obj/item/electronics/airlock))
to_chat(user, "<span class='notice'>You start installing the electronics into [src]...</span>")
playsound(src.loc, I.usesound, 50, 1)
if(do_after(user, 30, target = src) && user.transferItemToLoc(I,src))
electronics = I
to_chat(user, "<span class='notice'>You install the airlock electronics.</span>")
else if(istype(I, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = I
if(G.get_amount() < 10)
to_chat(user, "<span class='warning'>You need ten glass sheets to do this!</span>")
return
to_chat(user, "<span class='notice'>You start adding [G] to [src]...</span>")
if(do_after(user, 20, target = src))
G.use(10)
var/obj/structure/displaycase/display = new(src.loc)
if(electronics)
electronics.loc = display
display.electronics = electronics
if(electronics.one_access)
display.req_one_access = electronics.accesses
else
display.req_access = electronics.accesses
qdel(src)
else
return ..()
//The captains display case requiring specops ID access is intentional.
//The lab cage and captains display case do not spawn with electronics, which is why req_access is needed.
/obj/structure/displaycase/captain
alert = 1
start_showpiece_type = /obj/item/gun/energy/laser/captain
req_access = list(ACCESS_CENT_SPECOPS)
/obj/structure/displaycase/labcage
name = "lab cage"
desc = "A glass lab container for storing interesting creatures."
start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr
req_access = list(ACCESS_RD)
/obj/structure/displaycase/trophy
name = "trophy display case"
desc = "Store your trophies of accomplishment in here, and they will stay forever."
var/trophy_message = ""
var/placer_key = ""
var/added_roundstart = TRUE
var/is_locked = TRUE
alert = TRUE
integrity_failure = 0
openable = FALSE
/obj/structure/displaycase/trophy/Initialize()
. = ..()
GLOB.trophy_cases += src
/obj/structure/displaycase/trophy/Destroy()
GLOB.trophy_cases -= src
return ..()
/obj/structure/displaycase/trophy/examine(mob/user)
..()
if(trophy_message)
to_chat(user, "The plaque reads:")
to_chat(user, trophy_message)
/obj/structure/displaycase/trophy/attackby(obj/item/W, mob/user, params)
if(!user.Adjacent(src)) //no TK museology
return
if(user.a_intent == INTENT_HARM)
return ..()
if(user.is_holding_item_of_type(/obj/item/key/displaycase))
if(added_roundstart)
is_locked = !is_locked
to_chat(user, "You [!is_locked ? "un" : ""]lock the case.")
else
to_chat(user, "<span class='danger'>The lock is stuck shut!</span>")
return
if(is_locked)
to_chat(user, "<span class='danger'>The case is shut tight with an old fashioned physical lock. Maybe you should ask the curator for the key?</span>")
return
if(!added_roundstart)
to_chat(user, "You've already put something new in this case.")
return
if(is_type_in_typecache(W, GLOB.blacklisted_cargo_types))
to_chat(user, "<span class='danger'>The case rejects the [W].</span>")
return
for(var/a in W.GetAllContents())
if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types))
to_chat(user, "<span class='danger'>The case rejects the [W].</span>")
return
if(user.transferItemToLoc(W, src))
if(showpiece)
to_chat(user, "You press a button, and [showpiece] descends into the floor of the case.")
QDEL_NULL(showpiece)
to_chat(user, "You insert [W] into the case.")
showpiece = W
added_roundstart = FALSE
update_icon()
placer_key = user.ckey
trophy_message = W.desc //default value
var/chosen_plaque = stripped_input(user, "What would you like the plaque to say? Default value is item's description.", "Trophy Plaque")
if(chosen_plaque)
if(user.Adjacent(src))
trophy_message = chosen_plaque
to_chat(user, "You set the plaque's text.")
else
to_chat(user, "You are too far to set the plaque's text.")
SSpersistence.SaveTrophy(src)
return TRUE
else
to_chat(user, "<span class='warning'>\The [W] is stuck to your hand, you can't put it in the [src.name]!</span>")
return
/obj/structure/displaycase/trophy/dump()
if (showpiece)
if(added_roundstart)
visible_message("<span class='danger'>The [showpiece] crumbles to dust!</span>")
new /obj/effect/decal/cleanable/ash(loc)
QDEL_NULL(showpiece)
else
..()
/obj/item/key/displaycase
name = "display case key"
desc = "The key to the curator's display cases."
/obj/item/showpiece_dummy
name = "Cheap replica"
/obj/item/showpiece_dummy/Initialize(mapload, path)
. = ..()
var/obj/item/I = path
name = initial(I.name)
icon = initial(I.icon)
icon_state = initial(I.icon_state)
+8 -4
View File
@@ -29,9 +29,13 @@
can_be_unanchored = FALSE
CanAtmosPass = ATMOS_PASS_DENSITY
/obj/structure/falsewall/New(loc)
..()
air_update_turf(1)
/obj/structure/falsewall/Initialize()
. = ..()
air_update_turf(TRUE)
/obj/structure/falsewall/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
/obj/structure/falsewall/Destroy()
density = FALSE
@@ -195,7 +199,7 @@
if(!active)
if(world.time > last_event+15)
active = 1
radiation_pulse(get_turf(src), 0, 3, 15, 1)
radiation_pulse(src, 150)
for(var/turf/closed/wall/mineral/uranium/T in orange(1,src))
T.radiate()
last_event = world.time
+2 -2
View File
@@ -323,7 +323,7 @@
/obj/structure/flora/rock
icon_state = "basalt"
desc = "A volcanic rock"
desc = "A volcanic rock."
icon = 'icons/obj/flora/rocks.dmi'
resistance_flags = FIRE_PROOF
density = TRUE
@@ -334,7 +334,7 @@
/obj/structure/flora/rock/pile
icon_state = "lavarocks"
desc = "A pile of rocks"
desc = "A pile of rocks."
/obj/structure/flora/rock/pile/Initialize()
. = ..()
@@ -122,10 +122,10 @@
golems, so that no golem may ever be forced to serve again.</b>"
/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null)
. = ..()
if(species)
if(species) //spawners list uses object name to register so this goes before ..()
name += " ([initial(species.prefix)])"
mob_species = species
. = ..()
var/area/A = get_area(src)
if(!mapload && A)
notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
@@ -316,10 +316,10 @@
/obj/effect/mob_spawn/human/hotel_staff/security
name = "hotel security sleeper"
mob_name = "hotel security memeber"
mob_name = "hotel security member"
outfit = /datum/outfit/hotelstaff/security
flavour_text = "You are a peacekeeper assigned to this hotel to protect the intrests of the company while keeping the peace between \
guests and the staff.Do <font size=6><b>NOT</b></font> leave the hotel, as that is grounds for contract termination."
flavour_text = "You are a peacekeeper assigned to this hotel to protect the interests of the company while keeping the peace between \
guests and the staff. Do <font size=6><b>NOT</b></font> leave the hotel, as that is grounds for contract termination."
objectives = "Do not leave your assigned hotel. Try and keep the peace between staff and guests, non-lethal force heavily advised if possible."
/datum/outfit/hotelstaff/security
@@ -458,7 +458,7 @@
//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
/obj/effect/mob_spawn/human/oldsec
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant"
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a security officer"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
@@ -482,7 +482,7 @@
/obj/effect/mob_spawn/human/oldeng
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant"
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "an engineer"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
@@ -506,7 +506,7 @@
/obj/effect/mob_spawn/human/oldsci
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant"
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a scientist"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
+4
View File
@@ -10,6 +10,10 @@
var/can_displace = TRUE //If the girder can be moved around by wrenching it
max_integrity = 200
/obj/structure/girder/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
/obj/structure/girder/examine(mob/user)
. = ..()
switch(state)
+10 -1
View File
@@ -17,6 +17,10 @@
var/grille_type = null
var/broken_type = /obj/structure/grille/broken
/obj/structure/grille/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
/obj/structure/grille/examine(mob/user)
..()
if(anchored)
@@ -31,7 +35,8 @@
if(RCD_WINDOWGRILLE)
if(the_rcd.window_type == /obj/structure/window/reinforced/fulltile)
return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 12)
else return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8)
else
return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8)
return FALSE
/obj/structure/grille/rcd_act(mob/user, var/obj/item/construction/rcd/the_rcd, passed_mode)
@@ -62,6 +67,10 @@
var/mob/M = AM
shock(M, 70)
/obj/structure/grille/attack_animal(mob/user)
. = ..()
if(!shock(user, 70))
take_damage(rand(5,10), BRUTE, "melee", 1)
/obj/structure/grille/attack_paw(mob/user)
attack_hand(user)
+34 -34
View File
@@ -1,36 +1,36 @@
/obj/structure/hivebot_beacon
name = "beacon"
desc = "Some odd beacon thing."
icon = 'icons/mob/hivebot.dmi'
icon_state = "def_radar-off"
/obj/structure/hivebot_beacon
name = "beacon"
desc = "Some odd beacon thing."
icon = 'icons/mob/hivebot.dmi'
icon_state = "def_radar-off"
anchored = TRUE
density = TRUE
var/bot_type = "norm"
var/bot_amt = 10
/obj/structure/hivebot_beacon/New()
..()
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(2, loc)
smoke.start()
visible_message("<span class='boldannounce'>The [src] warps in!</span>")
playsound(src.loc, 'sound/effects/empulse.ogg', 25, 1)
addtimer(CALLBACK(src, .proc/warpbots), rand(10, 600))
/obj/structure/hivebot_beacon/proc/warpbots()
icon_state = "def_radar"
visible_message("<span class='danger'>The [src] turns on!</span>")
while(bot_amt > 0)
bot_amt--
switch(bot_type)
if("norm")
new /mob/living/simple_animal/hostile/hivebot(get_turf(src))
if("range")
new /mob/living/simple_animal/hostile/hivebot/range(get_turf(src))
if("rapid")
new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src))
sleep(100)
visible_message("<span class='boldannounce'>The [src] warps out!</span>")
playsound(src.loc, 'sound/effects/empulse.ogg', 25, 1)
qdel(src)
return
var/bot_type = "norm"
var/bot_amt = 10
/obj/structure/hivebot_beacon/New()
..()
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(2, loc)
smoke.start()
visible_message("<span class='boldannounce'>[src] warps in!</span>")
playsound(src.loc, 'sound/effects/empulse.ogg', 25, 1)
addtimer(CALLBACK(src, .proc/warpbots), rand(10, 600))
/obj/structure/hivebot_beacon/proc/warpbots()
icon_state = "def_radar"
visible_message("<span class='danger'>[src] turns on!</span>")
while(bot_amt > 0)
bot_amt--
switch(bot_type)
if("norm")
new /mob/living/simple_animal/hostile/hivebot(get_turf(src))
if("range")
new /mob/living/simple_animal/hostile/hivebot/range(get_turf(src))
if("rapid")
new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src))
sleep(100)
visible_message("<span class='boldannounce'>[src] warps out!</span>")
playsound(src.loc, 'sound/effects/empulse.ogg', 25, 1)
qdel(src)
return
+5 -1
View File
@@ -61,6 +61,10 @@
/obj/structure/holosign/barrier/engineering
icon_state = "holosign_engi"
/obj/structure/holosign/barrier/engineering/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_LIGHT_INSULATION)
/obj/structure/holosign/barrier/atmos
name = "holo firelock"
desc = "A holographic barrier resembling a firelock. Though it does not prevent solid objects from passing through, gas is kept out."
@@ -97,7 +101,7 @@
/obj/structure/holosign/barrier/cyborg/hacked
name = "Charged Energy Field"
desc = "A powerful energy field that blocks movement. Energy arcs off it"
desc = "A powerful energy field that blocks movement. Energy arcs off it."
max_integrity = 20
var/shockcd = 0
+147 -147
View File
@@ -1,151 +1,151 @@
//////Kitchen Spike
#define VIABLE_MOB_CHECK(X) (isliving(X) && !issilicon(X) && !isbot(X))
/obj/structure/kitchenspike_frame
name = "meatspike frame"
icon = 'icons/obj/kitchen.dmi'
icon_state = "spikeframe"
desc = "The frame of a meat spike."
//////Kitchen Spike
#define VIABLE_MOB_CHECK(X) (isliving(X) && !issilicon(X) && !isbot(X))
/obj/structure/kitchenspike_frame
name = "meatspike frame"
icon = 'icons/obj/kitchen.dmi'
icon_state = "spikeframe"
desc = "The frame of a meat spike."
density = TRUE
anchored = FALSE
max_integrity = 200
/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
if(default_unfasten_wrench(user, I))
return
else if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
if(R.get_amount() >= 4)
R.use(4)
to_chat(user, "<span class='notice'>You add spikes to the frame.</span>")
var/obj/F = new /obj/structure/kitchenspike(src.loc)
transfer_fingerprints_to(F)
qdel(src)
else if(istype(I, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = I
if(!WT.remove_fuel(0, user))
return
to_chat(user, "<span class='notice'>You begin cutting \the [src] apart...</span>")
playsound(src.loc, WT.usesound, 40, 1)
if(do_after(user, 40*WT.toolspeed, 1, target = src))
if(!WT.isOn())
return
playsound(src.loc, WT.usesound, 50, 1)
visible_message("<span class='notice'>[user] slices apart \the [src].</span>",
"<span class='notice'>You cut \the [src] apart with \the [WT].</span>",
"<span class='italics'>You hear welding.</span>")
new /obj/item/stack/sheet/metal(src.loc, 4)
qdel(src)
return
else
return ..()
/obj/structure/kitchenspike
name = "meat spike"
icon = 'icons/obj/kitchen.dmi'
icon_state = "spike"
desc = "A spike for collecting meat from animals"
max_integrity = 200
/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
if(default_unfasten_wrench(user, I))
return
else if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
if(R.get_amount() >= 4)
R.use(4)
to_chat(user, "<span class='notice'>You add spikes to the frame.</span>")
var/obj/F = new /obj/structure/kitchenspike(src.loc)
transfer_fingerprints_to(F)
qdel(src)
else if(istype(I, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = I
if(!WT.remove_fuel(0, user))
return
to_chat(user, "<span class='notice'>You begin cutting \the [src] apart...</span>")
playsound(src.loc, WT.usesound, 40, 1)
if(do_after(user, 40*WT.toolspeed, 1, target = src))
if(!WT.isOn())
return
playsound(src.loc, WT.usesound, 50, 1)
visible_message("<span class='notice'>[user] slices apart \the [src].</span>",
"<span class='notice'>You cut \the [src] apart with \the [WT].</span>",
"<span class='italics'>You hear welding.</span>")
new /obj/item/stack/sheet/metal(src.loc, 4)
qdel(src)
return
else
return ..()
/obj/structure/kitchenspike
name = "meat spike"
icon = 'icons/obj/kitchen.dmi'
icon_state = "spike"
desc = "A spike for collecting meat from animals."
density = TRUE
anchored = TRUE
buckle_lying = 0
can_buckle = 1
max_integrity = 250
/obj/structure/kitchenspike/attack_paw(mob/user)
return src.attack_hand(usr)
/obj/structure/kitchenspike/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/crowbar))
if(!has_buckled_mobs())
playsound(loc, I.usesound, 100, 1)
if(do_after(user, 20*I.toolspeed, target = src))
to_chat(user, "<span class='notice'>You pry the spikes out of the frame.</span>")
deconstruct(TRUE)
else
to_chat(user, "<span class='notice'>You can't do that while something's on the spike!</span>")
else
return ..()
/obj/structure/kitchenspike/attack_hand(mob/user)
if(VIABLE_MOB_CHECK(user.pulling) && user.a_intent == INTENT_GRAB && !has_buckled_mobs())
var/mob/living/L = user.pulling
if(do_mob(user, src, 120))
if(has_buckled_mobs()) //to prevent spam/queing up attacks
return
if(L.buckled)
return
if(user.pulling != L)
return
playsound(src.loc, 'sound/effects/splat.ogg', 25, 1)
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
L.loc = src.loc
L.emote("scream")
L.add_splatter_floor()
L.adjustBruteLoss(30)
L.setDir(2)
buckle_mob(L, force=1)
var/matrix/m180 = matrix(L.transform)
m180.Turn(180)
animate(L, transform = m180, time = 3)
L.pixel_y = L.get_standard_pixel_y_offset(180)
else if (has_buckled_mobs())
for(var/mob/living/L in buckled_mobs)
user_unbuckle_mob(L, user)
else
..()
/obj/structure/kitchenspike/user_buckle_mob(mob/living/M, mob/living/user) //Don't want them getting put on the rack other than by spiking
return
/obj/structure/kitchenspike/user_unbuckle_mob(mob/living/buckled_mob, mob/living/carbon/human/user)
if(buckled_mob)
var/mob/living/M = buckled_mob
if(M != user)
M.visible_message(\
"[user.name] tries to pull [M.name] free of the [src]!",\
"<span class='notice'>[user.name] is trying to pull you off the [src], opening up fresh wounds!</span>",\
"<span class='italics'>You hear a squishy wet noise.</span>")
if(!do_after(user, 300, target = src))
if(M && M.buckled)
M.visible_message(\
"[user.name] fails to free [M.name]!",\
"<span class='notice'>[user.name] fails to pull you off of the [src].</span>")
return
else
M.visible_message(\
"<span class='warning'>[M.name] struggles to break free from the [src]!</span>",\
"<span class='notice'>You struggle to break free from the [src], exacerbating your wounds! (Stay still for two minutes.)</span>",\
"<span class='italics'>You hear a wet squishing noise..</span>")
M.adjustBruteLoss(30)
if(!do_after(M, 1200, target = src))
if(M && M.buckled)
to_chat(M, "<span class='warning'>You fail to free yourself!</span>")
return
if(!M.buckled)
return
var/matrix/m180 = matrix(M.transform)
m180.Turn(180)
animate(M, transform = m180, time = 3)
M.pixel_y = M.get_standard_pixel_y_offset(180)
M.adjustBruteLoss(30)
src.visible_message(text("<span class='danger'>[M] falls free of the [src]!</span>"))
unbuckle_mob(M,force=1)
M.emote("scream")
M.AdjustKnockdown(20)
/obj/structure/kitchenspike/deconstruct(disassembled = TRUE)
if(disassembled)
var/obj/F = new /obj/structure/kitchenspike_frame(src.loc)
transfer_fingerprints_to(F)
else
new /obj/item/stack/sheet/metal(src.loc, 4)
new /obj/item/stack/rods(loc, 4)
qdel(src)
#undef VIABLE_MOB_CHECK
buckle_lying = 0
can_buckle = 1
max_integrity = 250
/obj/structure/kitchenspike/attack_paw(mob/user)
return src.attack_hand(usr)
/obj/structure/kitchenspike/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/crowbar))
if(!has_buckled_mobs())
playsound(loc, I.usesound, 100, 1)
if(do_after(user, 20*I.toolspeed, target = src))
to_chat(user, "<span class='notice'>You pry the spikes out of the frame.</span>")
deconstruct(TRUE)
else
to_chat(user, "<span class='notice'>You can't do that while something's on the spike!</span>")
else
return ..()
/obj/structure/kitchenspike/attack_hand(mob/user)
if(VIABLE_MOB_CHECK(user.pulling) && user.a_intent == INTENT_GRAB && !has_buckled_mobs())
var/mob/living/L = user.pulling
if(do_mob(user, src, 120))
if(has_buckled_mobs()) //to prevent spam/queing up attacks
return
if(L.buckled)
return
if(user.pulling != L)
return
playsound(src.loc, 'sound/effects/splat.ogg', 25, 1)
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
L.loc = src.loc
L.emote("scream")
L.add_splatter_floor()
L.adjustBruteLoss(30)
L.setDir(2)
buckle_mob(L, force=1)
var/matrix/m180 = matrix(L.transform)
m180.Turn(180)
animate(L, transform = m180, time = 3)
L.pixel_y = L.get_standard_pixel_y_offset(180)
else if (has_buckled_mobs())
for(var/mob/living/L in buckled_mobs)
user_unbuckle_mob(L, user)
else
..()
/obj/structure/kitchenspike/user_buckle_mob(mob/living/M, mob/living/user) //Don't want them getting put on the rack other than by spiking
return
/obj/structure/kitchenspike/user_unbuckle_mob(mob/living/buckled_mob, mob/living/carbon/human/user)
if(buckled_mob)
var/mob/living/M = buckled_mob
if(M != user)
M.visible_message(\
"[user] tries to pull [M] free of [src]!",\
"<span class='notice'>[user] is trying to pull you off [src], opening up fresh wounds!</span>",\
"<span class='italics'>You hear a squishy wet noise.</span>")
if(!do_after(user, 300, target = src))
if(M && M.buckled)
M.visible_message(\
"[user] fails to free [M]!",\
"<span class='notice'>[user] fails to pull you off of [src].</span>")
return
else
M.visible_message(\
"<span class='warning'>[M] struggles to break free from [src]!</span>",\
"<span class='notice'>You struggle to break free from [src], exacerbating your wounds! (Stay still for two minutes.)</span>",\
"<span class='italics'>You hear a wet squishing noise..</span>")
M.adjustBruteLoss(30)
if(!do_after(M, 1200, target = src))
if(M && M.buckled)
to_chat(M, "<span class='warning'>You fail to free yourself!</span>")
return
if(!M.buckled)
return
var/matrix/m180 = matrix(M.transform)
m180.Turn(180)
animate(M, transform = m180, time = 3)
M.pixel_y = M.get_standard_pixel_y_offset(180)
M.adjustBruteLoss(30)
src.visible_message(text("<span class='danger'>[M] falls free of [src]!</span>"))
unbuckle_mob(M,force=1)
M.emote("scream")
M.AdjustKnockdown(20)
/obj/structure/kitchenspike/deconstruct(disassembled = TRUE)
if(disassembled)
var/obj/F = new /obj/structure/kitchenspike_frame(src.loc)
transfer_fingerprints_to(F)
else
new /obj/item/stack/sheet/metal(src.loc, 4)
new /obj/item/stack/rods(loc, 4)
qdel(src)
#undef VIABLE_MOB_CHECK
@@ -68,14 +68,15 @@
START_PROCESSING(SSfastprocess, src)
/obj/machinery/manned_turret/process()
if(!LAZYLEN(buckled_mobs))
if (!update_positioning())
return PROCESS_KILL
update_positioning()
/obj/machinery/manned_turret/proc/update_positioning()
if (!LAZYLEN(buckled_mobs))
return FALSE
var/mob/living/controller = buckled_mobs[1]
if(!istype(controller))
return
return FALSE
var/client/C = controller.client
if(C)
var/atom/A = C.mouseObject
@@ -143,14 +144,13 @@
addtimer(CALLBACK(src, /obj/machinery/manned_turret/.proc/fire_helper, user), i*rate_of_fire)
/obj/machinery/manned_turret/proc/fire_helper(mob/user)
if(user.incapacitated())
if(user.incapacitated() || !(user in buckled_mobs))
return
update_positioning() //REFRESH MOUSE TRACKING!!
var/turf/targets_from = get_turf(src)
if(QDELETED(target))
target = target_turf
var/obj/item/projectile/P = new projectile_type(targets_from)
P.current = targets_from
P.starting = targets_from
P.firer = user
P.original = target
@@ -201,8 +201,8 @@
O.attacked_by(src, user)
/obj/item/gun_control/attack(mob/living/M, mob/living/user)
user.lastattacked = M
M.lastattacker = user
M.lastattacker = user.real_name
M.lastattackerckey = user.ckey
M.attacked_by(src, user)
add_fingerprint(user)
+30 -3
View File
@@ -22,10 +22,13 @@
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
CanAtmosPass = ATMOS_PASS_DENSITY
/obj/structure/mineral_door/New(location)
..()
/obj/structure/mineral_door/Initialize()
. = ..()
initial_state = icon_state
air_update_turf(1)
air_update_turf(TRUE)
/obj/structure/mineral_door/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
/obj/structure/mineral_door/Destroy()
density = FALSE
@@ -151,11 +154,17 @@
sheetType = /obj/item/stack/sheet/mineral/silver
max_integrity = 300
/obj/structure/mineral_door/silver/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
/obj/structure/mineral_door/gold
name = "gold door"
icon_state = "gold"
sheetType = /obj/item/stack/sheet/mineral/gold
/obj/structure/mineral_door/gold/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
/obj/structure/mineral_door/uranium
name = "uranium door"
icon_state = "uranium"
@@ -163,6 +172,9 @@
max_integrity = 300
light_range = 2
/obj/structure/mineral_door/uranium/ComponentInitialize()
return
/obj/structure/mineral_door/sandstone
name = "sandstone door"
icon_state = "sandstone"
@@ -172,6 +184,9 @@
/obj/structure/mineral_door/transparent
opacity = FALSE
/obj/structure/mineral_door/transparent/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
/obj/structure/mineral_door/transparent/Close()
..()
set_opacity(FALSE)
@@ -181,6 +196,9 @@
icon_state = "plasma"
sheetType = /obj/item/stack/sheet/mineral/plasma
/obj/structure/mineral_door/transparent/plasma/ComponentInitialize()
return
/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params)
if(W.is_hot())
var/turf/T = get_turf(src)
@@ -204,6 +222,9 @@
sheetType = /obj/item/stack/sheet/mineral/diamond
max_integrity = 1000
/obj/structure/mineral_door/transparent/diamond/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_EXTREME_INSULATION)
/obj/structure/mineral_door/wood
name = "wood door"
icon_state = "wood"
@@ -213,6 +234,9 @@
resistance_flags = FLAMMABLE
max_integrity = 200
/obj/structure/mineral_door/wood/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
/obj/structure/mineral_door/paperframe
name = "paper frame door"
icon_state = "paperframe"
@@ -227,6 +251,9 @@
. = ..()
queue_smooth_neighbors(src)
/obj/structure/mineral_door/paperframe/ComponentInitialize()
return
/obj/structure/mineral_door/paperframe/Destroy()
queue_smooth_neighbors(src)
return ..()
+1 -2
View File
@@ -101,8 +101,7 @@
..()
/obj/structure/mirror/magic/lesser/New()
var/list/L = CONFIG_GET(keyed_flag_list/roundstart_races)
choosable_races = L.Copy()
choosable_races = GLOB.roundstart_races.Copy()
..()
/obj/structure/mirror/magic/badmin/New()
+2 -1
View File
@@ -15,7 +15,8 @@
return
for(var/obj/item/I in loc)
if(notices > 4) break
if(notices > 4)
break
if(istype(I, /obj/item/paper))
I.loc = src
notices++
+186 -137
View File
@@ -1,138 +1,179 @@
/obj/structure/reflector
name = "reflector frame"
icon = 'icons/obj/stock_parts.dmi'
icon_state = "box_0"
desc = "An angled mirror for reflecting lasers. This one does so at a 90 degree angle."
name = "reflector base"
icon = 'icons/obj/structures.dmi'
icon_state = "reflector_map"
desc = "A base for reflector assemblies."
anchored = FALSE
density = TRUE
density = FALSE
layer = BELOW_OBJ_LAYER
var/finished = 0
var/admin = 0 //Can't be rotated or deconstructed
var/deflector_icon_state
var/image/deflector_overlay
var/finished = FALSE
var/admin = FALSE //Can't be rotated or deconstructed
var/can_rotate = TRUE
var/framebuildstacktype = /obj/item/stack/sheet/metal
var/framebuildstackamount = 5
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 0
var/list/allowed_projectile_typecache = list(/obj/item/projectile/beam)
var/rotation_angle = -1
/obj/structure/reflector/Initialize()
. = ..()
icon_state = "reflector_base"
allowed_projectile_typecache = typecacheof(allowed_projectile_typecache)
if(deflector_icon_state)
deflector_overlay = image(icon, deflector_icon_state)
add_overlay(deflector_overlay)
if(rotation_angle == -1)
setAngle(dir2angle(dir))
else
setAngle(rotation_angle)
if(admin)
can_rotate = FALSE
/obj/structure/reflector/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to adjust its direction.</span>")
if(finished)
to_chat(user, "It is set to [rotation_angle] degrees, and the rotation is [can_rotate ? "unlocked" : "locked"].")
if(!admin)
if(can_rotate)
to_chat(user, "<span class='notice'>Alt-click to adjust its direction.</span>")
else
to_chat(user, "<span class='notice'>Use screwdriver to unlock the rotation.</span>")
/obj/structure/reflector/proc/setAngle(new_angle)
if(can_rotate)
rotation_angle = new_angle
if(deflector_overlay)
cut_overlay(deflector_overlay)
deflector_overlay.transform = turn(matrix(), new_angle)
add_overlay(deflector_overlay)
/obj/structure/reflector/setDir(new_dir)
setAngle(dir_map_to_angle(new_dir))
return ..(NORTH)
/obj/structure/reflector/proc/dir_map_to_angle(dir)
return 0
/obj/structure/reflector/bullet_act(obj/item/projectile/P)
var/turf/reflector_turf = get_turf(src)
var/turf/reflect_turf
var/new_dir = get_reflection(src.dir,P.dir)
if(!istype(P, /obj/item/projectile/beam))
return..()
if(new_dir)
reflect_turf = get_step(reflect_turf, new_dir)
else
visible_message("<span class='notice'>[src] is hit by the [P]!</span>")
new_dir = 0
return ..() //Hits as normal, explodes or emps or whatever
reflect_turf = get_step(loc,new_dir)
P.original = reflect_turf
P.starting = reflector_turf
P.current = reflector_turf
P.yo = reflect_turf.y - reflector_turf.y
P.xo = reflect_turf.x - reflector_turf.x
P.range = initial(P.range) //Keep the projectile healthy as long as its bouncing off things
new_dir = 0
return - 1
var/pdir = P.dir
var/pangle = P.Angle
var/ploc = get_turf(P)
if(!finished || !allowed_projectile_typecache[P.type] || !(P.dir in GLOB.cardinals))
return ..()
if(auto_reflect(P, pdir, ploc, pangle) != -1)
return ..()
return -1
/obj/structure/reflector/proc/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
P.ignore_source_check = TRUE
return -1
/obj/structure/reflector/attackby(obj/item/W, mob/user, params)
if(admin)
return
if(istype(W, /obj/item/screwdriver))
can_rotate = !can_rotate
to_chat(user, "<span class='notice'>You [can_rotate ? "unlock" : "lock"] [src]'s rotation.</span>")
playsound(src, W.usesound, 50, 1)
return
if(istype(W, /obj/item/wrench))
if(anchored)
to_chat(user, "Unweld the [src] first!")
to_chat(user, "<span class='warning'>Unweld [src] from the floor first!</span>")
return
user.visible_message("[user] starts to dismantle [src].", "<span class='notice'>You start to dismantle [src]...</span>")
if(do_after(user, 80*W.toolspeed, target = src))
playsound(src.loc, W.usesound, 50, 1)
to_chat(user, "You dismantle the [src].")
new framebuildstacktype(loc, framebuildstackamount)
new buildstacktype(loc, buildstackamount)
playsound(src, W.usesound, 50, 1)
to_chat(user, "<span class='notice'>You dismantle [src].</span>")
new framebuildstacktype(drop_location(), framebuildstackamount)
if(buildstackamount)
new buildstacktype(drop_location(), buildstackamount)
qdel(src)
else if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
switch(anchored)
if(0)
if (WT.remove_fuel(0,user))
playsound(src.loc, 'sound/items/welder2.ogg', 50, 1)
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
"<span class='notice'>You start to weld \the [src] to the floor...</span>", \
"<span class='italics'>You hear welding.</span>")
if (do_after(user,20*W.toolspeed, target = src))
if(!src || !WT.isOn())
return
anchored = TRUE
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
if(1)
if (WT.remove_fuel(0,user))
playsound(src.loc, 'sound/items/welder2.ogg', 50, 1)
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
"<span class='notice'>You start to cut \the [src] free from the floor...</span>", \
"<span class='italics'>You hear welding.</span>")
if (do_after(user,20*W.toolspeed, target = src))
if(!src || !WT.isOn())
return
anchored = 0
to_chat(user, "<span class='notice'>You cut \the [src] free from the floor.</span>")
if(obj_integrity < max_integrity)
if(WT.remove_fuel(0,user))
user.visible_message("[user] starts to repair [src].",
"<span class='notice'>You begin repairing [src]...</span>",
"<span class='italics'>You hear welding.</span>")
playsound(src, W.usesound, 40, 1)
if(do_after(user,40*WT.toolspeed, target = src))
obj_integrity = max_integrity
user.visible_message("[user] has repaired [src].", \
"<span class='notice'>You finish repairing [src].</span>")
else if(!anchored)
if (WT.remove_fuel(0,user))
playsound(src, W.usesound, 50, 1)
user.visible_message("[user] starts to weld [src] to the floor.",
"<span class='notice'>You start to weld [src] to the floor...</span>",
"<span class='italics'>You hear welding.</span>")
if (do_after(user,20*W.toolspeed, target = src))
if(!WT.isOn())
return
anchored = TRUE
to_chat(user, "<span class='notice'>You weld [src] to the floor.</span>")
else
if (WT.remove_fuel(0,user))
playsound(src, W.usesound, 50, 1)
user.visible_message("[user] starts to cut [src] free from the floor.", "<span class='notice'>You start to cut [src] free from the floor...</span>", "<span class='italics'>You hear welding.</span>")
if (do_after(user,20*W.toolspeed, target = src))
if(!WT.isOn())
return
anchored = FALSE
to_chat(user, "<span class='notice'>You cut [src] free from the floor.</span>")
//Finishing the frame
else if(istype(W, /obj/item/stack/sheet))
if(finished)
return
var/obj/item/stack/sheet/S = W
if(istype(W, /obj/item/stack/sheet/glass))
if(S.get_amount() < 5)
if(istype(S, /obj/item/stack/sheet/glass))
if(S.use(5))
new /obj/structure/reflector/single(drop_location())
qdel(src)
else
to_chat(user, "<span class='warning'>You need five sheets of glass to create a reflector!</span>")
return
if(istype(S, /obj/item/stack/sheet/rglass))
if(S.use(10))
new /obj/structure/reflector/double(drop_location())
qdel(src)
else
S.use(5)
new /obj/structure/reflector/single (src.loc)
qdel (src)
if(istype(W, /obj/item/stack/sheet/rglass))
if(S.get_amount() < 10)
to_chat(user, "<span class='warning'>You need ten sheets of reinforced glass to create a double reflector!</span>")
return
else
S.use(10)
new /obj/structure/reflector/double (src.loc)
qdel(src)
if(istype(W, /obj/item/stack/sheet/mineral/diamond))
if(S.get_amount() >= 1)
S.use(1)
new /obj/structure/reflector/box (src.loc)
if(istype(S, /obj/item/stack/sheet/mineral/diamond))
if(S.use(1))
new /obj/structure/reflector/box(drop_location())
qdel(src)
else
return ..()
/obj/structure/reflector/proc/get_reflection(srcdir,pdir)
return 0
/obj/structure/reflector/verb/rotate()
set name = "Rotate"
set category = "Object"
set src in oview(1)
if(usr.stat || !usr.canmove || usr.restrained())
return
if (src.anchored)
to_chat(usr, "<span class='warning'>It is fastened to the floor!</span>")
return 0
src.setDir(turn(src.dir, 270))
return 1
/obj/structure/reflector/AltClick(mob/user)
..()
/obj/structure/reflector/proc/rotate(mob/user)
if (!can_rotate || admin)
to_chat(user, "<span class='warning'>The rotation is locked!</span>")
return FALSE
var/new_angle = input(user, "Input a new angle for primary reflection face.", "Reflector Angle", rotation_angle) as null|num
if(!user.canUseTopic(src, be_close=TRUE))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
else
rotate()
if(!isnull(new_angle))
setAngle(NORM_ROT(new_angle))
return TRUE
/obj/structure/reflector/AltClick(mob/user)
if(!user.canUseTopic(src, be_close=TRUE))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
else if(finished)
rotate(user)
//TYPES OF REFLECTORS, SINGLE, DOUBLE, BOX
@@ -141,90 +182,98 @@
/obj/structure/reflector/single
name = "reflector"
icon = 'icons/obj/structures.dmi'
icon_state = "reflector"
desc = "A double sided angled mirror for reflecting lasers. This one does so at a 90 degree angle."
finished = 1
var/static/list/rotations = list("[NORTH]" = list("[SOUTH]" = WEST, "[EAST]" = NORTH),
"[EAST]" = list("[SOUTH]" = EAST, "[WEST]" = NORTH),
"[SOUTH]" = list("[NORTH]" = EAST, "[WEST]" = SOUTH),
"[WEST]" = list("[NORTH]" = WEST, "[EAST]" = SOUTH) )
deflector_icon_state = "reflector"
desc = "An angled mirror for reflecting laser beams."
density = TRUE
finished = TRUE
buildstacktype = /obj/item/stack/sheet/glass
buildstackamount = 5
/obj/structure/reflector/single/anchored
anchored = TRUE
/obj/structure/reflector/single/get_reflection(srcdir,pdir)
var/new_dir = rotations["[srcdir]"]["[pdir]"]
return new_dir
/obj/structure/reflector/single/mapping
admin = 1
admin = TRUE
anchored = TRUE
/obj/structure/reflector/single/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
var/incidence = get_angle_of_incidence(rotation_angle, P.Angle)
var/incidence_norm = get_angle_of_incidence(rotation_angle, P.Angle, FALSE)
if((incidence_norm > -90) && (incidence_norm < 90))
return FALSE
var/new_angle_s = rotation_angle + incidence
while(new_angle_s > 180) // Translate to regular projectile degrees
new_angle_s -= 360
while(new_angle_s < -180)
new_angle_s += 360
P.Angle = new_angle_s
return ..()
//DOUBLE
/obj/structure/reflector/double
name = "double sided reflector"
icon = 'icons/obj/structures.dmi'
icon_state = "reflector_double"
desc = "A double sided angled mirror for reflecting lasers. This one does so at a 90 degree angle."
finished = 1
var/static/list/double_rotations = list("[NORTH]" = list("[NORTH]" = WEST, "[EAST]" = SOUTH, "[SOUTH]" = EAST, "[WEST]" = NORTH),
"[EAST]" = list("[NORTH]" = EAST, "[WEST]" = SOUTH, "[SOUTH]" = WEST, "[EAST]" = NORTH),
"[SOUTH]" = list("[NORTH]" = EAST, "[WEST]" = SOUTH, "[SOUTH]" = WEST, "[EAST]" = NORTH),
"[WEST]" = list("[NORTH]" = WEST, "[EAST]" = SOUTH, "[SOUTH]" = EAST, "[WEST]" = NORTH) )
deflector_icon_state = "reflector_double"
desc = "A double sided angled mirror for reflecting laser beams."
density = TRUE
finished = TRUE
buildstacktype = /obj/item/stack/sheet/rglass
buildstackamount = 10
/obj/structure/reflector/double/anchored
anchored = TRUE
/obj/structure/reflector/double/get_reflection(srcdir,pdir)
var/new_dir = double_rotations["[srcdir]"]["[pdir]"]
return new_dir
/obj/structure/reflector/double/mapping
admin = 1
admin = TRUE
anchored = TRUE
/obj/structure/reflector/double/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
var/incidence = get_angle_of_incidence(rotation_angle, P.Angle)
var/incidence_norm = get_angle_of_incidence(rotation_angle, P.Angle, FALSE)
var/invert = ((incidence_norm > -90) && (incidence_norm < 90))
var/new_angle_s = rotation_angle + incidence
if(invert)
new_angle_s += 180
while(new_angle_s > 180) // Translate to regular projectile degrees
new_angle_s -= 360
while(new_angle_s < -180)
new_angle_s += 360
P.Angle = new_angle_s
return ..()
//BOX
/obj/structure/reflector/box
name = "reflector box"
icon = 'icons/obj/structures.dmi'
icon_state = "reflector_box"
desc = "A box with an internal set of mirrors that reflects all laser fire in a single direction."
finished = 1
var/static/list/box_rotations = list("[NORTH]" = list("[SOUTH]" = NORTH, "[EAST]" = NORTH, "[WEST]" = NORTH, "[NORTH]" = NORTH),
"[EAST]" = list("[SOUTH]" = EAST, "[EAST]" = EAST, "[WEST]" = EAST, "[NORTH]" = EAST),
"[SOUTH]" = list("[SOUTH]" = SOUTH, "[EAST]" = SOUTH, "[WEST]" = SOUTH, "[NORTH]" = SOUTH),
"[WEST]" = list("[SOUTH]" = WEST, "[EAST]" = WEST, "[WEST]" = WEST, "[NORTH]" = WEST) )
deflector_icon_state = "reflector_box"
desc = "A box with an internal set of mirrors that reflects all laser beams in a single direction."
density = TRUE
finished = TRUE
buildstacktype = /obj/item/stack/sheet/mineral/diamond
buildstackamount = 1
/obj/structure/reflector/box/anchored
anchored = TRUE
/obj/structure/reflector/box/get_reflection(srcdir,pdir)
var/new_dir = box_rotations["[srcdir]"]["[pdir]"]
return new_dir
/obj/structure/reflector/box/mapping
admin = 1
admin = TRUE
anchored = TRUE
/obj/structure/reflector/box/auto_reflect(obj/item/projectile/P)
P.Angle = rotation_angle
return ..()
/obj/structure/reflector/ex_act()
if(admin)
return
else
..()
return ..()
/obj/structure/reflector/dir_map_to_angle(dir)
return dir2angle(dir)
/obj/structure/reflector/singularity_act()
if(admin)
return
else
..()
return ..()
+2 -1
View File
@@ -53,7 +53,8 @@ FLOOR SAFES
if(tumbler_2_pos == tumbler_2_open)
to_chat(user, "<span class='italics'>You hear a [pick("tink", "krink", "plink")] from [src].</span>")
if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open)
if(user) visible_message("<i><b>[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!</b></i>")
if(user)
visible_message("<i><b>[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!</b></i>")
return 1
return 0
+2 -2
View File
@@ -24,7 +24,7 @@
/obj/structure/showcase/fakesec
name = "\improper CentCom security records"
desc = "Used to view and edit personnel's security records"
desc = "Used to view and edit personnel's security records."
icon = 'icons/obj/computer.dmi'
icon_state = "computer"
@@ -98,7 +98,7 @@
/obj/structure/showcase/machinery/signal_decrypter
name = "subsystem signal decrypter"
desc = "A strange machine thats supposedly used to help pick up and decrypt wave signals. "
desc = "A strange machine that's supposedly used to help pick up and decrypt wave signals."
icon = 'icons/obj/machines/telecomms.dmi'
icon_state = "processor"
+5 -1
View File
@@ -8,6 +8,10 @@
armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50)
var/buildable_sign = 1 //unwrenchable and modifiable
/obj/structure/sign/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION) // Since this is on a wall if it becomes irradiated it will smuggle the radiation past the wall
/obj/structure/sign/basic
name = "blank sign"
desc = "How can signs be real if our eyes aren't real?"
@@ -213,7 +217,7 @@
/obj/structure/sign/kiddieplaque
name = "AI developers plaque"
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\""
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"."
icon_state = "kiddieplaque"
/obj/structure/sign/kiddieplaque/badger
+2 -2
View File
@@ -131,7 +131,7 @@
if(!active)
if(world.time > last_event+15)
active = 1
radiation_pulse(get_turf(src), 3, 3, 12, 0)
radiation_pulse(src, 30)
last_event = world.time
active = null
return
@@ -244,7 +244,7 @@
/obj/structure/statue/diamond
max_integrity = 1000
material_drop_type = /obj/item/stack/sheet/mineral/diamond
desc = "This is a very expensive diamond statue"
desc = "This is a very expensive diamond statue."
/obj/structure/statue/diamond/captain
name = "statue of THE captain."
+10 -11
View File
@@ -41,23 +41,20 @@
/obj/structure/table/proc/deconstruction_hints(mob/user)
to_chat(user, "<span class='notice'>The top is <b>screwed</b> on, but the main <b>bolts</b> are also visible.</span>")
/obj/structure/table/Initialize()
. = ..()
for(var/obj/structure/table/T in src.loc)
if(T != src)
qdel(T)
/obj/structure/table/update_icon()
if(smooth)
queue_smooth(src)
queue_smooth_neighbors(src)
/obj/structure/table/narsie_act()
new /obj/structure/table/wood(src.loc)
var/atom/A = loc
qdel(src)
new /obj/structure/table/wood(A)
/obj/structure/table/ratvar_act()
new /obj/structure/table/reinforced/brass(src.loc)
var/atom/A = loc
qdel(src)
new /obj/structure/table/reinforced/brass(A)
/obj/structure/table/attack_paw(mob/user)
attack_hand(user)
@@ -315,13 +312,15 @@
if(deconstruction_ready)
to_chat(user, "<span class='notice'>You start strengthening the reinforced table...</span>")
if (do_after(user, 50*W.toolspeed, target = src))
if(!src || !WT.isOn()) return
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You strengthen the table.</span>")
deconstruction_ready = 0
else
to_chat(user, "<span class='notice'>You start weakening the reinforced table...</span>")
if (do_after(user, 50*W.toolspeed, target = src))
if(!src || !WT.isOn()) return
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You weaken the table.</span>")
deconstruction_ready = 1
else
@@ -11,9 +11,9 @@
/obj/structure/transit_tube_pod/Initialize()
. = ..()
air_contents.add_gases("o2", "n2")
air_contents.gases["o2"][MOLES] = MOLES_O2STANDARD
air_contents.gases["n2"][MOLES] = MOLES_N2STANDARD
air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrogen)
air_contents.gases[/datum/gas/oxygen][MOLES] = MOLES_O2STANDARD
air_contents.gases[/datum/gas/nitrogen][MOLES] = MOLES_N2STANDARD
air_contents.temperature = T20C
@@ -88,7 +88,8 @@
/obj/structure/transit_tube_pod/Process_Spacemove()
if(moving) //No drifting while moving in the tubes
return 1
else return ..()
else
return ..()
/obj/structure/transit_tube_pod/proc/follow_tube()
set waitfor = 0
@@ -182,4 +183,4 @@
return
/obj/structure/transit_tube_pod/return_temperature()
return air_contents.temperature
return air_contents.temperature
+1 -1
View File
@@ -1,6 +1,6 @@
/obj/structure/trap
name = "IT'S A TRAP"
desc = "stepping on me is a guaranteed bad day"
desc = "Stepping on me is a guaranteed bad day."
icon = 'icons/obj/hand_of_god_structures.dmi'
icon_state = "trap"
density = FALSE
+25 -1
View File
@@ -199,7 +199,15 @@
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/datum/looping_sound/showering/soundloop
/obj/machinery/shower/Initialize()
. = ..()
soundloop = new(list(src), FALSE)
/obj/machinery/shower/Destroy()
QDEL_NULL(soundloop)
return ..()
/obj/effect/mist
name = "mist"
@@ -215,14 +223,17 @@
update_icon()
add_fingerprint(M)
if(on)
soundloop.start()
wash_turf()
for(var/atom/movable/G in loc)
G.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
if(isliving(G))
var/mob/living/L = G
wash_mob(L)
else if(isobj(G)) // Skip the light objects
wash_obj(G)
else
soundloop.stop()
if(isopenturf(loc))
var/turf/open/tile = loc
tile.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1)
@@ -285,6 +296,7 @@
/obj/machinery/shower/proc/wash_obj(obj/O)
O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
. = O.clean_blood()
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
if(isitem(O))
@@ -296,6 +308,7 @@
/obj/machinery/shower/proc/wash_turf()
if(isturf(loc))
var/turf/tile = loc
tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
tile.clean_blood()
for(var/obj/effect/E in tile)
@@ -304,6 +317,7 @@
/obj/machinery/shower/proc/wash_mob(mob/living/L)
L.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
L.wash_cream()
L.ExtinguishMob()
L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
@@ -368,6 +382,15 @@
else
L.clean_blood()
/obj/machinery/shower/proc/contamination_cleanse(atom/movable/thing)
var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive)
if(!healthy_green_glow || QDELETED(healthy_green_glow))
return
var/strength = healthy_green_glow.strength
if(strength <= RAD_BACKGROUND_RADIATION)
qdel(healthy_green_glow)
return
healthy_green_glow.strength = max(strength-1, 0)
/obj/machinery/shower/process()
if(on)
@@ -377,6 +400,7 @@
wash_mob(AM)
else if(isobj(AM))
wash_obj(AM)
contamination_cleanse(AM)
/obj/machinery/shower/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/metal (loc, 3)
@@ -474,7 +498,7 @@
flick("baton_active", src)
var/stunforce = B.stunforce
user.Knockdown(stunforce)
user.stuttering = stunforce
user.stuttering = stunforce/20
B.deductcharge(B.hitcost)
user.visible_message("<span class='warning'>[user] shocks themself while attempting to wash the active [B.name]!</span>", \
"<span class='userdanger'>You unwisely attempt to wash [B] while it's still on.</span>")
@@ -98,7 +98,8 @@
playsound(loc, 'sound/items/welder2.ogg', 50, 1)
if(do_after(user, 40*W.toolspeed, target = src))
if(!src || !WT.isOn()) return
if(!src || !WT.isOn())
return
to_chat(user, "<span class='notice'>You disassemble the windoor assembly.</span>")
var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5)
RG.add_fingerprint(user)
+15 -7
View File
@@ -78,6 +78,10 @@
real_explosion_block = explosion_block
explosion_block = EXPLOSION_BLOCK_PROC
/obj/structure/window/ComponentInitialize()
. = ..()
AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION, TRUE, FALSE)
/obj/structure/window/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
switch(the_rcd.mode)
if(RCD_DECONSTRUCT)
@@ -208,6 +212,7 @@
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
anchored = !anchored
air_update_turf(TRUE)
update_nearby_icons()
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
return
@@ -330,7 +335,6 @@
return FALSE
setDir(target_dir)
air_update_turf(1)
ini_dir = dir
add_fingerprint(usr)
return TRUE
@@ -359,11 +363,9 @@
move_update_air(T)
/obj/structure/window/CanAtmosPass(turf/T)
if(get_dir(loc, T) == dir)
return !density
if(dir == FULLTILE_WINDOW_DIR)
return !density
return 1
if(!anchored || !density)
return TRUE
return !(FULLTILE_WINDOW_DIR == dir || dir == get_dir(loc, T))
//This proc is used to update the icons of nearby windows.
/obj/structure/window/proc/update_nearby_icons()
@@ -432,6 +434,9 @@
explosion_block = 1
glass_type = /obj/item/stack/sheet/rglass
/obj/structure/window/reinforced/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION, TRUE, FALSE)
/obj/structure/window/reinforced/spawner/east
dir = EAST
@@ -455,6 +460,9 @@
explosion_block = 1
glass_type = /obj/item/stack/sheet/plasmaglass
/obj/structure/window/plasma/ComponentInitialize()
AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
/obj/structure/window/plasma/spawner/east
dir = EAST
@@ -640,7 +648,7 @@
/obj/structure/window/reinforced/clockwork/Initialize(mapload, direct)
if(fulltile)
made_glow = TRUE
..()
. = ..()
QDEL_LIST(debris)
var/amount_of_gears = 2
if(fulltile)