From df7386a4ecb05373db9cda470c3d49cd62c44664 Mon Sep 17 00:00:00 2001 From: c0 Date: Fri, 4 Sep 2015 11:22:37 +0300 Subject: [PATCH] Assemblies update --- _maps/RandomZLevels/centcomAway.dmm | 4 +- _maps/RandomZLevels/stationCollision.dmm | 2 +- _maps/RandomZLevels/undergroundoutpost45.dmm | 4 +- .../AsteroidStation/Asteroidstation.dmm | 16 +- _maps/map_files/AsteroidStation/z2.dmm | 2 +- .../MetaStation/MetaStation.v41G.dmm | 14 +- _maps/map_files/MetaStation/z2.dmm | 2 +- _maps/map_files/MetaStation/z4.dmm | 2 +- _maps/map_files/MiniStation/MiniStation.dmm | 4 +- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 28 +- _maps/map_files/generic/z2.dmm | 2 +- _maps/map_files/generic/z4.dmm | 2 +- code/datums/mind.dm | 13 +- code/datums/wires/wires.dm | 24 +- code/game/gamemodes/revolution/revolution.dm | 2 +- code/game/gamemodes/sandbox/h_sandbox.dm | 2 +- code/game/jobs/job/security.dm | 4 +- code/game/machinery/doors/airlock.dm | 6 +- code/game/machinery/flasher.dm | 10 +- code/game/machinery/rechargestation.dm | 10 +- code/game/machinery/syndicatebomb.dm | 5 +- code/game/machinery/vending.dm | 7 +- code/game/objects/items/apc_frame.dm | 1 + code/game/objects/items/devices/pizza_bomb.dm | 2 +- code/game/objects/items/robot/robot_parts.dm | 10 +- code/game/objects/items/weapons/RCD.dm | 9 +- code/game/objects/items/weapons/explosives.dm | 2 +- .../objects/items/weapons/storage/belt.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 12 +- .../objects/items/weapons/storage/storage.dm | 3 + .../closets/secure/engineering.dm | 2 +- .../crates_lockers/closets/secure/medical.dm | 2 +- .../crates_lockers/closets/secure/misc.dm | 2 +- .../closets/secure/scientist.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 4 +- code/game/turfs/turf.dm | 3 + .../devices => modules/assembly}/flash.dm | 367 ++++++++++-------- code/modules/assembly/health.dm | 105 +++++ code/modules/assembly/holder.dm | 13 +- code/modules/assembly/mousetrap.dm | 1 + code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/suits/jobs.dm | 2 +- code/modules/mining/ores_coins.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 3 + .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/power/apc.dm | 4 +- code/modules/recycling/disposal-unit.dm | 3 + .../research/designs/autolathe_designs.dm | 8 + .../research/designs/medical_designs.dm | 2 +- icons/obj/assemblies/new_assemblies.dmi | Bin 11599 -> 11673 bytes icons/obj/device.dmi | Bin 28375 -> 27030 bytes tgstation.dme | 3 +- 53 files changed, 459 insertions(+), 283 deletions(-) rename code/{game/objects/items/devices => modules/assembly}/flash.dm (67%) create mode 100644 code/modules/assembly/health.dm diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 8148d474bcd..cca944ad45b 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -154,7 +154,7 @@ "cX" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/awaymission/centcomAway/hangar) "cY" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/awaymission/centcomAway/general) "cZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/centcomAway/maint) -"da" = (/obj/structure/table,/obj/item/device/flash,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/awaymission/centcomAway/hangar) +"da" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/awaymission/centcomAway/hangar) "db" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/awaymission/centcomAway/hangar) "dc" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "dd" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/hangar) @@ -484,7 +484,7 @@ "jp" = (/obj/machinery/computer/card,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/general) "jq" = (/obj/item/weapon/stamp,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/awaymission/centcomAway/general) "jr" = (/obj/structure/table,/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/centcomAway/hangar) -"js" = (/obj/structure/table,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/centcomAway/hangar) +"js" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/centcomAway/hangar) "jt" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/centcomAway/hangar) "ju" = (/obj/structure/table,/obj/item/device/mmi/radio_enabled,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/centcomAway/hangar) "jv" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/centcomAway/hangar) diff --git a/_maps/RandomZLevels/stationCollision.dmm b/_maps/RandomZLevels/stationCollision.dmm index 0bbc955da76..06b3e41b421 100644 --- a/_maps/RandomZLevels/stationCollision.dmm +++ b/_maps/RandomZLevels/stationCollision.dmm @@ -400,7 +400,7 @@ "hJ" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock) "hK" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "hL" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) -"hM" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) +"hM" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/awaymission/arrivalblock) "hN" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock) "hO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/decal/remains/human,/turf/simulated/floor/plasteel,/area/awaymission/midblock) "hP" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/plasteel,/area/awaymission/midblock) diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index 9663788b647..ab6550ade5c 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -195,7 +195,7 @@ "dM" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "green"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dN" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "201"},/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/mask/bandana,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) -"dP" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "201"},/obj/item/weapon/storage/belt/security,/obj/item/device/flash/handheld,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) +"dP" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "201"},/obj/item/weapon/storage/belt/security,/obj/item/device/assembly/flash/handheld,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/structure/stool/bed/chair,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) "dS" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access_txt = "201"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"}) @@ -789,7 +789,7 @@ "pi" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -27},/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "pj" = (/obj/structure/filingcabinet,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "pk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/button/door{desc = "A remote control-switch whichs locks the research division down in the event of a biohazard leak or contamination."; id = "UO45_biohazard"; name = "Biohazard Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "201"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) -"pl" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "201"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash/handheld,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) +"pl" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "201"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/flash/handheld,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "pm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"}) "pn" = (/obj/structure/flora/kirbyplants{layer = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 10; heat_capacity = 1e+006; icon_state = "neutral"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "po" = (/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "neutralcorner"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) diff --git a/_maps/map_files/AsteroidStation/Asteroidstation.dmm b/_maps/map_files/AsteroidStation/Asteroidstation.dmm index 29b348f4ae3..7096a7e099c 100644 --- a/_maps/map_files/AsteroidStation/Asteroidstation.dmm +++ b/_maps/map_files/AsteroidStation/Asteroidstation.dmm @@ -247,7 +247,7 @@ "aeM" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint{name = "Customs Desk"}) "aeN" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint{name = "Customs Desk"}) "aeO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint{name = "Customs Desk"}) -"aeP" = (/obj/item/device/flash/handheld,/obj/item/weapon/crowbar/red,/obj/structure/table/reinforced,/obj/machinery/light_switch{dir = 4; pixel_x = 22},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint{name = "Customs Desk"}) +"aeP" = (/obj/item/device/assembly/flash/handheld,/obj/item/weapon/crowbar/red,/obj/structure/table/reinforced,/obj/machinery/light_switch{dir = 4; pixel_x = 22},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint{name = "Customs Desk"}) "aeQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore{name = "Fore Hallway"}) "aeR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore{name = "Fore Hallway"}) "aeS" = (/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/fore{name = "Fore Hallway"}) @@ -534,7 +534,7 @@ "akn" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/color/yellow,/obj/item/device/multitool,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/storage/tech) "ako" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/light_switch{pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/storage/tech) "akp" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/healthanalyzer,/obj/machinery/requests_console{department = "Tech storage"; name = "Tech Storage Requests Console"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/storage/tech) -"akq" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/storage/tech) +"akq" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/storage/tech) "akr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/fore{name = "Fore Hallway"}) "aks" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore{name = "Fore Hallway"}) "akt" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Fore Hallway APC"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/fore{name = "Fore Hallway"}) @@ -1771,7 +1771,7 @@ "aIc" = (/turf/simulated/wall/r_wall,/area/security/prison) "aId" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/security/main) "aIe" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/main) -"aIf" = (/obj/structure/table/wood,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel,/area/security/main) +"aIf" = (/obj/structure/table/wood,/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/security/main) "aIg" = (/obj/structure/table/wood,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/security/main) "aIh" = (/obj/structure/table/wood,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/plasteel,/area/security/main) "aIi" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/main) @@ -2924,15 +2924,15 @@ "bel" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bem" = (/obj/machinery/button/door{id = "bridge blast"; name = "Bridge Blast Door Control"; pixel_x = -1; pixel_y = -24; req_access_txt = "19"},/turf/simulated/floor/wood,/area/crew_quarters/heads) "ben" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_x = -3; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/heads) -"beo" = (/obj/structure/table/wood,/obj/item/device/flash/handheld,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/wood,/area/crew_quarters/heads) +"beo" = (/obj/structure/table/wood,/obj/item/device/assembly/flash/handheld,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bep" = (/obj/structure/table/wood,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel Requests Console"; pixel_y = -30},/turf/simulated/floor/wood,/area/crew_quarters/heads) "beq" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/crew_quarters/heads) "ber" = (/obj/structure/closet/secure_closet/hop,/obj/item/clothing/suit/ianshirt,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bes" = (/obj/machinery/light{dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/plasteel,/area/bridge) "bet" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "bluecorner"},/area/bridge) "beu" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/button/door{id = "evashutter"; name = "E.V.A. Storage Shutter Control"; pixel_y = -24; req_access_txt = "19"},/obj/machinery/button/door{id = "bridgeshut"; name = "Bridge Shutters Control"; pixel_y = -34; req_access_txt = "19"},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 6},/area/bridge) -"bev" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/bridge) -"bew" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/bridge) +"bev" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/bridge) +"bew" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/bridge) "bex" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/mine/explored) "bey" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 23},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/mine/explored) "bez" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel{dir = 5; icon_state = "brown"},/area/security/prison) @@ -3999,7 +3999,7 @@ "byU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "byV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "byW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/assembly/assembly_line) -"byX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/rack,/obj/item/device/flash/handheld,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/assembly/assembly_line) +"byX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/rack,/obj/item/device/assembly/flash/handheld,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/assembly/assembly_line) "byY" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/rack,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/assembly/assembly_line) "byZ" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/assembly/assembly_line) "bza" = (/obj/machinery/light{dir = 1},/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellow"},/area/assembly/assembly_line) @@ -4299,7 +4299,7 @@ "bEI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "bEJ" = (/obj/structure/table/glass,/obj/item/clothing/glasses/welding,/obj/item/weapon/crowbar,/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "bEK" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) -"bEL" = (/obj/structure/table/glass,/obj/item/device/flash/handheld,/obj/item/stack/cable_coil,/obj/item/borg/upgrade/rename,/turf/simulated/floor/plasteel,/area/assembly/assembly_line) +"bEL" = (/obj/structure/table/glass,/obj/item/device/assembly/flash/handheld,/obj/item/stack/cable_coil,/obj/item/borg/upgrade/rename,/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "bEM" = (/obj/structure/table/glass,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "bEN" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) "bEO" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table/glass,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel,/area/assembly/assembly_line) diff --git a/_maps/map_files/AsteroidStation/z2.dmm b/_maps/map_files/AsteroidStation/z2.dmm index 8294dd9d383..e36823ef654 100644 --- a/_maps/map_files/AsteroidStation/z2.dmm +++ b/_maps/map_files/AsteroidStation/z2.dmm @@ -196,7 +196,7 @@ "dN" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dO" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dP" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) -"dQ" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dQ" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dR" = (/turf/indestructible/fakedoor{name = "Thunderdome Admin"},/area/tdome/tdomeadmin) "dS" = (/obj/structure/table,/obj/machinery/button/door{id = "thunderdomehea"; name = "Heavy Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) "dT" = (/obj/structure/table,/obj/machinery/button/door{id = "thunderdome"; name = "Main Blast Doors Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) diff --git a/_maps/map_files/MetaStation/MetaStation.v41G.dmm b/_maps/map_files/MetaStation/MetaStation.v41G.dmm index 9c69fa133dc..43e899f21c2 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41G.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41G.dmm @@ -153,7 +153,7 @@ "acW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport) "acX" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport) "acY" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/morphine{pixel_x = -4; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate{name = "chloral hydrate bottle"},/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 6; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/morphine{pixel_x = 5; pixel_y = 1},/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/bottle/facid{name = "fluorosulfuric acid bottle"; pixel_x = -3; pixel_y = 6},/obj/item/weapon/reagent_containers/syringe{pixel_y = 5},/obj/item/weapon/reagent_containers/dropper,/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 4; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = -24; req_access = "0"; req_one_access = "0"},/obj/machinery/button/ignition{id = "executionburn"; name = "Justice Ignition Switch"; pixel_x = -25; pixel_y = 36},/obj/machinery/button/door{id = "executionfireblast"; name = "Justice Area Lockdown"; pixel_x = -25; pixel_y = 26; req_access_txt = "2"},/obj/item/device/assembly/signaler{pixel_x = -3; pixel_y = 2},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/machinery/button/flasher{id = "justiceflash"; name = "Justice Flash Control"; pixel_x = -36; pixel_y = 36; req_access_txt = "1"},/obj/machinery/button/door{dir = 2; id = "SecJusticeChamber"; layer = 4; name = "Justice Vent Control"; pixel_x = -36; pixel_y = 26; req_access_txt = "3"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"},/area/prison/solitary{name = "Prisoner Education Chamber"}) -"acZ" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/device/taperecorder{pixel_x = -3; pixel_y = 0},/obj/item/weapon/storage/fancy/cigarettes,/obj/item/device/flash/handheld,/obj/item/weapon/reagent_containers/spray/pepper,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"},/area/prison/solitary{name = "Prisoner Education Chamber"}) +"acZ" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/device/taperecorder{pixel_x = -3; pixel_y = 0},/obj/item/weapon/storage/fancy/cigarettes,/obj/item/device/assembly/flash/handheld,/obj/item/weapon/reagent_containers/spray/pepper,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "ada" = (/obj/machinery/atmospherics/pipe/simple/general/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "adb" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "adc" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Prisoner Education Chamber APC"; pixel_y = 24},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/injection{name = "educational injections"; pixel_x = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"},/area/prison/solitary{name = "Prisoner Education Chamber"}) @@ -347,7 +347,7 @@ "agI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "agJ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/auxsolarport) "agK" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/weapon/folder/white{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison) -"agL" = (/obj/structure/rack,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash/handheld,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison) +"agL" = (/obj/structure/rack,/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/flash/handheld,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison) "agM" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = 4; pixel_y = 2},/obj/item/weapon/pen,/obj/item/weapon/storage/box/prisoner,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison) "agN" = (/obj/structure/closet/secure_closet/brig{anchored = 1},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison) "agO" = (/obj/structure/closet/secure_closet/brig{anchored = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/prison) @@ -834,7 +834,7 @@ "aqb" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel,/area/security/main) "aqc" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor/plasteel,/area/security/main) "aqd" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/security/main) -"aqe" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel,/area/security/main) +"aqe" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/security/main) "aqf" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/security/main) "aqg" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel,/area/security/main) "aqh" = (/obj/effect/landmark/start{name = "Security Officer"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Security - Office - Starboard"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/main) @@ -2685,7 +2685,7 @@ "aZG" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/stationalert{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) "aZH" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/secure_data{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/security{pixel_x = 1; pixel_y = -1},/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) "aZI" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/cloning{pixel_x = 0},/obj/item/weapon/circuitboard/med_data{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/clonescanner,/obj/item/weapon/circuitboard/clonepod,/obj/item/weapon/circuitboard/scan_consolenew,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) -"aZJ" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/machinery/light/small{dir = 1},/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) +"aZJ" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/machinery/light/small{dir = 1},/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) "aZK" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/tech) "aZL" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -29},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "aZM" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) @@ -3126,7 +3126,7 @@ "bif" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/shuttle/arrival) "big" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; dir = 8},/turf/simulated/floor/plating,/area/shuttle/arrival) "bih" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) -"bii" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet,/obj/item/weapon/crowbar,/obj/item/device/flash/handheld,/obj/item/device/radio,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint2{name = "Customs"}) +"bii" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet,/obj/item/weapon/crowbar,/obj/item/device/assembly/flash/handheld,/obj/item/device/radio,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/checkpoint2{name = "Customs"}) "bij" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint2{name = "Customs"}) "bik" = (/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/table/reinforced,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint2{name = "Customs"}) "bil" = (/obj/item/weapon/paper,/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{dir = 2; name = "Arrivals Security Checkpoint"; pixel_y = -8; req_access_txt = "1"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/checkpoint2{name = "Customs"}) @@ -3543,7 +3543,7 @@ "bqg" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) "bqh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=4-Customs"; location = "3-Central-Port"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central) "bqi" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor/preopen{id = "hop"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/crew_quarters/heads) -"bqj" = (/obj/item/weapon/folder/blue,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/wood,/obj/item/device/flash/handheld,/turf/simulated/floor/wood,/area/crew_quarters/heads) +"bqj" = (/obj/item/weapon/folder/blue,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/wood,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bqk" = (/obj/effect/landmark/start{name = "Head of Personnel"},/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/heads) "bql" = (/obj/machinery/newscaster/security_unit{pixel_x = 32; pixel_y = 0},/obj/machinery/computer/security/mining,/turf/simulated/floor/wood,/area/crew_quarters/heads) "bqm" = (/obj/machinery/power/apc{cell_type = 10000; dir = 8; name = "Bridge APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable/yellow,/obj/machinery/camera{c_tag = "Bridge - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) @@ -7096,7 +7096,7 @@ "cGx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics) "cGy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/assembly/robotics) "cGz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/assembly/robotics) -"cGA" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/assembly/robotics) +"cGA" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/assembly/robotics) "cGB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "cGC" = (/obj/structure/lattice,/turf/space,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cGD" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing{name = "\improper Toxins Lab"}) diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index 9b6fbd72fe9..46c399499b6 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -158,7 +158,7 @@ "db" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) "dc" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) "dd" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"de" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) +"de" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) "df" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) "dg" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dh" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm index 0289d8b49a4..ea77a4e1da7 100644 --- a/_maps/map_files/MetaStation/z4.dmm +++ b/_maps/map_files/MetaStation/z4.dmm @@ -320,7 +320,7 @@ "gh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "gi" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) "gj" = (/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) -"gk" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"gk" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "gl" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "gm" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "gn" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index 7ec490939e4..980025226bb 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -39,7 +39,7 @@ "aM" = (/obj/structure/fireaxecabinet{pixel_x = 32},/turf/simulated/floor/plasteel,/area/bridge) "aN" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/bridge) "aO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/bridge) -"aP" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/briefcase,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor/plasteel,/area/bridge) +"aP" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/briefcase,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/bridge) "aQ" = (/obj/structure/stool/bed/chair/comfy/black{dir = 2},/obj/effect/landmark/start{name = "Captain"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/button/door{id = "bridge blast"; name = "Bridge Blast Door Control"; pixel_x = 29; pixel_y = 6; req_access_txt = "19"},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 28},/turf/simulated/floor/plasteel,/area/bridge) "aR" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/plasteel,/area/bridge) "aS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/bridge) @@ -367,7 +367,7 @@ "hc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/crate,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage) "hd" = (/obj/machinery/atmospherics/pipe/simple{dir = 2},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_research{name = "Server Room"; req_access_txt = "47"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/research{name = "Research Division"}) "he" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"hf" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/timer,/obj/item/device/flash,/turf/simulated/floor/plasteel,/area/security/brig) +"hf" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/assembly/timer,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel,/area/security/brig) "hg" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/plasteel,/area/security/brig) "hh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel,/area/security/brig) "hi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor/plasteel,/area/security/brig) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 9d9f5317db8..47a6fa1e78c 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -1452,7 +1452,7 @@ pixel_x = -3; pixel_y = 0 }, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, /obj/item/weapon/reagent_containers/spray/pepper, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -3167,7 +3167,7 @@ /area/security/main) "agi" = ( /obj/structure/table, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/simulated/floor/plasteel, /area/security/main) @@ -15136,7 +15136,7 @@ "aEt" = ( /obj/item/device/radio/off, /obj/item/weapon/crowbar, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "red"; @@ -20724,8 +20724,8 @@ /area/storage/tools) "aQS" = ( /obj/structure/table/reinforced, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, /turf/simulated/floor/plasteel, /area/bridge) "aQT" = ( @@ -29762,11 +29762,11 @@ pixel_y = 0 }, /obj/structure/table, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -30526,8 +30526,8 @@ amount = 10 }, /obj/item/stack/cable_coil, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, /turf/simulated/floor/plasteel, /area/assembly/robotics) "blV" = ( @@ -39257,8 +39257,8 @@ pixel_x = 1; pixel_y = 5 }, -/obj/item/device/flash/handheld, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, /obj/machinery/ai_status_display{ pixel_x = -32; pixel_y = 0 diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 7756f32ef39..4d07dc41b64 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -1060,7 +1060,7 @@ /area/centcom/evac) "df" = ( /obj/structure/table, -/obj/item/device/flash/handheld, +/obj/item/device/assembly/flash/handheld, /turf/simulated/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, diff --git a/_maps/map_files/generic/z4.dmm b/_maps/map_files/generic/z4.dmm index e1371b05dde..1e023fe0e23 100644 --- a/_maps/map_files/generic/z4.dmm +++ b/_maps/map_files/generic/z4.dmm @@ -856,7 +856,7 @@ "qx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/solar_control,/turf/simulated/floor/plasteel,/area/derelict/bridge/ai_upload) "qy" = (/obj/item/ammo_casing/a357{pixel_x = -5},/obj/item/ammo_casing/a357{pixel_x = 5; pixel_y = 6},/obj/item/ammo_casing/a357,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary) "qz" = (/obj/machinery/porta_turret_cover,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"qA" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) +"qA" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access) "qB" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 8; name = "8maintenance loot spawner"},/turf/simulated/floor/plating/airless,/area/derelict/atmospherics) "qC" = (/obj/item/weapon/storage/bag/ore,/turf/simulated/floor/mineral/bananium/airless,/area/space) "qD" = (/obj/item/weapon/shovel,/turf/simulated/floor/mineral/bananium/airless,/area/space) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1fd4258bcea..f65a339b6a2 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -256,9 +256,9 @@ text += "
Flash: give" var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L + var/obj/item/device/assembly/flash/flash = locate() in L if (flash) - if(!flash.broken) + if(!flash.crit_fail) text += "|take." else text += "|take|repair." @@ -807,18 +807,19 @@ if("takeflash") var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L + var/obj/item/device/assembly/flash/flash = locate() in L if (!flash) usr << "Deleting flash failed!" qdel(flash) if("repairflash") var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L + var/obj/item/device/assembly/flash/flash = locate() in L if (!flash) usr << "Repairing flash failed!" else - flash.broken = 0 + flash.crit_fail = 0 + flash.update_icon() @@ -1372,7 +1373,7 @@ ticker.mode.greet_revolutionary(src,0) var/list/L = current.get_contents() - var/obj/item/device/flash/flash = locate() in L + var/obj/item/device/assembly/flash/flash = locate() in L qdel(flash) take_uplink() var/fail = 0 diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 5e7be34941a..d8f3cefe45c 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -10,7 +10,6 @@ var/list/same_wires = list() var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", "gold", "gray", "cyan", "navy", "purple", "pink") /datum/wires - var/random = 0 // Will the wires be different for every single instance. var/atom/holder = null // The holder var/holder_type = null // The holder type; used to make sure that the holder is the correct type. @@ -48,6 +47,7 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", /datum/wires/Destroy() holder = null + signallers = list() return ..() /datum/wires/proc/GenerateWires() @@ -68,13 +68,33 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", src.wires[colour] = index //wires = shuffle(wires) +/datum/wires/proc/IsInteractionTool(obj/item/I) + if(istype(I, /obj/item/device/multitool)) + return 1 + + if(istype(I, /obj/item/weapon/wirecutters)) + return 1 + + if(istype(I, /obj/item/device/assembly)) + var/obj/item/device/assembly/A = I + if(A.attachable) + return 1 + + return 0 + /datum/wires/proc/Interact(mob/living/user) - var/html = null if(holder && CanUse(user)) html = GetInteractWindow() if(html) + if(user.machine != holder) + for(var/A in signallers) + if(istype(signallers[A], /obj/item)) + var/obj/item/I = signallers[A] + if(I.on_found(user)) + return + user.set_machine(holder) else user.unset_machine() diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 0da1f7b219b..882accb90c0 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -126,7 +126,7 @@ mob.dna.remove_mutation(CLOWNMUT) - var/obj/item/device/flash/T = new(mob) + var/obj/item/device/assembly/flash/T = new(mob) var/obj/item/toy/crayon/spraycan/R = new(mob) var/obj/item/clothing/glasses/hud/security/chameleon/C = new(mob) diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 41e3290920b..f07cfcee824 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -212,7 +212,7 @@ var/hsboxspawn = 1 if("hsbrcd") if(!hsboxspawn) return - new/obj/item/weapon/rcd{matter=30;canRturf=1}(usr.loc) + new/obj/item/weapon/rcd/combat(usr.loc) // // New sandbox airlock maker diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 616c05e9a05..24e2af7988c 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -84,7 +84,7 @@ Warden H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/device/assembly/flash/handheld(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) @@ -175,7 +175,7 @@ Security Officer H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/sec(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/device/assembly/flash/handheld(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 06280cdb9ab..c7a9ae00c1c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -783,11 +783,7 @@ About the new airlock wires panel: src.p_open = !( src.p_open ) user << "You [p_open ? "open":"close"] the maintenance panel of the airlock." src.update_icon() - else if(istype(C, /obj/item/weapon/wirecutters)) - return src.attack_hand(user) - else if(istype(C, /obj/item/device/multitool)) - return src.attack_hand(user) - else if(istype(C, /obj/item/device/assembly/signaler)) + else if(wires.IsInteractionTool(C)) return src.attack_hand(user) else if(istype(C, /obj/item/weapon/pai_cable)) var/obj/item/weapon/pai_cable/cable = C diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index e48b7be8c84..407db623ab9 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -5,7 +5,7 @@ desc = "A wall-mounted flashbulb device." icon = 'icons/obj/stationobjs.dmi' icon_state = "mflash1" - var/obj/item/device/flash/handheld/bulb = null + var/obj/item/device/assembly/flash/handheld/bulb = null var/id = null var/range = 2 //this is roughly the size of brig cell var/last_flash = 0 //Don't want it getting spammed like regular flashes @@ -24,12 +24,12 @@ /obj/machinery/flasher/New() ..() // ..() is EXTREMELY IMPORTANT, never forget to add it - bulb = new /obj/item/device/flash/handheld(src) + bulb = new /obj/item/device/assembly/flash/handheld(src) /obj/machinery/flasher/power_change() if (powered() && anchored && bulb) stat &= ~NOPOWER - if(bulb.broken) + if(bulb.crit_fail) icon_state = "[base_state]1-p" else icon_state = "[base_state]1" @@ -49,7 +49,7 @@ bulb = null power_change() - else if (istype(W, /obj/item/device/flash/handheld)) + else if (istype(W, /obj/item/device/assembly/flash/handheld)) if (!bulb) if(!user.drop_item()) return @@ -73,7 +73,7 @@ if (!powered() || !bulb) return - if (bulb.broken || (last_flash && world.time < src.last_flash + 150)) + if (bulb.crit_fail || (last_flash && world.time < src.last_flash + 150)) return if(!bulb.flash_recharge(30)) //Bulb can burn out if it's used too often too fast diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 49245b20148..48962ff51a7 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -146,12 +146,12 @@ st.energy = min(st.max_energy, st.energy + coeff * st.recharge_rate) for(var/obj/O in um) //General - if(istype(O,/obj/item/device/flash)) - var/obj/item/device/flash/F = O - if(F.broken) - F.broken = 0 + if(istype(O,/obj/item/device/assembly/flash)) + var/obj/item/device/assembly/flash/F = O + if(F.crit_fail) + F.crit_fail = 0 F.times_used = 0 - F.icon_state = "flash" + F.update_icon() // Security if(istype(O,/obj/item/weapon/gun/energy/gun/advtaser/cyborg)) var/obj/item/weapon/gun/energy/gun/advtaser/cyborg/T = O diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index aae5224f0a6..b72707db1f2 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -76,9 +76,8 @@ update_icon() user << "You [open_panel ? "open" : "close"] the wire panel." - else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) - if(open_panel) - wires.Interact(user) + else if(wires.IsInteractionTool(I) && open_panel) + wires.Interact(user) else if(istype(I, /obj/item/weapon/crowbar)) if(open_panel && isWireCut(WIRE_BOOM) && isWireCut(WIRE_UNBOLT) && isWireCut(WIRE_DELAY) && isWireCut(WIRE_PROCEED) && isWireCut(WIRE_ACTIVATE)) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 9bcbb941b7e..212fb8b403b 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -654,7 +654,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/assist products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) - contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2) + contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" /obj/machinery/vending/coffee @@ -773,6 +773,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6, /obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6, /obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6) + contraband = list(/obj/item/device/assembly/health = 3) /obj/machinery/vending/wallmed name = "\improper NanoMed" @@ -797,7 +798,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "sec" icon_deny = "sec-deny" req_access_txt = "1" - products = list(/obj/item/weapon/restraints/handcuffs = 8,/obj/item/weapon/restraints/handcuffs/cable/zipties = 10,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash/handheld = 5, + products = list(/obj/item/weapon/restraints/handcuffs = 8,/obj/item/weapon/restraints/handcuffs/cable/zipties = 10,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/assembly/flash/handheld = 5, /obj/item/weapon/reagent_containers/food/snacks/donut = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4) contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2) premium = list(/obj/item/weapon/coin/antagtoken = 1) @@ -937,7 +938,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "robotics" icon_deny = "robotics-deny" req_access_txt = "29" - products = list(/obj/item/clothing/suit/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/flash/handheld = 4, + products = list(/obj/item/clothing/suit/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/assembly/flash/handheld = 4, /obj/item/weapon/stock_parts/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3, /obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/internals/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5, /obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5) diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index b86ddc77b64..c0fad8ee6fb 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -66,6 +66,7 @@ icon = 'icons/obj/apc_repair.dmi' icon_state = "apc_frame" result_path = /obj/machinery/power/apc + inverse = 1 /obj/item/wallframe/apc/try_build(turf/on_wall) diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm index 09f6046f96a..1e6d2a5244b 100644 --- a/code/game/objects/items/devices/pizza_bomb.dm +++ b/code/game/objects/items/devices/pizza_bomb.dm @@ -89,7 +89,7 @@ else attack_hand(user) return - if(istype(I, /obj/item/device/multitool)) + if(wires.IsInteractionTool(I)) attack_hand(user) return diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 213dab28ded..7e917325b84 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -37,8 +37,8 @@ name = "cyborg head" desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." icon_state = "head" - var/obj/item/device/flash/handheld/flash1 = null - var/obj/item/device/flash/handheld/flash2 = null + var/obj/item/device/assembly/flash/handheld/flash1 = null + var/obj/item/device/assembly/flash/handheld/flash2 = null /obj/item/robot_parts/robot_suit name = "cyborg endoskeleton" @@ -329,12 +329,12 @@ /obj/item/robot_parts/head/attackby(obj/item/W, mob/user, params) ..() - if(istype(W, /obj/item/device/flash/handheld)) - var/obj/item/device/flash/handheld/F = W + if(istype(W, /obj/item/device/assembly/flash/handheld)) + var/obj/item/device/assembly/flash/handheld/F = W if(src.flash1 && src.flash2) user << "You have already inserted the eyes!" return - else if(F.broken) + else if(F.crit_fail) user << "You can't use a broken flash!" return else diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 95bac4c181c..63baee79c37 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -508,7 +508,7 @@ RCD matter = 160 /obj/item/weapon/rcd/combat - name = "combat RCD" + name = "industrial RCD" max_matter = 500 matter = 500 canRturf = 1 @@ -519,12 +519,11 @@ RCD icon = 'icons/obj/ammo.dmi' icon_state = "rcd" item_state = "rcdammo" - opacity = 0 - density = 0 - anchored = 0.0 - origin_tech = "materials=2" + origin_tech = "materials=3" materials = list(MAT_METAL=3000, MAT_GLASS=2000) var/ammoamt = 40 /obj/item/weapon/rcd_ammo/large + origin_tech = "materials=4" + materials = list(MAT_METAL=12000, MAT_GLASS=8000) ammoamt = 160 \ No newline at end of file diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 653a40406d4..1046feaaa06 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -53,7 +53,7 @@ if(istype(I, /obj/item/weapon/screwdriver)) open_panel = !open_panel user << "You [open_panel ? "open" : "close"] the wire panel." - else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler)) + else if(wires.IsInteractionTool(I)) wires.Interact(user) else ..() diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 25bbb762e03..eb1c9b9566b 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -94,7 +94,7 @@ /obj/item/weapon/grenade/chem_grenade/teargas, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/restraints/handcuffs, - /obj/item/device/flash/handheld, + /obj/item/device/assembly/flash/handheld, /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 8d817f95c4f..41ff286953f 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -209,12 +209,12 @@ /obj/item/weapon/storage/box/flashes/New() ..() - new /obj/item/device/flash/handheld(src) - new /obj/item/device/flash/handheld(src) - new /obj/item/device/flash/handheld(src) - new /obj/item/device/flash/handheld(src) - new /obj/item/device/flash/handheld(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) /obj/item/weapon/storage/box/teargas name = "box of tear gas grenades (WARNING)" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index ec973ab94b0..bc0a1f2279f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -73,6 +73,9 @@ //Object behaviour on storage dump /obj/item/weapon/storage/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) for(var/obj/item/I in src_object) + if(user.s_active != src_object) + if(I.on_found(user)) + return if(can_be_inserted(I,0,user)) src_object.remove_from_storage(I, src) orient2hud(user) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 0ae8d3f8177..c03090a5119 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -21,7 +21,7 @@ new /obj/item/tapeproj/engineering(src) new /obj/item/clothing/mask/gas(src) new /obj/item/device/multitool(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) new /obj/item/clothing/glasses/meson/engine(src) /obj/structure/closet/secure_closet/engineering_electrical diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 4552fb78ff5..59c42451189 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -70,7 +70,7 @@ new /obj/item/weapon/defibrillator/compact/loaded(src) new /obj/item/clothing/gloves/color/latex/nitrile(src) new /obj/item/weapon/storage/belt/medical(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) new /obj/item/weapon/reagent_containers/hypospray/CMO(src) new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm index a52bcd649ec..21a126d07db 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm @@ -9,7 +9,7 @@ new /obj/item/weapon/storage/firstaid/regular(src) new /obj/item/weapon/storage/box/handcuffs(src) new /obj/item/device/aicard(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) if(prob(50)) new /obj/item/ammo_box/magazine/m50(src) new /obj/item/ammo_box/magazine/m50(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index b5bd0b7df19..262485abb9f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -19,5 +19,5 @@ new /obj/item/weapon/tank/internals/air(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/suit/armor/reactive(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) new /obj/item/device/laser_pointer(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 354038dfedb..effd0e8cdc6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -40,7 +40,7 @@ new /obj/item/weapon/storage/box/ids(src) new /obj/item/device/megaphone/command(src) new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/weapon/mining_voucher(src) new /obj/item/weapon/gun/energy/gun(src) @@ -108,7 +108,7 @@ new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec/alt(src) new /obj/item/weapon/reagent_containers/spray/pepper(src) - new /obj/item/device/flash/handheld(src) + new /obj/item/device/assembly/flash/handheld(src) new /obj/item/weapon/grenade/flashbang(src) new /obj/item/weapon/storage/belt/security/full(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 755f5b4fa49..3db0aa0ae76 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -197,6 +197,9 @@ /turf/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) for(var/obj/item/I in src_object) + if(user.s_active != src_object) + if(I.on_found(user)) + return src_object.remove_from_storage(I, src) //No check needed, put everything inside return 1 diff --git a/code/game/objects/items/devices/flash.dm b/code/modules/assembly/flash.dm similarity index 67% rename from code/game/objects/items/devices/flash.dm rename to code/modules/assembly/flash.dm index 735e48dbf6b..f56bbac901a 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/modules/assembly/flash.dm @@ -1,170 +1,197 @@ -/obj/item/device/flash - name = "flash" - desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production." - icon_state = "flash" - item_state = "flashtool" - throwforce = 0 - w_class = 1 - throw_speed = 3 - throw_range = 7 - flags = CONDUCT - origin_tech = "magnets=2;combat=1" - - var/times_used = 0 //Number of times it's been used. - var/broken = 0 //Is the flash burnt out? - var/last_used = 0 //last world.time it was used. - - -/obj/item/device/flash/proc/clown_check(mob/living/carbon/human/user) - if(user.disabilities & CLUMSY && prob(50)) - flash_carbon(user, user, 15, 0) - return 0 - return 1 - - -/obj/item/device/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. - broken = 1 - icon_state = "[initial(icon_state)]burnt" - visible_message("The [src.name] burns out!") - - -/obj/item/device/flash/proc/flash_recharge(interval=10) - if(prob(times_used * 3)) //The more often it's used in a short span of time the more likely it will burn out - burn_out() - return 0 - - var/deciseconds_passed = world.time - last_used - for(var/seconds = deciseconds_passed/10, seconds>=interval, seconds-=interval) //get 1 charge every interval - times_used-- - - last_used = world.time - times_used = max(0, times_used) //sanity - return 1 - -/obj/item/device/flash/proc/try_use_flash(mob/user = null) - flash_recharge(10) - - if(broken) - return 0 - - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - flick("[initial(icon_state)]2", src) - times_used++ - - if(user && !clown_check(user)) - return 0 - - return 1 - - -/obj/item/device/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 5, targeted = 1) - add_logs(user, M, "flashed", src) - if(user && targeted) - if(M.weakeyes) - M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash - if(M.flash_eyes(1, 1)) - M.confused += power - terrible_conversion_proc(M, user) - M.Stun(1) - visible_message("[user] blinds [M] with the flash!") - user << "You blind [M] with the flash!" - M << "[user] blinds you with the flash!" - if(M.weakeyes) - M.Stun(2) - M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!") - else - visible_message("[user] fails to blind [M] with the flash!") - user << "You fail to blind [M] with the flash!" - M << "[user] fails to blind you with the flash!" - else - if(M.flash_eyes()) - M.confused += power - -/obj/item/device/flash/attack(mob/living/M, mob/user) - if(!try_use_flash(user)) - return 0 - - if(iscarbon(M)) - flash_carbon(M, user, 5, 1) - return 1 - - else if(issilicon(M)) - add_logs(user, M, "flashed", src) - flick("e_flash", M.flash) - M.Weaken(rand(5,10)) - user.visible_message("[user] overloads [M]'s sensors with the flash!", "You overload [M]'s sensors with the flash!") - return 1 - - user.visible_message("[user] fails to blind [M] with the flash!", "You fail to blind [M] with the flash!") - - -/obj/item/device/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0) - if(!try_use_flash(user)) - return 0 - user.visible_message("[user]'s flash emits a blinding light!", "Your flash emits a blinding light!") - for(var/mob/living/carbon/M in oviewers(3, null)) - flash_carbon(M, user, 1, 0) - - -/obj/item/device/flash/emp_act(severity) - if(!try_use_flash()) - return 0 - for(var/mob/living/carbon/M in viewers(3, null)) - flash_carbon(M, null, 10, 0) - burn_out() - ..() - - -/obj/item/device/flash/proc/terrible_conversion_proc(mob/M, mob/user) - if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && (user.mind in ticker.mode.head_revolutionaries)) - if(M.client) - if(M.stat == CONSCIOUS) - M.mind_initialize() //give them a mind datum if they don't have one. - var/resisted - if(!isloyal(M)) - if(user.mind in ticker.mode.head_revolutionaries) - if(ticker.mode.add_revolutionary(M.mind)) - times_used -- //Flashes less likely to burn out for headrevs when used for conversion - else - resisted = 1 - else - resisted = 1 - - if(resisted) - user << "This mind seems resistant to the flash!" - else - user << "They must be conscious before you can convert them!" - else - user << "This mind is so vacant that it is not susceptible to influence!" - - -/obj/item/device/flash/cyborg - origin_tech = null - -/obj/item/device/flash/cyborg/attack(mob/living/M, mob/user) - ..() - cyborg_flash_animation(user) - -/obj/item/device/flash/cyborg/attack_self(mob/user) - ..() - cyborg_flash_animation(user) - -/obj/item/device/flash/cyborg/proc/cyborg_flash_animation(mob/living/user) - var/atom/movable/overlay/animation = new(user.loc) - animation.layer = user.layer + 1 - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - qdel(animation) - - -/obj/item/device/flash/memorizer - name = "memorizer" - desc = "If you see this, you're not likely to remember it any time soon." - icon_state = "memorizer" - item_state = "nullrod" - -/obj/item/device/flash/handheld //this is now the regular pocket flashes +/obj/item/device/assembly/flash + name = "flash" + desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production." + icon_state = "flash" + item_state = "flashtool" + throwforce = 0 + w_class = 1 + origin_tech = "magnets=2;combat=1" + + crit_fail = 0 //Is the flash burnt out? + var/times_used = 0 //Number of times it's been used. + var/last_used = 0 //last world.time it was used. + + +/obj/item/device/assembly/flash/update_icon(var/flash = 0) + overlays.Cut() + attached_overlays = list() + if(crit_fail) + overlays += "flashburnt" + attached_overlays += "flashburnt" + + if(flash) + overlays += "flash-f" + attached_overlays += "flash-f" + spawn(5) + update_icon() + if(holder) + holder.update_icon() + +/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user) + if(user.disabilities & CLUMSY && prob(50)) + flash_carbon(user, user, 15, 0) + return 0 + return 1 + +/obj/item/device/assembly/flash/activate() + if(!try_use_flash()) + return 0 + var/turf/T = get_turf(src) + T.visible_message("[src] emits a blinding light!") + for(var/mob/living/carbon/M in viewers(3, null)) + flash_carbon(M, null, 2, 0) + + +/obj/item/device/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. + crit_fail = 1 + update_icon() + var/turf/T = get_turf(src) + T.visible_message("The [src.name] burns out!") + + +/obj/item/device/assembly/flash/proc/flash_recharge(interval=10) + if(prob(times_used * 3)) //The more often it's used in a short span of time the more likely it will burn out + burn_out() + return 0 + + var/deciseconds_passed = world.time - last_used + for(var/seconds = deciseconds_passed/10, seconds>=interval, seconds-=interval) //get 1 charge every interval + times_used-- + + last_used = world.time + times_used = max(0, times_used) //sanity + return 1 + +/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null) + flash_recharge(10) + + if(crit_fail) + return 0 + + playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) + update_icon(1) + times_used++ + + if(user && !clown_check(user)) + return 0 + + return 1 + + +/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 5, targeted = 1) + add_logs(user, M, "flashed", src) + if(user && targeted) + if(M.weakeyes) + M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash + if(M.flash_eyes(1, 1)) + M.confused += power + terrible_conversion_proc(M, user) + M.Stun(1) + visible_message("[user] blinds [M] with the flash!") + user << "You blind [M] with the flash!" + M << "[user] blinds you with the flash!" + if(M.weakeyes) + M.Stun(2) + M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!") + else + visible_message("[user] fails to blind [M] with the flash!") + user << "You fail to blind [M] with the flash!" + M << "[user] fails to blind you with the flash!" + else + if(M.flash_eyes()) + M.confused += power + +/obj/item/device/assembly/flash/attack(mob/living/M, mob/user) + if(!try_use_flash(user)) + return 0 + + if(iscarbon(M)) + flash_carbon(M, user, 5, 1) + return 1 + + else if(issilicon(M)) + add_logs(user, M, "flashed", src) + update_icon(1) + M.Weaken(rand(5,10)) + user.visible_message("[user] overloads [M]'s sensors with the flash!", "You overload [M]'s sensors with the flash!") + return 1 + + user.visible_message("[user] fails to blind [M] with the flash!", "You fail to blind [M] with the flash!") + + +/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0) + if(holder) + return 0 + if(!try_use_flash(user)) + return 0 + user.visible_message("[user]'s flash emits a blinding light!", "Your flash emits a blinding light!") + for(var/mob/living/carbon/M in oviewers(3, null)) + flash_carbon(M, user, 1, 0) + + +/obj/item/device/assembly/flash/emp_act(severity) + if(!try_use_flash()) + return 0 + for(var/mob/living/carbon/M in viewers(3, null)) + flash_carbon(M, null, 10, 0) + burn_out() + ..() + + +/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/M, mob/user) + if(ishuman(M) && ishuman(user) && M.stat != DEAD) + if(user.mind && (user.mind in ticker.mode.head_revolutionaries)) + if(M.client) + if(M.stat == CONSCIOUS) + M.mind_initialize() //give them a mind datum if they don't have one. + var/resisted + if(!isloyal(M)) + if(user.mind in ticker.mode.head_revolutionaries) + if(ticker.mode.add_revolutionary(M.mind)) + times_used -- //Flashes less likely to burn out for headrevs when used for conversion + else + resisted = 1 + else + resisted = 1 + + if(resisted) + user << "This mind seems resistant to the flash!" + else + user << "They must be conscious before you can convert them!" + else + user << "This mind is so vacant that it is not susceptible to influence!" + + +/obj/item/device/assembly/flash/cyborg + origin_tech = null + +/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user) + ..() + cyborg_flash_animation(user) + +/obj/item/device/assembly/flash/cyborg/attack_self(mob/user) + ..() + cyborg_flash_animation(user) + +/obj/item/device/assembly/flash/cyborg/attackby(obj/item/weapon/W, mob/user, params) + return + +/obj/item/device/assembly/flash/cyborg/proc/cyborg_flash_animation(mob/living/user) + var/atom/movable/overlay/animation = new(user.loc) + animation.layer = user.layer + 1 + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = user + flick("blspell", animation) + sleep(5) + qdel(animation) + + +/obj/item/device/assembly/flash/memorizer + name = "memorizer" + desc = "If you see this, you're not likely to remember it any time soon." + icon = 'icons/obj/device.dmi' + icon_state = "memorizer" + item_state = "nullrod" + +/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm new file mode 100644 index 00000000000..febe545a30e --- /dev/null +++ b/code/modules/assembly/health.dm @@ -0,0 +1,105 @@ +/obj/item/device/assembly/health + name = "health sensor" + desc = "Used for scanning and monitoring health." + icon_state = "health" + materials = list(MAT_METAL=800, MAT_GLASS=200) + origin_tech = "magnets=1;biotech=1" + attachable = 1 + secured = 0 + + var/scanning = 0 + var/health_scan + var/alarm_health = 0 + + + +/obj/item/device/assembly/health/activate() + if(!..()) return 0//Cooldown check + toggle_scan() + return 0 + +/obj/item/device/assembly/health/toggle_secure() + secured = !secured + if(secured && scanning) + SSobj.processing |= src + else + scanning = 0 + SSobj.processing.Remove(src) + update_icon() + return secured + +/obj/item/device/assembly/health/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool)) + if(alarm_health == 0) + alarm_health = -90 + user.show_message("You toggle [src] to \"detect death\" mode.") + else + alarm_health = 0 + user.show_message("You toggle [src] to \"detect critical state\" mode.") + return + else + return ..() + +/obj/item/device/assembly/health/process() + if(!scanning || !secured) + return + + var/atom/A = src + if(connected && connected.holder) + A = connected.holder + + for(A, A && !ismob(A), A=A.loc); + // like get_turf(), but for mobs. + var/mob/living/M = A + + if(M) + health_scan = M.health + if(health_scan <= alarm_health) + pulse() + audible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + toggle_scan() + return + return + +/obj/item/device/assembly/health/proc/toggle_scan() + if(!secured) return 0 + scanning = !scanning + if(scanning) + SSobj.processing |= src + else + SSobj.processing.Remove(src) + return + +/obj/item/device/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy + if(!secured) + user.show_message("The [name] is unsecured!") + return 0 + var/dat = text("Health Sensor [scanning?"On":"Off"]") + if(scanning && health_scan) + dat += "
Health: [health_scan]" + user << browse(dat, "window=hscan") + onclose(user, "hscan") + return + + +/obj/item/device/assembly/health/Topic(href, href_list) + ..() + if(!ismob(usr)) + return + + var/mob/user = usr + + if(!user.canUseTopic(user)) + usr << browse(null, "window=hscan") + onclose(usr, "hscan") + return + + if(href_list["scanning"]) + toggle_scan() + + if(href_list["close"]) + usr << browse(null, "window=hscan") + return + + attack_self(user) + return \ No newline at end of file diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index fe02a86da7f..dd40a3a2d80 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -21,7 +21,7 @@ attach(A2,user) name = "[A.name]-[A2.name] assembly" update_icon() - feedback_add_details("assembly_made","[type]") + feedback_add_details("assembly_made","[A.name]-[A2.name]") /obj/item/device/assembly_holder/proc/attach(obj/item/device/assembly/A, mob/user) if(!A.remove_item_from_storage(src)) @@ -41,10 +41,17 @@ overlays += "[a_left.icon_state]_left" for(var/O in a_left.attached_overlays) overlays += "[O]_l" + if(a_right) - src.overlays += "[a_right.icon_state]_right" + var/list/images = list() + images += image(icon, icon_state = "[a_right.icon_state]_left") for(var/O in a_right.attached_overlays) - overlays += "[O]_r" + images += image(icon, icon_state = "[O]_l") + var/matrix = matrix(-1, 0, 0, 0, 1, 0) + for(var/image/I in images) + I.transform = matrix + overlays += I + if(master) master.update_icon() diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 3879bc72230..632eb8e423e 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -4,6 +4,7 @@ icon_state = "mousetrap" materials = list(MAT_METAL=100) origin_tech = "combat=1" + attachable = 1 var/armed = 0 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 5bdf5f9eaff..6df3e9e1b3e 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -81,7 +81,7 @@ can_toggle = 1 toggle_cooldown = 20 active_sound = 'sound/items/WEEOO1.ogg' - + /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" desc = "WEEEEOOO. WEEEEEOOO. STOP THAT MONKEY. WEEEOOOO." diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 1ae33b0de80..b58216f30c9 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -20,7 +20,7 @@ item_state = "bio_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/internals/emergency_oxygen) + allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/internals/emergency_oxygen) //Chaplain /obj/item/clothing/suit/hooded/chaplain_hoodie diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 1b0e74030e8..cdaa2ef9f05 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -136,7 +136,7 @@ return if(wires && !primed) - if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler)) + if(wires.IsInteractionTool(I)) wires.Interact(user) return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index bf6ee02563f..6024ff02d0f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -579,4 +579,7 @@ var/const/GALOSHES_DONT_HELP = 4 var/obj/item/organ/internal/alien/plasmavessel/vessel = getorgan(/obj/item/organ/internal/alien/plasmavessel) if(vessel) stat(null, "Plasma Stored: [vessel.storedPlasma]/[vessel.max_plasma]") + if(locate(/obj/item/device/assembly/health) in src) + stat(null, "Health: [health]") + add_abilities_to_panel() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 9a160fb67fe..bec3e1f8637 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -473,7 +473,7 @@ user << "You insert the power cell." update_icons() - else if (istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool) || istype(W, /obj/item/device/assembly/signaler)) + else if (wires.IsInteractionTool(W)) if (wiresexposed) wires.Interact(user) else @@ -1084,7 +1084,7 @@ new /obj/item/robot_parts/head(T) var/b for(b=0, b!=2, b++) - var/obj/item/device/flash/handheld/F = new /obj/item/device/flash/handheld(T) + var/obj/item/device/assembly/flash/handheld/F = new /obj/item/device/assembly/flash/handheld(T) F.burn_out() if (cell) //Sanity check. cell.loc = T diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3efbcc3baed..9bc33156523 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -40,7 +40,7 @@ /obj/item/weapon/robot_module/New() - modules += new /obj/item/device/flash/cyborg(src) + modules += new /obj/item/device/assembly/flash/cyborg(src) emag = new /obj/item/toy/sword(src) emag.name = "Placeholder Emag Item" return diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 052de1b2505..03f95d9fefb 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -570,9 +570,7 @@ else if (istype(user, /mob/living/silicon)) return src.attack_hand(user) - if (!opened && wiresexposed && \ - (istype(W, /obj/item/device/multitool) || \ - istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/assembly/signaler))) + if (!opened && wiresexposed && wires.IsInteractionTool(W)) return src.attack_hand(user) ..() diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index 0e0153bb26a..b76334d1680 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -275,6 +275,9 @@ //How disposal handles getting a storage dump from a storage object /obj/machinery/disposal/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) for(var/obj/item/I in src_object) + if(user.s_active != src_object) + if(I.on_found(user)) + return src_object.remove_from_storage(I, src) return 1 diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index a80441f1e2d..7cf5fff85f4 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -354,6 +354,14 @@ build_path = /obj/item/device/assembly/infra category = list("initial", "Misc") +/datum/design/health_sensor + name = "Health sensor" + id = "health_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/device/assembly/health + category = list("initial", "Medical") + /datum/design/timer name = "Timer" id = "timer" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 329066dfa42..cf283810d38 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -71,7 +71,7 @@ materials = list(MAT_METAL = 750, MAT_GLASS = 750) construction_time = 100 reliability = 76 - build_path = /obj/item/device/flash/handheld + build_path = /obj/item/device/assembly/flash/handheld category = list("Misc") /datum/design/bluespacebeaker diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index 6255dc886d34ab4f617f8dd42d30b78876d1ff95..3cc1d93114ece3fb7faac6314a7b407dd5835bc9 100644 GIT binary patch literal 11673 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 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 7b1f45f6d21e97dac46aace55df765f0fec0ae89..56a87a791b9f4263ace50d40159ba8541c69586e 100644 GIT binary patch literal 27030 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 diff --git a/tgstation.dme b/tgstation.dme index 1f2da9a0a93..fec0366d291 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -593,7 +593,6 @@ #include "code\game\objects\items\devices\camera_bug.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\doorCharge.dm" -#include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" #include "code\game\objects\items\devices\instruments.dm" #include "code\game\objects\items\devices\laserpointer.dm" @@ -864,6 +863,8 @@ #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" #include "code\modules\assembly\doorcontrol.dm" +#include "code\modules\assembly\flash.dm" +#include "code\modules\assembly\health.dm" #include "code\modules\assembly\helpers.dm" #include "code\modules\assembly\holder.dm" #include "code\modules\assembly\igniter.dm"