mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Merge remote-tracking branch 'upstream/master' into dryshoes
Conflicts: code/__DEFINES/misc.dm
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"})
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
+8114
-8082
File diff suppressed because it is too large
Load Diff
+1125
-7051
File diff suppressed because it is too large
Load Diff
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -1080,7 +1080,7 @@
|
||||
"uN" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"uO" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
||||
"uP" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"uQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 8},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"uQ" = (/obj/machinery/atmospherics/pipe/heat_exchanging/junction{dir = 8},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"uR" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcommsat/computer)
|
||||
"uS" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/closet/secure_closet/hop,/turf/simulated/floor/plasteel,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"uT" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/structure/closet/radiation,/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
@@ -1470,10 +1470,10 @@
|
||||
"CI" = (/obj/machinery/atmospherics/components/unary/outlet_injector{dir = 8; frequency = 1443; id = "air_in"; on = 1},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CJ" = (/obj/structure/sign/fire,/turf/simulated/wall,/area/engine/engineering)
|
||||
"CK" = (/obj/structure/transit_tube{tag = "icon-N-S-Pass"; icon_state = "N-S-Pass"},/turf/space,/area/space)
|
||||
"CL" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"CM" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/structure/lattice,/obj/machinery/light/small{dir = 1},/turf/space,/area/engine/engineering)
|
||||
"CN" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"CO" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 10},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"CL" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 6},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"CM" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 4},/obj/structure/lattice,/obj/machinery/light/small{dir = 1},/turf/space,/area/engine/engineering)
|
||||
"CN" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 4},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"CO" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 10},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"CP" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
|
||||
"CQ" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"CR" = (/obj/machinery/atmospherics/components/binary/pump{target_pressure = 1500},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
@@ -1481,14 +1481,14 @@
|
||||
"CT" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; target_pressure = 2000},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
|
||||
"CU" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
|
||||
"CV" = (/obj/machinery/button/door{id = "burndoor"; name = "Burn Chamber Vent Control"; pixel_x = 25; pixel_y = 5; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"CW" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/obj/machinery/sparker{id = "burnchamber"; pixel_x = -25},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CX" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/meter/turf{pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CY" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CZ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/camera{c_tag = "Burn Chamber"; network = list("burnchamber")},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Da" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 10},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CW" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 6},/obj/machinery/sparker{id = "burnchamber"; pixel_x = -25},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CX" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 4},/obj/machinery/meter/turf{pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CY" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 4},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"CZ" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 4},/obj/machinery/camera{c_tag = "Burn Chamber"; network = list("burnchamber")},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Da" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 10},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Db" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/space,/area/space)
|
||||
"Dc" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"Dd" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"Dc" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple,/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"Dd" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 5},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"De" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"Df" = (/obj/machinery/light,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"Dg" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
@@ -1498,22 +1498,22 @@
|
||||
"Dk" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
|
||||
"Dl" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plating,/area/tcommsat/computer)
|
||||
"Dm" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/camera/autoname{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/engine/gravity_generator)
|
||||
"Dn" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{dir = 4},/turf/simulated/wall,/area/engine/engineering)
|
||||
"Do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Dq" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Dn" = (/obj/machinery/atmospherics/pipe/heat_exchanging/junction{dir = 4},/turf/simulated/wall,/area/engine/engineering)
|
||||
"Do" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 9},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Dp" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 6},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Dq" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple,/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"Dr" = (/obj/machinery/door/poddoor{id = "burndoor"; name = "Mixer Room Vent"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
||||
"Dt" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
|
||||
"Du" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
|
||||
"Dv" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/engine/gravity_generator)
|
||||
"Dw" = (/obj/item/device/analyzer,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"DG" = (/obj/machinery/atmospherics/components/binary/volume_pump{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"DL" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"DL" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 9},/obj/structure/lattice,/turf/space,/area/engine/engineering)
|
||||
"DP" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/camera/autoname{dir = 1},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"DS" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the burn chamber."; dir = 8; layer = 4; name = "Burn Chamber Telescreen"; network = list("burnchamber"); pixel_x = 0; pixel_y = -30},/obj/structure/stool,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"DT" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"DU" = (/obj/machinery/button/ignition{id = "burnchamber"; pixel_x = 25},/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"DW" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"DW" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 5},/turf/simulated/floor/engine/vacuum,/area/engine/engineering)
|
||||
"DX" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/lattice,/turf/space,/area/space)
|
||||
"DZ" = (/obj/structure/lattice,/obj/structure/transit_tube{tag = "icon-N-S-Pass"; icon_state = "N-S-Pass"},/turf/space,/area/space)
|
||||
"Ea" = (/turf/simulated/wall,/area/tcommsat/computer)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -15,7 +15,7 @@ z7 = empty space
|
||||
|
||||
#if !defined(MAP_FILE)
|
||||
|
||||
#include "map_files\MetaStation\MetaStation.v41F.dmm"
|
||||
#include "map_files\MetaStation\MetaStation.v41G.dmm"
|
||||
#include "map_files\MetaStation\z2.dmm"
|
||||
#include "map_files\MetaStation\z3.dmm"
|
||||
#include "map_files\MetaStation\z4.dmm"
|
||||
|
||||
@@ -9,7 +9,6 @@ Pipes -> Pipelines
|
||||
Pipelines + Other Objects -> Pipe network
|
||||
|
||||
*/
|
||||
|
||||
/obj/machinery/atmospherics
|
||||
anchored = 1
|
||||
idle_power_usage = 0
|
||||
@@ -25,7 +24,11 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
var/image/pipe_vision_img = null
|
||||
|
||||
var/device_type = 0
|
||||
var/list/obj/machinery/atmospherics/nodes = list()
|
||||
|
||||
/obj/machinery/atmospherics/New()
|
||||
nodes.len = device_type
|
||||
..()
|
||||
SSair.atmos_machinery += src
|
||||
SetInitDirections()
|
||||
@@ -33,6 +36,9 @@ Pipelines + Other Objects -> Pipe network
|
||||
stored = new(src, make_from=src)
|
||||
|
||||
/obj/machinery/atmospherics/Destroy()
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
nullifyNode(I)
|
||||
|
||||
SSair.atmos_machinery -= src
|
||||
if(stored)
|
||||
qdel(stored)
|
||||
@@ -45,10 +51,42 @@ Pipelines + Other Objects -> Pipe network
|
||||
qdel(pipe_vision_img)
|
||||
|
||||
return ..()
|
||||
//return QDEL_HINT_FINDREFERENCE
|
||||
|
||||
/obj/machinery/atmospherics/proc/nullifyNode(I)
|
||||
if(NODE_I)
|
||||
var/obj/machinery/atmospherics/N = NODE_I
|
||||
N.disconnect(src)
|
||||
NODE_I = null
|
||||
|
||||
//this is called just after the air controller sets up turfs
|
||||
/obj/machinery/atmospherics/proc/atmosinit()
|
||||
return
|
||||
/obj/machinery/atmospherics/proc/atmosinit(var/list/node_connects)
|
||||
if(!node_connects) //for pipes where order of nodes doesn't matter
|
||||
node_connects = list()
|
||||
node_connects.len = device_type
|
||||
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
for(var/D in cardinal)
|
||||
if(D & GetInitDirections())
|
||||
if(D in node_connects)
|
||||
continue
|
||||
node_connects[I] = D
|
||||
break
|
||||
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I]))
|
||||
if(can_be_node(target, I))
|
||||
NODE_I = target
|
||||
break
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/proc/can_be_node(obj/machinery/atmospherics/target)
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/proc/pipeline_expansion()
|
||||
return nodes
|
||||
|
||||
/obj/machinery/atmospherics/proc/SetInitDirections()
|
||||
return
|
||||
@@ -73,7 +111,12 @@ Pipelines + Other Objects -> Pipe network
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference)
|
||||
return
|
||||
if(istype(reference, /obj/machinery/atmospherics/pipe))
|
||||
var/obj/machinery/atmospherics/pipe/P = reference
|
||||
qdel(P.parent)
|
||||
var/I = nodes.Find(reference)
|
||||
NODE_I = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/update_icon()
|
||||
return
|
||||
@@ -138,9 +181,6 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/proc/nullifyPipenet(datum/pipeline/P)
|
||||
P.other_atmosmch -= src
|
||||
|
||||
/obj/machinery/atmospherics/proc/getpipeimage(iconset, iconstate, direction, col=rgb(255,255,255))
|
||||
|
||||
//Add identifiers for the iconset
|
||||
|
||||
@@ -27,10 +27,8 @@ Housekeeping and pipe network stuff
|
||||
*/
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/atmosinit()
|
||||
|
||||
var/node2_connect = dir
|
||||
var/node1_connect = turn(dir, 180)
|
||||
|
||||
var/list/node_connects = new/list()
|
||||
node_connects.Add(node1_connect, node2_connect)
|
||||
var/list/node_connects = list(node1_connect, node2_connect)
|
||||
..(node_connects)
|
||||
@@ -18,8 +18,8 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air()
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
|
||||
var/output_starting_pressure = air1.return_pressure()
|
||||
var/input_starting_pressure = air2.return_pressure()
|
||||
|
||||
@@ -42,8 +42,8 @@ Acts like a normal vent, but has an input AND output.
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
air1.volume = 1000
|
||||
air2.volume = 1000
|
||||
|
||||
@@ -66,8 +66,8 @@ Acts like a normal vent, but has an input AND output.
|
||||
|
||||
if(!on)
|
||||
return 0
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
@@ -89,7 +89,7 @@ Acts like a normal vent, but has an input AND output.
|
||||
loc.assume_air(removed)
|
||||
air_update_turf()
|
||||
|
||||
var/datum/pipeline/parent1 = parents[PARENT1]
|
||||
var/datum/pipeline/parent1 = PARENT1
|
||||
parent1.update = 1
|
||||
|
||||
else //external -> output
|
||||
@@ -109,7 +109,7 @@ Acts like a normal vent, but has an input AND output.
|
||||
air2.merge(removed)
|
||||
air_update_turf()
|
||||
|
||||
var/datum/pipeline/parent2 = parents[PARENT2]
|
||||
var/datum/pipeline/parent2 = PARENT2
|
||||
parent2.update = 1
|
||||
|
||||
return 1
|
||||
|
||||
@@ -40,8 +40,8 @@ Passive gate is similar to the regular pump except:
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
var/input_starting_pressure = air1.return_pressure()
|
||||
|
||||
@@ -29,8 +29,9 @@ Thus, the two variables affect pump operation are set in New():
|
||||
/obj/machinery/atmospherics/components/binary/pump/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,frequency)
|
||||
if(radio_connection)
|
||||
radio_connection = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/pump/on
|
||||
on = 1
|
||||
|
||||
@@ -48,8 +49,8 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
|
||||
open = 1
|
||||
update_icon_nopipes()
|
||||
update_parents()
|
||||
var/datum/pipeline/parent1 = parents[PARENT1]
|
||||
var/datum/pipeline/parent1 = PARENT1
|
||||
parent1.reconcile_air()
|
||||
investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", "atmos")
|
||||
|
||||
|
||||
@@ -48,8 +48,8 @@ Thus, the two variables affect pump operation are set in New():
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
|
||||
// Pump mechanism just won't do anything if the pressure is too high/too low
|
||||
|
||||
@@ -125,7 +125,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
on = !on
|
||||
|
||||
if("set_transfer_rate" in signal.data)
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
transfer_rate = Clamp(
|
||||
text2num(signal.data["set_transfer_rate"]),
|
||||
0,
|
||||
|
||||
@@ -3,50 +3,31 @@ So much of atmospherics.dm was used solely by components, so separating this mak
|
||||
On top of that, now people can add component-speciic procs/vars if they want!
|
||||
*/
|
||||
|
||||
#define UNARY 1
|
||||
#define BINARY 2
|
||||
#define TRINARY 3
|
||||
|
||||
#define AIR1 "a1"
|
||||
#define AIR2 "a2"
|
||||
#define AIR3 "a3"
|
||||
|
||||
#define PARENT1 "p1"
|
||||
#define PARENT2 "p2"
|
||||
#define PARENT3 "p3"
|
||||
|
||||
#define NODE1 "n1"
|
||||
#define NODE2 "n2"
|
||||
#define NODE3 "n3"
|
||||
|
||||
/obj/machinery/atmospherics/components/
|
||||
var/welded = 0 //Used on pumps and scrubbers
|
||||
var/showpipe = 0
|
||||
|
||||
var/device_type = 0//used for initialization stuff
|
||||
//UNARY = 1
|
||||
//BINARY = 2
|
||||
//TRINARY = 3
|
||||
|
||||
var/list/obj/machinery/atmospherics/nodes = list()
|
||||
var/list/datum/pipeline/parents = list()
|
||||
var/list/datum/gas_mixture/airs = list()
|
||||
|
||||
/obj/machinery/atmospherics/components/New()
|
||||
parents.len = device_type
|
||||
airs.len = device_type
|
||||
..()
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
var/datum/gas_mixture/A = new
|
||||
A.volume = 200
|
||||
airs["a[I]"] = A
|
||||
AIR_I = A
|
||||
/*
|
||||
Iconnery
|
||||
*/
|
||||
|
||||
/obj/machinery/atmospherics/components/proc/icon_addintact(var/obj/machinery/atmospherics/node, var/connected = 0)
|
||||
/obj/machinery/atmospherics/components/proc/icon_addintact(var/obj/machinery/atmospherics/node)
|
||||
var/image/img = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', "pipe_intact", get_dir(src,node), node.pipe_color)
|
||||
underlays += img
|
||||
|
||||
return connected | img.dir
|
||||
return img.dir
|
||||
|
||||
/obj/machinery/atmospherics/components/proc/icon_addbroken(var/connected = 0)
|
||||
var/unconnected = (~connected) & initialize_directions
|
||||
@@ -73,9 +54,9 @@ Iconnery
|
||||
|
||||
var/connected = 0
|
||||
|
||||
for(var/I = 1; I <= device_type; I++) //adds intact pieces
|
||||
if(nodes["n[I]"])
|
||||
connected = icon_addintact(nodes["n[I]"], connected)
|
||||
for(DEVICE_TYPE_LOOP) //adds intact pieces
|
||||
if(NODE_I)
|
||||
connected |= icon_addintact(NODE_I)
|
||||
|
||||
icon_addbroken(connected) //adds broken pieces
|
||||
|
||||
@@ -83,82 +64,52 @@ Iconnery
|
||||
/*
|
||||
Pipenet stuff; housekeeping
|
||||
*/
|
||||
/obj/machinery/atmospherics/components/Destroy()
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
var/obj/machinery/atmospherics/N = nodes["n[I]"]
|
||||
if(N)
|
||||
N.disconnect(src)
|
||||
nodes["n[I]"] = null
|
||||
nullifyPipenet(parents["p[I]"])
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/atmosinit(var/list/node_connects)
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I]))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
nodes["n[I]"] = target
|
||||
break
|
||||
update_icon()
|
||||
/obj/machinery/atmospherics/components/nullifyNode(I)
|
||||
..()
|
||||
nullifyPipenet(PARENT_I)
|
||||
qdel(AIR_I)
|
||||
AIR_I = null
|
||||
|
||||
/obj/machinery/atmospherics/components/construction()
|
||||
..()
|
||||
update_parents()
|
||||
|
||||
/obj/machinery/atmospherics/components/build_network()
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(!parents["p[I]"])
|
||||
parents["p[I]"] = new /datum/pipeline()
|
||||
var/datum/pipeline/P = parents["p[I]"]
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
if(!PARENT_I)
|
||||
PARENT_I = new /datum/pipeline()
|
||||
var/datum/pipeline/P = PARENT_I
|
||||
P.build_pipeline(src)
|
||||
|
||||
/obj/machinery/atmospherics/components/disconnect(obj/machinery/atmospherics/reference)
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(reference == nodes["n[I]"])
|
||||
if(istype(nodes["n[I]"], /obj/machinery/atmospherics/pipe))
|
||||
qdel(parents["p[I]"])
|
||||
nodes["n[I]"] = null
|
||||
break
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/nullifyPipenet(datum/pipeline/reference)
|
||||
..()
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(reference == parents["p[I]"])
|
||||
var/datum/pipeline/P = parents["p[I]"]
|
||||
P.other_airs -= airs["a[I]"]
|
||||
parents["p[I]"] = null
|
||||
/obj/machinery/atmospherics/components/proc/nullifyPipenet(datum/pipeline/reference)
|
||||
var/I = parents.Find(reference)
|
||||
reference.other_airs -= AIR_I
|
||||
reference.other_atmosmch -= src
|
||||
PARENT_I = null
|
||||
|
||||
/obj/machinery/atmospherics/components/returnPipenetAir(datum/pipeline/reference)
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(reference == parents["p[I]"])
|
||||
return airs["a[I]"]
|
||||
var/I = parents.Find(reference)
|
||||
return AIR_I
|
||||
|
||||
/obj/machinery/atmospherics/components/pipeline_expansion(datum/pipeline/reference)
|
||||
if(reference)
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(parents["p[I]"] == reference)
|
||||
return list(nodes["n[I]"])
|
||||
var/I = parents.Find(reference)
|
||||
return list(NODE_I)
|
||||
else
|
||||
var/list/obj/machinery/atmospherics/return_nodes = list()
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
return_nodes += nodes["n[I]"]
|
||||
return return_nodes
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/A)
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(A == nodes["n[I]"])
|
||||
parents["p[I]"] = reference
|
||||
break
|
||||
var/I = nodes.Find(A)
|
||||
PARENT_I = reference
|
||||
|
||||
/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = nodes[NODE1]) //returns PARENT1 if called without argument
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(A == nodes["n[I]"])
|
||||
return parents["p[I]"]
|
||||
/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = NODE1) //returns PARENT1 if called without argument
|
||||
var/I = nodes.Find(A)
|
||||
return PARENT_I
|
||||
|
||||
/obj/machinery/atmospherics/components/replacePipenet(datum/pipeline/Old, datum/pipeline/New)
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
if(parents["p[I]"] == Old)
|
||||
parents["p[I]"] = New
|
||||
var/I = parents.Find(Old)
|
||||
PARENT_I = New
|
||||
|
||||
/obj/machinery/atmospherics/components/unsafe_pressure_release(var/mob/user, var/pressures)
|
||||
..()
|
||||
@@ -169,15 +120,15 @@ Pipenet stuff; housekeeping
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/lost = null
|
||||
var/times_lost = 0
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
var/datum/gas_mixture/air = airs["a[I]"]
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
var/datum/gas_mixture/air = AIR_I
|
||||
lost += pressures*environment.volume/(air.temperature * R_IDEAL_GAS_EQUATION)
|
||||
times_lost++
|
||||
var/shared_loss = lost/times_lost
|
||||
|
||||
var/datum/gas_mixture/to_release
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
var/datum/gas_mixture/air = airs["a[I]"]
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
var/datum/gas_mixture/air = AIR_I
|
||||
if(!to_release)
|
||||
to_release = air.remove(shared_loss)
|
||||
continue
|
||||
@@ -200,6 +151,6 @@ Helpers
|
||||
*/
|
||||
|
||||
/obj/machinery/atmospherics/components/proc/update_parents()
|
||||
for(var/I = 1; I <= device_type; I++)
|
||||
var/datum/pipeline/parent = parents["p[I]"]
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
var/datum/pipeline/parent = PARENT_I
|
||||
parent.update = 1
|
||||
@@ -62,7 +62,7 @@ Filter types:
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes()
|
||||
|
||||
if(!(stat & NOPOWER) && on && nodes[NODE1] && nodes[NODE2] && nodes[NODE3])
|
||||
if(!(stat & NOPOWER) && on && NODE1 && NODE2 && NODE3)
|
||||
icon_state = "filter_on[flipped?"_f":""]"
|
||||
return
|
||||
|
||||
@@ -80,12 +80,12 @@ Filter types:
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
if(!(nodes[NODE1] && nodes[NODE2] && nodes[NODE3]))
|
||||
if(!(NODE1 && NODE2 && NODE3))
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air3 = airs[AIR3]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
var/datum/gas_mixture/air3 = AIR3
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
overlays += getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction, node.pipe_color)
|
||||
continue
|
||||
overlays += getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/update_icon_nopipes()
|
||||
if(!(stat & NOPOWER) && on && nodes[NODE1] && nodes[NODE2] && nodes[NODE3])
|
||||
if(!(stat & NOPOWER) && on && NODE1 && NODE2 && NODE3)
|
||||
icon_state = "mixer_on[flipped?"_f":""]"
|
||||
return
|
||||
|
||||
@@ -48,20 +48,20 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air3 = airs[AIR3]
|
||||
var/datum/gas_mixture/air3 = AIR3
|
||||
air3.volume = 300
|
||||
airs[AIR3] = air3
|
||||
AIR3 = air3
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
if(!(nodes[NODE1] && nodes[NODE2] && nodes[NODE3]))
|
||||
if(!(NODE1 && NODE2 && NODE3))
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[AIR1]
|
||||
var/datum/gas_mixture/air2 = airs[AIR2]
|
||||
var/datum/gas_mixture/air3 = airs[AIR3]
|
||||
var/datum/gas_mixture/air1 = AIR1
|
||||
var/datum/gas_mixture/air2 = AIR2
|
||||
var/datum/gas_mixture/air3 = AIR3
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
|
||||
@@ -107,14 +107,14 @@
|
||||
air3.merge(removed2)
|
||||
|
||||
if(transfer_moles1)
|
||||
var/datum/pipeline/parent1 = parents[PARENT1]
|
||||
var/datum/pipeline/parent1 = PARENT1
|
||||
parent1.update = 1
|
||||
|
||||
if(transfer_moles2)
|
||||
var/datum/pipeline/parent2 = parents[PARENT2]
|
||||
var/datum/pipeline/parent2 = PARENT2
|
||||
parent2.update = 1
|
||||
|
||||
var/datum/pipeline/parent3 = parents[PARENT3]
|
||||
var/datum/pipeline/parent3 = PARENT3
|
||||
parent3.update = 1
|
||||
|
||||
return 1
|
||||
|
||||
@@ -43,7 +43,5 @@ Housekeeping and pipe network stuff
|
||||
node1_connect = turn(node1_connect, 180)
|
||||
node3_connect = turn(node3_connect, 180)
|
||||
|
||||
var/list/node_connects = new/list()
|
||||
|
||||
node_connects.Add(node1_connect, node2_connect, node3_connect)
|
||||
var/list/node_connects = list(node1_connect, node2_connect, node3_connect)
|
||||
..(node_connects)
|
||||
@@ -69,7 +69,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/cold_sink/freezer/interact(mob/user)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
user.set_machine(src)
|
||||
var/temp_text = ""
|
||||
if(air_contents.temperature > (T0C - 20))
|
||||
@@ -194,7 +194,7 @@
|
||||
return interact(user)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/heat_reservoir/heater/interact(mob/user)
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(showpipe)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/components/unary_devices.dmi', "scrub_cap", initialize_directions) //scrub_cap works for now
|
||||
|
||||
if(!nodes[NODE1] || !on || stat & (NOPOWER|BROKEN))
|
||||
if(!NODE1 || !on || stat & (NOPOWER|BROKEN))
|
||||
icon_state = "cold_off"
|
||||
return
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
return ..()
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/process_atmos()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
if(air_contents)
|
||||
temperature_archived = air_contents.temperature
|
||||
@@ -62,14 +62,14 @@
|
||||
on = 0
|
||||
open_machine()
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
if(!nodes[NODE1] || !is_operational())
|
||||
if(!NODE1 || !is_operational())
|
||||
return
|
||||
|
||||
if(!on)
|
||||
updateDialog()
|
||||
return
|
||||
|
||||
if(airs[AIR1])
|
||||
if(AIR1)
|
||||
if (occupant)
|
||||
process_occupant()
|
||||
expel_gas()
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data()
|
||||
// this is the data which will be sent to the ui
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
var/data = list()
|
||||
data["isOperating"] = on
|
||||
@@ -289,7 +289,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/proc/process_occupant()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
if(air_contents.total_moles() < 10)
|
||||
return
|
||||
if(occupant)
|
||||
@@ -321,7 +321,7 @@
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/proc/heat_gas_contents()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
if(air_contents.total_moles() < 1)
|
||||
return
|
||||
@@ -332,7 +332,7 @@
|
||||
air_contents.temperature = combined_energy/combined_heat_capacity
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/proc/expel_gas()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
if(air_contents.total_moles() < 1)
|
||||
return
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/update_cycle
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/generator_input/update_icon()
|
||||
if(nodes[NODE1])
|
||||
if(NODE1)
|
||||
icon_state = "intact"
|
||||
else
|
||||
icon_state = "exposed"
|
||||
@@ -17,4 +17,4 @@
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/generator_input/proc/return_exchange_air()
|
||||
return airs[AIR1]
|
||||
return AIR1
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
var/update_cycle
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon()
|
||||
if(nodes[NODE1])
|
||||
if(NODE1)
|
||||
icon_state = "he_intact"
|
||||
var/obj/machinery/atmospherics/node = nodes[NODE1]
|
||||
var/obj/machinery/atmospherics/node = NODE1
|
||||
color = node.color
|
||||
else
|
||||
icon_state = "he_exposed"
|
||||
@@ -43,8 +43,8 @@
|
||||
update_cycle = SSair.times_fired
|
||||
partner.update_cycle = SSair.times_fired
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/partner_air_contents = partner.airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
var/datum/gas_mixture/partner_air_contents = partner.AIR1
|
||||
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/other_air_heat_capacity = partner_air_contents.heat_capacity()
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
if(showpipe)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/components/unary_devices.dmi', "scrub_cap", initialize_directions) //scrub_cap works for now
|
||||
|
||||
if(!nodes[NODE1] || !on || stat & (NOPOWER|BROKEN))
|
||||
if(!NODE1 || !on || stat & (NOPOWER|BROKEN))
|
||||
icon_state = "cold_off"
|
||||
return
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
on = 1
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/update_icon_nopipes()
|
||||
if(!nodes[NODE1] || !on || stat & (NOPOWER|BROKEN))
|
||||
if(!NODE1 || !on || stat & (NOPOWER|BROKEN))
|
||||
icon_state = "inje_off"
|
||||
return
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
if(!on || stat & NOPOWER)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
if(air_contents.temperature > 0)
|
||||
var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
@@ -63,7 +63,7 @@
|
||||
if(on || injecting)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
injecting = 1
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
if("set_volume_rate" in signal.data)
|
||||
var/number = text2num(signal.data["set_volume_rate"])
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
volume_rate = Clamp(number, 0, air_contents.volume)
|
||||
|
||||
if("status" in signal.data)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(showpipe)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/components/unary_devices.dmi', "scrub_cap", initialize_directions) //it works for now
|
||||
|
||||
if(!nodes[NODE1] || !on || stat & BROKEN)
|
||||
if(!NODE1 || !on || stat & BROKEN)
|
||||
icon_state = "o2gen_off"
|
||||
return
|
||||
|
||||
@@ -27,16 +27,16 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/oxygen_generator/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.volume = 50
|
||||
airs[AIR1] = air_contents
|
||||
AIR1 = air_contents
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/oxygen_generator/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
var/total_moles = air_contents.total_moles()
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define AIR_CONTENTS (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
/obj/machinery/atmospherics/components/unary/tank
|
||||
icon = 'icons/obj/atmospherics/pipes/pressure_tank.dmi'
|
||||
icon_state = "generic"
|
||||
@@ -6,15 +7,19 @@
|
||||
var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
|
||||
density = 1
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide
|
||||
name = "pressure tank (Carbon Dioxide)"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
air_contents.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.carbon_dioxide = AIR_CONTENTS
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/toxins
|
||||
icon_state = "orange"
|
||||
@@ -22,10 +27,8 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/toxins/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
air_contents.toxins = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.toxins = AIR_CONTENTS
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b
|
||||
icon_state = "orange_2"
|
||||
@@ -33,11 +36,9 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T0C
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
var/datum/gas/oxygen_agent_b/trace_gas = new
|
||||
trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
trace_gas.moles = AIR_CONTENTS
|
||||
air_contents.trace_gases += trace_gas
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/oxygen
|
||||
@@ -46,10 +47,8 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/oxygen/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
air_contents.oxygen = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.oxygen = AIR_CONTENTS
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/nitrogen
|
||||
icon_state = "red"
|
||||
@@ -57,10 +56,8 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/nitrogen/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
air_contents.nitrogen = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.nitrogen = AIR_CONTENTS
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/air
|
||||
icon_state = "grey"
|
||||
@@ -68,8 +65,6 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/tank/air/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
air_contents.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
air_contents.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.oxygen = AIR_CONTENTS
|
||||
air_contents.nitrogen = AIR_CONTENTS
|
||||
@@ -17,26 +17,17 @@ Iconnery
|
||||
|
||||
..(intact)
|
||||
|
||||
/*
|
||||
Housekeeping and pipe network stuff below
|
||||
*/
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/atmosinit()
|
||||
var/list/node_connects = new/list()
|
||||
node_connects.Add(dir)
|
||||
..(node_connects)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/default_change_direction_wrench(mob/user, obj/item/weapon/wrench/W)
|
||||
if(!..())
|
||||
return
|
||||
SetInitDirections()
|
||||
var/obj/machinery/atmospherics/node = nodes[NODE1]
|
||||
var/obj/machinery/atmospherics/node = NODE1
|
||||
if(node)
|
||||
node.disconnect(src)
|
||||
node = null
|
||||
nullifyPipenet(parents[PARENT1])
|
||||
nullifyPipenet(PARENT1)
|
||||
atmosinit()
|
||||
node = nodes[NODE1]
|
||||
node = NODE1
|
||||
if(node)
|
||||
node.atmosinit()
|
||||
node.addMember(src)
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
#define INT_BOUND 2
|
||||
#define NO_BOUND 3
|
||||
|
||||
#define SIPHONING 0
|
||||
#define RELEASING 1
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump
|
||||
icon_state = "vent_map"
|
||||
|
||||
@@ -19,12 +22,12 @@
|
||||
var/id_tag = null
|
||||
|
||||
var/on = 0
|
||||
var/pump_direction = 1 //0 = siphoning, 1 = releasing
|
||||
var/pump_direction = RELEASING
|
||||
|
||||
var/external_pressure_bound = ONE_ATMOSPHERE
|
||||
var/internal_pressure_bound = 0
|
||||
|
||||
var/pressure_checks = 1
|
||||
var/pressure_checks = EXT_BOUND
|
||||
//EXT_BOUND: Do not pass external_pressure_bound
|
||||
//INT_BOUND: Do not pass internal_pressure_bound
|
||||
//NO_BOUND: Do not pass either
|
||||
@@ -40,7 +43,7 @@
|
||||
icon_state = "vent_out"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon
|
||||
pump_direction = 0
|
||||
pump_direction = SIPHONING
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on
|
||||
on = 1
|
||||
@@ -59,6 +62,11 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,frequency)
|
||||
radio_connection = null
|
||||
if(initial_loc)
|
||||
initial_loc.air_vent_info -= id_tag
|
||||
initial_loc.air_vent_names -= id_tag
|
||||
initial_loc = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume
|
||||
@@ -67,7 +75,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New()
|
||||
..()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
air_contents.volume = 1000
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/update_icon_nopipes()
|
||||
@@ -79,20 +87,20 @@
|
||||
icon_state = "vent_welded"
|
||||
return
|
||||
|
||||
if(!nodes[NODE1] || !on || stat & (NOPOWER|BROKEN))
|
||||
if(!NODE1 || !on || stat & (NOPOWER|BROKEN))
|
||||
icon_state = "vent_off"
|
||||
return
|
||||
|
||||
if(pump_direction)
|
||||
if(pump_direction & RELEASING)
|
||||
icon_state = "vent_out"
|
||||
else
|
||||
else //pump_direction == SIPHONING
|
||||
icon_state = "vent_in"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/process_atmos()
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if (!nodes[NODE1])
|
||||
if (!NODE1)
|
||||
on = 0
|
||||
//broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0
|
||||
if(!on)
|
||||
@@ -101,11 +109,11 @@
|
||||
if(welded)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
|
||||
if(pump_direction) //internal -> external
|
||||
if(pump_direction & RELEASING) //internal -> external
|
||||
var/pressure_delta = 10000
|
||||
|
||||
if(pressure_checks&EXT_BOUND)
|
||||
@@ -201,11 +209,11 @@
|
||||
|
||||
if("purge" in signal.data)
|
||||
pressure_checks &= ~EXT_BOUND
|
||||
pump_direction = 0
|
||||
pump_direction = SIPHONING
|
||||
|
||||
if("stabalize" in signal.data)
|
||||
pressure_checks |= EXT_BOUND
|
||||
pump_direction = 1
|
||||
pump_direction = RELEASING
|
||||
|
||||
if("power" in signal.data)
|
||||
on = text2num(signal.data["power"])
|
||||
@@ -305,8 +313,15 @@
|
||||
if(initial_loc)
|
||||
initial_loc.air_vent_info -= id_tag
|
||||
initial_loc.air_vent_names -= id_tag
|
||||
return ..()
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/can_crawl_through()
|
||||
return !welded
|
||||
|
||||
#undef INT_BOUND
|
||||
#undef EXT_BOUND
|
||||
#undef NO_BOUND
|
||||
|
||||
#undef SIPHONING
|
||||
#undef RELEASING
|
||||
@@ -1,3 +1,6 @@
|
||||
#define SIPHONING 0
|
||||
#define SCRUBBING 1
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber
|
||||
icon_state = "scrub_map"
|
||||
|
||||
@@ -22,7 +25,7 @@
|
||||
var/list/turf/simulated/adjacent_turfs = list()
|
||||
|
||||
var/on = 0
|
||||
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
|
||||
var/scrubbing = SCRUBBING //0 = siphoning, 1 = scrubbing
|
||||
var/scrub_CO2 = 1
|
||||
var/scrub_Toxins = 0
|
||||
var/scrub_N2O = 0
|
||||
@@ -48,9 +51,13 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/Destroy()
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,frequency)
|
||||
radio_connection = null
|
||||
if(initial_loc)
|
||||
initial_loc.air_scrub_info -= id_tag
|
||||
initial_loc.air_scrub_names -= id_tag
|
||||
initial_loc = null
|
||||
for(var/I in adjacent_turfs)
|
||||
I = null
|
||||
return ..()
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/auto_use_power()
|
||||
if(!powered(power_channel))
|
||||
@@ -62,14 +69,14 @@
|
||||
|
||||
var/amount = idle_power_usage
|
||||
|
||||
if (scrubbing)
|
||||
if(scrubbing & SCRUBBING)
|
||||
if (scrub_CO2)
|
||||
amount += idle_power_usage
|
||||
if (scrub_Toxins)
|
||||
amount += idle_power_usage
|
||||
if (scrub_N2O)
|
||||
amount += idle_power_usage
|
||||
else
|
||||
else //scrubbing == SIPHONING
|
||||
amount = active_power_usage
|
||||
|
||||
if (widenet)
|
||||
@@ -86,13 +93,13 @@
|
||||
icon_state = "scrub_welded"
|
||||
return
|
||||
|
||||
if(!nodes[NODE1] || !on || stat & (NOPOWER|BROKEN))
|
||||
if(!NODE1 || !on || stat & (NOPOWER|BROKEN))
|
||||
icon_state = "scrub_off"
|
||||
return
|
||||
|
||||
if(scrubbing)
|
||||
if(scrubbing & SCRUBBING)
|
||||
icon_state = "scrub_on"
|
||||
else
|
||||
else //scrubbing == SIPHONING
|
||||
icon_state = "scrub_purge"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/set_frequency(new_frequency)
|
||||
@@ -142,7 +149,7 @@
|
||||
..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if (!nodes[NODE1])
|
||||
if (!NODE1)
|
||||
on = 0
|
||||
//broadcast_status()
|
||||
if(!on || welded)
|
||||
@@ -159,9 +166,9 @@
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/environment = tile.return_air()
|
||||
var/datum/gas_mixture/air_contents = airs[AIR1]
|
||||
var/datum/gas_mixture/air_contents = AIR1
|
||||
|
||||
if(scrubbing)
|
||||
if(scrubbing & SCRUBBING)
|
||||
if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0))
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
|
||||
|
||||
@@ -312,3 +319,6 @@
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/can_crawl_through()
|
||||
return !welded
|
||||
|
||||
#undef SIPHONING
|
||||
#undef SCRUBBING
|
||||
@@ -185,6 +185,7 @@ var/pipenetwarnings = 10
|
||||
air.temperature += self_temperature_delta
|
||||
|
||||
modeled_location.air.temperature += sharer_temperature_delta
|
||||
modeled_location.air_update_turf()
|
||||
|
||||
|
||||
else
|
||||
@@ -208,8 +209,8 @@ var/pipenetwarnings = 10
|
||||
GL += P.other_airs
|
||||
for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch)
|
||||
if(V.open)
|
||||
PL |= V.parents["p1"]
|
||||
PL |= V.parents["p2"]
|
||||
PL |= V.PARENT1
|
||||
PL |= V.PARENT2
|
||||
for(var/obj/machinery/atmospherics/components/unary/portables_connector/C in P.other_atmosmch)
|
||||
if(C.connected_device)
|
||||
GL += C.portableConnectorReturnAir()
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
////////////
|
||||
//HE Pipes
|
||||
////////////
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging
|
||||
icon = 'icons/obj/atmospherics/pipes/heat.dmi'
|
||||
icon_state = "intact"
|
||||
level = 2
|
||||
var/initialize_directions_he
|
||||
var/minimum_temperature_difference = 20
|
||||
var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
|
||||
color = "#404040"
|
||||
buckle_lying = 1
|
||||
var/icon_temperature = T20C //stop small changes in temperature causing icon refresh
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/New()
|
||||
..()
|
||||
color = "#404040"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/SetInitDirections()
|
||||
switch(dir)
|
||||
if(SOUTH)
|
||||
initialize_directions_he = SOUTH|NORTH
|
||||
if(NORTH)
|
||||
initialize_directions_he = SOUTH|NORTH
|
||||
if(EAST)
|
||||
initialize_directions_he = EAST|WEST
|
||||
if(WEST)
|
||||
initialize_directions_he = WEST|EAST
|
||||
if(NORTHEAST)
|
||||
initialize_directions_he = NORTH|EAST
|
||||
if(NORTHWEST)
|
||||
initialize_directions_he = NORTH|WEST
|
||||
if(SOUTHEAST)
|
||||
initialize_directions_he = SOUTH|EAST
|
||||
if(SOUTHWEST)
|
||||
initialize_directions_he = SOUTH|WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/GetInitDirections()
|
||||
return ..() | initialize_directions_he
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/atmosinit()
|
||||
normalize_dir()
|
||||
var/N = 2
|
||||
for(var/D in cardinal)
|
||||
if(D & initialize_directions_he)
|
||||
N--
|
||||
for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src, D))
|
||||
if(target.initialize_directions_he & get_dir(target,src))
|
||||
if(!node1 && N == 1)
|
||||
node1 = target
|
||||
break
|
||||
if(!node2 && N == 0)
|
||||
node2 = target
|
||||
break
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process_atmos()
|
||||
var/environment_temperature = 0
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
|
||||
if(istype(loc, /turf/simulated))
|
||||
if(loc:blocks_air)
|
||||
environment_temperature = loc:temperature
|
||||
else
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
environment_temperature = environment.temperature
|
||||
else
|
||||
environment_temperature = loc:temperature
|
||||
|
||||
if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference)
|
||||
parent.temperature_interact(loc, volume, thermal_conductivity)
|
||||
|
||||
|
||||
//heatup/cooldown any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/hc = pipe_air.heat_capacity()
|
||||
var/avg_temp = (pipe_air.temperature * hc + buckled_mob.bodytemperature * 3500) / (hc + 3500)
|
||||
pipe_air.temperature = avg_temp
|
||||
buckled_mob.bodytemperature = avg_temp
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process()
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
//Burn any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/heat_limit = 1000
|
||||
if(pipe_air.temperature > heat_limit + 1)
|
||||
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, "chest")
|
||||
|
||||
//Heat causes pipe to glow
|
||||
if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //glow starts at 500K
|
||||
if(abs(pipe_air.temperature - icon_temperature) > 10)
|
||||
icon_temperature = pipe_air.temperature
|
||||
|
||||
var/h_r = heat2colour_r(icon_temperature)
|
||||
var/h_g = heat2colour_g(icon_temperature)
|
||||
var/h_b = heat2colour_b(icon_temperature)
|
||||
|
||||
if(icon_temperature < 2000)//scale glow until 2000K
|
||||
var/scale = (icon_temperature - 500) / 1500
|
||||
h_r = 64 + (h_r - 64) * scale
|
||||
h_g = 64 + (h_g - 64) * scale
|
||||
h_b = 64 + (h_b - 64) * scale
|
||||
|
||||
animate(src, color = rgb(h_r, h_g, h_b), time = 20, easing = SINE_EASING)
|
||||
|
||||
////////////////
|
||||
//HE Junctions
|
||||
////////////////
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction
|
||||
icon = 'icons/obj/atmospherics/pipes/junction.dmi'
|
||||
icon_state = "intact"
|
||||
level = 2
|
||||
minimum_temperature_difference = 300
|
||||
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/normalize_dir()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/SetInitDirections()
|
||||
switch(dir)
|
||||
if(SOUTH)
|
||||
initialize_directions = NORTH
|
||||
initialize_directions_he = SOUTH
|
||||
if(NORTH)
|
||||
initialize_directions = SOUTH
|
||||
initialize_directions_he = NORTH
|
||||
if(EAST)
|
||||
initialize_directions = WEST
|
||||
initialize_directions_he = EAST
|
||||
if(WEST)
|
||||
initialize_directions = EAST
|
||||
initialize_directions_he = WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/update_icon()
|
||||
if(node1&&node2)
|
||||
icon_state = "intact"
|
||||
else
|
||||
var/have_node1 = node1?1:0
|
||||
var/have_node2 = node2?1:0
|
||||
icon_state = "exposed[have_node1][have_node2]"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/atmosinit()
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
node1 = target
|
||||
break
|
||||
for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he))
|
||||
if(target.initialize_directions_he & get_dir(target,src))
|
||||
node2 = target
|
||||
break
|
||||
update_icon()
|
||||
..()
|
||||
@@ -0,0 +1,75 @@
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/
|
||||
icon = 'icons/obj/atmospherics/pipes/heat.dmi'
|
||||
level = 2
|
||||
var/initialize_directions_he
|
||||
var/minimum_temperature_difference = 20
|
||||
var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
|
||||
color = "#404040"
|
||||
buckle_lying = 1
|
||||
var/icon_temperature = T20C //stop small changes in temperature causing icon refresh
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/New()
|
||||
..()
|
||||
color = "#404040"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/can_be_node(obj/machinery/atmospherics/pipe/heat_exchanging/target)
|
||||
if(!istype(target))
|
||||
return 0
|
||||
if(target.initialize_directions_he & get_dir(target,src))
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/hide()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/GetInitDirections()
|
||||
return ..() | initialize_directions_he
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/process_atmos()
|
||||
var/environment_temperature = 0
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
|
||||
var/turf/simulated/T = loc
|
||||
if(istype(T))
|
||||
if(T.blocks_air)
|
||||
environment_temperature = T.temperature
|
||||
else
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
environment_temperature = environment.temperature
|
||||
else
|
||||
environment_temperature = T.temperature
|
||||
|
||||
if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference)
|
||||
parent.temperature_interact(T, volume, thermal_conductivity)
|
||||
|
||||
|
||||
//heatup/cooldown any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/hc = pipe_air.heat_capacity()
|
||||
var/avg_temp = (pipe_air.temperature * hc + buckled_mob.bodytemperature * 3500) / (hc + 3500)
|
||||
pipe_air.temperature = avg_temp
|
||||
buckled_mob.bodytemperature = avg_temp
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/process()
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
//Burn any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/heat_limit = 1000
|
||||
if(pipe_air.temperature > heat_limit + 1)
|
||||
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, "chest")
|
||||
|
||||
//Heat causes pipe to glow
|
||||
if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //glow starts at 500K
|
||||
if(abs(pipe_air.temperature - icon_temperature) > 10)
|
||||
icon_temperature = pipe_air.temperature
|
||||
|
||||
var/h_r = heat2colour_r(icon_temperature)
|
||||
var/h_g = heat2colour_g(icon_temperature)
|
||||
var/h_b = heat2colour_b(icon_temperature)
|
||||
|
||||
if(icon_temperature < 2000)//scale glow until 2000K
|
||||
var/scale = (icon_temperature - 500) / 1500
|
||||
h_r = 64 + (h_r - 64) * scale
|
||||
h_g = 64 + (h_g - 64) * scale
|
||||
h_b = 64 + (h_b - 64) * scale
|
||||
|
||||
animate(src, color = rgb(h_r, h_g, h_b), time = 20, easing = SINE_EASING)
|
||||
@@ -0,0 +1,51 @@
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/junction
|
||||
icon = 'icons/obj/atmospherics/pipes/junction.dmi'
|
||||
icon_state = "intact"
|
||||
|
||||
name = "junction"
|
||||
desc = "A one meter junction that connects regular and heat-exchanging pipe"
|
||||
|
||||
minimum_temperature_difference = 300
|
||||
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
|
||||
volume = 70
|
||||
|
||||
dir = SOUTH
|
||||
initialize_directions = NORTH
|
||||
initialize_directions_he = SOUTH
|
||||
|
||||
device_type = BINARY
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/SetInitDirections()
|
||||
switch(dir)
|
||||
if(SOUTH)
|
||||
initialize_directions = NORTH
|
||||
initialize_directions_he = SOUTH
|
||||
if(NORTH)
|
||||
initialize_directions = SOUTH
|
||||
initialize_directions_he = NORTH
|
||||
if(EAST)
|
||||
initialize_directions = WEST
|
||||
initialize_directions_he = EAST
|
||||
if(WEST)
|
||||
initialize_directions = EAST
|
||||
initialize_directions_he = WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/atmosinit()
|
||||
var/node2_connect = dir
|
||||
var/node1_connect = turn(dir, 180)
|
||||
var/list/node_connects = list(node1_connect, node2_connect)
|
||||
|
||||
..(node_connects)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/junction/can_be_node(obj/machinery/atmospherics/target, iteration)
|
||||
var/init_dir
|
||||
switch(iteration)
|
||||
if(1)
|
||||
init_dir = target.initialize_directions
|
||||
if(2)
|
||||
var/obj/machinery/atmospherics/pipe/heat_exchanging/H = target
|
||||
if(!istype(H))
|
||||
return 0
|
||||
init_dir = H.initialize_directions_he
|
||||
if(init_dir & get_dir(target,src))
|
||||
return 1
|
||||
@@ -0,0 +1,35 @@
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/simple
|
||||
icon_state = "intact"
|
||||
|
||||
name = "pipe"
|
||||
desc = "A one meter section of heat-exchanging pipe"
|
||||
|
||||
volume = 70
|
||||
|
||||
dir = SOUTH
|
||||
initialize_directions_he = SOUTH|NORTH
|
||||
|
||||
device_type = BINARY
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/SetInitDirections()
|
||||
if(dir in diagonals)
|
||||
initialize_directions_he = dir
|
||||
switch(dir)
|
||||
if(NORTH,SOUTH)
|
||||
initialize_directions_he = SOUTH|NORTH
|
||||
if(EAST,WEST)
|
||||
initialize_directions_he = WEST|EAST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/proc/normalize_dir()
|
||||
if(dir==SOUTH)
|
||||
dir = NORTH
|
||||
else if(dir==WEST)
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/atmosinit()
|
||||
normalize_dir()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon()
|
||||
normalize_dir()
|
||||
..()
|
||||
@@ -1,8 +1,6 @@
|
||||
|
||||
/*
|
||||
3-Way Manifold
|
||||
*/
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold
|
||||
icon = 'icons/obj/atmospherics/pipes/manifold.dmi'
|
||||
icon_state = "manifold"
|
||||
@@ -15,17 +13,7 @@
|
||||
dir = SOUTH
|
||||
initialize_directions = EAST|NORTH|WEST
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
var/obj/machinery/atmospherics/node3
|
||||
|
||||
level = 1
|
||||
layer = 2.4 //under wires with their 2.44
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/New()
|
||||
color = pipe_color
|
||||
|
||||
..()
|
||||
device_type = TRINARY
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/SetInitDirections()
|
||||
switch(dir)
|
||||
@@ -38,59 +26,6 @@
|
||||
if(WEST)
|
||||
initialize_directions = NORTH|EAST|SOUTH
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/atmosinit()
|
||||
for(var/D in cardinal)
|
||||
if(D == dir)
|
||||
continue
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, D))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
if(turn(dir, 90) == D)
|
||||
node1 = target
|
||||
if(turn(dir, 270) == D)
|
||||
node2 = target
|
||||
if(turn(dir, 180) == D)
|
||||
node3 = target
|
||||
break
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/Destroy()
|
||||
if(node1)
|
||||
var/obj/machinery/atmospherics/A = node1
|
||||
node1.disconnect(src)
|
||||
node1 = null
|
||||
A.build_network()
|
||||
if(node2)
|
||||
var/obj/machinery/atmospherics/A = node2
|
||||
node2.disconnect(src)
|
||||
node2 = null
|
||||
A.build_network()
|
||||
if(node3)
|
||||
var/obj/machinery/atmospherics/A = node3
|
||||
node3.disconnect(src)
|
||||
node3 = null
|
||||
A.build_network()
|
||||
releaseAirToTurf()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
if(reference == node3)
|
||||
if(istype(node3, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node3 = null
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/update_icon()
|
||||
var/invis = invisibility ? "-f" : ""
|
||||
|
||||
@@ -99,32 +34,9 @@
|
||||
overlays.Cut()
|
||||
|
||||
//Add non-broken pieces
|
||||
if(node1)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src,node1))
|
||||
|
||||
if(node2)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src,node2))
|
||||
|
||||
if(node3)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src,node3))
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/hide(i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion()
|
||||
return list(node1, node2, node3)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/update_node_icon()
|
||||
..()
|
||||
if(node1)
|
||||
node1.update_icon()
|
||||
if(node2)
|
||||
node2.update_icon()
|
||||
if(node3)
|
||||
node3.update_icon()
|
||||
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
if(NODE_I)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))
|
||||
|
||||
//Colored pipes, use these for mapping
|
||||
/obj/machinery/atmospherics/pipe/manifold/general
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
4-way manifold
|
||||
*/
|
||||
@@ -13,97 +12,12 @@
|
||||
|
||||
initialize_directions = NORTH|SOUTH|EAST|WEST
|
||||
|
||||
var/obj/machinery/atmospherics/node1 // North
|
||||
var/obj/machinery/atmospherics/node2 // South
|
||||
var/obj/machinery/atmospherics/node3 // East
|
||||
var/obj/machinery/atmospherics/node4 // West
|
||||
|
||||
level = 1
|
||||
layer = 2.4 //under wires with their 2.44
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/New()
|
||||
color = pipe_color
|
||||
..()
|
||||
device_type = QUATERNARY
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/atmosinit()
|
||||
for(var/D in cardinal)
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, D))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
if(D == NORTH)
|
||||
node1 = target
|
||||
else if(D == SOUTH)
|
||||
node2 = target
|
||||
else if(D == EAST)
|
||||
node3 = target
|
||||
else if(D == WEST)
|
||||
node4 = target
|
||||
break
|
||||
|
||||
var/turf/T = src.loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/hide(i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/pipeline_expansion()
|
||||
return list(node1, node2, node3, node4)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/Destroy()
|
||||
if(node1)
|
||||
var/obj/machinery/atmospherics/A = node1
|
||||
node1.disconnect(src)
|
||||
node1 = null
|
||||
A.build_network()
|
||||
if(node2)
|
||||
var/obj/machinery/atmospherics/A = node2
|
||||
node2.disconnect(src)
|
||||
node2 = null
|
||||
A.build_network()
|
||||
if(node3)
|
||||
var/obj/machinery/atmospherics/A = node3
|
||||
node3.disconnect(src)
|
||||
node3 = null
|
||||
A.build_network()
|
||||
if(node4)
|
||||
var/obj/machinery/atmospherics/A = node4
|
||||
node4.disconnect(src)
|
||||
node4 = null
|
||||
A.build_network()
|
||||
releaseAirToTurf()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
if(reference == node3)
|
||||
if(istype(node3, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node3 = null
|
||||
if(reference == node4)
|
||||
if(istype(node4, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node4 = null
|
||||
update_icon()
|
||||
..()
|
||||
initialize_directions = initial(initialize_directions)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/update_icon()
|
||||
if(!node1 && !node2 && !node3 && !node4) //Remove us if we ain't connected to anything.
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/invis = invisibility ? "-f" : ""
|
||||
|
||||
icon_state = "manifold4w_center[invis]"
|
||||
@@ -111,28 +25,9 @@
|
||||
overlays.Cut()
|
||||
|
||||
//Add non-broken pieces
|
||||
if(node1)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", NORTH)
|
||||
|
||||
if(node2)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", SOUTH)
|
||||
|
||||
if(node3)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", EAST)
|
||||
|
||||
if(node4)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", WEST)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/update_node_icon()
|
||||
..()
|
||||
if(node1)
|
||||
node1.update_icon()
|
||||
if(node2)
|
||||
node2.update_icon()
|
||||
if(node3)
|
||||
node3.update_icon()
|
||||
if(node4)
|
||||
node4.update_icon()
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
if(NODE_I)
|
||||
overlays += getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))
|
||||
|
||||
//Colored pipes, use these for mapping
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/general
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
/obj/machinery/atmospherics/pipe
|
||||
var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke
|
||||
var/volume = 0
|
||||
|
||||
level = 1
|
||||
layer = 2.4 //under wires with their 2.44
|
||||
|
||||
use_power = 0
|
||||
can_unwrench = 1
|
||||
var/datum/pipeline/parent = null
|
||||
@@ -11,8 +14,32 @@
|
||||
buckle_requires_restraints = 1
|
||||
buckle_lying = -1
|
||||
|
||||
/obj/machinery/atmospherics/proc/pipeline_expansion()
|
||||
return null
|
||||
/obj/machinery/atmospherics/pipe/New()
|
||||
color = pipe_color
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/nullifyNode(I)
|
||||
var/obj/machinery/atmospherics/oldN = NODE_I
|
||||
..()
|
||||
oldN.build_network()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/update_icon() //overridden by manifolds
|
||||
if(NODE1&&NODE2)
|
||||
icon_state = "intact[invisibility ? "-f" : "" ]"
|
||||
else
|
||||
var/have_node1 = NODE1?1:0
|
||||
var/have_node2 = NODE2?1:0
|
||||
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/atmosinit()
|
||||
var/turf/T = loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/hide(i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure)
|
||||
//Return 1 if parent should continue checking other pipes
|
||||
@@ -50,14 +77,24 @@
|
||||
parent = P
|
||||
|
||||
/obj/machinery/atmospherics/pipe/Destroy()
|
||||
releaseAirToTurf()
|
||||
qdel(air_temporary)
|
||||
air_temporary = null
|
||||
|
||||
var/turf/T = loc
|
||||
for(var/obj/machinery/meter/meter in T)
|
||||
if(meter.target == src)
|
||||
var/obj/item/pipe_meter/PM = new (T)
|
||||
meter.transfer_fingerprints_to(PM)
|
||||
qdel(meter)
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
if(parent && !parent.gc_destroyed)
|
||||
qdel(parent)
|
||||
parent = null
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/update_node_icon()
|
||||
//Used for pipe painting. Overriden in the children.
|
||||
return
|
||||
for(DEVICE_TYPE_LOOP)
|
||||
if(NODE_I)
|
||||
var/obj/machinery/atmospherics/N = NODE_I
|
||||
N.update_icon()
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
Simple Pipe
|
||||
The regular pipe you see everywhere, including bent ones.
|
||||
@@ -16,108 +15,30 @@ The regular pipe you see everywhere, including bent ones.
|
||||
dir = SOUTH
|
||||
initialize_directions = SOUTH|NORTH
|
||||
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node2
|
||||
|
||||
level = 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/New()
|
||||
color = pipe_color
|
||||
|
||||
..()
|
||||
|
||||
device_type = BINARY
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/SetInitDirections()
|
||||
if(dir in diagonals)
|
||||
initialize_directions = dir
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
if(NORTH,SOUTH)
|
||||
initialize_directions = SOUTH|NORTH
|
||||
if(SOUTH)
|
||||
initialize_directions = SOUTH|NORTH
|
||||
if(EAST)
|
||||
if(EAST,WEST)
|
||||
initialize_directions = EAST|WEST
|
||||
if(WEST)
|
||||
initialize_directions = EAST|WEST
|
||||
if(NORTHEAST)
|
||||
initialize_directions = NORTH|EAST
|
||||
if(NORTHWEST)
|
||||
initialize_directions = NORTH|WEST
|
||||
if(SOUTHEAST)
|
||||
initialize_directions = SOUTH|EAST
|
||||
if(SOUTHWEST)
|
||||
initialize_directions = SOUTH|WEST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/atmosinit()
|
||||
normalize_dir()
|
||||
var/N = 2
|
||||
for(var/D in cardinal)
|
||||
if(D & initialize_directions)
|
||||
N--
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, D))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
if(!node1 && N == 1)
|
||||
node1 = target
|
||||
break
|
||||
if(!node2 && N == 0)
|
||||
node2 = target
|
||||
break
|
||||
var/turf/T = loc // hide if turf is not intact
|
||||
hide(T.intact)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/Destroy()
|
||||
if(node1)
|
||||
var/obj/machinery/atmospherics/A = node1
|
||||
node1.disconnect(src)
|
||||
node1 = null
|
||||
A.build_network()
|
||||
if(node2)
|
||||
var/obj/machinery/atmospherics/A = node2
|
||||
node2.disconnect(src)
|
||||
node2 = null
|
||||
A.build_network()
|
||||
releaseAirToTurf()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node1 = null
|
||||
if(reference == node2)
|
||||
if(istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
qdel(parent)
|
||||
node2 = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir()
|
||||
if(dir==2)
|
||||
dir = 1
|
||||
else if(dir==8)
|
||||
dir = 4
|
||||
if(dir==SOUTH)
|
||||
dir = NORTH
|
||||
else if(dir==WEST)
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/update_icon()
|
||||
if(node1&&node2)
|
||||
icon_state = "intact[invisibility ? "-f" : "" ]"
|
||||
else
|
||||
var/have_node1 = node1?1:0
|
||||
var/have_node2 = node2?1:0
|
||||
icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/hide(i)
|
||||
if(level == 1 && istype(loc, /turf/simulated))
|
||||
invisibility = i ? 101 : 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/pipeline_expansion()
|
||||
return list(node1, node2)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/update_node_icon()
|
||||
normalize_dir()
|
||||
..()
|
||||
if(node1)
|
||||
node1.update_icon()
|
||||
if(node2)
|
||||
node2.update_icon()
|
||||
|
||||
//Colored pipes, use these for mapping
|
||||
/obj/machinery/atmospherics/pipe/simple/general
|
||||
|
||||
@@ -0,0 +1,191 @@
|
||||
|
||||
//Ok so it's technically a double linked list, bite me.
|
||||
|
||||
/datum/linked_list
|
||||
var/datum/linked_node/head
|
||||
var/datum/linked_node/tail
|
||||
var/node_amt = 0
|
||||
|
||||
|
||||
/datum/linked_node
|
||||
var/value = null
|
||||
var/datum/linked_list/linked_list = null
|
||||
var/datum/linked_node/next_node = null
|
||||
var/datum/linked_node/previous_node = null
|
||||
|
||||
|
||||
/datum/linked_list/proc/IsEmpty()
|
||||
. = (node_amt <= 0)
|
||||
|
||||
|
||||
//Add a linked_node (or value, creating a linked_node) at position
|
||||
//the added node BECOMES the position-th element,
|
||||
//eg: add("Test",5), the 5th node is now "Test", the previous 5th moves up to become the 6th
|
||||
/datum/linked_list/proc/Add(node, position)
|
||||
var/datum/linked_node/adding
|
||||
if(istype(node, /datum/linked_node))
|
||||
adding = node
|
||||
else
|
||||
adding = new()
|
||||
adding.value = node
|
||||
|
||||
if(!adding.linked_list || (adding.linked_list && (adding.linked_list != src)))
|
||||
node_amt++
|
||||
|
||||
adding.linked_list = src
|
||||
|
||||
if(position && position < node_amt)
|
||||
//Replacing head
|
||||
if(position == 1)
|
||||
if(head)
|
||||
head.previous_node = adding
|
||||
adding.next_node = head
|
||||
head = adding
|
||||
|
||||
//Replacing any middle node
|
||||
else
|
||||
var/location = 0
|
||||
var/datum/linked_node/at
|
||||
while((location != position) && (location <= node_amt))
|
||||
if(at)
|
||||
if(at.next_node)
|
||||
at = at.next_node
|
||||
else
|
||||
break
|
||||
else
|
||||
at = head
|
||||
location++
|
||||
|
||||
//Push at up and assume it's place as the position-th element
|
||||
if(at && at.previous_node)
|
||||
at.previous_node.next_node = adding
|
||||
adding.previous_node = at.previous_node
|
||||
at.previous_node = adding
|
||||
adding.next_node = at
|
||||
return
|
||||
|
||||
//Replacing tail
|
||||
if(tail)
|
||||
tail.next_node = adding
|
||||
adding.previous_node = tail
|
||||
if(!tail.previous_node)
|
||||
head = tail
|
||||
tail = adding
|
||||
|
||||
|
||||
|
||||
//Remove a linked_node or the linked_node of a value
|
||||
//If you specify a value the FIRST ONE is removed
|
||||
/datum/linked_list/proc/Remove(node)
|
||||
var/datum/linked_node/removing
|
||||
if(istype(node,/datum/linked_node))
|
||||
removing = node
|
||||
else
|
||||
//optimise removing head and tail, no point looping for them, especially the tail
|
||||
if(removing == head)
|
||||
removing = head
|
||||
else if(removing == tail)
|
||||
removing = tail
|
||||
else
|
||||
var/location = 1
|
||||
var/current_value = null
|
||||
var/datum/linked_node/at = null
|
||||
while((current_value != node) && (location <= node_amt))
|
||||
if(at)
|
||||
if(at.next_node)
|
||||
at = at.next_node
|
||||
else
|
||||
at = head
|
||||
location++
|
||||
if(at)
|
||||
current_value = at.value
|
||||
if(current_value == node)
|
||||
removing = at
|
||||
break
|
||||
|
||||
//Adjust pointers of where removing -was- in the chain.
|
||||
if(removing)
|
||||
if(removing.previous_node)
|
||||
if(removing == tail)
|
||||
tail = removing.previous_node
|
||||
if(removing.next_node)
|
||||
if(removing == head)
|
||||
head = removing.next_node
|
||||
removing.next_node.previous_node = removing.previous_node
|
||||
removing.previous_node.next_node = removing.next_node
|
||||
else
|
||||
removing.previous_node.next_node = null
|
||||
else
|
||||
if(removing.next_node)
|
||||
if(removing == head)
|
||||
head = removing.next_node
|
||||
removing.next_node.previous_node = null
|
||||
|
||||
//if this is still true at this point, there's no more nodes to replace them with
|
||||
if(removing == head)
|
||||
head = null
|
||||
if(removing == tail)
|
||||
tail = null
|
||||
|
||||
removing.next_node = null
|
||||
removing.previous_node = null
|
||||
if(removing.linked_list == src)
|
||||
node_amt--
|
||||
removing.linked_list = null
|
||||
|
||||
return removing
|
||||
return 0
|
||||
|
||||
|
||||
//Removes and deletes a node or value
|
||||
/datum/linked_list/proc/RemoveDelete(node)
|
||||
var/datum/linked_node/dead = Remove(node)
|
||||
if(dead)
|
||||
qdel(dead)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
//Empty the linked_list, deleting all nodes
|
||||
/datum/linked_list/proc/Empty()
|
||||
var/datum/linked_node/n = head
|
||||
while(n)
|
||||
var/next = n.next_node
|
||||
Remove(n)
|
||||
qdel(n)
|
||||
n = next
|
||||
node_amt = 0
|
||||
|
||||
|
||||
//Some debugging tools
|
||||
/datum/linked_list/proc/CheckNodeLinks()
|
||||
var/datum/linked_node/n = head
|
||||
while(n)
|
||||
. = "|[n.value]|"
|
||||
if(n.previous_node)
|
||||
. = "[n.previous_node.value]<-" + .
|
||||
if(n.next_node)
|
||||
. += "->[n.next_node.value]"
|
||||
n = n.next_node
|
||||
. += "<BR>"
|
||||
|
||||
|
||||
/datum/linked_list/proc/DrawNodeLinks()
|
||||
. = "|<-"
|
||||
var/datum/linked_node/n = head
|
||||
while(n)
|
||||
if(n.previous_node)
|
||||
. += "<-"
|
||||
. += "[n.value]"
|
||||
if(n.next_node)
|
||||
. += "->"
|
||||
n = n.next_node
|
||||
. += "->|"
|
||||
|
||||
|
||||
/datum/linked_list/proc/ToList()
|
||||
. = list()
|
||||
var/datum/linked_node/n = head
|
||||
while(n)
|
||||
. += n
|
||||
n = n.next_node
|
||||
@@ -0,0 +1,65 @@
|
||||
|
||||
//////////////////////
|
||||
//PriorityQueue object
|
||||
//////////////////////
|
||||
|
||||
//an ordered list, using the cmp proc to weight the list elements
|
||||
/PriorityQueue
|
||||
var/list/L //the actual queue
|
||||
var/cmp //the weight function used to order the queue
|
||||
|
||||
/PriorityQueue/New(compare)
|
||||
L = new()
|
||||
cmp = compare
|
||||
|
||||
/PriorityQueue/proc/IsEmpty()
|
||||
return !L.len
|
||||
|
||||
//add an element in the list,
|
||||
//immediatly ordering it to its position using Insertion sort
|
||||
/PriorityQueue/proc/Enqueue(atom/A)
|
||||
var/i
|
||||
L.Add(A)
|
||||
i = L.len -1
|
||||
while(i > 0 && call(cmp)(L[i],A) >= 0) //place the element at it's right position using the compare proc
|
||||
L.Swap(i,i+1) //last inserted element being first in case of ties (optimization)
|
||||
i--
|
||||
|
||||
//removes and returns the first element in the queue
|
||||
/PriorityQueue/proc/Dequeue()
|
||||
if(!L.len)
|
||||
return 0
|
||||
. = L[1]
|
||||
Remove(.)
|
||||
return .
|
||||
|
||||
//removes an element
|
||||
/PriorityQueue/proc/Remove(atom/A)
|
||||
return L.Remove(A)
|
||||
|
||||
//returns a copy of the elements list
|
||||
/PriorityQueue/proc/List()
|
||||
var/list/ret = L.Copy()
|
||||
return ret
|
||||
|
||||
//return the position of an element or 0 if not found
|
||||
/PriorityQueue/proc/Seek(atom/A)
|
||||
return L.Find(A)
|
||||
|
||||
//return the element at the i_th position
|
||||
/PriorityQueue/proc/Get(i)
|
||||
if(i > L.len || i < 1)
|
||||
return 0
|
||||
return L[i]
|
||||
|
||||
//replace the passed element at it's right position using the cmp proc
|
||||
/PriorityQueue/proc/ReSort(atom/A)
|
||||
var/i = Seek(A)
|
||||
if(i == 0)
|
||||
return
|
||||
while(i < L.len && call(cmp)(L[i],L[i+1]) > 0)
|
||||
L.Swap(i,i+1)
|
||||
i++
|
||||
while(i > 1 && call(cmp)(L[i],L[i-1]) <= 0) //last inserted element being first in case of ties (optimization)
|
||||
L.Swap(i,i-1)
|
||||
i--
|
||||
@@ -0,0 +1,56 @@
|
||||
/datum/stack
|
||||
var/list/stack = list()
|
||||
var/max_elements = 0
|
||||
|
||||
/datum/stack/New(list/elements,max)
|
||||
..()
|
||||
if(elements)
|
||||
stack = elements.Copy()
|
||||
if(max)
|
||||
max_elements = max
|
||||
|
||||
/datum/stack/proc/Pop()
|
||||
if(is_empty())
|
||||
return null
|
||||
. = stack[stack.len]
|
||||
stack.Cut(stack.len,0)
|
||||
|
||||
/datum/stack/proc/Push(element)
|
||||
if(max_elements && (stack.len+1 > max_elements))
|
||||
return null
|
||||
stack += element
|
||||
|
||||
/datum/stack/proc/Top()
|
||||
if(is_empty())
|
||||
return null
|
||||
. = stack[stack.len]
|
||||
|
||||
/datum/stack/proc/is_empty()
|
||||
. = stack.len ? 0 : 1
|
||||
|
||||
//Rotate entire stack left with the leftmost looping around to the right
|
||||
/datum/stack/proc/RotateLeft()
|
||||
if(is_empty())
|
||||
return 0
|
||||
. = stack[1]
|
||||
stack.Cut(1,2)
|
||||
Push(.)
|
||||
|
||||
//Rotate entire stack to the right with the rightmost looping around to the left
|
||||
/datum/stack/proc/RotateRight()
|
||||
if(is_empty())
|
||||
return 0
|
||||
. = stack[stack.len]
|
||||
stack.Cut(stack.len,0)
|
||||
stack.Insert(1,.)
|
||||
|
||||
|
||||
/datum/stack/proc/Copy()
|
||||
var/datum/stack/S=new()
|
||||
S.stack = stack.Copy()
|
||||
S.max_elements = max_elements
|
||||
return S
|
||||
|
||||
|
||||
/datum/stack/proc/Clear()
|
||||
stack.Cut()
|
||||
@@ -106,9 +106,42 @@
|
||||
#define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE
|
||||
#define MAX_HIGH_PRESSURE_DAMAGE 4 //This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :(
|
||||
#define LOW_PRESSURE_DAMAGE 2 //The amounb of damage someone takes when in a low pressure area (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
|
||||
|
||||
#define COLD_SLOWDOWN_FACTOR 20 //Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
|
||||
|
||||
#define COLD_SLOWDOWN_FACTOR 20 //Humans are slowed by the difference between bodytemp and BODYTEMP_COLD_DAMAGE_LIMIT divided by this
|
||||
|
||||
// Atmos pipe limits
|
||||
#define MAX_OUTPUT_PRESSURE 4500 // (kPa) What pressure pumps and powered equipment max out at.
|
||||
#define MAX_TRANSFER_RATE 200 // (L/s) Maximum speed powered equipment can work at.
|
||||
#define MAX_TRANSFER_RATE 200 // (L/s) Maximum speed powered equipment can work at.
|
||||
|
||||
//Atmos machinery pipenet stuff
|
||||
|
||||
// used for device_type vars; used by DEVICE_TYPE_LOOP
|
||||
#define UNARY 1
|
||||
#define BINARY 2
|
||||
#define TRINARY 3
|
||||
#define QUATERNARY 4
|
||||
|
||||
// this is the standard for loop used by all sorts of atmos machinery procs
|
||||
#define DEVICE_TYPE_LOOP var/I = 1; I <= device_type; I++
|
||||
|
||||
// defines for the various machinery lists
|
||||
// NODE_I, AIR_I, PARENT_I are used within DEVICE_TYPE_LOOP
|
||||
|
||||
// nodes list - all atmos machinery
|
||||
#define NODE1 nodes[1]
|
||||
#define NODE2 nodes[2]
|
||||
#define NODE3 nodes[3]
|
||||
#define NODE4 nodes[4]
|
||||
#define NODE_I nodes[I]
|
||||
|
||||
// airs list - components only
|
||||
#define AIR1 airs[1]
|
||||
#define AIR2 airs[2]
|
||||
#define AIR3 airs[3]
|
||||
#define AIR_I airs[I]
|
||||
|
||||
// parents list - components only
|
||||
#define PARENT1 parents[1]
|
||||
#define PARENT2 parents[2]
|
||||
#define PARENT3 parents[3]
|
||||
#define PARENT_I parents[I]
|
||||
@@ -244,6 +244,25 @@
|
||||
#define FACING_EACHOTHER 2
|
||||
#define FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR 3 //Do I win the most informative but also most stupid define award?
|
||||
|
||||
|
||||
//Cache of bloody footprint images
|
||||
//Key:
|
||||
//"entered-[blood_state]-[dir_of_image]"
|
||||
//or: "exited-[blood_state]-[dir_of_image]"
|
||||
var/list/bloody_footprints_cache = list()
|
||||
|
||||
//Bloody shoes/footprints
|
||||
#define MAX_SHOE_BLOODINESS 100
|
||||
#define BLOODY_FOOTPRINT_BASE_ALPHA 100
|
||||
#define BLOOD_GAIN_PER_STEP 50
|
||||
#define BLOOD_LOSS_PER_STEP 5
|
||||
#define BLOOD_FADEOUT_TIME 2
|
||||
|
||||
//Bloody shoe blood states
|
||||
#define BLOOD_STATE_HUMAN "blood"
|
||||
#define BLOOD_STATE_XENO "xeno"
|
||||
#define BLOOD_STATE_OIL "oil"
|
||||
#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever"
|
||||
//Turf wet states
|
||||
#define TURF_DRY 0
|
||||
#define TURF_WET_WATER 1
|
||||
|
||||
@@ -8,8 +8,8 @@ Construction breaks otherwise
|
||||
#define PIPE_SIMPLE /obj/machinery/atmospherics/pipe/simple
|
||||
#define PIPE_MANIFOLD /obj/machinery/atmospherics/pipe/manifold
|
||||
#define PIPE_4WAYMANIFOLD /obj/machinery/atmospherics/pipe/manifold4w
|
||||
#define PIPE_HE /obj/machinery/atmospherics/pipe/simple/heat_exchanging
|
||||
#define PIPE_JUNCTION /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction
|
||||
#define PIPE_HE /obj/machinery/atmospherics/pipe/heat_exchanging/simple
|
||||
#define PIPE_JUNCTION /obj/machinery/atmospherics/pipe/heat_exchanging/junction
|
||||
//Unary
|
||||
#define PIPE_CONNECTOR /obj/machinery/atmospherics/components/unary/portables_connector
|
||||
#define PIPE_UVENT /obj/machinery/atmospherics/components/unary/vent_pump
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#define SOUND_INSTRUMENTS 128
|
||||
#define SOUND_SHIP_AMBIENCE 256
|
||||
#define SOUND_PRAYERS 512
|
||||
#define ANNOUNCE_LOGIN 1024
|
||||
|
||||
#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS)
|
||||
|
||||
@@ -43,4 +44,4 @@
|
||||
#define BE_GANG 4096
|
||||
#define BE_SHADOWLING 8192
|
||||
#define BE_ABDUCTOR 16384
|
||||
#define BE_REVENANT 32768
|
||||
#define BE_REVENANT 32768
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#define DEBUG //Enables byond profiling and full runtime logs - note, this may also be defined in your .dme file
|
||||
//#define TESTING //Enables in-depth debug messages to runtime log (used for debugging)
|
||||
//By using the testing("message") proc you can create debug-feedback for people with this
|
||||
//#define TESTING //Enables in-depth debug messages to runtime log (used for debugging) //By using the testing("message") proc you can create debug-feedback for people with this
|
||||
//uncommented, but not visible in the release version)
|
||||
|
||||
#define PRELOAD_RSC 1 /*set to:
|
||||
|
||||
@@ -165,6 +165,9 @@
|
||||
|
||||
var/autoconvert_notes = 0 //if all connecting player's notes should attempt to be converted to the database
|
||||
|
||||
var/announce_admin_logout = 0
|
||||
var/announce_admin_login = 0
|
||||
|
||||
/datum/configuration/New()
|
||||
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
|
||||
for(var/T in L)
|
||||
@@ -347,6 +350,10 @@
|
||||
world.log = newlog
|
||||
if("autoconvert_notes")
|
||||
config.autoconvert_notes = 1
|
||||
if("announce_admin_logout")
|
||||
config.announce_admin_logout = 1
|
||||
if("announce_admin_login")
|
||||
config.announce_admin_login = 1
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
|
||||
// the types are stored as strings
|
||||
|
||||
var/list/noqdelhint = list()// list of all types that do not return a QDEL_HINT
|
||||
|
||||
/datum/subsystem/garbage_collector/New()
|
||||
NEW_SS_GLOBAL(SSgarbage)
|
||||
|
||||
@@ -99,7 +101,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
if (!A)
|
||||
return
|
||||
if (!istype(A))
|
||||
//warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.")
|
||||
del(A)
|
||||
else if (isnull(A.gc_destroyed))
|
||||
// Let our friend know they're about to get fucked up.
|
||||
@@ -120,14 +121,14 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
if (QDEL_HINT_PUTINPOOL) //qdel will put this object in the pool.
|
||||
PlaceInPool(A,0)
|
||||
if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion.
|
||||
#ifdef TESTING
|
||||
A.to_be_queued = TRUE
|
||||
A.find_references()
|
||||
#else
|
||||
SSgarbage.Queue(A)
|
||||
#ifdef TESTING
|
||||
A.find_references()
|
||||
#endif
|
||||
else
|
||||
testing("WARNING: \ref[A] \[[A.type]] is not returning a qdel hint. It is being placed in the queue.")
|
||||
if(!("[A.type]" in SSgarbage.noqdelhint))
|
||||
SSgarbage.noqdelhint += "[A.type]"
|
||||
testing("WARNING: [A.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
|
||||
SSgarbage.Queue(A)
|
||||
|
||||
// Returns 1 if the object has been queued for deletion.
|
||||
@@ -150,7 +151,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
#ifdef TESTING
|
||||
/client/var/running_find_references
|
||||
/datum/var/running_find_references
|
||||
/datum/var/to_be_queued = FALSE
|
||||
|
||||
/datum/verb/find_references()
|
||||
set category = "Debug"
|
||||
@@ -164,14 +164,18 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
testing("CANCELLED search for references to a [usr.client.running_find_references].")
|
||||
usr.client.running_find_references = null
|
||||
running_find_references = null
|
||||
//restart the garbage collector
|
||||
SSgarbage.can_fire = 1
|
||||
SSgarbage.next_fire = world.time + world.tick_lag
|
||||
return
|
||||
|
||||
if(alert("Running this will create a lot of lag until it finishes. You can cancel it by running it again. Would you like to begin the search?", "Find References", "Yes", "No") == "No")
|
||||
running_find_references = null
|
||||
return
|
||||
// Remove this object from the list of things to be auto-deleted.
|
||||
if(SSgarbage && ("\ref[src]" in SSgarbage.queue))
|
||||
SSgarbage.queue -= "\ref[src]"
|
||||
|
||||
//this keeps the garbage collector from failing to collect objects being searched for in here
|
||||
SSgarbage.can_fire = 0
|
||||
|
||||
if(usr && usr.client)
|
||||
usr.client.running_find_references = type
|
||||
|
||||
@@ -196,9 +200,9 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
usr.client.running_find_references = null
|
||||
running_find_references = null
|
||||
|
||||
if(to_be_queued == TRUE)
|
||||
to_be_queued = FALSE
|
||||
SSgarbage.Queue(src)
|
||||
//restart the garbage collector
|
||||
SSgarbage.can_fire = 1
|
||||
SSgarbage.next_fire = world.time + world.tick_lag
|
||||
|
||||
/client/verb/purge_all_destroyed_objects()
|
||||
set category = "Debug"
|
||||
@@ -218,6 +222,5 @@ var/datum/subsystem/garbage_collector/SSgarbage
|
||||
|
||||
qdel(src)
|
||||
if(!running_find_references)
|
||||
to_be_queued = TRUE //find_references removes the object from the queue;
|
||||
find_references() //this ensures the object will be queued again once find_references has completed
|
||||
find_references()
|
||||
#endif
|
||||
@@ -128,21 +128,23 @@ var/datum/subsystem/shuttle/SSshuttle
|
||||
return
|
||||
|
||||
/datum/subsystem/shuttle/proc/cancelEvac(mob/user)
|
||||
if(canRecall())
|
||||
emergency.cancel(get_area(user))
|
||||
log_game("[key_name(user)] has recalled the shuttle.")
|
||||
message_admins("[key_name_admin(user)] has recalled the shuttle.")
|
||||
return 1
|
||||
|
||||
/datum/subsystem/shuttle/proc/canRecall()
|
||||
if(emergency.mode != SHUTTLE_CALL)
|
||||
return
|
||||
|
||||
if(ticker.mode.name == "meteor")
|
||||
return
|
||||
|
||||
if((seclevel2num(get_security_level()) == SEC_LEVEL_RED))
|
||||
if(seclevel2num(get_security_level()) == SEC_LEVEL_RED)
|
||||
if(emergency.timeLeft(1) < emergencyCallTime * 0.25)
|
||||
return
|
||||
else if(emergency.timeLeft(1) < emergencyCallTime * 0.5)
|
||||
return
|
||||
|
||||
emergency.cancel(get_area(user))
|
||||
log_game("[key_name(user)] has recalled the shuttle.")
|
||||
message_admins("[key_name_admin(user)] has recalled the shuttle.")
|
||||
else
|
||||
if(emergency.timeLeft(1) < emergencyCallTime * 0.5)
|
||||
return
|
||||
return 1
|
||||
|
||||
/datum/subsystem/shuttle/proc/autoEvac()
|
||||
@@ -199,19 +201,6 @@ var/datum/subsystem/shuttle/SSshuttle
|
||||
return 2
|
||||
return 0 //dock successful
|
||||
|
||||
|
||||
/*
|
||||
/proc/push_mob_back(var/mob/living/L, var/dir)
|
||||
if(iscarbon(L) && isturf(L.loc))
|
||||
if(prob(88))
|
||||
var/turf/T = get_step(L, dir)
|
||||
if(T)
|
||||
for(var/obj/O in T) // For doors and such (kinda ugly but we can't have people opening doors)
|
||||
if(!O.CanPass(L, L.loc, 1))
|
||||
return
|
||||
L.Move(get_step(L, dir), dir)
|
||||
*/
|
||||
|
||||
/datum/supply_order
|
||||
var/ordernum
|
||||
var/datum/supply_packs/object = null
|
||||
@@ -333,11 +322,3 @@ var/datum/subsystem/shuttle/SSshuttle
|
||||
|
||||
return O
|
||||
|
||||
/*
|
||||
/datum/subsystem/shuttle/proc/getShuttleFromArea(area/A)
|
||||
if(!A)
|
||||
return
|
||||
for(var/obj/docking_port/mobile/M in SSshuttle.mobile)
|
||||
if(M.areaInstance == A)
|
||||
return M
|
||||
*/
|
||||
|
||||
+7
-6
@@ -256,9 +256,9 @@
|
||||
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
|
||||
|
||||
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 += "|<a href='?src=\ref[src];revolution=takeflash'>take</a>."
|
||||
else
|
||||
text += "|<a href='?src=\ref[src];revolution=takeflash'>take</a>|<a href='?src=\ref[src];revolution=repairflash'>repair</a>."
|
||||
@@ -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 << "<span class='danger'>Deleting flash failed!</span>"
|
||||
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 << "<span class='danger'>Repairing flash failed!</span>"
|
||||
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
|
||||
|
||||
@@ -40,7 +40,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
var/selection_type = "view" //can be "range" or "view"
|
||||
var/spell_level = 0 //if a spell can be taken multiple times, this raises
|
||||
var/level_max = 4 //The max possible level_max is 4
|
||||
var/cooldown_min = 0 //This defines what spell quickened four timeshas as a cooldown. Make sure to set this for every spell
|
||||
var/cooldown_min = 0 //This defines what spell quickened four times has as a cooldown. Make sure to set this for every spell
|
||||
|
||||
var/overlay = 0
|
||||
var/overlay_icon = 'icons/obj/wizard.dmi'
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/obj/effect/proc_holder/spell/bloodcrawl
|
||||
name = "Blood crawl"
|
||||
desc = "Use blood to travel."
|
||||
charge_max = 10
|
||||
clothes_req = 0
|
||||
selection_type = "range"
|
||||
range = 1
|
||||
cooldown_min = 0
|
||||
overlay = null
|
||||
action_icon_state = "bloodcrawl"
|
||||
var/phased = 0
|
||||
|
||||
/obj/effect/proc_holder/spell/bloodcrawl/choose_targets(mob/user = usr)
|
||||
for(var/obj/effect/decal/cleanable/target in range(range, get_turf(user)))
|
||||
if(istype(target, /obj/effect/decal/cleanable/blood) || istype(target, /obj/effect/decal/cleanable/trail_holder))
|
||||
perform(target)
|
||||
return
|
||||
revert_cast()
|
||||
user << "<span class='warning'>You need blood to blood crawl.</span>"
|
||||
|
||||
/obj/effect/proc_holder/spell/bloodcrawl/perform(obj/effect/decal/cleanable/target, recharge = 1, mob/living/user = usr)
|
||||
if(istype(user))
|
||||
if(phased)
|
||||
if(user.phasein(target))
|
||||
phased = 0
|
||||
else
|
||||
user.phaseout(target)
|
||||
phased = 1
|
||||
start_recharge()
|
||||
return
|
||||
revert_cast()
|
||||
user << "<span class='warning'>You cannot blood crawl.</span>"
|
||||
@@ -1,7 +1,6 @@
|
||||
/obj/effect/proc_holder/spell/targeted/touch
|
||||
/obj/effect/proc_holder/spell/targeted/touch/
|
||||
var/hand_path = "/obj/item/weapon/melee/touch_attack"
|
||||
var/obj/item/weapon/melee/touch_attack/attached_hand = null
|
||||
var/refund_coeff = 1 //how much of their charge they get back.
|
||||
invocation_type = "none" //you scream on connecting, not summoning
|
||||
include_user = 1
|
||||
range = -1
|
||||
@@ -9,7 +8,7 @@
|
||||
/obj/effect/proc_holder/spell/targeted/touch/Click(mob/user = usr)
|
||||
if(attached_hand)
|
||||
qdel(attached_hand)
|
||||
charge_counter = round(charge_max * refund_coeff, 1)
|
||||
charge_counter = charge_max
|
||||
attached_hand = null
|
||||
user << "<span class='notice'>You draw the power out of your hand.</span>"
|
||||
return 0
|
||||
@@ -49,7 +48,6 @@
|
||||
name = "Disintegrate"
|
||||
desc = "This spell charges your hand with vile energy that can be used to violently explode victims."
|
||||
hand_path = "/obj/item/weapon/melee/touch_attack/disintegrate"
|
||||
refund_coeff = 0.66
|
||||
|
||||
school = "evocation"
|
||||
charge_max = 600
|
||||
@@ -58,15 +56,6 @@
|
||||
|
||||
action_icon_state = "gib"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/disintegrate/cast(list/targets)
|
||||
for(var/mob/living/carbon/user in targets)
|
||||
visible_message("<span class='danger'>[user] starts gathering destructive energy...</span>", "<span class='danger'>You start gathering destructive energy...</span>")
|
||||
playsound(user.loc, 'sound/magic/Ethereal_Exit.ogg', 50, 1)
|
||||
if(!do_after(user, 15))
|
||||
return 0
|
||||
visible_message("<span class='userdanger'>[user] channels a large amount of destructive energy to his hand!</span>", "<span class='danger'>You channel a large amount of destructive energy to his hand!</span>")
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone
|
||||
name = "Flesh to Stone"
|
||||
desc = "This spell charges your hand with the power to turn victims into inert statues for a long period of time."
|
||||
|
||||
@@ -477,7 +477,7 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/stealthy_tools/camera_bug
|
||||
name = "Camera Bug"
|
||||
desc = "Enables you to bug cameras to view them remotely. Adding particular items to it alters its functions."
|
||||
desc = "Enables you to view all cameras on the network and track a target. Bugging cameras allows you to disable them remotely"
|
||||
item = /obj/item/device/camera_bug
|
||||
cost = 1
|
||||
surplus = 90
|
||||
@@ -526,7 +526,7 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/storage/belt/military
|
||||
cost = 3
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
|
||||
/datum/uplink_item/device_tools/medkit
|
||||
name = "Syndicate Combat Medic Kit"
|
||||
desc = "The syndicate medkit is a suspicious black and red. Included is a combat stimulant injector for rapid healing, a medical hud for quick identification of injured comrades, \
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -277,9 +277,9 @@
|
||||
var/datum/objective/objective = team_objectives[team_number]
|
||||
var/team_name = team_names[team_number]
|
||||
if(console.experiment.points >= objective.target_amount)
|
||||
world << "<span class='greentext'><b>[team_name] team fullfilled its mission!</b></span>"
|
||||
world << "<span class='greenannounce'>[team_name] team fullfilled its mission!</span>"
|
||||
else
|
||||
world << "<span class='greentext'><b>[team_name] team failed its mission.</b></span>"
|
||||
world << "<span class='boldannounce'>[team_name] team failed its mission.</span>"
|
||||
..()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@
|
||||
var/datum/game_mode/blob/blob_mode = src
|
||||
if(blob_mode.infected_crew.len)
|
||||
var/text = "<FONT size = 2><B>The blob[(blob_mode.infected_crew.len > 1 ? "s were" : " was")]:</B></FONT>"
|
||||
|
||||
for(var/datum/mind/blob in blob_mode.infected_crew)
|
||||
text += "<br><b>[blob.key]</b> was <b>[blob.name]</b>"
|
||||
text += printplayer(blob)
|
||||
world << text
|
||||
return 1
|
||||
return 1
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore
|
||||
name = "blob"
|
||||
desc = "Some blob thing."
|
||||
desc = "A floating, fragile spore."
|
||||
icon_state = "blobpod"
|
||||
icon_living = "blobpod"
|
||||
health = 40
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut
|
||||
name = "blobbernaut"
|
||||
desc = "Some HUGE blob thing."
|
||||
desc = "A hulking, mobile chunk of blobmass."
|
||||
icon_state = "blobbernaut"
|
||||
icon_living = "blobbernaut"
|
||||
icon_dead = "blobbernaut_dead"
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
name = "blob core"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blank_blob"
|
||||
desc = "A huge, pulsating yellow mass."
|
||||
health = 200
|
||||
fire_resist = 2
|
||||
explosion_block = 6
|
||||
var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 30 seconds
|
||||
var/resource_delay = 0
|
||||
var/point_rate = 2
|
||||
@@ -44,6 +46,9 @@
|
||||
/obj/effect/blob/core/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
return
|
||||
|
||||
/obj/effect/blob/core/ex_act(severity, target)
|
||||
return
|
||||
|
||||
/obj/effect/blob/core/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "factory blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_factory"
|
||||
desc = "A thick spire of tendrils."
|
||||
health = 100
|
||||
fire_resist = 2
|
||||
var/list/spores = list()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "blob node"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blank_blob"
|
||||
desc = "A large, pulsating yellow mass."
|
||||
health = 100
|
||||
fire_resist = 2
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "resource blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_resource"
|
||||
desc = "A thin spire of slightly swaying tendrils."
|
||||
health = 30
|
||||
fire_resist = 2
|
||||
var/resource_delay = 0
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
name = "strong blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_idle"
|
||||
desc = "Some blob creature thingy"
|
||||
desc = "A solid wall of slightly twitching tendrils."
|
||||
health = 75
|
||||
explosion_block = 3
|
||||
fire_resist = 2
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "storage blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_resource"
|
||||
desc = "A huge, smooth mass supported by tendrils."
|
||||
health = 30
|
||||
fire_resist = 2
|
||||
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
name = "blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
luminosity = 3
|
||||
desc = "Some blob creature thingy"
|
||||
desc = "A thick wall of writhing tendrils."
|
||||
density = 0
|
||||
opacity = 0
|
||||
anchored = 1
|
||||
explosion_block = 1
|
||||
var/health = 30
|
||||
var/health_timestamp = 0
|
||||
var/brute_resist = 4
|
||||
|
||||
@@ -313,11 +313,11 @@
|
||||
if(!check_cult_victory())
|
||||
feedback_set_details("round_end_result","win - cult win")
|
||||
feedback_set("round_end_result",acolytes_survived)
|
||||
world << "<span class='danger'><FONT size = 3>The cult wins! It has succeeded in serving its dark masters!</FONT></span>"
|
||||
world << "<span class='redtext'>The cult wins! It has succeeded in serving its dark masters!</span>"
|
||||
else
|
||||
feedback_set_details("round_end_result","loss - staff stopped the cult")
|
||||
feedback_set("round_end_result",acolytes_survived)
|
||||
world << "<span class='danger'><FONT size = 3>The staff managed to stop the cult!</FONT></span>"
|
||||
world << "<span class='redtext'>The staff managed to stop the cult!</span>"
|
||||
|
||||
var/text = ""
|
||||
|
||||
@@ -328,28 +328,28 @@
|
||||
switch(cult_objectives[obj_count])
|
||||
if("survive")
|
||||
if(!check_survive())
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. ([acolytes_survived] escaped) <font color='green'><B>Success!</B></font>"
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. ([acolytes_survived] escaped) <span class='greenannounce'>Success!</span>"
|
||||
feedback_add_details("cult_objective","cult_survive|SUCCESS|[acolytes_needed]")
|
||||
else
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. ([acolytes_survived] escaped) <span class='danger'>Fail.</span>"
|
||||
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. ([acolytes_survived] escaped) <span class='boldannounce'>Fail.</span>"
|
||||
feedback_add_details("cult_objective","cult_survive|FAIL|[acolytes_needed]")
|
||||
if("sacrifice")
|
||||
if(sacrifice_target)
|
||||
if(sacrifice_target in sacrificed)
|
||||
explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. <font color='green'><B>Success!</B></font>"
|
||||
explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. <span class='greenannounce'>Success!</span>"
|
||||
feedback_add_details("cult_objective","cult_sacrifice|SUCCESS")
|
||||
else if(sacrifice_target && sacrifice_target.current)
|
||||
explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. <span class='danger'>Fail.</span>"
|
||||
explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. <span class='boldannounce'>Fail.</span>"
|
||||
feedback_add_details("cult_objective","cult_sacrifice|FAIL")
|
||||
else
|
||||
explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. <span class='danger'>Fail (Gibbed).</span>"
|
||||
explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. <span class='boldannounce'>Fail (Gibbed).</span>"
|
||||
feedback_add_details("cult_objective","cult_sacrifice|FAIL|GIBBED")
|
||||
if("eldergod")
|
||||
if(!eldergod)
|
||||
explanation = "Summon Nar-Sie. <font color='green'><B>Success!</B></font>"
|
||||
explanation = "Summon Nar-Sie. <span class='greenannounce'>Success!</span>"
|
||||
feedback_add_details("cult_objective","cult_narsie|SUCCESS")
|
||||
else
|
||||
explanation = "Summon Nar-Sie. <span class='danger'>Fail.</span>"
|
||||
explanation = "Summon Nar-Sie. <span class='boldannounce'>Fail.</span>"
|
||||
feedback_add_details("cult_objective","cult_narsie|FAIL")
|
||||
text += "<br><B>Objective #[obj_count]</B>: [explanation]"
|
||||
|
||||
|
||||
@@ -471,17 +471,19 @@
|
||||
if(M.client && M.client.holder)
|
||||
M << msg
|
||||
|
||||
/datum/game_mode/proc/printplayer(datum/mind/ply)
|
||||
/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck)
|
||||
var/text = "<br><b>[ply.key]</b> was <b>[ply.name]</b> the <b>[ply.assigned_role]</b> and"
|
||||
if(ply.current)
|
||||
if(ply.current.stat == DEAD)
|
||||
text += " <font color='red'><b>died</b></font>"
|
||||
text += " <span class='boldannounce'>died</span>"
|
||||
else
|
||||
text += " <font color='green'><b>survived</b></font>"
|
||||
text += " <span class='greenannounce'>survived</span>"
|
||||
if(fleecheck && ply.current.z > ZLEVEL_STATION)
|
||||
text += " while <span class='boldannounce'>fleeing the station</span>"
|
||||
if(ply.current.real_name != ply.name)
|
||||
text += " as <b>[ply.current.real_name]</b>"
|
||||
else
|
||||
text += " <font color='red'><b>had their body destroyed</b></font>"
|
||||
text += " <span class='boldannounce'>had their body destroyed</span>"
|
||||
return text
|
||||
|
||||
/datum/game_mode/proc/printobjectives(datum/mind/ply)
|
||||
@@ -489,9 +491,9 @@
|
||||
var/count = 1
|
||||
for(var/datum/objective/objective in ply.objectives)
|
||||
if(objective.check_completion())
|
||||
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <font color='green'><b>Success!</b></font>"
|
||||
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='greenannounce'>Success!</span>"
|
||||
else
|
||||
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='danger'>Fail.</span>"
|
||||
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='boldannounce'>Fail.</span>"
|
||||
count++
|
||||
return text
|
||||
|
||||
|
||||
@@ -248,39 +248,20 @@ var/list/gang_colors_pool = list("red","orange","yellow","green","blue","purple"
|
||||
/datum/game_mode/proc/auto_declare_completion_gang(datum/gang/winner)
|
||||
if(gangs.len)
|
||||
if(!winner)
|
||||
world << "<FONT size=3 color=red><B>The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]</B></FONT><br>"
|
||||
world << "<span class='redtext'>The station was [station_was_nuked ? "destroyed!" : "evacuated before a gang could claim it! The station wins!"]</span><br>"
|
||||
else
|
||||
world << "<FONT size=3 color=red><B>The [winner.name] Gang successfully performed a hostile takeover of the station!</B></FONT><br>"
|
||||
world << "<span class='redtext'>The [winner.name] Gang successfully performed a hostile takeover of the station!</span><br>"
|
||||
|
||||
for(var/datum/gang/G in gangs)
|
||||
world << "<br><b>The [G.name] Gang was [winner==G ? "<font color=green>victorious</font>" : "<font color=red>defeated</font>"] with [round((G.territory.len/start_state.num_territories)*100, 1)]% control of the station!</b>"
|
||||
world << "<br>The [G.name] Gang Bosses were:"
|
||||
gang_membership_report(G.bosses)
|
||||
world << "<br>The [G.name] Gangsters were:"
|
||||
gang_membership_report(G.gangsters)
|
||||
world << "<br>"
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/proc/gang_membership_report(list/membership)
|
||||
var/text = ""
|
||||
for(var/datum/mind/gang_mind in membership)
|
||||
text += "<br><b>[gang_mind.key]</b> was <b>[gang_mind.name]</b> ("
|
||||
if(gang_mind.current)
|
||||
if(gang_mind.current.stat == DEAD || isbrain(gang_mind.current))
|
||||
text += "died"
|
||||
else if(gang_mind.current.z > ZLEVEL_STATION)
|
||||
text += "fled the station"
|
||||
else
|
||||
text += "survived"
|
||||
if(gang_mind.current.real_name != gang_mind.name)
|
||||
text += " as <b>[gang_mind.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
|
||||
world << text
|
||||
|
||||
var/text = "<b>The [G.name] Gang was [winner==G ? "<span class='greenannounce'>victorious</span>" : "<span class='boldannounce'>defeated</span>"] with [round((G.territory.len/start_state.num_territories)*100, 1)]% control of the station!</b>"
|
||||
text += "<br>The [G.name] Gang Bosses were:"
|
||||
for(var/datum/mind/boss in G.bosses)
|
||||
text += printplayer(boss, 1)
|
||||
text += "<br>The [G.name] Gangsters were:"
|
||||
for(var/datum/mind/gangster in G.gangsters)
|
||||
text += printplayer(gangster, 1)
|
||||
text += "<br>"
|
||||
world << text
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
//Handles influence, territories, and the victory checks//
|
||||
|
||||
@@ -286,24 +286,12 @@
|
||||
if( malf_ai.len || istype(ticker.mode,/datum/game_mode/malfunction) )
|
||||
var/text = "<br><FONT size=3><B>The malfunctioning AIs were:</B></FONT>"
|
||||
var/module_text_temp = "<br><b>Purchased modules:</b><br>" //Added at the end
|
||||
|
||||
for(var/datum/mind/malf in malf_ai)
|
||||
|
||||
text += "<br><b>[malf.key]</b> was <b>[malf.name]</b> ("
|
||||
text += printplayer(malf, 1)
|
||||
if(malf.current)
|
||||
if(malf.current.stat == DEAD)
|
||||
text += "deactivated"
|
||||
else
|
||||
text += "operational"
|
||||
if(malf.current.real_name != malf.name)
|
||||
text += " as <b>[malf.current.real_name]</b>"
|
||||
var/mob/living/silicon/ai/AI = malf.current
|
||||
for(var/datum/AI_Module/mod in AI.current_modules)
|
||||
module_text_temp += mod.module_name + "<br>"
|
||||
else
|
||||
text += "hardware destroyed"
|
||||
text += ")"
|
||||
text += module_text_temp
|
||||
|
||||
world << text
|
||||
return 1
|
||||
|
||||
@@ -278,36 +278,18 @@
|
||||
/datum/game_mode/proc/auto_declare_completion_nuclear()
|
||||
if( syndicates.len || (ticker && istype(ticker.mode,/datum/game_mode/nuclear)) )
|
||||
var/text = "<br><FONT size=3><B>The syndicate operatives were:</B></FONT>"
|
||||
|
||||
var/purchases = ""
|
||||
var/TC_uses = 0
|
||||
|
||||
for(var/datum/mind/syndicate in syndicates)
|
||||
|
||||
text += "<br><b>[syndicate.key]</b> was <b>[syndicate.name]</b> ("
|
||||
if(syndicate.current)
|
||||
if(syndicate.current.stat == DEAD)
|
||||
text += "died"
|
||||
else
|
||||
text += "survived"
|
||||
if(syndicate.current.real_name != syndicate.name)
|
||||
text += " as <b>[syndicate.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
|
||||
text += printplayer(syndicate)
|
||||
for(var/obj/item/device/uplink/H in world_uplinks)
|
||||
if(H && H.uplink_owner && H.uplink_owner==syndicate.key)
|
||||
TC_uses += H.used_TC
|
||||
purchases += H.purchase_log
|
||||
|
||||
text += "<br>"
|
||||
|
||||
text += "(Syndicates used [TC_uses] TC) [purchases]"
|
||||
|
||||
if(TC_uses==0 && station_was_nuked && !are_operatives_dead())
|
||||
text += "<BIG><IMG CLASS=icon SRC=\ref['icons/BadAss.dmi'] ICONSTATE='badass'></BIG>"
|
||||
|
||||
world << text
|
||||
return 1
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -321,16 +321,15 @@
|
||||
/datum/game_mode/revolution/declare_completion()
|
||||
if(finished == 1)
|
||||
feedback_set_details("round_end_result","win - heads killed")
|
||||
world << "<span class='danger'><FONT size = 3>The heads of staff were killed or exiled! The revolutionaries win!</FONT></span>"
|
||||
world << "<span class='redtext'>The heads of staff were killed or exiled! The revolutionaries win!</span>"
|
||||
else if(finished == 2)
|
||||
feedback_set_details("round_end_result","loss - rev heads killed")
|
||||
world << "<span class='danger'><FONT size = 3>The heads of staff managed to stop the revolution!</FONT></span>"
|
||||
world << "<span class='redtext'>The heads of staff managed to stop the revolution!</span>"
|
||||
..()
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_revolution()
|
||||
var/list/targets = list()
|
||||
|
||||
if(head_revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
|
||||
var/num_revs = 0
|
||||
var/num_survivors = 0
|
||||
@@ -340,78 +339,28 @@
|
||||
if(survivor.mind)
|
||||
if((survivor.mind in head_revolutionaries) || (survivor.mind in revolutionaries))
|
||||
num_revs++
|
||||
|
||||
if(num_survivors)
|
||||
world << "[TAB]Command's Approval Rating: <B>[100 - round((num_revs/num_survivors)*100, 0.1)]%</B>" // % of loyal crew
|
||||
|
||||
var/text = "<br><font size=3><b>The head revolutionaries were:</b></font>"
|
||||
|
||||
for(var/datum/mind/headrev in head_revolutionaries)
|
||||
text += "<br><b>[headrev.key]</b> was <b>[headrev.name]</b> ("
|
||||
if(headrev.current)
|
||||
if(headrev.current.stat == DEAD)
|
||||
text += "died"
|
||||
else if(headrev.current.z > ZLEVEL_STATION)
|
||||
text += "fled the station"
|
||||
else
|
||||
text += "survived the revolution"
|
||||
if(headrev.current.real_name != headrev.name)
|
||||
text += " as <b>[headrev.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
|
||||
for(var/datum/objective/mutiny/objective in headrev.objectives)
|
||||
targets |= objective.target
|
||||
text += printplayer(headrev, 1)
|
||||
text += "<br>"
|
||||
|
||||
world << text
|
||||
|
||||
if(revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
|
||||
var/text = "<br><font size=3><b>The revolutionaries were:</b></font>"
|
||||
|
||||
for(var/datum/mind/rev in revolutionaries)
|
||||
text += "<br><b>[rev.key]</b> was <b>[rev.name]</b> ("
|
||||
if(rev.current)
|
||||
if(rev.current.stat == DEAD || isbrain(rev.current))
|
||||
text += "died"
|
||||
else if(rev.current.z > ZLEVEL_STATION)
|
||||
text += "fled the station"
|
||||
else
|
||||
text += "survived the revolution"
|
||||
if(rev.current.real_name != rev.name)
|
||||
text += " as <b>[rev.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
text += printplayer(rev, 1)
|
||||
text += "<br>"
|
||||
|
||||
world << text
|
||||
|
||||
|
||||
if( head_revolutionaries.len || revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution) )
|
||||
var/text = "<br><font size=3><b>The heads of staff were:</b></font>"
|
||||
|
||||
var/list/heads = get_all_heads()
|
||||
for(var/datum/mind/head in heads)
|
||||
var/target = (head in targets)
|
||||
if(target)
|
||||
text += "<font color='red'>"
|
||||
text += "<br><b>[head.key]</b> was <b>[head.name]</b> ("
|
||||
if(head.current)
|
||||
if(head.current.stat == DEAD || isbrain(head.current))
|
||||
text += "died"
|
||||
else if(head.current.z > ZLEVEL_STATION)
|
||||
text += "fled the station"
|
||||
else
|
||||
text += "survived the revolution"
|
||||
if(head.current.real_name != head.name)
|
||||
text += " as <b>[head.current.real_name]</b>"
|
||||
else
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
if(target)
|
||||
text += "</font>"
|
||||
text += "<span class='boldannounce'>Target</span>"
|
||||
text += printplayer(head, 1)
|
||||
text += "<br>"
|
||||
|
||||
world << text
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -115,7 +115,7 @@ Made by Xhuis
|
||||
/datum/game_mode/proc/greet_shadow(datum/mind/shadow)
|
||||
shadow.current << "<b>Currently, you are disguised as an employee aboard [station_name()]].</b>"
|
||||
shadow.current << "<b>In your limited state, you have three abilities: Enthrall, Hatch, and Hivemind Commune.</b>"
|
||||
shadow.current << "<b>Any other shadowlings are you allies. You must assist them as they shall assist you.</b>"
|
||||
shadow.current << "<b>Any other shadowlings are your allies. You must assist them as they shall assist you.</b>"
|
||||
shadow.current << "<b>If you are new to shadowling, or want to read about abilities, check the wiki page at https://tgstation13.org/wiki/Shadowling</b><br>"
|
||||
|
||||
|
||||
@@ -195,13 +195,13 @@ Made by Xhuis
|
||||
|
||||
/datum/game_mode/shadowling/declare_completion()
|
||||
if(check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE) //Doesn't end instantly - this is hacky and I don't know of a better way ~X
|
||||
world << "<span class='greentext'><b>The shadowlings have ascended and taken over the station!</b></span>"
|
||||
world << "<span class='greentext'>The shadowlings have ascended and taken over the station!</span>"
|
||||
else if(shadowling_dead && !check_shadow_victory()) //If the shadowlings have ascended, they can not lose the round
|
||||
world << "<span class='redtext'><b>The shadowlings have been killed by the crew!</b></span>"
|
||||
world << "<span class='redtext'>The shadowlings have been killed by the crew!</span>"
|
||||
else if(!check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE)
|
||||
world << "<span class='redtext'><b>The crew escaped the station before the shadowlings could ascend!</b></span>"
|
||||
world << "<span class='redtext'>The crew escaped the station before the shadowlings could ascend!</span>"
|
||||
else
|
||||
world << "<span class='redtext'><b>The shadowlings have failed!</b></span>"
|
||||
world << "<span class='redtext'>The shadowlings have failed!</span>"
|
||||
..()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
|
||||
sleep(90)
|
||||
H.visible_message("<span class='warning'>[H]'s body begins to violently stretch and contort.</span>", \
|
||||
"<span class='shadowling'>You begin to rend apart the final barries to godhood.</span>")
|
||||
"<span class='shadowling'>You begin to rend apart the final barriers to godhood.</span>")
|
||||
|
||||
sleep(40)
|
||||
H << "<i><b>Yes!</b></i>"
|
||||
|
||||
@@ -505,9 +505,19 @@ var/global/list/multiverse = list()
|
||||
return src.loc == user
|
||||
|
||||
/obj/item/voodoo/attack_self(mob/user)
|
||||
if(!target)
|
||||
if(!target && possible.len)
|
||||
target = input(user, "Select your victim!", "Voodoo") as null|anything in possible
|
||||
return
|
||||
|
||||
if(user.zone_sel.selecting == "chest")
|
||||
if(link)
|
||||
target = null
|
||||
link.loc = get_turf(src)
|
||||
user << "<span class='notice'>You remove the [link] from the doll.</span>"
|
||||
link = null
|
||||
update_targets()
|
||||
return
|
||||
|
||||
if(target && cooldown < world.time)
|
||||
switch(user.zone_sel.selecting)
|
||||
if("mouth")
|
||||
@@ -542,13 +552,6 @@ var/global/list/multiverse = list()
|
||||
target.Dizzy(10)
|
||||
target << "<span class='warning'>You suddenly feel as if your head was hit with a hammer!</span>"
|
||||
GiveHint(target,user)
|
||||
if("chest")
|
||||
if(link)
|
||||
target = null
|
||||
link.loc = get_turf(src)
|
||||
user << "<span class='notice'>You remove the [link] from the doll.</span>"
|
||||
link = null
|
||||
update_targets()
|
||||
cooldown = world.time + cooldown_time
|
||||
|
||||
/obj/item/voodoo/proc/update_targets()
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
/datum/game_mode/wizard/post_setup()
|
||||
for(var/datum/mind/wizard in wizards)
|
||||
log_game("[wizard.key] (ckey) has been selected as a Wizard")
|
||||
forge_wizard_objectives(wizard)
|
||||
//learn_basic_spells(wizard.current)
|
||||
equip_wizard(wizard.current)
|
||||
forge_wizard_objectives(wizard)
|
||||
name_wizard(wizard.current)
|
||||
greet_wizard(wizard)
|
||||
if(use_huds)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
//Perform the connection
|
||||
connected_port = new_port
|
||||
connected_port.connected_device = src
|
||||
var/datum/pipeline/connected_port_parent = connected_port.parents[PARENT1]
|
||||
var/datum/pipeline/connected_port_parent = connected_port.PARENT1
|
||||
connected_port_parent.reconcile_air()
|
||||
|
||||
anchored = 1 //Prevent movement
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
w_class = 3.
|
||||
var/created_name = "Cleanbot"
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ text("<A href='?src=\ref[src];power=1'>[on ? "On" : "Off"]</A>"))
|
||||
PoolOrNew(/obj/effect/effect/foam, loc)
|
||||
|
||||
else if (prob(5))
|
||||
visible_message("[src] makes an excited beeping booping sound!")
|
||||
audible_message("[src] makes an excited beeping booping sound!")
|
||||
|
||||
if(!target) //Search for cleanables it can see.
|
||||
target = scan(/obj/effect/decal/cleanable/)
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
nag()
|
||||
|
||||
if(prob(5))
|
||||
visible_message("[src] makes an excited booping beeping sound!")
|
||||
audible_message("[src] makes an excited booping beeping sound!")
|
||||
|
||||
//Normal scanning procedure. We have tiles loaded, are not emagged.
|
||||
if(!target && emagged < 2 && amount > 0)
|
||||
@@ -289,7 +289,7 @@
|
||||
F.break_tile_to_plating()
|
||||
else
|
||||
F.ReplaceWithLattice()
|
||||
visible_message("<span class='danger'>[src] makes an excited booping sound.</span>")
|
||||
audible_message("<span class='danger'>[src] makes an excited booping sound.</span>")
|
||||
spawn(50)
|
||||
amount ++
|
||||
anchored = 0
|
||||
|
||||
@@ -26,7 +26,6 @@ var/global/mulebot_count = 0
|
||||
var/atom/movable/load = null
|
||||
bot_type = MULE_BOT
|
||||
model = "MULE"
|
||||
blood_DNA = list()
|
||||
can_buckle = 1
|
||||
buckle_lying = 0
|
||||
|
||||
@@ -426,13 +425,13 @@ obj/machinery/bot/mulebot/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
/obj/machinery/bot/mulebot/proc/buzz(type)
|
||||
switch(type)
|
||||
if(SIGH)
|
||||
visible_message("[src] makes a sighing buzz.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
audible_message("[src] makes a sighing buzz.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
if(ANNOYED)
|
||||
visible_message("[src] makes an annoyed buzzing sound.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
audible_message("[src] makes an annoyed buzzing sound.", "<span class='italics'>You hear an electronic buzzing sound.</span>")
|
||||
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
if(DELIGHT)
|
||||
visible_message("[src] makes a delighted ping!", "<span class='italics'>You hear a ping.</span>")
|
||||
audible_message("[src] makes a delighted ping!", "<span class='italics'>You hear a ping.</span>")
|
||||
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
|
||||
|
||||
@@ -725,7 +724,7 @@ obj/machinery/bot/mulebot/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
/obj/machinery/bot/mulebot/proc/at_target()
|
||||
if(!reached_target)
|
||||
radio_frequency = SUPP_FREQ //Supply channel
|
||||
visible_message("[src] makes a chiming sound!", "<span class='italics'>You hear a chime.</span>")
|
||||
audible_message("[src] makes a chiming sound!", "<span class='italics'>You hear a chime.</span>")
|
||||
playsound(loc, 'sound/machines/chime.ogg', 50, 0)
|
||||
reached_target = 1
|
||||
|
||||
@@ -801,8 +800,8 @@ obj/machinery/bot/mulebot/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = new(loc)
|
||||
B.blood_DNA[H.dna.unique_enzymes] = H.dna.blood_type
|
||||
blood_DNA[H.dna.unique_enzymes] = H.dna.blood_type
|
||||
B.add_blood_list(H)
|
||||
add_blood_list(H)
|
||||
bloodiness += 4
|
||||
|
||||
// player on mulebot attempted to move
|
||||
|
||||
@@ -424,7 +424,6 @@
|
||||
name = "The Orion Trail"
|
||||
desc = "Learn how our ancestors got to Orion, and have fun in the process!"
|
||||
|
||||
|
||||
else if(event)
|
||||
dat = eventdat
|
||||
else if(playing)
|
||||
@@ -454,7 +453,8 @@
|
||||
return
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list)
|
||||
if(..())
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(href_list["close"])
|
||||
usr.unset_machine()
|
||||
@@ -979,6 +979,7 @@
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/proc/win()
|
||||
playing = 0
|
||||
turns = 1
|
||||
say("Congratulations, you made it to Orion!")
|
||||
if(emagged)
|
||||
new /obj/item/weapon/orion_ship(src.loc)
|
||||
|
||||
@@ -783,11 +783,7 @@ About the new airlock wires panel:
|
||||
src.p_open = !( src.p_open )
|
||||
user << "<span class='notice'>You [p_open ? "open":"close"] the maintenance panel of the airlock.</span>"
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -214,7 +214,6 @@ var/global/list/pipeID2State = list(
|
||||
var/obj/machinery/atmospherics/components/trinary/T = A
|
||||
if(istype(T))
|
||||
T.flipped = flipped
|
||||
|
||||
A.construction(pipe_type, color)
|
||||
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -76,9 +76,8 @@
|
||||
update_icon()
|
||||
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
|
||||
|
||||
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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
//Wrapper procs that handle sanity and user feedback
|
||||
/obj/proc/user_buckle_mob(mob/living/M, mob/user)
|
||||
if(!user.Adjacent(M) || user.lying || user.incapacitated())
|
||||
if(!in_range(user, src) || user.stat || user.restrained())
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
@@ -76,28 +76,27 @@
|
||||
if(buckle_mob(M))
|
||||
if(M == user)
|
||||
M.visible_message(\
|
||||
"[M.name] buckles themselves to [src].",\
|
||||
"[M] buckles themself to [src].",\
|
||||
"<span class='notice'>You buckle yourself to [src].</span>",\
|
||||
"<span class='italics'>You hear metal clanking.</span>")
|
||||
else
|
||||
M.visible_message(\
|
||||
"<span class='warning'>[M.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='warning'>[user] buckles [M] to [src]!</span>",\
|
||||
"<span class='warning'>[user] buckles you to [src]!</span>",\
|
||||
"<span class='italics'>You hear metal clanking.</span>")
|
||||
|
||||
/obj/proc/user_unbuckle_mob(mob/user)
|
||||
var/mob/living/M = unbuckle_mob()
|
||||
|
||||
if(M)
|
||||
if(M != user)
|
||||
M.visible_message(\
|
||||
"[M.name] was unbuckled by [user.name].",\
|
||||
"<span class='notice'>You were unbuckled from [src] by [user.name].</span>",\
|
||||
"<span class='notice'>[user] unbuckles you from [src].",\
|
||||
"<span class='notice'>[user] unbuckles you from [src].</span>",\
|
||||
"<span class='italics'>You hear metal clanking.</span>")
|
||||
else
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] unbuckled themselves!</span>",\
|
||||
"<span class='notice'>You unbuckled yourself from [src].</span>",\
|
||||
"<span class='notice'>[M] unbuckles themselves from [src].</span>",\
|
||||
"<span class='notice'>You unbuckle yourself from [src].</span>",\
|
||||
"<span class='italics'>You hear metal clanking.</span>")
|
||||
add_fingerprint(user)
|
||||
return M
|
||||
|
||||
@@ -196,21 +196,15 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
direction_loop:
|
||||
for(var/dirn in cardinal)
|
||||
var/turf/T = get_step(src, dirn)
|
||||
if(!linked_node || get_dist(linked_node, src) > linked_node.node_range)
|
||||
return
|
||||
|
||||
if (!istype(T) || T.density || locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space))
|
||||
continue
|
||||
for(var/turf/T in U.GetAtmosAdjacentTurfs())
|
||||
|
||||
if(!linked_node || get_dist(linked_node, src) > linked_node.node_range)
|
||||
return
|
||||
if (locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space))
|
||||
continue
|
||||
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
continue direction_loop
|
||||
|
||||
new /obj/structure/alien/weeds(T, linked_node)
|
||||
new /obj/structure/alien/weeds(T, linked_node)
|
||||
|
||||
|
||||
/obj/structure/alien/weeds/ex_act(severity, target)
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
var/list/viruses = list()
|
||||
blood_DNA = list("UNKNOWN DNA" = "X*")
|
||||
bloodiness = MAX_SHOE_BLOODINESS
|
||||
blood_state = BLOOD_STATE_XENO
|
||||
|
||||
/obj/effect/decal/cleanable/xenoblood/Destroy()
|
||||
for(var/datum/disease/D in viruses)
|
||||
@@ -65,4 +67,4 @@
|
||||
/obj/effect/decal/cleanable/blood/xtracks
|
||||
icon_state = "xtracks"
|
||||
random_icon_states = null
|
||||
blood_DNA = list("UNKNOWN DNA" = "X*")
|
||||
blood_DNA = list("UNKNOWN DNA" = "X*")
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
||||
var/list/viruses = list()
|
||||
blood_DNA = list()
|
||||
blood_state = BLOOD_STATE_HUMAN
|
||||
bloodiness = MAX_SHOE_BLOODINESS
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Destroy()
|
||||
for(var/datum/disease/D in viruses)
|
||||
@@ -104,4 +106,56 @@
|
||||
/obj/effect/decal/cleanable/blood/drip/New()
|
||||
..()
|
||||
spawn(1)
|
||||
drips |= icon_state
|
||||
drips |= icon_state
|
||||
bloodiness = rand(5,15)
|
||||
|
||||
|
||||
//BLOODY FOOTPRINTS
|
||||
/obj/effect/decal/cleanable/blood/footprints
|
||||
icon = 'icons/effects/footprints.dmi'
|
||||
icon_state = "nothingwhatsoever"
|
||||
desc = "Follow the bloody brick road!"
|
||||
gender = PLURAL
|
||||
random_icon_states = null
|
||||
var/entered_dirs = 0
|
||||
var/exited_dirs = 0
|
||||
blood_state = BLOOD_STATE_HUMAN //the icon state to load images from
|
||||
|
||||
/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O)
|
||||
if(ishuman(O))
|
||||
var/mob/living/carbon/human/H = O
|
||||
if(H.shoes) //Don't need to check for blood, as the footprints will MAKE the shoes bloody
|
||||
entered_dirs|= H.dir
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O)
|
||||
if(ishuman(O))
|
||||
var/mob/living/carbon/human/H = O
|
||||
if(H.shoes)
|
||||
exited_dirs|= H.dir
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/footprints/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
for(var/Ddir in cardinal)
|
||||
if(entered_dirs & Ddir)
|
||||
var/image/I
|
||||
if(bloody_footprints_cache["entered-[blood_state]-[Ddir]"])
|
||||
I = bloody_footprints_cache["entered-[blood_state]-[Ddir]"]
|
||||
else
|
||||
I = image(icon,"[blood_state]1",dir = Ddir)
|
||||
bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I
|
||||
if(I)
|
||||
overlays += I
|
||||
if(exited_dirs & Ddir)
|
||||
var/image/I
|
||||
if(bloody_footprints_cache["exited-[blood_state]-[Ddir]"])
|
||||
I = bloody_footprints_cache["exited-[blood_state]-[Ddir]"]
|
||||
else
|
||||
I = image(icon,"[blood_state]2",dir = Ddir)
|
||||
bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I
|
||||
if(I)
|
||||
overlays += I
|
||||
|
||||
alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user