mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into VisionUpdateRefactor
Conflicts: code/_onclick/hud/alien.dm code/_onclick/hud/alien_larva.dm code/_onclick/hud/hud.dm code/_onclick/hud/human.dm code/_onclick/hud/monkey.dm code/_onclick/hud/other_mobs.dm code/_onclick/hud/robot.dm code/game/machinery/Sleeper.dm code/modules/mob/living/carbon/alien/larva/death.dm code/modules/mob/living/carbon/brain/death.dm code/modules/mob/living/carbon/human/death.dm code/modules/mob/living/carbon/human/life.dm code/modules/mob/living/carbon/human/species.dm code/modules/mob/living/carbon/life.dm code/modules/mob/living/carbon/monkey/death.dm code/modules/mob/living/death.dm code/modules/mob/living/life.dm code/modules/mob/living/silicon/ai/death.dm code/modules/mob/living/silicon/ai/life.dm code/modules/mob/living/silicon/ai/login.dm code/modules/mob/living/silicon/pai/death.dm code/modules/mob/living/silicon/robot/death.dm code/modules/mob/living/silicon/robot/robot.dm code/modules/mob/mob_defines.dm
This commit is contained in:
+2
-2
@@ -3,8 +3,8 @@ sudo: false
|
||||
|
||||
env:
|
||||
global:
|
||||
- BYOND_MAJOR="509"
|
||||
- BYOND_MINOR="1319"
|
||||
- BYOND_MAJOR="510"
|
||||
- BYOND_MINOR="1322"
|
||||
- NODE_VERSION="4"
|
||||
matrix:
|
||||
- DM_MAPFILE="tgstation2"
|
||||
|
||||
@@ -73,11 +73,6 @@ specified in the config.txt, and set the Security box to 'Safe'. Then press GO
|
||||
and the server should start up and be ready to join. It is also recommended that
|
||||
you set up the SQL backend (see below).
|
||||
|
||||
###HOSTING ON LINUX
|
||||
We use BYGEX for some of our text replacement related code. Unfortunately, we
|
||||
only have a windows dll included right now. You can find a version known to compile on linux, along with some basic install instructions here
|
||||
https://github.com/optimumtact/byond-regex
|
||||
|
||||
##UPDATING
|
||||
|
||||
To update an existing installation, first back up your /config and /data folders
|
||||
@@ -91,16 +86,22 @@ the new version.
|
||||
|
||||
##MAPS
|
||||
|
||||
/tg/station currently comes equipped with three maps.
|
||||
/tg/station currently comes equipped with seven maps.
|
||||
|
||||
* [tgstation2 (default)](http://tgstation13.org/wiki/Boxstation)
|
||||
* [MetaStation](https://tgstation13.org/wiki/MetaStation)
|
||||
* [MiniStation](http://tgstation13.org/wiki/MiniStation)
|
||||
* [AsteroidStation](https://tgstation13.org/wiki/AsteroidStation)
|
||||
* [BirdStation](https://tgstation13.org/wiki/BirdStation)
|
||||
* [DreamStation](https://tgstation13.org/wiki/Dreamstation)
|
||||
* [EfficiencyStation](https://tgstation13.org/wiki/Efficiency_Station)
|
||||
|
||||
All maps have their own code file that is in the base of the _maps directory. Instead of loading the map directly we instead use a code file to include the map and then include any other code changes that are needed for it; for example MiniStation changes the uplink items for the map. Follow this guideline when adding your own map, to your fork, for easy compatibility.
|
||||
|
||||
If you want to load a different map, just open the corresponding map's code file in Dream Maker, make sure all of the other map code files are unticked in the file tree, in the left side of the screen, and then make sure the map code file you want is ticked.
|
||||
|
||||
If you are hosting a server, and want randomly picked maps to be played each round, you can enable map rotation in [config.txt](config/config.txt) and then set the maps to be picked in the [maps.txt](config/maps.txt) file.
|
||||
|
||||
Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger)
|
||||
|
||||
##AWAY MISSIONS
|
||||
|
||||
@@ -115,8 +115,8 @@
|
||||
"ck" = (/obj/machinery/door/airlock/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
|
||||
"cl" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"cm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/academy/headmaster)
|
||||
"cn" = (/obj/machinery/computer/area_atmos/area,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"co" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"cn" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
|
||||
"co" = (/obj/machinery/portable_atmospherics/scrubber/huge,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
|
||||
"cp" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
|
||||
"cq" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/item/weapon/pen/red,/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
"cr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/academy/classrooms)
|
||||
|
||||
@@ -669,7 +669,7 @@
|
||||
"mS" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/hangar)
|
||||
"mT" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/hangar)
|
||||
"mU" = (/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/belt/utility/full,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general)
|
||||
"mV" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome)
|
||||
"mV" = (/turf/simulated/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome)
|
||||
"mW" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome)
|
||||
"mX" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome Administration"; opacity = 1; req_access_txt = "102"},/turf/simulated/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome)
|
||||
"mY" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome)
|
||||
|
||||
@@ -821,7 +821,7 @@
|
||||
"apO" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/quartermaster/office)
|
||||
"apP" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/quartermaster/office)
|
||||
"apQ" = (/obj/effect/landmark/start{name = "Quartermaster"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"apR" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/qm)
|
||||
"apR" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/qm)
|
||||
"apS" = (/obj/machinery/photocopier,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/qm)
|
||||
"apT" = (/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/qm)
|
||||
"apU" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "brown"},/area/quartermaster/qm)
|
||||
@@ -1004,7 +1004,7 @@
|
||||
"atp" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/hallway/secondary/construction{name = "Fore Central Hallway"})
|
||||
"atq" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"atr" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"ats" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"ats" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"att" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "packageExternal"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office)
|
||||
"atu" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"atv" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
@@ -1112,7 +1112,7 @@
|
||||
"avt" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/construction{name = "Fore Central Hallway"})
|
||||
"avu" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/office)
|
||||
"avv" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"avw" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel{dir = 1; icon_state = "browncorner"},/area/quartermaster/office)
|
||||
"avw" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel{dir = 1; icon_state = "browncorner"},/area/quartermaster/office)
|
||||
"avx" = (/obj/item/weapon/stamp,/obj/item/weapon/stamp/denied{force = 15; pixel_x = 3; pixel_y = 2},/obj/structure/table/glass,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"avy" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"avz" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
@@ -2322,7 +2322,6 @@
|
||||
"aSH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 1},/area/engine/engineering)
|
||||
"aSI" = (/turf/simulated/wall,/area/engine/engineering)
|
||||
"aSJ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 4},/area/engine/engineering)
|
||||
"aSK" = (/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/engine/engineering)
|
||||
"aSL" = (/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"aSM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"aSN" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
|
||||
@@ -2655,7 +2654,7 @@
|
||||
"aZc" = (/obj/machinery/light{dir = 1},/obj/machinery/airalarm{pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"aZd" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/obj/machinery/camera{c_tag = "Head of Personnel's Office"},/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"aZe" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"aZf" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"aZf" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"aZg" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"aZh" = (/obj/machinery/light{dir = 8},/obj/structure/fireaxecabinet{pixel_x = -32},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/bridge)
|
||||
"aZi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bluecorner"},/area/bridge)
|
||||
@@ -3073,7 +3072,6 @@
|
||||
"bhe" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bhf" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 5; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -6; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bhg" = (/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bhh" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bhi" = (/obj/structure/bed/chair/wood/normal{dir = 8},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bhj" = (/obj/machinery/airalarm{pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bhk" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
@@ -5723,7 +5721,7 @@
|
||||
"cgc" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/toxins/storage)
|
||||
"cgd" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"cge" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"cgf" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel,/area/toxins/storage)
|
||||
"cgf" = (/turf/simulated/floor/plasteel,/area/toxins/storage)
|
||||
"cgg" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
|
||||
"cgh" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
|
||||
"cgi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research)
|
||||
@@ -6380,7 +6378,7 @@
|
||||
"csJ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/supply)
|
||||
"csK" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"csL" = (/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/obj/machinery/conveyor{dir = 2; id = "QMLoad"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply)
|
||||
"csM" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 1; dwidth = 7; width = 12},/obj/docking_port/stationary{dir = 1; dwidth = 7; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"csM" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 1; dwidth = 7; width = 12},/obj/docking_port/stationary{dir = 1; dwidth = 7; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"csN" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/supply)
|
||||
"csO" = (/turf/simulated/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/supply)
|
||||
"csP" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape)
|
||||
@@ -6714,8 +6712,6 @@
|
||||
"czf" = (/obj/machinery/camera{c_tag = "Atmospherics South"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
|
||||
"czg" = (/obj/machinery/camera{c_tag = "Atmospherics South East"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos)
|
||||
"czh" = (/obj/machinery/camera{c_tag = "Escape Hallway East"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/hallway/secondary/exit)
|
||||
"czi" = (/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor)
|
||||
"czj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
|
||||
"czk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
|
||||
"czl" = (/obj/item/weapon/screwdriver,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/tesla_coil,/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
||||
"czm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plating/airless{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
|
||||
@@ -6880,7 +6876,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaIiaIiaOoaOpaOpaOqaOraJjaOsaOtaOuaJjaOvaOwaOxaJjaPRaOzaOAaOBaSFaODaOEaOFaOGaOHaLXaOIaOJaOKaOLaOMaONaOObexaOQaORaOSaOTaOUaHBaOVaOWaCdaDeaCdaeHbmSaeHbmSaeHaeHaeHaeGaeGaeGaIyaeHaeGaeHaeHaeHaeHaeGaeHaeHaeHaeHaeGaeHaLaaOXaOXaOXaNzaNzaOYaLbaOZaPaaPbaPcaPdaPeaPfaPgaPhaPiaPhaPjaHIaeHaeHaCFaPkaPlaACaCFaPmaPnaGPaLpaPoaMDaPoaPqaPoaLqaLraMEaPsaPtaPtaPuaPvaPwaPxaFzaLwaPyaGkaGlaGlaGlaGlaGlaGlaGlaGlaGlaGlaGlaPzaPAaGlaMTaMTaPBaPCaPDaPEaPFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaaeaaeaaeaPGaPHaOpaOpaOpaOpaOpaPIaPJaPKaPLaPMaPLaPKaPNaJjaZCaPPaPQaPPbaXaPSaPTaPUaPVaPUaJvaPVaPWbeKaPYaPZaQaaQbaMcaMcaMcaQcaOTaOUaHBaOVaQdaCdaDeaCdaeGbmSaeHbmSaeHaeHaeHaeGaeGaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaLaaQeaQeaLaaLbaQfaQgaQhaQiaQjaQkaLbaQlaNJaQmaNHaMraHIaeGaeGaCFaQnayeaQoaQpaQpaQpaQpaQqaPoaQraQsaQtaQuaLqaQvaLsaQwaLuaLuaQxaQyaQzaQAaEBaQBaCFaGkapjapjapjapjapjapjapjapjapjaQCaQDaQEaQFaQGaQDaQHaQIaQJaOmaOmaQKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaaeaQLaQMaQNaQOaQPaQQaQRaLOaQSaQTaQUaLOaQVaOpaQWaJjaJjaJjaJjaJjaJjaJjaQXaQYaQZaRaaRaaRbaRcbiMaReaRfaONaRgaRhbiNaRjaRkaRlaRmaRnaRoaCdaCdaEfaCdaICboGaeGboGaeGaeGaLaaLaaLaaLaaRqaRraRsaRraRraRraRraRtaRuaRraRraRraRsaRvaRwaRxaRyaRzaRAaRBaRCaLbaLbaRDaREaRFaRGaLbaLbaMraMraRHaMraMraHIaHHaHHaCFawIayeaACaNSaRJaRKaRLaRMaPoaRNaROaQtaQtaLqaRPaRQaRRaRSaRSaRTaRUaLqaRVaFzaRWaRXaPpaRXaRZaRXaRXaRXaRXaRXaRXaRXaSaaSbaQEaScaSdaSeaMTaMTaMTaMTaMTaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaSfaaeaaeaQLaQMaSgaShaSiaOpaSjaJjaJjaJjaJjaSkaSlaOpaSmaSnaSoaSpaJjaSqaSraJjaENaSsaSsaStaSsaSsaSsaSsaSuaSvaTSbjIbkZbkkaSxaOSaOTaOUaHBaHCaCdaSyaFZaSzaeGbnPaeHbnPaeHaeHaSAaSBaSAaSCaRraSDaSEbeRaTYaSGaSGaTYaSGaSGaSGaSGaSGaSHaSIaSJaSIaSKaSLaSMaSNaSOaSPaSQaSRaSSbBfaSUaLaaHIaHIaHIaHIaHIaHIaSVaSVaCdawIayeaACaQpaSWaSXaSYaSZaTaaTbaTcaQtaQtaLqaTdaLsaQwaLuaLuaTeaTfaLqaTgaThaTiaTjaTkaTlaRZbcKaTnaToaTmaRXaTpaTqaSaaTraTsaScaTtaTuaTvaeGaeGaeGboHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaSfaaeaaeaQLaQMaSgaShaSiaOpaSjaJjaJjaJjaJjaSkaSlaOpaSmaSnaSoaSpaJjaSqaSraJjaENaSsaSsaStaSsaSsaSsaSsaSuaSvaTSbjIbkZbkkaSxaOSaOTaOUaHBaHCaCdaSyaFZaSzaeGbnPaeHbnPaeHaeHaSAaSBaSAaSCaRraSDaSEbeRaTYaSGaSGaTYaSGaSGaSGaSGaSGaSHaSIaSJaSIbiYaSLaSMaSNaSOaSPaSQaSRaSSbBfaSUaLaaHIaHIaHIaHIaHIaHIaSVaSVaCdawIayeaACaQpaSWaSXaSYaSZaTaaTbaTcaQtaQtaLqaTdaLsaQwaLuaLuaTeaTfaLqaTgaThaTiaTjaTkaTlaRZbcKaTnaToaTmaRXaTpaTqaSaaTraTsaScaTtaTuaTvaeGaeGaeGboHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaaeaaeaaeaaeaQLaTxaSgaTyaTzaQOaTAaJjaTBaTCaTDaLOaTEaTFaTGaTHaTIaPKaTJaTKaTLaTMaTNaTOaTOaTOaTOaTOaTOaTPaTQaTRaTSaTTaMcaMcaTUaQcaTVaOUaHBaTWaCdaDeaFZaSzaeHbmSaeHbmSaeHaeHaLaaTXaLaaUdaRraTZaXfaVBbbpaVBaVBbbpaVBaVBaVBbbqaUcbbraSIaSIaUeaUfaUgaUhaUiaUiaUjaUkaUlaUmaUnaUoaUpaUqaUraUsaUtaUuaUvaEkaDkaCdaUwaUxaUyaQpaUzaUAaUBaUCaPoaUDaUEaUFaUFaUGaUHaLsaQwaLuaLuaLuaUIaLqaUJaUKaULaUMaUNaUOaUPaUQaURaUOaUQaUSaUTaUUaUVaUWaUXaUYaUZaVaaVbaaaaaaaaaboHaeGaeGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaaeaaeaaeaaeaVcaVdaVeaQMaVfaQMaQMaVgaVhaViaViaVjaVkaVlaVmaVnaVoaQMaVpaQMaVqaVraVsaNoaNoaNoaVtaNoaNoaVuaVvaVwaTSblOaNoaVyaVzaVAaNsaNtaNuaJKaCdaDeaFZaSzaeHbmSaeHbmSbnQaeGaLaaLaaLaaRraRrbbsbhRaVCaVDaVDaVDaVDaVCaVDaVDaVCaTZaVEaVFaSIaVGaVHaSLaVIaVJaVKaVLaVMaVNaVOaVPaVQaVRaUqaVSaVTaVUaCdaVVaVWaVXaCdaVYaVZaWaaWbaWcaWdblRaWfaPoaWgaWhaQtaWiaLqaWjaWkaWlaWmaWmaWmaWnaLqaWoaFzaWpaWqaWraWsaWtaWuaWvaWwaWxaWsaWyaWzaWAaWBaWCaWDaTtaWEaVbaaaaaaaaaboHaeGaHHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaWFaaeaQLaQMaWGaOpaOpaOpaWHaJjaWIaWJaWKaJjaWLaQQaWMaWNaWOaQQaWPaWQaWRaWSaWTaRhaRhaRhaRhaRhaRhaRhaWUaWVaONaOObmGaWWaORaOSaWXaWYaHBaHCaCdaWZaXaaCdaeHbmSaeHbmSbnQaeHaaiaaiaXbaXcaXdaXebhUaVDaXgaXgaXgaVDaXgaXgaXgaVDaTZaXhaSIaSIaSIaSIaXiaSIaSIaSIaXjaXkaXlaXmaXnaXoaXpaUqaXqaXraXsaCdaXtaXuaXuaXvaXwaXxaXyaQpaQpaXzaQpaQpaPoaPoaPoaXAaPoaLqaLqaXBaLqaXCaXDaLqaLqaLqayRaFzaXEaXFaXFaRZaRZaXGaRXaRXaRXaRXaRXaRXaSaaXHaXIaWDaXJaXKaVbaVbaVbaeGboHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -6890,7 +6886,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIibcpbcqbcrbcsbctaJjaWIaWJaWKaJjbcubcvbcwaZwbcxbcybczbcybcybcybcybcAbcBbcCbcDbcEbcFbcGbcHbcIbcJbeTbcLbcMbcMbcNbcObcPaNuaJKaCdaDeaFZaSzaeHbmSaeHboGbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDbcQcztbcRaVDaXgaVDaTZaYraYsaNzbcSbcTaSLaSLbcUbcVaSIbcWbcXbcYbcZbdabdbbdcbddbdebdfbdgbdhbdibdjbdkbdlayebbObajbakbdmbdnbakbdmbyGaPobdpbdqbdrbdsbdtbdubdvbaqbdwbdxbdybdzaEBbbZbaubdAaRZbdBbdCbazbazbdDbdEbaCbdFaSabdGbdHbdIbdJbdKbdLbdMaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIiaIiaIiaIiaIiaJjaJjaJjaJjaJjbdOaOpbdPaZwbdQbcybdSbdRbdTbdUbdVbdWbdXbdYbdZbeabebbecaPYbedbeeaMabefbegbefaQcaMabbkaHBaHCaCdaDeaFZaSzaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaVDaTZaYraYsaNzaNzbehbeibejbekaSIaSIbelbembenbeobepbeqaLaberaSIaSIbesbetbeuaSIaSIbevayebbObanbanbajbewbajbajbyHaPoaPoaPobeybeybezaPoaPoaYQbyIbeAaPobeBaUKbeCbeDbeEbeFbeGbdCbazbeHbeIbeJbyJbeLaSabeMbeNbpBbePaQDbcnbeQaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHbiGbiGbiGbgibghbgjbeUbeVbeWbeXaJjaSlaOpbeYaZwbeZbcybfabfbbfbbfbbfbbfcbfdbfebffbfgbfhbfibfjbfkbflbfmaNobfnaNobfobfpbfqaHBaHCaCdaDeaFZaSzaeHbmSaeHbmSbnQaeHaaiaaiaXbbfrbfsbftaYpaVDaXgaXgaXgaVDaXgaXgbfuaVDaTZaXhaSIaSIaSIaSIbfvaSIaSIaSIbfwbfxbembfybfzbfAbfBaSIbfCaSIbfDbfEbfFbfGbfHbfIbfJayebbObanbfKbfLbfMbfNbfNbfNbfNbfObfPbfQbfRbfSbfTaPobfUbfVbfWaPobfXaHbbfYaXFaXFaRZaRZbfZaRXaRXaRXaRXaRXaRXaSabgabgbbgcbgdbgebgfbggaVbaeGboHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbiGbiGbiGbiGbhAbhzbhBbgkaQMbglbgmbgnbgoaQMbgpaZwbgqbcybgrbgsbgtbgubgvbgwbgxbgybgzbgAbgBbgCbgDaZAbgEbgFbgGbgHbgIbgJaOTaOUaHBbgKaCdbgLaXaaCdaeHbmSaeHbmSbnQaeGaLaaLaaLaaRraRrbbsczmaVCaVDaVDaVCaVDaVDaVDaVDaVCaTZbgMaVFaSIaVGbgNbgObgPbgQbgRbgSaVObgTbgUbgVbgWbgXaSIbgYaSIbgZbhaaSLbhbbhcbfIbhdaPlbbObanbhebhfbbPbanbanbanbhhbhgbanbanbanbanbanbhjbanbanbanbhkbhlbhmbhnbhoaWsaWsbhpbhqbhrbhsaWsaWsbhtaWzaWAbhubhvaWDaQDbhwbhxbhyaVbaeHboHaeGaeGaHHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbiGbiGbiGbiGbhAbhzbhBbgkaQMbglbgmbgnbgoaQMbgpaZwbgqbcybgrbgsbgtbgubgvbgwbgxbgybgzbgAbgBbgCbgDaZAbgEbgFbgGbgHbgIbgJaOTaOUaHBbgKaCdbgLaXaaCdaeHbmSaeHbmSbnQaeGaLaaLaaLaaRraRrbbsczmaVCaVDaVDaVCaVDaVDaVDaVDaVCaTZbgMaVFaSIaVGbgNbgObgPbgQbgRbgSaVObgTbgUbgVbgWbgXaSIbgYaSIbgZbhaaSLbhbbhcbfIbhdaPlbbObanbhebhfbbPbanbanbanbanbhgbanbanbanbanbanbhjbanbanbanbhkbhlbhmbhnbhoaWsaWsbhpbhqbhrbhsaWsaWsbhtaWzaWAbhubhvaWDaQDbhwbhxbhyaVbaeHboHaeGaeGaHHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbiGbiGbiGbiGbiTbiCbjEbhCbhDaPJbhEaJoaPKaPKbhFaZwbcybcybcybcybcybcybhGaZwbhHbhIbhJbhKbhLbhMbhNaTRaTSbhOaMcaMcaMcaQcaTVaOUaHBaHCaCdbhPaDeaCdaeHbmSaeHbmSaeHaeHaLabhQaLaczoaRraTZbhSaSEbhTczpaSEaSEczpaSEaSEczpbcRczqaSIaSIaUebhVbhWbhXbhYbhZbhZbhZbiabibbicbidbieaLaajUaSIbifbigbihbihbiibfIbfJayebbObanbijbijbfMbikbanbanbanbanbilbimbimbimbimbimbinbfKbfKbanbhlbioaWpaWqaTmaTmbipbiqbirbirbirbisbitbiubivbiwbixbiybizbiAaVbaVbaVbaeHboHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbiGbiGbiGbiGbiHaIiaIiaIiaIibiDbiEbiFaJjaOpaOpaOpaZwbkobjCbkpbiIbiJbiIbiKaZwaZxaZxaZxaZxaZxaZxbiLaSvaONbyKaRhbyLaRjaRkaRlaRmbiObiPaCdaDeaDeaCdaeHbnPaeHbnPaeHaeHaSAbiQaSAaSCaRrbiRbiSbljbiUczrbiUbiUczrbiUbiUczrbiVbiWaSIbiXaSIbiYbiZbjabjbbjcbjdbjebjfbjgaLaaLaaLaaLaajUaSIaSIbfIbfIbfIaSIaSIbjhayebbObanbanbanbbPbanbanbjibjjbjkbanbjibjlbhibanbanbjmbjnbjlbjkbhlbiobjoaRXbjpaTpaRZbjqbjrbjsaTmaRXaTmbjtaMTbjuaQDaWDbjvbjwaVbaaaaaaaeGboHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbiGbiGbiGbiGbiGbiGbiGbiGaIibjxbjybjzaJjaJjbjAaJjaIiaIibjBbjBbjBbjBbjBbjBbjBbkrbjDbsEbjFbjGaMcbjHaSvaTSbjIbyNbyMaSxbjJaOTbjKbjLaIvaCdaDeaEfaCdaICboGaeGboGaeGaeGaLaaLaaLaaLaaRqaRrbjMbjNbjNczsbjNbjOczsbjNbjNczsbjPbjNbjQbjRbjSbjTbjUbjVbjWaSIbjXaSIbjYaSIaLaaHHaeGaeGaeGaeGaeGaeHaeHaeGaeGaCFbjZayebbObanbfLbfKbbPbanbkabkbbkbbkbbkbbkbbkbbkbbkcbanbjmbjlbjlbhibkdbkebkfaRXaRXaRXaRXaRXaRXaRXaRXaRXaRXbkgaMTaQEaQDaWDbkhbkiaVbaaiaaiaeHbnQaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -6927,7 +6923,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebIebIebMcbIebMdbMebMfbMgbMhbMiaaebKfaaeaaeaabaabaabaabaabaaeaaeaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbLqbMjbvtbMkbMlbMmbMnbIkbIkbIkbIkbWkbsebRCbWmbWlbWmbJobMubMvbWpbWobWqbMzbJobWrbCtbDvbCpbWsbCrbWubDzbXkbMAbBmbGpbHrbMBbMCbMDbMEbMFbMGbHubLIbAebMHbMIbMJbMKbMKbMLbMMbMNbMObMPbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbNcbNlbNmbNnbNobNpbMBbNqbNqbNqbNrbNqbNqbNqbNqbBXbNsbNtbNubNubNubNubNubNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvcwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbUWbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJobWebCtbEvccxcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbPcbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYcdObNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKbNKbQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYcdObNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabRdbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbRTbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbRTbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -6945,7 +6941,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbYLcdKcdKcdLbZScdMcdKcdKcdKcdKcdKcdKbVtaaeaaeaaeaaeaaeaaeaaeaaecdNcdNcdNcdNbQybVubVubVubVubVubYhbYhcahcahcbfcahbYhcylbIpcbTbYhcdPcdQcdRcdScbYcdTcdUcdVcdWcdXcymbIqcdZbBmbTGbYsbYsbYsbYsbYsbYsbYsbYsbYsceacebceccedbYsceebYscefccrccrcegcehccrccrccrccrccrccrccrccrccrccrceiceYcljcelcfTcelcgxcfSceoccrcdvbNocepcbCcctceqcercescescetceucevceucewcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbZVbZWbZXbZRbZSbZTcexbZWbZWbZWbZWceybVsaaeaaeaaeaaebWdaaeaaeaaecdNcezcezceAcezcezceBceCceCceCceBbSHbIpceDceEceFcyncyobIpcbTbYhcbicwBcbibYhbYhceJceKbYhbYhceLbYhbIqceMbBmbUDbYsceNceOcePceQbYsbZnbZnceRceSbZobZnceTceUbZnbZnbZnccrceVceWcelcdxceXcfUceZceZceZcelcelcdxcelcelcfdcelcelchccelcelcfebIrccrcfgcfgcfgcbGcbGcbCcbCcbCcbCcbCcbGcbGcbGcbGcbGcbGcbGcbGcbGaaeaaeaaeaaeaaeagmaaebUncfhbUpaaebUncfhbUpaaebUncfhbUpaaeagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbYLcaTcaUbVtaabaaeaaeaaeaaeaaeaaeaaecdNcficfjcfjcfkcflcfmcflcflcflcfncfocfocfpcfqcfrcfqcypcfqcftcfucfvcyqcyrcfycfzcfAbVCbYhcfBcfCcfDbIqbGobBmcfEbYscfFcawcckcfGcfHcfIcckcckcfJcfKcfLcfMcfNcfOcfOcfOccrcfPcfQcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfVcfRcfRcencfRcfWcenchgchdcelcfXcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicghcarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicghcarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdicdicdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabbrvbrvcdNcdNcdNcdNcyIcdNcdNcdNcdNcdNcdNcgEcbiczccbjcgEbIqbIqbIqbIqbIqbIqcggbIpbIpbVCcgIcgJbYhcfBcgKcfDbIqcgLbBmcgMcgNcgOcgPcgQcgPcgRcgPcgPcgPcgScgPcgPcgTcfOcfOcgUcgVccrcgWcgXcgYcgZcgZcgZcgZcffcgZcgZcejchaciHciLcejcgZcgZcgZcgZchbcgZciOcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeavbaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabaabbrvchkchlchlchlbrvchmchnchochpchpchqchrcyuchschuckHcyvchxchychzchzchzchncywchBchBchCchBchBchDchDchDchDchDbGochEchFchGbZncfOchHcfOchIcfOcfOcfOchJchKcfOcfOcfOcfOchLchMccrcelcgwcgzchNchOchOchOchOchOchOchOcgzcjCchOchOchOchOchOchOchQchOciRcjCcelcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbchWbWbbVtbVtaabaabaabaabaabaabaabaabaabaabaabbrvchXchYchYchYbrvbsechnchZciachzcibciccidciecifcigcihciicijchzchzcikchncyxchBcilcimcinchBciocipciqciqchDbCxcirciscitcgOcgOciucgOcitcivbZnbZnciwcfNbZncixcfNcfOcgtcguccrcelcgwcgzciychOcizciAciBciCciCchOcgzcjCchOcjAcjDcjBciIciJciKchOckccjIcgZckgchechfcyychfclpcllclqccraaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -701,7 +701,7 @@
|
||||
"any" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/wall,/area/engine/engineering)
|
||||
"anz" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"anA" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"anB" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/scrubber{name = "heavy duty air scrubber"; volume = 3000; widenet = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"anB" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/scrubber/huge/movable,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"anC" = (/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"anD" = (/obj/structure/cable/cyan{icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"anE" = (/obj/machinery/door/airlock/command{name = "teleporter door"; req_access_txt = "17"},/obj/structure/cable/cyan{icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/teleporter{name = "\improper Teleporter Room"})
|
||||
@@ -730,7 +730,7 @@
|
||||
"aob" = (/obj/machinery/door/airlock/glass_engineering{name = "engineering door"; req_access_txt = "10"; req_one_access_txt = "0"},/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"aoc" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/wall,/area/engine/engineering)
|
||||
"aod" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/pump,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"aoe" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/scrubber{name = "heavy duty air scrubber"; volume = 3000; widenet = 1},/obj/machinery/camera/autoname{icon_state = "camera"; dir = 9},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"aoe" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/obj/machinery/portable_atmospherics/scrubber/huge/movable,/obj/machinery/camera/autoname{icon_state = "camera"; dir = 9},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"aof" = (/turf/simulated/wall,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"aog" = (/obj/machinery/power/apc{dir = 8; name = "Northwest Hallway APC"; pixel_x = -24},/obj/structure/cable/cyan{icon_state = "0-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
"aoh" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"})
|
||||
@@ -854,7 +854,7 @@
|
||||
"aqv" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/bridge)
|
||||
"aqw" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel/black,/area/bridge)
|
||||
"aqx" = (/obj/machinery/computer/communications,/turf/simulated/floor/plasteel/black,/area/bridge)
|
||||
"aqy" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel/black,/area/bridge)
|
||||
"aqy" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel/black,/area/bridge)
|
||||
"aqz" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel,/area/bridge)
|
||||
"aqA" = (/obj/structure/table,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/paper/monitorkey{pixel_x = 5; pixel_y = 5},/obj/item/weapon/phone{force = 1},/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/bridge)
|
||||
"aqB" = (/obj/structure/closet/cardboard,/obj/item/clothing/suit/toggle/owlwings,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||
@@ -1054,7 +1054,7 @@
|
||||
"aun" = (/obj/machinery/navbeacon{codes = ""; codes_txt = "delivery;dir=1"; freq = 1400; location = "Dorm Maint"; name = "navigation beacon"},/turf/simulated/floor/carpet,/area/maintenance/fsmaint)
|
||||
"auo" = (/obj/structure/flora/ausbushes/pointybush{icon_state = "pointybush_2"; layer = 4.1; name = "tree"; pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating/asteroid{name = "dirt"},/area/maintenance/fsmaint)
|
||||
"aup" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = 24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = 24; pixel_y = -8},/obj/machinery/conveyor_switch/oneway{id = "cargoshuttle"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/supply)
|
||||
"auq" = (/obj/machinery/button/door{id = "cargo blast"; name = "cargo blast door button"; pixel_x = -24; pixel_y = 0},/obj/machinery/light{dir = 8},/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"auq" = (/obj/machinery/button/door{id = "cargo blast"; name = "cargo blast door button"; pixel_x = -24; pixel_y = 0},/obj/machinery/light{dir = 8},/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aur" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "cargo"; name = "shuttle conveyor switch"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aus" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aut" = (/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel/yellow/side{icon_state = "yellow"; dir = 4},/area/quartermaster/storage)
|
||||
@@ -1084,7 +1084,7 @@
|
||||
"auR" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Dormitory Maintenance APC"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||
"auS" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||
"auT" = (/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||
"auU" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 3; width = 10},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 7; id = "supply_home"; name = "supply bay"; width = 10},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"auU" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 3; width = 10},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 10},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"auV" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"auW" = (/turf/simulated/floor/plasteel/yellow/side{icon_state = "yellow"; dir = 4},/area/quartermaster/storage)
|
||||
"auX" = (/obj/machinery/navbeacon{codes = ""; codes_txt = "delivery;dir=4"; freq = 1400; location = "Cargo #2"; name = "navigation beacon"},/turf/simulated/floor/plasteel/delivery,/area/quartermaster/storage)
|
||||
@@ -1199,7 +1199,7 @@
|
||||
"axc" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_y = 5},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"axd" = (/obj/structure/table,/obj/item/weapon/stamp/denied{pixel_x = 6; pixel_y = 6},/obj/item/weapon/stamp,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"axe" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"axf" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"axf" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"axg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/camera/autoname{dir = 8},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"axh" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
"axi" = (/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library)
|
||||
@@ -1351,7 +1351,7 @@
|
||||
"azY" = (/obj/machinery/conveyor{dir = 8; id = "cargoOUT"; name = "cargo conveyor belt"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"azZ" = (/obj/machinery/conveyor{dir = 8; id = "cargoOUT"; name = "cargo conveyor belt"},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aAa" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8; id = "cargoOUT"; name = "cargo conveyor belt"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aAb" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aAb" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aAc" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/wood,/area/hallway/primary/central)
|
||||
"aAd" = (/obj/structure/flora/kirbyplants{icon_state = "plant-22"},/obj/machinery/camera/autoname{dir = 1; network = list("SS13")},/turf/simulated/floor/wood,/area/library)
|
||||
"aAe" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/library)
|
||||
@@ -1871,7 +1871,6 @@
|
||||
"aJY" = (/obj/machinery/door/airlock/glass_security{name = "security airlock"; req_access_txt = "63"},/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/brig)
|
||||
"aJZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/flora/kirbyplants{icon_state = "plant-02"; layer = 4.1},/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
|
||||
"aKa" = (/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
|
||||
"aKb" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
|
||||
"aKd" = (/obj/structure/flora/kirbyplants{icon_state = "plant-02"; layer = 4.1},/turf/simulated/floor/plasteel/black,/area/hallway/primary/central)
|
||||
"aKe" = (/turf/simulated/wall/r_wall,/area/medical/genetics_cloning)
|
||||
"aKf" = (/turf/simulated/wall,/area/medical/genetics_cloning)
|
||||
@@ -3095,7 +3094,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHfaDZbahaEaaDoaDoaDYaDZaHgaDZaEaaDoaEQaHhaHhaHiaHjaDYaFLaFLaFLaFLaFLaElaHkaFOaFPaEiaEmaBqaElaElaHlaBqaAJaAJaHmaAJaDyaDyaDyaAJaxhawwaFeaGEaGEaHnaEraHoaHpaHqaHraHsaAlaAMaAlaHtatSaGKaGLatSaHtawAayIawwaEFaHuaHvaHwaHxaHyaGRaHzaHAaHBaHCaHDaHEaHFazLaAxaHGaCyaFuaFuaHaaHIaHJaHKaHLaHMaHNaHNaHNaHOaFxaHNaJFaHNaHNaHNaHNaAxazLaHQaHRaAxazLaFxaFxaFxaFxaFxaFxaFxaFxaAxazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDZaHSaHTaHUaHVaHWaHTaHSaHTaHTaHTaHTaHTaHTaHTaHXaHTaHXaHYaHZaIaaElaIbaIcaIdaIeaIfaIgaIgaIgaIgaIgaIgaIgaIgaIgaIhaIgaIgaIiaIgaIjbaxbavavJavJavJavJaImavJaInavUaIoazkaIpavJaIqavJavJavJavJavJavJaIraIsbayaGWaGWaIuaIvaIwaIxaIyaIzaIAaEDaAlaAlaAlaAlaAlaAlaIBaCyaZQaGlaHaaICaIDaIEaIFaIGaIHaIHaIIaIIaJGaIIaJHaHNaHNaJIaHNaAxazLaILaAxaAxazLaFxaFuaFuaIMaFyaFuaFuaFxaAxazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDZaINaHTaHUaHVaIOaHTaHTaHTaHTaHTaHTaHTaHTaHTaHXaHTaIPaHYaHZaIaaElaIbaIQbazaISaITaIUaIVaIWaIXaIYaIXaIZaIXaIXaJaaJbaJcaJdaJeaJfaJgaJhaJhaJiaJhaJhaJjaJhaJhaJkaJlaJmaJnaJhaJoaJhaJhaJlaJhaJhaJhaJhbbbbaXaJqaJraHvaJsaJtaJtaJuaJvbbcaJwaAlaEBaJxaFoaFoaAlaHGaCyaFtaFuaHaaJzaJAaJBaJBaJCaHNaHNaHNaHNaFxaKxaKyaHNaLgaKYaJyazMazLaLhaBhaLiazLaFxaFuaJJaFuaJKaJJaFuaFxaAxazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDZaINaHTaHWaJLaHWaHTaHTaJMaJMaJMaJMaJNaHhaHhaGvaDpaDYaFLaFLaFLaFLaFLaIQaFOaJOaJPaJQaJRaJSaJTaJUaJVaJWaJXaJXaJXaJWaJYaJXaJYaJWaJXaJXaJXaJWaJZaKaaKbaKaaKaaKdaKeaKeaKeaKeaKeaKeaKeaKfaKgaKhaKiaKjaKkaKlaEFaKmaJqaKnaKnaKnaJqaKoaKpaKqaDKaBzaBAaBzaBzaKraHGaCyaJyaJyaJybbdbdEbdDaJyaHaaHaaHaaHaaHaaFxaLjaKyaJyaJyaJyaJyaAxaBhaBhaLlaLkazLaFxaFuaFuaJJaFuaFuaFuaFxaAxazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDZaINaHTaHWaJLaHWaHTaHTaJMaJMaJMaJMaJNaHhaHhaGvaDpaDYaFLaFLaFLaFLaFLaIQaFOaJOaJPaJQaJRaJSaJTaJUaJVaJWaJXaJXaJXaJWaJYaJXaJYaJWaJXaJXaJXaJWaJZaKaaKaaKaaKaaKdaKeaKeaKeaKeaKeaKeaKeaKfaKgaKhaKiaKjaKkaKlaEFaKmaJqaKnaKnaKnaJqaKoaKpaKqaDKaBzaBAaBzaBzaKraHGaCyaJyaJyaJybbdbdEbdDaJyaHaaHaaHaaHaaHaaFxaLjaKyaJyaJyaJyaJyaAxaBhaBhaLlaLkazLaFxaFuaFuaJJaFuaFuaFuaFxaAxazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDZaINaHTaHTaHTaHTaHTaHTaKzaKzaKzaKzaEUaKAaEeaHiaGwaDqaaaaayaaaaaaaFLaIQaFOaKBaKCaJQaJRaKDaKEaJUaKFaJWaKGaKHaKIaKJaKKaKLaKMaKJaKNaKOaKPaJWatSatSatSatSatSatSaKeaKQaKRaKSaKTaKUaKVaKfaKWaKXaLZaKiaKkaKZaEFaGMaHuaHuaLaaHuaHuaHuaLbaGMaAlaFnaFnaLcaLcaAlaQVbdFbdHbdGbdJbdIaLeaLfaJyaFuaFuaHaaFuaFuaFxaMNaNQaMOaOLaNRaJyaAxaONaOMaBhaOOaCyaFxaLmaLnaFuaFuaLnaLmaFxaLoaJyaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDZaHSaHTaHTaHTaHTaHTaHTaHTaHTaHTaHTaHhaEeaEeaLpaEfaEgaaaaayaayaayaFLaIQaFOaLqaLraLsaLtaLuaJVaLvaJVaJWaLwaKHaLxaKJaLyaLzaLAaKJaLBaKOaLCaJWaLDaLEaLDaLFaLGaLDaKeaLHaLIaLJaLKbdKaLMaLNaLOaKXaKXaLPaKkaKZaEFaEFaEFaEFaEFaEFaEFaEFaEFaEFaLQaAlaAlaAlaAlaAlaHGaCybdMbdLbdObdNaLeaLVaJyaLWbdPaHabdPaLWaFxaHNaKyaOPaHNaNRaJyaFxaNUaFxaFxaFxaFxaMaaMbaHcaMcaMdaHcaMbaMaaMeaFxaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMfaMgaMhaMhaMhaMhaHTaHTaHTaHTaHTaHTaDZaEeaEeaMiaEfaEXaaaaayaaaaaaaFLaIQaMjaAIaAIaAIaJWaMkaJWaJWaJWaJWaMlaMmaMlaKJaJYaMlaJYaKJaMlaMnaMlaJWatSatSatSatSatSatSaKeaMoaMpaMqaMraMsaMtaLNaMuaMvaMwaKiaKkaKZaMxaMyaMzaMAaMBaMCaMDaMEaMEaMFaMGaMHaMIaMJaMKazLaMLaCyaCyaFxaFxaFxaMMaFxaFxaFxaFxaFxaFxaFxaFxaHNaOVaMPaMPaMPaMPaOWaMPaMQaMRaMSaMTaMUaMVaMWaMXaMYaMZaNaaNbaJCaFxaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -3913,7 +3913,7 @@
|
||||
"bxm" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"bxn" = (/turf/simulated/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/hallway/primary/central)
|
||||
"bxo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/neutral/side{dir = 8},/area/hallway/primary/central)
|
||||
"bxp" = (/obj/machinery/computer/supplycomp,/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plasteel/black,/area/crew_quarters/heads)
|
||||
"bxp" = (/obj/machinery/computer/cargo,/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plasteel/black,/area/crew_quarters/heads)
|
||||
"bxq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/black,/area/crew_quarters/heads)
|
||||
"bxr" = (/obj/structure/cable/blue{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/black,/area/crew_quarters/heads)
|
||||
"bxs" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel/black,/area/crew_quarters/heads)
|
||||
@@ -5724,8 +5724,8 @@
|
||||
"cgd" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{layer = 2.4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"cge" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel/bot,/area/quartermaster/office)
|
||||
"cgf" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"cgg" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel/brown/corner,/area/quartermaster/office)
|
||||
"cgh" = (/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel/brown/corner{tag = "icon-browncorner (WEST)"; icon_state = "browncorner"; dir = 8},/area/quartermaster/office)
|
||||
"cgg" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel/brown/corner,/area/quartermaster/office)
|
||||
"cgh" = (/obj/structure/cable/orange{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel/brown/corner{tag = "icon-browncorner (WEST)"; icon_state = "browncorner"; dir = 8},/area/quartermaster/office)
|
||||
"cgi" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"cgj" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"cgk" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
@@ -6729,7 +6729,7 @@
|
||||
"czu" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"czv" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm)
|
||||
"czw" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/computer/security/mining,/turf/simulated/floor/plasteel/darkbrown/side{tag = "icon-darkbrown (NORTHWEST)"; icon_state = "darkbrown"; dir = 9},/area/quartermaster/qm)
|
||||
"czx" = (/obj/machinery/airalarm{pixel_y = 23},/obj/machinery/computer/supplycomp,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/darkbrown/side{tag = "icon-darkbrown (NORTH)"; icon_state = "darkbrown"; dir = 1},/area/quartermaster/qm)
|
||||
"czx" = (/obj/machinery/airalarm{pixel_y = 23},/obj/machinery/computer/cargo,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/darkbrown/side{tag = "icon-darkbrown (NORTH)"; icon_state = "darkbrown"; dir = 1},/area/quartermaster/qm)
|
||||
"czy" = (/obj/machinery/computer/shuttle/mining,/obj/machinery/light_switch{pixel_y = 24; tag = "n"},/turf/simulated/floor/plasteel/darkbrown/side{tag = "icon-darkbrown (NORTHEAST)"; icon_state = "darkbrown"; dir = 5},/area/quartermaster/qm)
|
||||
"czz" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/mining)
|
||||
"czA" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating/airless,/area/shuttle/mining)
|
||||
@@ -7085,7 +7085,7 @@
|
||||
"cGm" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
|
||||
"cGn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
|
||||
"cGo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/bot,/area/toxins/storage)
|
||||
"cGp" = (/obj/machinery/computer/area_atmos,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = 26; pixel_y = -2; tag = "EAST"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
|
||||
"cGp" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = 26; pixel_y = -2; tag = "EAST"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
|
||||
"cGq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
|
||||
"cGr" = (/turf/simulated/floor/plasteel/purple/side{tag = "icon-purple (SOUTHEAST)"; icon_state = "purple"; dir = 6},/obj/machinery/portable_atmospherics/canister,/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/toxins/mixing)
|
||||
"cGs" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing)
|
||||
@@ -7219,7 +7219,7 @@
|
||||
"cIQ" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/supply)
|
||||
"cIR" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad"; tag = "cargoshuttledown"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cIS" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cIT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 2; dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cIT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 2; dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cIU" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
|
||||
"cIV" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply)
|
||||
"cIW" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply)
|
||||
|
||||
@@ -1563,7 +1563,7 @@
|
||||
"aEc" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/genetics)
|
||||
"aEd" = (/obj/structure/bed/chair/office/light,/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
|
||||
"aEe" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
|
||||
"aEf" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
|
||||
"aEf" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
|
||||
"aEg" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"aEh" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/research{name = "Toxins Lab"; req_access_txt = "8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing{name = "\improper Toxins Lab"})
|
||||
"aEi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg1"},/area/maintenance/fore)
|
||||
@@ -3699,7 +3699,7 @@
|
||||
"btg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/mob/living/simple_animal/bot/mulebot{home_destination = "QM #2"; suffix = "#2"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
|
||||
"bth" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bti" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"btj" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
|
||||
"btj" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/quartermaster/storage)
|
||||
"btk" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"btl" = (/obj/structure/window/fulltile,/obj/structure/grille,/turf/simulated/floor/plating,/area/quartermaster/storage)
|
||||
"btm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Aft Port Primary Hallway"})
|
||||
@@ -3848,7 +3848,7 @@
|
||||
"bvZ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #4"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
|
||||
"bwa" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/wrapping_paper{pixel_x = 3; pixel_y = 4},/obj/item/stack/packageWrap{pixel_x = -1; pixel_y = -1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bwb" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bwc" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bwc" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bwd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bwe" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bwf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Aft Port Primary Hallway"})
|
||||
@@ -3974,7 +3974,7 @@
|
||||
"byv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"byw" = (/obj/machinery/power/tesla_coil,/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"byx" = (/turf/simulated/wall,/area/engine/engineering)
|
||||
"byy" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"byy" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"byz" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"byA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"byB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "QMLoad"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
@@ -4248,7 +4248,7 @@
|
||||
"bDJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/supply)
|
||||
"bDK" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/supply)
|
||||
"bDL" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/port{name = "Chapel Maintenance"})
|
||||
"bDM" = (/obj/machinery/computer/supplycomp,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30},/obj/machinery/camera{c_tag = "Quartermaster's Office"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"bDM" = (/obj/machinery/computer/cargo,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30},/obj/machinery/camera{c_tag = "Quartermaster's Office"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"bDN" = (/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor/plasteel,/area/quartermaster/qm)
|
||||
"bDO" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/quartermaster/qm)
|
||||
"bDP" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
|
||||
@@ -4427,7 +4427,7 @@
|
||||
"bHg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads)
|
||||
"bHh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet,/area/crew_quarters/heads)
|
||||
"bHi" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/crew_quarters/heads)
|
||||
"bHj" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{icon_state = "darkblue"; dir = 4},/area/crew_quarters/heads)
|
||||
"bHj" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel{icon_state = "darkblue"; dir = 4},/area/crew_quarters/heads)
|
||||
"bHk" = (/obj/machinery/door/poddoor/shutters/preopen{id = "hopqueue"; name = "HoP Queue Shutters"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"},/area/hallway/primary/aft{name = "Aft Starboard Primary Hallway"})
|
||||
"bHl" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/hallway/primary/aft{name = "Aft Starboard Primary Hallway"})
|
||||
"bHm" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/gloves/color/fyellow,/turf/simulated/floor/plasteel,/area/storage/primary)
|
||||
@@ -5176,7 +5176,7 @@
|
||||
"bVB" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge)
|
||||
"bVC" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge)
|
||||
"bVD" = (/obj/structure/bed/chair{dir = 4; name = "Logistics Station"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge)
|
||||
"bVE" = (/obj/machinery/computer/ordercomp,/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_x = 30},/turf/simulated/floor/plasteel{icon_state = "darkbrown"; dir = 8},/area/bridge)
|
||||
"bVE" = (/obj/machinery/computer/cargo/request,/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_x = 30},/turf/simulated/floor/plasteel{icon_state = "darkbrown"; dir = 8},/area/bridge)
|
||||
"bVF" = (/obj/item/weapon/hand_tele,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/teleporter{name = "\improper Teleporter Room"})
|
||||
"bVG" = (/obj/structure/bed/stool,/obj/machinery/power/apc{name = "Teleporter APC"; pixel_y = -25},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/teleporter{name = "\improper Teleporter Room"})
|
||||
"bVH" = (/obj/machinery/light,/obj/structure/closet/crate,/obj/item/weapon/crowbar,/obj/machinery/airalarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/camera{c_tag = "Teleporter"; dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/teleporter{name = "\improper Teleporter Room"})
|
||||
|
||||
@@ -948,7 +948,7 @@
|
||||
"asl" = (/obj/machinery/door/airlock/glass{name = "space-bridge access"},/obj/machinery/button/door{id = "supplybridge"; name = "Shuttle Bay Space Bridge Control"; pixel_x = 0; pixel_y = 27; req_access_txt = "0"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"asm" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/machinery/light,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"asn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"aso" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Supply Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"aso" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Cargo Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"asp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"asq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"asr" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
@@ -1010,7 +1010,7 @@
|
||||
"atv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard)
|
||||
"atw" = (/turf/simulated/wall/r_wall,/area/maintenance/starboard)
|
||||
"atx" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/starboard)
|
||||
"aty" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/maintenance_hatch{name = "Supply Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "0"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"aty" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/maintenance_hatch{name = "Cargo Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "0"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"atz" = (/obj/machinery/door/poddoor/shutters{id = "supplybridge"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"atA" = (/obj/machinery/door/poddoor/shutters{id = "supplybridge"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
"atB" = (/obj/machinery/door/poddoor/shutters{id = "supplybridge"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/fpmaint2{name = "Port Maintenance"})
|
||||
@@ -2110,7 +2110,7 @@
|
||||
"aOD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction)
|
||||
"aOE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/construction)
|
||||
"aOF" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plasteel,/area/construction)
|
||||
"aOG" = (/obj/machinery/button/door{id = "QMLoaddoor"; layer = 4; name = "Loading Doors"; pixel_x = -27; pixel_y = -5},/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; layer = 4; name = "Loading Doors"; pixel_x = -27; pixel_y = 5},/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
|
||||
"aOG" = (/obj/machinery/button/door{id = "QMLoaddoor"; layer = 4; name = "Loading Doors"; pixel_x = -27; pixel_y = -5},/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; layer = 4; name = "Loading Doors"; pixel_x = -27; pixel_y = 5},/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
|
||||
"aOH" = (/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aOI" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage)
|
||||
"aOJ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
|
||||
@@ -2333,7 +2333,7 @@
|
||||
"aSS" = (/obj/machinery/conveyor{dir = 1; id = "QMLoad"; movedir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
|
||||
"aST" = (/obj/structure/disposalpipe/segment,/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"aSU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/item/weapon/paper,/obj/item/weapon/paper,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/quartermaster/storage)
|
||||
"aSV" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"aSV" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"aSW" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"aSX" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"aSY" = (/obj/structure/table,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/item/device/gps{gpstag = "QM0"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/quartermaster/qm)
|
||||
@@ -2804,7 +2804,7 @@
|
||||
"bbV" = (/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/structure/table/reinforced,/obj/structure/noticeboard{desc = "A board for pinning important notices upon. Probably helpful for keeping track of requests."; name = "requests board"; pixel_x = 32; pixel_y = 32},/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"bbW" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/red,/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{dir = 5; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"bbX" = (/obj/structure/sign/directions/engineering{desc = "A direction sign, pointing out which way the Cargo department is."; icon_state = "direction_supply"; name = "cargo department"; pixel_y = -5},/turf/simulated/wall,/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"bbY" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/primary/port)
|
||||
"bbY" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/primary/port)
|
||||
"bbZ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/status_display{density = 0; pixel_x = 0; pixel_y = 32; supply_display = 1},/obj/structure/table,/obj/item/weapon/folder/yellow,/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/hallway/primary/port)
|
||||
"bca" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/hallway/primary/port)
|
||||
"bcb" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/hallway/primary/port)
|
||||
@@ -2957,7 +2957,7 @@
|
||||
"beS" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"beT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"beU" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"beV" = (/obj/machinery/computer/supplycomp,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"beV" = (/obj/machinery/computer/cargo,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"beW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"})
|
||||
"beX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/port)
|
||||
"beY" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/primary/port)
|
||||
@@ -3348,7 +3348,7 @@
|
||||
"bmt" = (/obj/item/device/radio/beacon,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge)
|
||||
"bmu" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/recharger{pixel_y = 3},/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/obj/structure/table/glass,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkredcorners"},/area/bridge)
|
||||
"bmv" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/computer/security/mining,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"},/area/bridge)
|
||||
"bmw" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkblue"},/area/bridge)
|
||||
"bmw" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel{dir = 5; icon_state = "darkblue"},/area/bridge)
|
||||
"bmx" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/machinery/door/window/westright{dir = 4},/obj/item/weapon/soap/deluxe,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"})
|
||||
"bmy" = (/obj/structure/mirror{pixel_y = 28},/obj/structure/sink{pixel_y = 17},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"})
|
||||
"bmz" = (/obj/structure/toilet{pixel_y = 13},/obj/machinery/light{dir = 2; icon_state = "tube1"},/obj/effect/landmark/start{name = "Captain"},/obj/machinery/light_switch{pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"})
|
||||
@@ -3665,7 +3665,7 @@
|
||||
"bsy" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central)
|
||||
"bsz" = (/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/pen,/obj/structure/window/reinforced,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"bsA" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window{dir = 2; name = "HoP's Desk"; pixel_y = 0; req_access_txt = "57"},/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"bsB" = (/obj/structure/window/reinforced,/obj/machinery/computer/ordercomp,/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"bsB" = (/obj/structure/window/reinforced,/obj/machinery/computer/cargo/request,/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"bsC" = (/obj/machinery/vending/cart{req_access_txt = "57"},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/wood,/area/crew_quarters/heads)
|
||||
"bsD" = (/obj/structure/transit_tube{dir = 4; icon_state = "Block"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/engine/break_room)
|
||||
"bsE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "D-SW"},/turf/space,/area/space)
|
||||
@@ -4534,7 +4534,7 @@
|
||||
"bJj" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"bJk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bJl" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bJm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bJm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||
"bJn" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/theatre)
|
||||
"bJo" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/carpet,/area/crew_quarters/theatre)
|
||||
"bJp" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/carpet,/area/crew_quarters/theatre)
|
||||
@@ -6514,10 +6514,10 @@
|
||||
"cvn" = (/obj/machinery/computer/aifixer,/obj/structure/window/reinforced{dir = 4},/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor)
|
||||
"cvo" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/hor)
|
||||
"cvp" = (/obj/structure/displaycase/labcage,/obj/machinery/light/small{dir = 1},/obj/structure/sign/biohazard{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor)
|
||||
"cvq" = (/obj/item/weapon/storage/secure/safe{pixel_x = 32; pixel_y = 0},/obj/machinery/ai_status_display{pixel_y = 32},/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/crew_quarters/hor)
|
||||
"cvq" = (/obj/item/weapon/storage/secure/safe{pixel_x = 32; pixel_y = 0},/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/crew_quarters/hor)
|
||||
"cvr" = (/obj/machinery/portable_atmospherics/scrubber/huge,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
|
||||
"cvs" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/toxins/storage)
|
||||
"cvt" = (/obj/machinery/computer/area_atmos,/obj/machinery/light/small{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/storage)
|
||||
"cvt" = (/obj/machinery/light/small{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/storage)
|
||||
"cvu" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Toxins Storage APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"cvv" = (/obj/machinery/portable_atmospherics/scrubber/huge,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
|
||||
"cvw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
@@ -7615,7 +7615,7 @@
|
||||
"cQw" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "Chapel APC"; pixel_x = -25},/turf/simulated/floor/carpet,/area/chapel/main)
|
||||
"cQx" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/chapel/main)
|
||||
"cQy" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/turf/simulated/floor/carpet,/area/chapel/main)
|
||||
"cQz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/carpet,/area/chapel/main)
|
||||
"cQz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main)
|
||||
"cQA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/chapel/main)
|
||||
"cQB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Chapel"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
|
||||
"cQC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"})
|
||||
@@ -8051,7 +8051,7 @@
|
||||
"cYQ" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cYR" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cYS" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = 24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = 24; pixel_y = -8},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply)
|
||||
"cYT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; roundstart_move = "supply_away"; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cYT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; roundstart_move = "supply_away"; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cYU" = (/obj/machinery/computer/camera_advanced/xenobio,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
|
||||
"cYV" = (/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/supply)
|
||||
"cYW" = (/turf/simulated/floor/plasteel/shuttle,/turf/simulated/wall/shuttle/interior{icon_state = "swall_f10"},/area/shuttle/supply)
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
"fd" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"fe" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/quartermaster/storage)
|
||||
"ff" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/filingcabinet,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"fg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/quartermaster/storage)
|
||||
"fg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel{dir = 2; icon_state = "yellowcorner"},/area/quartermaster/storage)
|
||||
"fh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/brig)
|
||||
"fi" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2"; name = "Cell 2 Locker"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/security/brig)
|
||||
"fj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
@@ -292,7 +292,7 @@
|
||||
"fF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/quartermaster/storage)
|
||||
"fG" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westleft{name = "Cargo Desk"; req_access_txt = "50"},/obj/item/weapon/folder/yellow,/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"fH" = (/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hallway/primary/central)
|
||||
"fI" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
"fI" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
"fJ" = (/obj/structure/closet/crate/bin,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/hallway/primary/central)
|
||||
"fK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/brig)
|
||||
"fL" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
@@ -870,8 +870,8 @@
|
||||
"qL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"qM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Head of Personnel Office"; req_access = null; req_access_txt = "57"},/turf/simulated/floor/plasteel,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"qN" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay)
|
||||
"qO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"qP" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/obj/machinery/airalarm{frequency = 1441; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/medbay)
|
||||
"qO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"qP" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/obj/machinery/airalarm{frequency = 1441; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/medbay)
|
||||
"qQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
|
||||
"qR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/camera/autoname,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
|
||||
"qS" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit)
|
||||
@@ -1372,9 +1372,9 @@
|
||||
"At" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
|
||||
"Au" = (/obj/machinery/camera/autoname{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; frequency = 1441; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
"Av" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"Aw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Aw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Ax" = (/obj/machinery/airalarm{dir = 4; frequency = 1441; pixel_x = -24},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
"Ay" = (/obj/machinery/airalarm{frequency = 1440; pixel_y = 23},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Ay" = (/obj/machinery/airalarm{frequency = 1440; pixel_y = 23},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Az" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"AA" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
|
||||
"AB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
@@ -1393,7 +1393,6 @@
|
||||
"AO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 1},/area/engine/engineering)
|
||||
"AP" = (/obj/machinery/requests_console{announcementConsole = 0; department = "Engineering"; departmentType = 4; name = "Engineering RC"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"AQ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; frequency = 1440; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"AR" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; frequency = 1441; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"AS" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
"AT" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
|
||||
"AU" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
@@ -1403,9 +1402,8 @@
|
||||
"AY" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"AZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Ba" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/camera/autoname,/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Bb" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/cyan/visible{icon_state = "intact"; dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
|
||||
"Bc" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{frequency = 1441; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Bd" = (/obj/machinery/airalarm{dir = 1; frequency = 1441; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Bb" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/cyan/visible{icon_state = "intact"; dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering)
|
||||
"Bd" = (/obj/machinery/airalarm{dir = 1; frequency = 1441; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel,/area/engine/engineering)
|
||||
"Be" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engineering)
|
||||
"Bf" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
|
||||
"Bg" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating,/area/engine/engineering)
|
||||
@@ -1731,7 +1729,7 @@
|
||||
"Ho" = (/turf/simulated/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/supply)
|
||||
"Hp" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply)
|
||||
"Hq" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"Hr" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 3; width = 9},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 7; id = "supply_home"; name = "supply bay"; width = 9},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"Hr" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 3; width = 9},/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 9},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"Hs" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape)
|
||||
"Ht" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape)
|
||||
"Hu" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"; dir = 2},/area/shuttle/escape)
|
||||
@@ -1802,7 +1800,6 @@
|
||||
"IH" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/transport)
|
||||
"II" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/transport)
|
||||
"IJ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; frequency = 1441; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"IK" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -1956,7 +1953,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIkHJHJHJHJHJIqaaaaaafWtyfWlklKlKtAfWtyfWkftBqMqLtEtFtGtHtItJtKtLtMtNtNtOkssBkhtdtQtRtStTtdtUtWtVsetYsugafXfXfXyLbxaanPuaubucpaudrLrnoXugnPnPnPnPnPnPnPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafWlJfWujukulumfWlJfWkfkfsrunuounupuqurusutsruubxuvfXfXfXkhtdtTuxtdtTtdtUtWuyuzuAsugauBuCuDeLfwaanPuEpfsdpauFhxsxpaszsDtpuKuLtDuMhxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofuOoffWfWfWfWofuOofamamsruSuountuununtXuWsruubxuXfXfXfXkhtdtTuYtdtTtdtUtWuZuzvasuyNvbvbvbzbbxaanPvdpfpfvevftftevivjkLuJpfvlpfpfhxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajcvmjdvmvmsPsPvmvmvqvpvramsrsrvtsrsrvuvvsrsqsruubxbxfXfXfXkhtdvxtRtStTIKvyvAvzvBvCvDgauBuCuDzQfwaanPuUtisNvIvJqotgoVtnnPvNvOvPvQvRnPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajcvmjdvmvmsPsPvmvmvqvpvramsrsrvtsrsrvuvvsrsqsruubxbxfXfXfXkhtdvxtRtStTtdvyvAvzvBvCvDgauBuCuDzQfwaanPuUtisNvIvJqotgoVtnnPvNvOvPvQvRnPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajcvpvmvsvSvSvUvTvWvVvXvUvSvYvZambxbNbSwbwcsrsrsrbGwduubNbxfXfXfXsuwewfwgtjwiwjwktWuVvCvCwnAlvbvbvbAubxamnPhxhxhxhxnPnPoGtsoOnPnPnPnPnPnPnPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavYwawvwuvSwwvSwwvSwwvSwwvSwxvZambxbNbSbNbxwAAvwCwDwEwFlPbxfXfXfXsusuwGsususuttwIsusuvGtCsuAxwLwMwNwObxaaaaaaaaamamnPwPwQwRwSvknPamamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaphvSvSvqvSwwvSwwwzwwvSwwvSwxvZambxbNbSbNbxbNwWwXwYwZnDbObxfXfXiUsuxaxbueufxeuGxgvHxixjuHsuidbxbxbxbxbxaaaaaaaaaaamhxxmvFpfIJxphxamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -1976,7 +1973,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaayBzqAMyBAWAOAPAUyBqIqIqIyBAUzaAVAWyBAXALyBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamamamamyBzqAYyBzazRAZAZAZAZBazayMzazazazayBAIALyBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaayBqIyBxcxdqIxfzazaBextxoBhxPxQBkzazaxkqIxYxnyBqIyBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaqIBozazqBpqIAnARzaBqxTBsBtBuxXBwzaBcAqqIBxALByBzqIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaqIBozazqBpqIAnBizaBqxTBsBtBuxXBwzaBmAqqIBxALByBzqIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaqIBozaAssHsysOAezaBAyeycBDzezhBGzaAwtksQtxBUzaBHqIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaqIBozazqzayByBtzBdBLzKzpBOzMzNBRzauiyByBzaALBVBWqIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaayBqIyBzqzaBXyByByByBuNuNAKuPuPyByByByBCczaALyBtPyBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -2394,7 +2394,7 @@
|
||||
"aUb" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plasteel{dir = 10; icon_state = "brown"},/area/bridge)
|
||||
"aUc" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel,/area/bridge)
|
||||
"aUd" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/bridge)
|
||||
"aUe" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/bridge)
|
||||
"aUe" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel{dir = 2; icon_state = "brown"},/area/bridge)
|
||||
"aUf" = (/obj/machinery/airalarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Bar West"; dir = 4; network = list("SS13")},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"aUg" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"aUh" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{name = "Hydroponics Desk"; req_access_txt = "35"},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/crew_quarters/kitchen)
|
||||
@@ -3412,7 +3412,7 @@
|
||||
"bnF" = (/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = 30},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"bnG" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red,/obj/structure/table,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bnH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"bnI" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bnI" = (/obj/machinery/computer/cargo/request,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bnJ" = (/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bnK" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/quartermaster/office)
|
||||
"bnL" = (/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/quartermaster/office)
|
||||
@@ -3508,7 +3508,7 @@
|
||||
"bpx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"bpy" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
|
||||
"bpz" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/quartermaster/storage)
|
||||
"bpA" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bpA" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bpB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"bpC" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
|
||||
"bpD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/chemistry)
|
||||
@@ -3780,7 +3780,7 @@
|
||||
"buJ" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/quartermaster/office)
|
||||
"buK" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/central)
|
||||
"buL" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/genetics)
|
||||
"buM" = (/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/crew_quarters/heads)
|
||||
"buM" = (/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/crew_quarters/heads)
|
||||
"buN" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
|
||||
"buO" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/turf/simulated/floor/plasteel,/area/crew_quarters/heads)
|
||||
"buP" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/wall,/area/engine/gravity_generator)
|
||||
@@ -3910,7 +3910,7 @@
|
||||
"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; name = "Research Monitor"; network = list("RD","MiniSat"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor)
|
||||
"bxk" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/crew_quarters/hor)
|
||||
"bxl" = (/obj/structure/rack,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/crew_quarters/hor)
|
||||
"bxm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
|
||||
"bxm" = (/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/crew_quarters/hor)
|
||||
"bxn" = (/turf/simulated/wall,/area/toxins/explab)
|
||||
"bxo" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/explab)
|
||||
"bxp" = (/obj/machinery/computer/rdconsole/experiment,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/toxins/explab)
|
||||
@@ -4043,7 +4043,7 @@
|
||||
"bzM" = (/obj/structure/rack,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warnwhite"},/area/crew_quarters/hor)
|
||||
"bzN" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"},/area/crew_quarters/hor)
|
||||
"bzO" = (/turf/simulated/floor/engine,/area/toxins/explab)
|
||||
"bzP" = (/obj/machinery/computer/supplycomp,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"bzP" = (/obj/machinery/computer/cargo,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/qm)
|
||||
"bzQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
|
||||
"bzR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/quartermaster/qm)
|
||||
"bzS" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_x = 4},/turf/simulated/floor/plasteel,/area/medical/sleeper)
|
||||
@@ -4498,7 +4498,7 @@
|
||||
"bIz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"bIA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"bIB" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage)
|
||||
"bIC" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
|
||||
"bIC" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage)
|
||||
"bID" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
|
||||
"bIE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"})
|
||||
"bIF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos)
|
||||
@@ -6699,7 +6699,7 @@
|
||||
"cyQ" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cyR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/abandoned)
|
||||
"cyS" = (/obj/machinery/button/door{dir = 2; id = "QMLoaddoor2"; name = "Loading Doors"; pixel_x = 24; pixel_y = 8},/obj/machinery/button/door{id = "QMLoaddoor"; name = "Loading Doors"; pixel_x = 24; pixel_y = -8},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply)
|
||||
"cyT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cyT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "Cargo Bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply)
|
||||
"cyU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
|
||||
"cyV" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned)
|
||||
"cyW" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor5"},/area/shuttle/abandoned)
|
||||
@@ -6746,8 +6746,6 @@
|
||||
"czL" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 3; pixel_x = 0; pixel_y = 32},/obj/machinery/computer/shuttle/pod{pixel_y = -32; possible_destinations = "pod_asteroid4"; shuttleId = "pod4"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4)
|
||||
"czM" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/obj/item/weapon/storage/pod{pixel_x = 6; pixel_y = -32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4)
|
||||
"czN" = (/obj/docking_port/stationary/random{dir = 4; id = "pod_asteroid4"; name = "asteroid"},/turf/space,/area/space)
|
||||
"czO" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"czP" = (/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/crew_quarters/hor)
|
||||
"czQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||
"czR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||
"czS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2)
|
||||
@@ -6931,14 +6929,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCVaIGaIGaIHaEraFEaEraFEaEraFEaEraFEaEraEyaFFawWazzaylaNhaIMaIJaIMaILaylaIOaIQaIPaIRazFaISaAQaAQaITazFaINaDdaDoaIXaIWaIZaIYaJbaIUaJcaBRaaaaafaaaaJdaJeaJdaaaaafaaaayEayHayGaJaaIVaHJaJhaJiayGaqRaqZayWaJjazWaEZaEZaEZaJfaJlayWaaaaaaaJnaJpaJoaJraJqaJtaJsaJuaJnaaaaaaaJwaJvaJyaJgaAhaJzaByaByaByaDNaByaByaByaAhaCraJkaCraCraCraBBaJDaJCaJCaJEaJxaJmaJCaJHaJIaJIaJAaQjaJKaJIaJLaIpaIpaJBaIqaIpaIpaIpaJOaJNaIqaIoaFubavaJQaJPaJSaJRaJFaFwaJJaJGaLoaJMaJUaJTaJWaJVaIDaFzaFBaEjaHpaKeaHqaaaaaaaaaaaaaaaaafaaaaaaaaaaaacwIcwKcwJcwLcwLcwLcwMcwNcwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKfaCSaCSaEpaKgaEraEraEraEraEraEraKhaEraEyaKiawWazzaylaKjaKkaJXaKkaJYaKkaKkaKkaKlaylazFaKnaKmaKnazFazFaKpaJZaKpaBQaBQaBQaBQaKpaKaaKsaBRaKuaKtaKtaKvaKwaKbaKtaKtaKxayEaKyayGaKcayGaKdaKAaKBayGarPapgayWayWayWaBtaEXaBtayWayWayWaJnaJnaJnaKEaJqaJqaJqaJqaJqaKFaJnaJnaJnaJwaKGaJyaKoaAhaAhaAhaAhaAhaAhaAhaAhaAhaAhaKJaMraKraKqaKNaKMaKPaKOaJCaKQaJxaKzaKSaKRaJIaKTaKCaQjaKVaJIaKXaKWaKHaKDaKKaKIaKIaKLaKUaLdaIqaIoaFuaLfaJQaLgaJSaJRaLhaFwaKZcAzaLbaLaaLeaLcaMXaFwaFwaTeaFBaEjaIFaIEaHqaaaaafaafaafaafaafaafaafaaaaaacwIcwPcwOcwRcwQcwLcwMcwScwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKfaCSaLsaCSaCVaCVaCVaCVaCSaCUaLuaLtarBaLvaylaLwaLyaLiaLzaLjaLAasEaLCaLBaylaLDaLFaLEaLEaLGaLEaLEaLkaLEaLEaLEaLEaLEaLEaLHaLKaLJaLMaLLaLNaLNaLPaLNaLNaLNaLNaLlaLnaLmaLpaLNaLqaLNaLTaHPaLIaLxaLWaLVaLXaJsaJsaJsaJraJqaJqaLYaJqaJqaMaaLZaMcaMbaMeaMdaMfaJqaJqaLYaMhaMgaMjaLOaLRaLQaMnaMmaJqaMoaJqaCraMqaMpaMraMraMraLSaMvaMuaMxaMwaJCaLUaMicAAaMCaMBaJIaMDaKCaMkaMlaJIaJIaMGaMIaMsaMyaMtaMAaMzaMEaMNaIqaIoaFuaItaItaMHaMJaItaItaFwaMWaMKaFwaMXaMXaMXaMXaFwaMMaMLaLraEjaCRaCRaCRaMZaMZaMZaNaaNaaNaaafaafaaacrycwTcwUcwUcwVcwUcwXcwWcwUcwTcrzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWazyawWawWawWawWawWawWazyawWaaaarBaBHaNbaLwaNdaMOaNeaMPaNfasEaNgaLBaNiaNhaLFaNjaNlaNkaNnaNmaNoaLEaLEaLEaLEaLEaLEaLEaLKaLEaLFaLEaLEaLEaMRaMQaMSaMSaMSaMTaMUaMSaMVaMSaMYaMSaNpaNcaNraNqaNsaJqaJqaJqaJqaJqaJqaJqaJqaLYaJqaJqaNwaNvaNyaNxaNAaNzaNBaJqaJqaLYaJqaJqaJqaJqaJqaJqaJqaJqaJqaNCaJqaCraMraMraMraNtaNFaNFaNHaNGaNJaNIaJCaNuaNEaNDaJCaJCaJIaNMcABaNKaMFaNOaJIaIpaIpaNLaIpaIpaIpaNQaNNaNQaIqaIoaFuaNSaItaItaNPaItaNVaFwaFwaFwaFwaFwaFwaFwaNWaFwaFzaFzbxmaEjaNYaNXaCRaNZaObaOaaOdaOcaNaaafaaaaaacwIcwYcwYcwYcrxcwZcwLcxacxccxbcrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWazyawWawWawWawWawWawWazyawWaaaarBaBHaNbaLwaNdaMOaNeaMPaNfasEaNgaLBaNiaNhaLFaNjaNlaNkaNnaNmaNoaLEaLEaLEaLEaLEaLEaLEaLKaLEaLFaLEaLEaLEaMRaMQaMSaMSaMSaMTaMUaMSaMVaMSaMYaMSaNpaNcaNraNqaNsaJqaJqaJqaJqaJqaJqaJqaJqaLYaJqaJqaNwaNvaNyaNxaNAaNzaNBaJqaJqaLYaJqaJqaJqaJqaJqaJqaJqaJqaJqaNCaJqaCraMraMraMraNtaNFaNFaNHaNGaNJaNIaJCaNuaNEaNDaJCaJCaJIaNMcABaNKaMFaNOaJIaIpaIpaNLaIpaIpaIpaNQaNNaNQaIqaIoaFuaNSaItaItaNPaItaNVaFwaFwaFwaFwaFwaFwaFwaNWaFwaFzaFzaFBaEjaNYaNXaCRaNZaObaOaaOdaOcaNaaafaaaaaacwIcwYcwYcwYcrxcwZcwLcxacxccxbcrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaACarBawWauPawWaOfaOeaOhaOgawWauPawWawWarBazzaylaLwaOjaNRaNeaMPaNfasEaOkaLBaylaNhaLFaLEaOmaOlaOlaOlaOoaOnaOpaOlaOqaOlaOlaOlaOraOlaOsaOlaOlaOlaNUaNTaOtaOiaOiaOuaOwaOvaOyaOxaOAaOzaOCaOBbBoaODaJqaOEaOEaOEaOEaOEaOEaOEaOEaOFaOEaOEaOEaOEaOEaOEaOEaOEaOEaOEaOEaOGaOEaOEaOEaOEaOEaOEaOEaOEaJqaJqaJqaCraOHaOHaOHaOHaOHaOHaOJaKMaOLaOKaJCaJCaOOaJCaJCaOPaJIaOIaONaOMaMFaOTaJIaIpaOVaOQaOXaOWaOXaOXaORaOZaIqaIoaFuaPbaPbaYWaOSaPdaPdaPfaFuaPgaPiaPhaCRaPjaPlaPkaFzaFzaPnaPmaCRaPoaCRaPpaPraVXaOUaPsaNaaNaaNaaNacwIcxdcxecxecxfcwLcwLcwLcwLcxacwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafasEawWazyawWazzaylaylazAawWazyawWaPtaPvaPuaylaLwaPxaOYaLzaPaaLAasEaPyaLBaylaPzaPzaPzaPBaPAaPAaPAaPAaPAaPAaPCaPDaPAaPEaPAaPAaPAaPGaPFaPHaPFaPJaPIaPKaLEaLEaPLaPNaPMaLEaPcaPOaLEaPQaPQaJqaPeaLXaJnaJnaJnaJnaJnaJnaJnaJnaPRaPTaPSaPUaPSaPSaPSaPVaPSaPWaPSaPXaPRaJnaJnaJnaJnaJnaJnaJnaJnaJraJqaJqaJCaPZaPYaQbaQaaQbaQbaQcaKMaQeaQdaQgaPwaQiaPPaJIaJIaJIaJIaQkaQjaJIaJIaJIaJIaOXaQfaQmaQmaQmaQmaQhaOXaIqaIoaFuaQpaItaYWaOSaItaItaQqaFuaQraQtaQsaCRaFzaQvaQuaQwaQwaQyaQxaQAaQzaCRaQBaQCaTmaPqaPqaQFaQEaQEaQFcxgcxecxhcxhcrxcxicxkcxjcwLcxacrxaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWaQGaylawVaPuaylaylaQHawVaylaQGaPuaylaylaylaQIaQJaQlaQoaQnaQDaQDaRdaQKaylaPzaQLaPzaQMaPAaQOaQNaQQaQPaQRaQNaQTaQSaQVaQUaQXaQWaPGaQYaRaaQZaPJaRbaPKaPKaRcaPKaPKaPQaPQaReaRfaPQaPQaPQaRhaJqaLXaJnaaaaaaaaaaaaaaaaaaaaaaPRaRjaRiaRlaRkaRnaRmaRpaRoaRraRqaRsaPRaaaaaaaaaaaaaaaaaaaaaaJnaJraJqaRtaJCaRuaQcaRwaRvaRvaRvaQcaKMaQeaRxaPYaQcaRzaRgaJIaRAaRCaRyaRDaRBaRGaRFaRHaJIaOXaREaRJaRJaRJaRJaRIaOXaIqaRKaFuaRNaRNaYWaOSaROaROaRPaFuaFuaRQaFuaCRaRRaPlaPkaRSaRSaPnaPmaCRaCRaCRaNaaRUaRLaNaaNaaNaaNaaNaaRWcxlcwUcwUcwUcxmcxjcxjcxjcwLcxacwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaawWaRXaRYaRYaRYaRYaRYaRYaRYaRYaRXaRYaRZaylaylaNhaylbcDaSbaylaSdaylaRMaSeaSfaPzaSgaPzaQMaPAaShaQNaQNaQNaQNaQNaQTaSjaQNaQNaQNaQWaPGaSkaRaaRaaPJaRbaPKaSlaSmaSmaSnaPQaRVaRTaScaSaaStaSsaJqaJqaLXaJnaaaaaaaaaaaaaPRaPRaPRaPRaSvaSuaSxaSwaSzaSyaSBaSAaSDaSCaSEaPRaPRaPRaPRaaaaaaaaaaaaaJnaJraJqaJqaOKaQcaQcaQcaQcaSoaSHaSGaSpaQeaQdaSqaQcaSFaQcaSIaVzaSKaSJaSMaSLaSOaSNaVzaSPaSRaSQaRJaSSaSTaRJaSUaOXaIqaIoaFuaItaItaYWaOSaItaItaItaTcaTbaItaTdaCRaTeaTgaTfaRSaRSaTiaThaTjaCRaTlaTkaQCaTmaPqaPqaTnaQEaQEaTocxncwLcxocwLcwLcwLcwLcwLcwLcxpcwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafarBarBawWawWawWawWawWawWawWawWarBarBasEaNhaTraTqaTqaTsaTqaTqaTqaTqaTtaTqaTqaPzaSgaTuaTvaPAaTwaQNaSVaTxaTAaTzaTCaTBaSiaQNaQNaTDaPGaTEaTGaTFaPJaRbaPKaTHaTJaTIaTKaPQaSWaTLaSXaSraTPaSsaJqaJqaLXaJnaJnaJwaTQaPRaPRaTRaTTaTSaTVaTUaTXaTWaTYaTXaTZaTXaTXaUaaUcaUbaUeaUdaPRaPRaTQaJwaJnaJnaJraJqaJqaJCaUfaQcaQcaQcaUgaUgaQcaQcaMxaSYaQcaSZaQcaTaaJIaVzaVzaTMaVGaTNaTOaVFaVzaUhaUiaVIaRJaUjaUkaRJaXoaUzaIqaIoaFuaUBaUBaYWaOSaUCaItaItaUDaItaUFaUEaCRaUGaUIaUHaRSaRSaUKaUJaFzaCRaULaPqaQCaTmaPqaPsaNaaNaaNaaNacwIcxkcwLcxqcxrcwLcxqcxrcwLcxscwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxucxucxvcxucxucxucxwcxucxucxxaaaawWaAFaymaUMaTqaUOaUNaUQaUPaUQaUlaUmaUQaTqaSgaSgaUSaUTaPAaUUaUnaUoaUVaUqaUpaUsaUraUuaUtaUvaQWaPGaPGaPGaPGaPJaRbaPKaPKaPKaPKaPKaPQaVaaSraUwaSraSraSsaJqaJqaLXaJsaJsaVbaVdaVcaPRaVeaVgaVfaViaVhaViaVjaVlaVkaVnaVmaVpaVoaVmaVqaVsaVraPRaVtaVdaVuaVvaJsaJraJqaJqaOKaQbaQcczOaQcaVxaVwaQcaQcaQeaVyaQcaQcaQcaQcaVAaVzaVzaVBaVEaVDaVGaVFaVHaJIaVJaVIaVKaRJaRJaRJaXoaVMaIqaUxaFuaFuaFuaYWaOSaVPaVQaItaVSaVRaLgaVTaCRaFzaTgaTfaRSaRSaVUaThaVVaCRaVWaPqaQCaTmaPqaPsaNaaaaaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxycxAcxzcxBcxBcxBcxBcxBcxBcxBcxvaWaawWawWazzaylaTqaUybaHaUAaUOaUWaURaUmaUQaTqaWjaWlaWkaPzaPAaWnaTyaUXaWoaWqaWqaUYaWqaWqaWqaWpaUZaPAaWuaWwaWvaVCaWxaWAaWzaWBaPzaWCaPQaWEaWDaWGaWFaWFaSsaJqaJqaJqaJqaJqaWHaWJaWIaWLaWKaWNaWMaWPaWOaWRaWQaWTaWSaWVaWUaWXaWWaWYaWMaXaaWZaXcaXbaXeaXdaXgaXfaXhaJqaJqaJCaXiaQcaQcaQcaRwaRvaQcaQcaQeaVyaXjaVyaXlaXkaJIaVzcACaVzaXmaVzaVzaVFaXnaJIaOXaVIaRJaRJaRJaRJaXoaOXaIqaVLaVOaVNaVZaVYaWbaXuaXuaWdaYWaYWaYWaYWaWeaRSaRSaRSaRSaRSaWgaXzaXBaXyaXDaXCaXFaWhaOUaXGaNaaafaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafarBarBawWawWawWawWawWawWawWawWarBarBasEaNhaTraTqaTqaTsaTqaTqaTqaTqaTtaTqaTqaPzaSgaTuaTvaPAaTwaQNaSVaTxaTAaTzaTCaTBaSiaQNaQNaTDaPGaTEaTGaTFaPJaRbaPKaTHaTJaTIaTKaPQaSWaTLaSXaSraTPaSsaJqaJqaLXaJnaJnaJwaTQaPRaPRaTRaTTaTSaTVaTUaTXaTWaTYaTXaTZaTXaTXaUaaUcaUbaUeaUdaPRaPRaTQaJwaJnaJnaJraJqaJqaJCaUfaQcaUgaUgaUgaUgaQcaQcaMxaSYaQcaSZaQcaTaaJIaVzaVzaTMaVGaTNaTOaVFaVzaUhaUiaVIaRJaUjaUkaRJaXoaUzaIqaIoaFuaUBaUBaYWaOSaUCaItaItaUDaItaUFaUEaCRaUGaUIaUHaRSaRSaUKaUJaFzaCRaULaPqaQCaTmaPqaPsaNaaNaaNaaNacwIcxkcwLcxqcxrcwLcxqcxrcwLcxscwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxucxucxvcxucxucxucxwcxucxucxxaaaawWaAFaymaUMaTqaUOaUNaUQaUPaUQaUlaUmaUQaTqaSgaSgaUSaUTaPAaUUaUnaUoaUVaUqaUpaUsaUraUuaUtaUvaQWaPGaPGaPGaPGaPJaRbaPKaPKaPKaPKaPKaPQaVaaSraUwaSraSraSsaJqaJqaLXaJsaJsaVbaVdaVcaPRaVeaVgaVfaViaVhaViaVjaVlaVkaVnaVmaVpaVoaVmaVqaVsaVraPRaVtaVdaVuaVvaJsaJraJqaJqaOKaQbaQcaQbaQbaVxaVwaQcaQcaQeaVyaQcaQcaQcaQcaVAaVzaVzaVBaVEaVDaVGaVFaVHaJIaVJaVIaVKaRJaRJaRJaXoaVMaIqaUxaFuaFuaFuaYWaOSaVPaVQaItaVSaVRaLgaVTaCRaFzaTgaTfaRSaRSaVUaThaVVaCRaVWaPqaQCaTmaPqaPsaNaaaaaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxycxAcxzcxBcxBcxBcxBcxBcxBcxBcxvaWaawWawWazzaylaTqaUybaHaUAaUOaUWaURaUmaUQaTqaWjaWlaWkaPzaPAaWnaTyaUXaWoaWqaWqaUYaWqaWqaWqaWpaUZaPAaWuaWwaWvaVCaWxaWAaWzaWBaPzaWCaPQaWEaWDaWGaWFaWFaSsaJqaJqaJqaJqaJqaWHaWJaWIaWLaWKaWNaWMaWPaWOaWRaWQaWTaWSaWVaWUaWXaWWaWYaWMaXaaWZaXcaXbaXeaXdaXgaXfaXhaJqaJqaJCaXiaQcaRvaRvaRwaRvaQcaQcaQeaVyaXjaVyaXlaXkaJIaVzcACaVzaXmaVzaVzaVFaXnaJIaOXaVIaRJaRJaRJaRJaXoaOXaIqaVLaVOaVNaVZaVYaWbaXuaXuaWdaYWaYWaYWaYWaWeaRSaRSaRSaRSaRSaWgaXzaXBaXyaXDaXCaXFaWhaOUaXGaNaaafaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxDcxCcxCcxCcxCcxCcxCcxCcxCcxCcxCcxEaXIauPaXIaylaylaTqaWmaWiaWraXLaXLaWsaWtaXNaTqaXPaSgaWkaXQaXQaXQaWyaXpaXQaXsaXraXvaXtaXwaXwaXAaXxaPAaYaaYcaYbaXJaXEaXMaXKaYhaYgaYgaYiaYiaYiaYiaYiaYjaPQaJqaJqaYlaYkaYnaYmaYpaYoaPRaYqaYsaYraYuaYtaYvaYvaYxaYwaYzaYyaYBaYAaYCaYraYDaYqaPRaYoaYpaYEaYFaYkaYGaJqaJqaOKaQcaQcaQcaQcaQcaQcaQcaQcaXOaPYaYIaPYaQcaQcaYKaYJaYLaVzaVzaVzaVzaYMaYNaJIaYPaYOaRJaYQaYQaYRaYOaYTaXSaXRbdpbdpaXTaYYaXUaYWaYWaXVaYWaYWaYWaYWaWeaXWaZfaZfaZfaZfaZfaZgaZhaZeaZjaZiaZlaZkaPqaZmaNaaaaaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxGcxFcxHcxHcxIcxIcxIcxIcxIcxIcxIcxvawWawWawWazzaWcaXXaWfaXYaXZaXZaXZaXZaYdaUOaTqaZraZsaWkaXQaZtaZvaYebaOaXQaYHaZxaYSaPAaZBaZAaYXaYUaPAaZDaZFaZEaYZaZEaZEaZaaZEaZEaZIaZHaZHaZHaZJaZHaZLaZKaLYaLYaZNaZMaZMaZMaZMaZMaZMaZOaZQaZPaYtaYxaZSaZRaZRaZTaZRaZRaZUaYzaYAaZVaZXaZWaZVaZVaZVaZVaZVaZVaZYaLYaLYaJCbaaaZZbacbabaQcaQcaQcbadaZbbaeaQcbagbaibahaJIaJIaJIbajbakbakbakaJIaJIaJIbalaRJaRJbambambanbapbamaIqaZcaYVbaraFubasbaubataVQaItbaxaUDaVQaZdaCRbazaFzbaAaRSaRSbaAaFzbaBaCRbaDbaCbaEaTmaPqaPsaNaaNaaNaaNacwIcxkcwLcxqcxrcwLcxqcxrcwLcxscwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxGcxucxucxvcxucxucxucxwcxucxucxJaaaawWbaFaPubaGaTqaUQbaHaUQaUObaJaUQaZnaUQaTqbaLbaNbaMaXQaXQaXQaZwaZoaXQaZxaZxaZxaPAaZBaZAaYXaYUaPAaZDaZFaZEaZpbaSbaSbfibaUaZEbaWbaVbaYbaXaZKaZKaZKaZKaJqaJqaYlaZMaZuaZqaZzaZybbXaZCbbibbhbbkbbjaZRaZRbbmbblbbmaZRaZRbbnbbpbbobafaZGbaqbaobbvbbubbwaZVaYGaJqaJqaJCaJCaJCaJCaJCbbxaOKbbxbbyaJCaJCaJCaJCaJCaJCaJIbbzbbzbbzbbzbbzbbzbbAbbzaJIbambbBbbBbamaYVaYVaYVaYVaIqaZcaYVbaraFuaFuaFubbDaFubbDaFubbDaFuaFuaCRaCRbbFbbFbbFbbFbbFbbFaCRaCRbbGaPqbbHaTmaPqaPqaToaQEaQEaTocxKcwLcxLcwLcwLcwLcwLcwLcwLcxpcwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -6957,7 +6955,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacypcyccyhcyicyicyicyMcygcyccyccyecyEcypcywcyicyOcyOcyPcylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyQbrJbrKbrJbrLbjrbjrbjrboKboKboKboKbjrbjrbrNbrMaZEbrObbRbtvbpBbqpbfmbqsbbRbbRbbRbqubmEbrTaJqbqvbqybrUbrWbqqbqqbqrbrZbmraafaafbsbbsabsdbscbsfbsebsgaafaafbshbsjbsibslbskbsnbsmbsobqHbspaJqbqNbqMbqRbqObqTbqSbqVbqUbsybqXbqYbsxbsxbsxbsxbsxbrgbrfbsxbsxbsxbrhbhgbribrjbpEbsKbrkbsLbsLbsNbpKbonbPvbdPbsObsQbsPbsRbsRbfVbsSbCIbsTboxbrlbiLbsWboxbsXbsZbrmbtbbtabrobrnbrpbtebthbrrbtjbrubrwbrvbrvbrvbrPbrybrQbhGbtqbtpcAKbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcygcywcyicylcyicyicyicyicyicyicyicyicyMcyhcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyScyCboIblWblWbtrbjrbjrbjrbjrbjrbjrbjrbjrbjrbrNbtsaZEbttbtubjvbrRbkMbkNbkMbuIbbRbtybnKbtzbrTaJqbqvbqybmrbtBbrSbtDbtCbtEbmraaaaaaaafbgObtGbtFbtGbijaafaaaaaabshbtIbtHbtKbtJbtLbtLbtNbtMbtObAkaNrbrVbrXbLXbFDbrYbEebsqbEebEebssbsrbtXbtVbtVbtVbtZbhhbhhbhhbstbuabuabsubpEbpEbpEbsvbugbufbrebpKbonbdObdPbuhbuhbuhbuhbuhbfVboxboxboxboxbujbswbujboxbszcdXbsAbuobuobuobsCbsDbupbusbsEbuubsFbuwbuvbuvbsGbsIbsHbsMbsJbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcyccyccyccyccyccyccyccyEcybaaacyacypcywcyicyicyicylcyicyicyDcyccyccyecyKcyicyicylcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyTbrJbrKbrJbnwbuBbjrbjrbuCbjrbuBbjrbjrbjrbrNbuDaZEbuEbbRbtvbsVbbRbfmbbRbbRbbRbuJbnKbtzbrTaYlbqvbuKbmrbuMbsYbuObuNbnSbmraaaaaaaafbuPbuQbphbuSbuRaafaaaaaabshbtdbtcbuWbuVbuYbuXbuZbqHbvaaJqaJqbofbofbtfbJGbwzbBLbvjbvhbtgbtgbvhbvjbvhbvjbvhbvjbvhbvjbfJbfJbuabvnbsLbtkbtibpEbsvbtlbvsbvvbvubonbtmbtobtnbtxbtwbuobuobtAbuobuobtPbtSbtQbtUbvEbuobtWceXbvHbvJbvJbvJbvKbvKbvKbvKbvKbvMbtYbvObvNbvObvPbvObqebuzbhGbvQbrGbvRbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacypcywcyicyicyicyicyicyicyicyMcypcyccypcywcyicyicyicyicyUcyicyicylcyVcyWcyicylcyicyicyRcyicyicyicyXcyYcyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyZbvSbvTbvSbvVbvUbvVbvVbvVbvVbvVbubbvXbjrbrNbvYaZEbvZbbRbucbwcbudbwebwdbwdbwdbwebwebwfbrTaKFbwgbqybmrbwibuebwkbwjbwlbmraaaaaaaafbwmbwnbscbwpbwoaafaaaaaabshbwrbwqbwtbwsbuYbuXbuZbqHbwuaJqaJqbwvbwxbuibJGbwybwAbvjbwCbDRbukbwDbwGbwFbwIbwHbwIbwJbvjbhhbhhbuabwLbsLbumbulbuqbunbutburburbuxbuGbuybuLbuHbuUbuTbxdbvbbxdbxdbvcbxdbxdbvebxebxdbxdbxfbvgbvfbvJbCkbxjbxibxlbxkczPbvKbxobxnbxqbxpbxrbxnbxsbqebuzbhGbxtbtpbtpbkyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacypcywcyicyicyicyicyicyicyicyMcypcyccypcywcyicyicyicyicyUcyicyicylcyVcyWcyicylcyicyicyRcyicyicyicyXcyYcyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyZbvSbvTbvSbvVbvUbvVbvVbvVbvVbvVbubbvXbjrbrNbvYaZEbvZbbRbucbwcbudbwebwdbwdbwdbwebwebwfbrTaKFbwgbqybmrbwibuebwkbwjbwlbmraaaaaaaafbwmbwnbscbwpbwoaafaaaaaabshbwrbwqbwtbwsbuYbuXbuZbqHbwuaJqaJqbwvbwxbuibJGbwybwAbvjbwCbDRbukbwDbwGbwFbwIbwHbwIbwJbvjbhhbhhbuabwLbsLbumbulbuqbunbutburburbuxbuGbuybuLbuHbuUbuTbxdbvbbxdbxdbvcbxdbxdbvebxebxdbxdbxfbvgbvfbvJbCkbxjbxibxlbxkbxmbvKbxobxnbxqbxpbxrbxnbxsbqebuzbhGbxtbtpbtpbkyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyecyicyicyicyicyicyicyicyicyicyecyicyecyicyicyicyicyiczacyicyicylcyicyicyicylcyicyiczacyicyicyiczbczccyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyCboIblWblWblWaZEblWblWblWbxubxubxubxubxwbxxbxxbxubxubxybxzbxAbxybwebxBbxDbxCbxEbwebtzbrTaLXaJwaJwbmrbmrbmrbmrbmrbxGbmraJnaJnaJnbxHbxIbtFbxKbxJaJnaJnaJnbqHbqHbqHbqHbqHbqHbqHbqHbqHbwuaJqbxLbvjbvjbvibvlbvjbvjbvjbxNbDRbvmbDRbxRbxQbxTbxSbxVbxUbxRbhhbhhbuabxXbvobvqbvpbvtbvrbvwbvpbvpbvybvAbvzbvBbyfbyfbyfbyfbyhbyfbyfbyfbyibyibyjbvCbykbykbzEbvDbrtbvJbyobyqbypbysbyrbyubytbqebqebyvbyvbyvbqebywbqebuzbhGbvQbrGbyxbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacypcyKcyicyicyicyicyicyiczdcyDcypcyccypcyKcyicyicyicyicyUcyicyicylcyiczecyicylcyicyicyRcyicyicyicyXcyXcyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczgczfcyBcyBcyBczhcziaaaaaaaaaaaaaafaaaaaaaaaaaabxubvFbyAbyzbyCbyBbyDbxxbyFbBabvIbvGbwdbvLbyLbyKbyMbwebtzbrTaJqaJqaJqbyNaMmaMnaLYbyPbyRbyQaXfaXfaXfbySbwabvWbwhbwbaJqaJqaJqaJqaMmaJqaLYaJqaJqaJqbyNaJqbwuaJqbyXbvjbwBbwwbwEbzabAlbvjbzebDRbDTbDRbxRbxQbxQbzhbzjbzibxRbhhbwKbuabsLbzlbznbzmbyebzobzqbzpbzrbonbonbdOcbKbyfbzubztbzwbzvbzybzxbyfbzzbwNbwMbzDbzCbykbzEbvDbwObwQaDHbwRbzJbzMbzLbzNbytbzObzObzObzObzObzObzObqebuzbhGbtqbtpbtpbkyaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczjcygcyccyccyccyccyccyccyccygczkaaaczjcypcyKcyicyicyicylcyicyicylcyiczmczlcylcyicyicylcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczocznczpczpczpcznczqaaaaaaaaaaaaaafaaaaaaaaaaaabxxbzPbzRbzQbzTbwSbwUbwTbwWbwVbwXbAZbwYbyIbyKbyKbAdbwebtzbAeaJqaJqaJqaJqaJqaJqaLYaJqbrTaJqaJqaJqaJqaJqbAgbAfbAhaJqaJqaJqaJqaJqaJqaJqaLYaJqaJqaJqaJqaJqbwubAjaJqbvjbxabwZbxcbxbbAlbvjbApbDRbukbAqbvjbArbAtbAsbAvbAubvjbhhbhhbuabuabuabuabuabonbonbonbonbonbonbAwbPvbxgbyfbAzbAybABbAAbADbACbyfbAEbAGbAFbxvbAHbykbzEbxMbxFbxWbxPbxYbxYbyabxZbybbytbzObzObARbAQbzObzObzObqebuzbhGbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -399,9 +399,9 @@
|
||||
"hI" = (/obj/machinery/door/airlock/centcom{name = "Centcom Docks"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor/plasteel/black,/area/centcom/control)
|
||||
"hJ" = (/obj/machinery/door/poddoor/preopen{id = "CentComPort"; name = "security door"},/turf/simulated/floor/plasteel/loadingarea{dir = 8},/area/centcom/control)
|
||||
"hK" = (/turf/simulated/floor/plasteel/warning{dir = 8},/area/centcom/evac)
|
||||
"hL" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel,/area/centcom/evac)
|
||||
"hL" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchen/knife/ritual,/turf/simulated/floor/plasteel/cult,/area/wizard_station)
|
||||
"hM" = (/obj/structure/flora/bush,/turf/simulated/floor/plating/asteroid/snow,/area/syndicate_mothership)
|
||||
"hN" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/plasteel/warning{dir = 8},/area/centcom/supply)
|
||||
"hN" = (/obj/machinery/computer/cargo,/turf/simulated/floor/plasteel/warning{dir = 8},/area/centcom/supply)
|
||||
"hO" = (/turf/simulated/floor/plasteel/green/corner{dir = 8},/area/centcom/control)
|
||||
"hP" = (/turf/simulated/floor/plasteel/warning/corner{dir = 4},/area/centcom/evac)
|
||||
"hQ" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/space,/area/space)
|
||||
@@ -650,7 +650,6 @@
|
||||
"mz" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station)
|
||||
"mA" = (/obj/structure/bookcase,/turf/simulated/floor/plasteel/cult,/area/wizard_station)
|
||||
"mB" = (/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station)
|
||||
"mC" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchen/knife/ritual,/obj/item/clothing/suit/wizrobe/santa,/obj/item/clothing/head/wizard/santa,/turf/simulated/floor/plasteel/cult,/area/wizard_station)
|
||||
"mD" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/simulated/floor/plasteel/cult,/area/wizard_station)
|
||||
"mE" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/simulated/floor/plasteel/cult/airless,/area/wizard_station)
|
||||
"mF" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plating/airless,/area/wizard_station)
|
||||
@@ -1078,7 +1077,7 @@ abababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhbhbhbhbhbhbhbgShcgTgCgCgChdgrgNgrgrgWhefNgOgKgKgKgKhfhfhfhggKgKgLgRhhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihiababababababababababababababababababababababababababababababababababababababhbhjhkhlhkhmhbgSgBgTgCgCgChngNgSgrhohphqfNhrgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihshshshshshshshshshthshshshuhvhshshshshshuhshshshshshwhuhshshiababababababababababababababababababababababababababababababababababababababhxhyhzhzhzhzhbgNgrhAgCgCgChBgrgNgrgNhCgNfNhDgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihshshshshthshshshshshshshshshshshuhshshshshshshshuhshEhshshshiababababababababababababababababababababababababababababababababababababababhFhyhzhzhzhzhGhHgCgCgCgCgCgCgCgUhIgWgWgWhJhKgKgKgKgKgKhLgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihshshshshthshshshshshshshshshshshuhshshshshshshshuhshEhshshshiababababababababababababababababababababababababababababababababababababababhFhyhzhzhzhzhGhHgCgCgCgCgCgCgCgUhIgWgWgWhJhKgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihshshshshshshshMhshshshshshthshshvhshshuhshshuhshshuhvhshuhshiababababababababababababababababababababababababababababababababababababababhxhNhzhzhzhzhbgNgrhOgCgCgChdgrgNgrgrgrgrfNhPgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihshshshshshshshshshshshshshshshshshuhshshthshshuhvhshshuhshvhiabababababababababababababababababababababababababababababababababababababhQhFhyhzhzhzhzhbgSgugTgCgCgChRgugSgrabababfNhSgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababhihshshshshshshshshshshshshshshshthshshshshshshshvhshuhvhshuhshiababababababababababababababababababababababababababababababababababababababhThyhzhzhzhzhbgShcgTgCgCgChRhcgSgrabababfNhUgKgKgKgKhVhVhVhWgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
@@ -1099,7 +1098,7 @@ ababababababababababaaaaaaaaaaaaaaaaaakVjuaaaajulGlHlIlJlIkVjujuaaaaaaaaaaaaaaaa
|
||||
ababababababababababaaaaaaaaaaaaaajcjclQjcjcjcjcjcjclRjcjcjcjcjcjcaajuaaaaaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshMhshilLlLlLlLlLlLhiiRiRiRlululululuiRiRhiabababababababababababababababababababablTlTlTlTlTlTlTlTlTlUlVlVlVlVlVlVlVlVlVlVlVlVlVlUlTlTlTlTlTlTlTlTlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaajclWkGkGlWjclXlYkGkGkGlZmajcmbmcmdmejujuaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshthshshvkLlLlLlLlLlLmfhihihihihihihihihihihihiabababababababababababababababababababablTmgmhmimimimimimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmmmmmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaamompkGkGmpmomqmqkGkGkGkGmrmomsmtlxlxmuaaaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshMhuhthMhimvmvmvmvmvmwhiababababababababababababababababababababababababababababababablTmgmhmimxmimxmimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmymmmymmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaamzmAkGlnkGmBlzlnkGmCkGkGmDmzmEmFmGmHmImJaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshuhshihihihihihihihiababababababababababababababababababababababababababababababablTmgmhmimimKmimimjmklVlVlVlVlVmLmMmLlVlVlVlVlVmlmjmmmmmNmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaamzmAkGlnkGmBlzlnkGhLkGkGmDmzmEmFmGmHmImJaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshuhshihihihihihihihiababababababababababababababababababababababababababababababablTmgmhmimimKmimimjmklVlVlVlVlVmLmMmLlVlVlVlVlVmlmjmmmmmNmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaamOmpkGlIlzmPlIkGkGmQkGkGkGmOmRmSmumTkPaaaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshuhshMhshiabababababababababababababababababababababababababababababababababababababablTmgmhmimimimimimjmklVlVlVlVlVmLmUmLlVlVlVlVlVmlmjmmmmmmmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaajcmVkGkGmVjcmWkGlnlIkGkGmWjcmXmYmZnaaaaaaaaaaaababababababhihshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshshshiabababababababababababababababababababababababababababababababababababababablTmgmhmimxmimxmimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmymmmymmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaajcjcnbjcjcjcjcjckunckujcjcjcjcjcjujujuaaaaaaaaababababababhihshXhXhXhXhXhshXhXhXhXhXhshXhXhXhXhXhshshshshEhshshiabababababababababababababababababababababababababababababababababababababablTmgmhmimimimimimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmmmmmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
|
||||
@@ -0,0 +1,253 @@
|
||||
// Helpers for running 510 code on older versions of BYOND.
|
||||
#if DM_VERSION < 510
|
||||
#define BYGEX "code/__HELPERS/bygex"
|
||||
/proc/replacetext(text, replace, replacement)
|
||||
if(istype(replace, /regex))
|
||||
var/regex/R = replace
|
||||
return R.Replace(text, replacement)
|
||||
else
|
||||
return call(BYGEX, "regex_replaceallliteral")(text, replace, replacement)
|
||||
|
||||
/proc/replacetextEx(text, replace, replacement)
|
||||
return call(BYGEX, "regEx_replaceallliteral")(text, replace, replacement)
|
||||
|
||||
/proc/regex(pattern, flags)
|
||||
return new /regex(pattern, flags)
|
||||
|
||||
/regex
|
||||
var/pattern
|
||||
var/list/flags
|
||||
var/list/group
|
||||
|
||||
/regex/New(pattern, flags)
|
||||
src.pattern = pattern
|
||||
src.flags = splittext(flags, "")
|
||||
group = list()
|
||||
|
||||
/regex/proc/Find(text) // Does not support Start/End.
|
||||
var/method
|
||||
if("i" in flags)
|
||||
method = "regex_find"
|
||||
else
|
||||
method = "regEx_find"
|
||||
|
||||
var/results = call(BYGEX, method)(text, pattern)
|
||||
var/list/L = params2list(results)
|
||||
var/list/M
|
||||
var/i
|
||||
var/j
|
||||
|
||||
for(i in L)
|
||||
M = L[i]
|
||||
for(j = 2, j <= M.len, j += 2)
|
||||
var/pos = text2num(M[j-1])
|
||||
var/len = text2num(M[j])
|
||||
group += copytext(text, pos, pos + len)
|
||||
|
||||
/regex/proc/Replace(text, replacement)
|
||||
var/method
|
||||
if("g" in flags)
|
||||
if("i" in flags)
|
||||
method = "regex_replaceall"
|
||||
else
|
||||
method = "regEx_replaceall"
|
||||
else
|
||||
if("i" in flags)
|
||||
method = "regex_replace"
|
||||
else
|
||||
method = "regEx_replace"
|
||||
return call(BYGEX, method)(text, pattern, replacement)
|
||||
#undef BYGEX
|
||||
|
||||
// Formerly list2text
|
||||
/proc/jointext(list/ls, sep)
|
||||
if(ls.len <= 1) // Early-out code for empty or singleton lists.
|
||||
return ls.len ? ls[1] : ""
|
||||
|
||||
var/l = ls.len // Made local for sanic speed.
|
||||
var/i = 0 // Incremented every time a list index is accessed.
|
||||
|
||||
if(sep != null)
|
||||
// Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc...
|
||||
#define S1 sep, ls[++i]
|
||||
#define S4 S1, S1, S1, S1
|
||||
#define S16 S4, S4, S4, S4
|
||||
#define S64 S16, S16, S16, S16
|
||||
|
||||
. = "[ls[++i]]" // Make sure the initial element is converted to text.
|
||||
|
||||
// Having the small concatenations come before the large ones boosted speed by an average of at least 5%.
|
||||
if(l-1 & 0x01) // 'i' will always be 1 here.
|
||||
. = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2.
|
||||
if(l-i & 0x02)
|
||||
. = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
|
||||
if(l-i & 0x04)
|
||||
. = text("[][][][][][][][][]", ., S4) // And so on....
|
||||
if(l-i & 0x08)
|
||||
. = text("[][][][][][][][][][][][][][][][][]", ., S4, S4)
|
||||
if(l-i & 0x10)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
|
||||
if(l-i & 0x20)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
if(l-i & 0x40)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
while(l > i) // Chomp through the rest of the list, 128 elements at a time.
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
|
||||
#undef S64
|
||||
#undef S16
|
||||
#undef S4
|
||||
#undef S1
|
||||
|
||||
else
|
||||
// Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc...
|
||||
#define S1 ls[++i]
|
||||
#define S4 S1, S1, S1, S1
|
||||
#define S16 S4, S4, S4, S4
|
||||
#define S64 S16, S16, S16, S16
|
||||
|
||||
. = "[ls[++i]]" // Make sure the initial element is converted to text.
|
||||
|
||||
if(l-1 & 0x01) // 'i' will always be 1 here.
|
||||
. += "[S1]" // Append 1 element if the remaining elements are not a multiple of 2.
|
||||
if(l-i & 0x02)
|
||||
. = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
|
||||
if(l-i & 0x04)
|
||||
. = text("[][][][][]", ., S4) // And so on...
|
||||
if(l-i & 0x08)
|
||||
. = text("[][][][][][][][][]", ., S4, S4)
|
||||
if(l-i & 0x10)
|
||||
. = text("[][][][][][][][][][][][][][][][][]", ., S16)
|
||||
if(l-i & 0x20)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
if(l-i & 0x40)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
while(l > i) // Chomp through the rest of the list, 128 elements at a time.
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
|
||||
#undef S64
|
||||
#undef S16
|
||||
#undef S4
|
||||
#undef S1
|
||||
|
||||
// Formerly text2list
|
||||
/proc/splittext(text, delim = "\n")
|
||||
var/delim_len = length(delim)
|
||||
. = list()
|
||||
var/last_found = 1
|
||||
var/found = 1
|
||||
if(delim_len < 1)
|
||||
var/text_len = length(text)
|
||||
while(found++ <= text_len)
|
||||
. += copytext(text,found-1, found)
|
||||
else
|
||||
do
|
||||
found = findtext(text, delim, last_found, 0)
|
||||
. += copytext(text, last_found, found)
|
||||
last_found = found + delim_len
|
||||
while(found)
|
||||
|
||||
// Formerly JSON.stringify
|
||||
/proc/json_encode(value)
|
||||
return jointext(json_encode_value(list(), value))
|
||||
|
||||
/proc/json_encode_value(list/json, value)
|
||||
. = json
|
||||
if(isnum(value))
|
||||
json += value // Consider num2text(value, 20) for maximum accuracy.
|
||||
else if(isnull(value))
|
||||
json += "null"
|
||||
else if(istext(value))
|
||||
json_encode_string(json, value)
|
||||
else if(istype(value, /list))
|
||||
json_encode_list(json, value)
|
||||
else
|
||||
json_encode_string(json, "[value]")
|
||||
// 510 just encodes the name of a datum.
|
||||
//throw EXCEPTION("Datums cannot be converted to JSON.")
|
||||
|
||||
/proc/json_encode_string(list/json, str)
|
||||
. = json
|
||||
var/quotePos = findtextEx(str, "\"")
|
||||
var/bsPos = findtextEx(str, "\\")
|
||||
if (quotePos == 0 && bsPos == 0)
|
||||
json.Add("\"", str, "\"")
|
||||
else
|
||||
json += "\""
|
||||
var/lastStop = 1
|
||||
while(quotePos != 0 || bsPos != 0)
|
||||
var/escPos
|
||||
if(quotePos < bsPos && quotePos != 0 || bsPos == 0)
|
||||
escPos = quotePos
|
||||
else
|
||||
escPos = bsPos
|
||||
json.Add(copytext(str, lastStop, escPos), "\\")
|
||||
lastStop = escPos
|
||||
if(escPos == quotePos)
|
||||
quotePos = findtextEx(str, "\"", escPos + 1)
|
||||
else if(escPos == bsPos)
|
||||
bsPos = findtextEx(str, "\\", escPos + 1)
|
||||
json.Add(copytext(str, lastStop), "\"")
|
||||
|
||||
/proc/json_encode_list(list/json, list/listVal)
|
||||
. = json
|
||||
#define Either 0
|
||||
#define CannotBeArray 1
|
||||
#define CannotBeObject 2
|
||||
#define BadList (CannotBeArray | CannotBeObject)
|
||||
var/listType = Either
|
||||
for(var/key in listVal)
|
||||
if(istext(key))
|
||||
if(!isnull(listVal[key]))
|
||||
listType |= CannotBeArray
|
||||
else
|
||||
if(!isnum(key) && !isnull(listVal[key]))
|
||||
listType = BadList
|
||||
else
|
||||
listType |= CannotBeObject
|
||||
|
||||
if(listType == BadList)
|
||||
throw EXCEPTION("The given list cannot be converted to JSON.")
|
||||
|
||||
if(listType == CannotBeArray)
|
||||
json += "{"
|
||||
var/addComma
|
||||
for(var/key in listVal)
|
||||
if(addComma)
|
||||
json += ","
|
||||
else
|
||||
addComma = TRUE
|
||||
json_encode_string(json, key)
|
||||
json += ":"
|
||||
json_encode_value(json, listVal[key])
|
||||
json += "}"
|
||||
else
|
||||
json += "\["
|
||||
var/addComma
|
||||
for(var/key in listVal)
|
||||
if(addComma)
|
||||
json += ","
|
||||
else
|
||||
addComma = TRUE
|
||||
json_encode_value(json, key)
|
||||
json += "]"
|
||||
#undef Either
|
||||
#undef CannotBeFlat
|
||||
#undef CannotBeAssoc
|
||||
#undef BadList
|
||||
#endif
|
||||
@@ -12,11 +12,11 @@ var/global/list/string_cache
|
||||
var/list/stringsList = list()
|
||||
fileList = file2list("strings/[filename]")
|
||||
for(var/s in fileList)
|
||||
stringsList = text2list(s, "@=")
|
||||
stringsList = splittext(s, "@=")
|
||||
if(stringsList.len != 2)
|
||||
CRASH("Invalid string list in strings/[filename]")
|
||||
if(findtext(stringsList[2], "@,"))
|
||||
string_cache[filename][stringsList[1]] = text2list(stringsList[2], "@,")
|
||||
string_cache[filename][stringsList[1]] = splittext(stringsList[2], "@,")
|
||||
else
|
||||
string_cache[filename][stringsList[1]] = stringsList[2] // Its a single string!
|
||||
else
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
/*
|
||||
This file is part of bygex.
|
||||
|
||||
bygex is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation, either version 3 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
bygex is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with bygex. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
Based on code by Zac Stringham - Copyright 2009 (LGPL)
|
||||
Written 6-Oct-2013 - carnie (elly1989@rocketmail.com), accreditation appreciated but not required.
|
||||
Please do not remove this comment.
|
||||
|
||||
Full source code is available at https://code.google.com/p/byond-regex/
|
||||
Please report any relevant issues on the tracker at the above address.
|
||||
~Carn
|
||||
*/
|
||||
|
||||
#ifdef USE_BYGEX
|
||||
|
||||
#ifndef LIBREGEX_LIBRARY
|
||||
#define LIBREGEX_LIBRARY "bin/bygex"
|
||||
#endif
|
||||
|
||||
/proc/regEx_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp))
|
||||
|
||||
/proc/regex_compare(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp))
|
||||
|
||||
/proc/regEx_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
|
||||
|
||||
/proc/regex_find(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp))
|
||||
|
||||
/proc/regEx_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt)
|
||||
|
||||
/proc/regex_replaceall(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt)
|
||||
|
||||
/proc/replacetextEx(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt)
|
||||
|
||||
/proc/replacetext(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt)
|
||||
|
||||
/proc/regEx_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt)
|
||||
|
||||
/proc/regex_replace(str, exp, fmt)
|
||||
return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt)
|
||||
|
||||
/proc/regEx_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp))
|
||||
|
||||
/proc/regex_findall(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp))
|
||||
|
||||
|
||||
//upon calling a regex match or search, a /datum/regex object is created with str(haystack) and exp(needle) variables set
|
||||
//it also contains a list(matches) of /datum/match objects, each of which holds the position and length of the match
|
||||
//matched strings are not returned from the dll, in order to save on memory allocation for large numbers of strings
|
||||
//instead, you can use regex.str(matchnum) to fetch this string as needed.
|
||||
//likewise you can also use regex.pos(matchnum) and regex.len(matchnum) as shorthands
|
||||
/datum/regex
|
||||
var/str
|
||||
var/exp
|
||||
var/error
|
||||
var/anchors = 0
|
||||
var/list/matches = list()
|
||||
|
||||
/datum/regex/New(str, exp, results)
|
||||
src.str = str
|
||||
src.exp = exp
|
||||
|
||||
if(findtext(results, "$Err$", 1, 6)) //error message
|
||||
src.error = results
|
||||
else
|
||||
var/list/L = params2list(results)
|
||||
var/list/M
|
||||
var{i;j}
|
||||
for(i in L)
|
||||
M = L[i]
|
||||
for(j=2, j<=M.len, j+=2)
|
||||
matches += new /datum/match(text2num(M[j-1]),text2num(M[j]))
|
||||
anchors = (j-2)/2
|
||||
return matches
|
||||
|
||||
/datum/regex/proc/str(i)
|
||||
if(!i)
|
||||
return str
|
||||
var/datum/match/M = matches[i]
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("str(): out of bounds")
|
||||
return copytext(str, M.pos, M.pos+M.len)
|
||||
|
||||
/datum/regex/proc/pos(i)
|
||||
if(!i)
|
||||
return 1
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("pos(): out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos
|
||||
|
||||
/datum/regex/proc/len(i)
|
||||
if(!i)
|
||||
return length(str)
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("len(): out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.len
|
||||
|
||||
/datum/regex/proc/end(i)
|
||||
if(!i)
|
||||
return length(str)
|
||||
if(i < 1 || i > matches.len)
|
||||
throw EXCEPTION("end() out of bounds")
|
||||
var/datum/match/M = matches[i]
|
||||
return M.pos + M.len
|
||||
|
||||
/datum/regex/proc/report() //debug tool
|
||||
. = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]"
|
||||
if(error)
|
||||
. += "\n<font color='red'>[error]</font>"
|
||||
return
|
||||
for(var/i=1, i<=matches.len, ++i)
|
||||
. += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]"
|
||||
|
||||
/datum/match
|
||||
var/pos
|
||||
var/len
|
||||
|
||||
/datum/match/New(pos, len)
|
||||
src.pos = pos
|
||||
src.len = len
|
||||
|
||||
#endif
|
||||
@@ -1,53 +0,0 @@
|
||||
/mob
|
||||
var/expression = "\\S+"
|
||||
var/format = "*"
|
||||
|
||||
var/datum/regex/results
|
||||
|
||||
/mob/verb/set_expression()
|
||||
var/t = input(usr,"Input Expression","title",expression) as text|null
|
||||
if(t != null)
|
||||
expression = t
|
||||
usr << "Expression set to:\t[html_encode(t)]"
|
||||
|
||||
/mob/verb/set_format()
|
||||
var/t = input(usr,"Input Formatter","title",format) as text|null
|
||||
if(t != null)
|
||||
format = t
|
||||
usr << "Format set to:\t[html_encode(t)]"
|
||||
|
||||
/mob/verb/compare_casesensitive(t as text)
|
||||
results = regEx_compare(t, expression)
|
||||
world << results.report()
|
||||
|
||||
/mob/verb/compare(t as text)
|
||||
results = regex_compare(t, expression)
|
||||
world << results.report()
|
||||
|
||||
/mob/verb/find_casesensitive(t as text)
|
||||
results = regEx_find(t, expression)
|
||||
world << results.report()
|
||||
|
||||
/mob/verb/find(t as text)
|
||||
results = regex_find(t, expression)
|
||||
world << results.report()
|
||||
|
||||
/mob/verb/replaceall_casesensitive(t as text)
|
||||
usr << regEx_replaceall(t, expression, format)
|
||||
|
||||
/mob/verb/replaceall(t as text)
|
||||
usr << regex_replaceall(t, expression, format)
|
||||
|
||||
/mob/verb/replace_casesensitive(t as text)
|
||||
usr << html_encode(regEx_replace(t, expression, format))
|
||||
|
||||
/mob/verb/replace(t as text)
|
||||
usr << regex_replace(t, expression, format)
|
||||
|
||||
/mob/verb/findall(t as text)
|
||||
results = regex_findall(t, expression)
|
||||
world << results.report()
|
||||
|
||||
/mob/verb/findall_casesensitive(t as text)
|
||||
results = regEx_findall(t, expression)
|
||||
world << results.report()
|
||||
+21
-7
@@ -1,3 +1,10 @@
|
||||
//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
|
||||
#define RANGE_TURFS(RADIUS, CENTER) \
|
||||
block( \
|
||||
locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
|
||||
locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
|
||||
)
|
||||
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/proc/get_area(O)
|
||||
@@ -24,6 +31,20 @@
|
||||
return A
|
||||
return 0
|
||||
|
||||
/proc/get_areas_in_range(dist=0, atom/center=usr)
|
||||
if(!dist)
|
||||
var/turf/T = get_turf(center)
|
||||
return T ? list(T.loc) : list()
|
||||
if(!center)
|
||||
return list()
|
||||
|
||||
var/list/turfs = RANGE_TURFS(dist, center)
|
||||
var/list/areas = list()
|
||||
for(var/V in turfs)
|
||||
var/turf/T = V
|
||||
areas |= T.loc
|
||||
return areas
|
||||
|
||||
// Like view but bypasses luminosity check
|
||||
|
||||
/proc/get_hear(range, atom/source)
|
||||
@@ -423,10 +444,3 @@
|
||||
new_character.key = G_found.key
|
||||
|
||||
return new_character
|
||||
|
||||
//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a
|
||||
#define RANGE_TURFS(RADIUS, CENTER) \
|
||||
block( \
|
||||
locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \
|
||||
locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \
|
||||
)
|
||||
|
||||
@@ -206,18 +206,6 @@
|
||||
if(start)
|
||||
return findtextEx(text, suffix, start, null)
|
||||
|
||||
/*
|
||||
* Text modification
|
||||
*/
|
||||
// See bygex.dm
|
||||
#ifndef USE_BYGEX
|
||||
/proc/replacetext(text, find, replacement)
|
||||
return list2text(text2list(text, find), replacement)
|
||||
|
||||
/proc/replacetextEx(text, find, replacement)
|
||||
return list2text(text2listEx(text, find), replacement)
|
||||
#endif
|
||||
|
||||
//Adds 'u' number of zeros ahead of the text 't'
|
||||
/proc/add_zero(t, u)
|
||||
while (length(t) < u)
|
||||
|
||||
+8
-138
@@ -2,7 +2,6 @@
|
||||
* Holds procs designed to change one type of value, into another.
|
||||
* Contains:
|
||||
* hex2num & num2hex
|
||||
* text2list & list2text
|
||||
* file2list
|
||||
* angle2dir
|
||||
* angle2text
|
||||
@@ -72,138 +71,9 @@
|
||||
i++
|
||||
return .
|
||||
|
||||
|
||||
// Concatenates a list of strings into a single string. A seperator may optionally be provided.
|
||||
/proc/list2text(list/ls, sep)
|
||||
if(ls.len <= 1) // Early-out code for empty or singleton lists.
|
||||
return ls.len ? ls[1] : ""
|
||||
|
||||
var/l = ls.len // Made local for sanic speed.
|
||||
var/i = 0 // Incremented every time a list index is accessed.
|
||||
|
||||
if(sep != null)
|
||||
// Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc...
|
||||
#define S1 sep, ls[++i]
|
||||
#define S4 S1, S1, S1, S1
|
||||
#define S16 S4, S4, S4, S4
|
||||
#define S64 S16, S16, S16, S16
|
||||
|
||||
. = "[ls[++i]]" // Make sure the initial element is converted to text.
|
||||
|
||||
// Having the small concatenations come before the large ones boosted speed by an average of at least 5%.
|
||||
if(l-1 & 0x01) // 'i' will always be 1 here.
|
||||
. = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2.
|
||||
if(l-i & 0x02)
|
||||
. = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
|
||||
if(l-i & 0x04)
|
||||
. = text("[][][][][][][][][]", ., S4) // And so on....
|
||||
if(l-i & 0x08)
|
||||
. = text("[][][][][][][][][][][][][][][][][]", ., S4, S4)
|
||||
if(l-i & 0x10)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
|
||||
if(l-i & 0x20)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
if(l-i & 0x40)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
while(l > i) // Chomp through the rest of the list, 128 elements at a time.
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
|
||||
#undef S64
|
||||
#undef S16
|
||||
#undef S4
|
||||
#undef S1
|
||||
|
||||
else
|
||||
// Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc...
|
||||
#define S1 ls[++i]
|
||||
#define S4 S1, S1, S1, S1
|
||||
#define S16 S4, S4, S4, S4
|
||||
#define S64 S16, S16, S16, S16
|
||||
|
||||
. = "[ls[++i]]" // Make sure the initial element is converted to text.
|
||||
|
||||
if(l-1 & 0x01) // 'i' will always be 1 here.
|
||||
. += "[S1]" // Append 1 element if the remaining elements are not a multiple of 2.
|
||||
if(l-i & 0x02)
|
||||
. = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
|
||||
if(l-i & 0x04)
|
||||
. = text("[][][][][]", ., S4) // And so on...
|
||||
if(l-i & 0x08)
|
||||
. = text("[][][][][][][][][]", ., S4, S4)
|
||||
if(l-i & 0x10)
|
||||
. = text("[][][][][][][][][][][][][][][][][]", ., S16)
|
||||
if(l-i & 0x20)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
|
||||
if(l-i & 0x40)
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
|
||||
while(l > i) // Chomp through the rest of the list, 128 elements at a time.
|
||||
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
|
||||
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
|
||||
|
||||
#undef S64
|
||||
#undef S16
|
||||
#undef S4
|
||||
#undef S1
|
||||
|
||||
|
||||
//slower then list2text, but correctly processes associative lists.
|
||||
/proc/tg_list2text(list/list, glue=",")
|
||||
if(!istype(list) || !list.len)
|
||||
return
|
||||
var/output
|
||||
for(var/i=1 to list.len)
|
||||
output += (i!=1? glue : null)+(!isnull(list["[list[i]]"])?"[list["[list[i]]"]]":"[list[i]]")
|
||||
return output
|
||||
|
||||
|
||||
//Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator)
|
||||
/proc/text2list(text, delimiter="\n")
|
||||
var/delim_len = length(delimiter)
|
||||
. = list()
|
||||
var/last_found = 1
|
||||
var/found = 1
|
||||
if(delim_len < 1)
|
||||
var/text_len = length(text)
|
||||
while(found++ <= text_len)
|
||||
. += copytext(text,found-1, found)
|
||||
else
|
||||
do
|
||||
found = findtext(text, delimiter, last_found, 0)
|
||||
. += copytext(text, last_found, found)
|
||||
last_found = found + delim_len
|
||||
while(found)
|
||||
|
||||
//Case Sensitive!
|
||||
/proc/text2listEx(text, delimiter="\n")
|
||||
var/delim_len = length(delimiter)
|
||||
if(delim_len < 1)
|
||||
return list(text)
|
||||
. = list()
|
||||
var/last_found = 1
|
||||
var/found
|
||||
do
|
||||
found = findtextEx(text, delimiter, last_found, 0)
|
||||
. += copytext(text, last_found, found)
|
||||
last_found = found + delim_len
|
||||
while(found)
|
||||
|
||||
//Splits the text of a file at seperator and returns them in a list.
|
||||
/proc/file2list(filename, seperator="\n")
|
||||
return text2list(return_file_text(filename),seperator)
|
||||
return splittext(return_file_text(filename),seperator)
|
||||
|
||||
|
||||
//Turns a direction into text
|
||||
@@ -679,18 +549,18 @@ for(var/t in test_times)
|
||||
//Find var names
|
||||
|
||||
// "A dog said hi [name]!"
|
||||
// text2list() --> list("A dog said hi ","name]!"
|
||||
// list2text() --> "A dog said hi name]!"
|
||||
// text2list() --> list("A","dog","said","hi","name]!")
|
||||
// splittext() --> list("A dog said hi ","name]!"
|
||||
// jointext() --> "A dog said hi name]!"
|
||||
// splittext() --> list("A","dog","said","hi","name]!")
|
||||
|
||||
t_string = replacetext(t_string,"\[","\[ ")//Necessary to resolve "word[var_name]" scenarios
|
||||
var/list/list_value = text2list(t_string,"\[")
|
||||
var/intermediate_stage = list2text(list_value)
|
||||
var/list/list_value = splittext(t_string,"\[")
|
||||
var/intermediate_stage = jointext(list_value, null)
|
||||
|
||||
list_value = text2list(intermediate_stage," ")
|
||||
list_value = splittext(intermediate_stage," ")
|
||||
for(var/value in list_value)
|
||||
if(findtext(value,"]"))
|
||||
value = text2list(value,"]") //"name]!" --> list("name","!")
|
||||
value = splittext(value,"]") //"name]!" --> list("name","!")
|
||||
for(var/A in value)
|
||||
if(var_source.vars.Find(A))
|
||||
. += A
|
||||
|
||||
@@ -951,11 +951,11 @@ var/list/WALLITEMS_INVERSE = list(
|
||||
|
||||
|
||||
/proc/screen_loc2turf(scr_loc, turf/origin)
|
||||
var/tX = text2list(scr_loc, ",")
|
||||
var/tY = text2list(tX[2], ":")
|
||||
var/tX = splittext(scr_loc, ",")
|
||||
var/tY = splittext(tX[2], ":")
|
||||
var/tZ = origin.z
|
||||
tY = tY[1]
|
||||
tX = text2list(tX[1], ":")
|
||||
tX = splittext(tX[1], ":")
|
||||
tX = tX[1]
|
||||
tX = max(1, min(world.maxx, origin.x + (text2num(tX) - (world.view + 1))))
|
||||
tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1))))
|
||||
@@ -1175,7 +1175,6 @@ B --><-- A
|
||||
|
||||
return L
|
||||
|
||||
|
||||
/atom/proc/contains(var/atom/A)
|
||||
if(!A)
|
||||
return 0
|
||||
|
||||
@@ -54,8 +54,6 @@
|
||||
#error Your version of BYOND is too out-of-date to compile this project. Go to byond.com/download and update.
|
||||
#endif
|
||||
|
||||
#define USE_BYGEX
|
||||
|
||||
|
||||
#ifndef SERVERTOOLS
|
||||
#define SERVERTOOLS 0
|
||||
|
||||
@@ -8,6 +8,7 @@ var/global/list/navbeacons = list() //list of all bot nagivation beacons, us
|
||||
var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacons.
|
||||
var/global/list/deliverybeacontags = list() //list of all tags associated with delivery beacons.
|
||||
var/global/list/nuke_list = list()
|
||||
var/global/list/nuke_tiles = list() //list of all turfs that turn to animated red grids when a nuke is triggered
|
||||
|
||||
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
|
||||
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#define CLICKCATCHER_PLANE -99
|
||||
@@ -331,7 +331,7 @@
|
||||
/obj/screen/click_catcher
|
||||
icon = 'icons/mob/screen_full.dmi'
|
||||
icon_state = "passage0"
|
||||
layer = 0
|
||||
plane = CLICKCATCHER_PLANE
|
||||
mouse_opacity = 2
|
||||
screen_loc = "CENTER-7,CENTER-7"
|
||||
|
||||
|
||||
@@ -126,14 +126,10 @@
|
||||
alien_plasma_display = new /obj/screen/alien/plasma_display()
|
||||
infodisplay += alien_plasma_display
|
||||
|
||||
mymob.flash = new /obj/screen/flash()
|
||||
screenoverlays += mymob.flash
|
||||
|
||||
zone_select = new /obj/screen/zone_sel/alien()
|
||||
zone_select.update_icon(mymob)
|
||||
static_inventory += zone_select
|
||||
|
||||
|
||||
/datum/hud/alien/persistant_inventory_update()
|
||||
if(!mymob)
|
||||
return
|
||||
|
||||
@@ -20,14 +20,10 @@
|
||||
pull_icon.screen_loc = ui_pull_resist
|
||||
hotkeybuttons += pull_icon
|
||||
|
||||
mymob.flash = new /obj/screen/flash()
|
||||
screenoverlays += mymob.flash
|
||||
|
||||
zone_select = new /obj/screen/zone_sel/alien()
|
||||
zone_select.update_icon(mymob)
|
||||
static_inventory += zone_select
|
||||
|
||||
|
||||
/mob/living/carbon/alien/larva/create_mob_hud()
|
||||
if(client && !hud_used)
|
||||
hud_used = new /datum/hud/larva(src)
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
#define FULLSCREEN_LAYER 18
|
||||
#define DAMAGE_LAYER FULLSCREEN_LAYER + 0.1
|
||||
#define BLIND_LAYER DAMAGE_LAYER + 0.1
|
||||
#define CRIT_LAYER BLIND_LAYER + 0.1
|
||||
|
||||
/mob
|
||||
var/list/screens = list()
|
||||
|
||||
/mob/proc/overlay_fullscreen(category, type, severity)
|
||||
var/obj/screen/fullscreen/screen
|
||||
if(screens[category])
|
||||
screen = screens[category]
|
||||
if(screen.type != type)
|
||||
clear_fullscreen(category, FALSE)
|
||||
return .()
|
||||
else if(!severity || severity == screen.severity)
|
||||
return null
|
||||
else
|
||||
screen = PoolOrNew(type)
|
||||
|
||||
screen.icon_state = "[initial(screen.icon_state)][severity]"
|
||||
screen.severity = severity
|
||||
|
||||
screens[category] = screen
|
||||
if(client)
|
||||
client.screen += screen
|
||||
return screen
|
||||
|
||||
/mob/proc/clear_fullscreen(category, animate = 10)
|
||||
set waitfor = 0
|
||||
var/obj/screen/fullscreen/screen = screens[category]
|
||||
if(!screen)
|
||||
return
|
||||
|
||||
if(animate)
|
||||
animate(screen, alpha = 0, time = animate)
|
||||
sleep(animate)
|
||||
|
||||
screens -= category
|
||||
if(client)
|
||||
client.screen -= screen
|
||||
qdel(screen)
|
||||
|
||||
/mob/proc/clear_fullscreens()
|
||||
for(var/category in screens)
|
||||
clear_fullscreen(category)
|
||||
|
||||
/datum/hud/proc/reload_fullscreen()
|
||||
var/list/screens = mymob.screens
|
||||
for(var/category in screens)
|
||||
mymob.client.screen |= screens[category]
|
||||
|
||||
/obj/screen/fullscreen
|
||||
icon = 'icons/mob/screen_full.dmi'
|
||||
icon_state = "default"
|
||||
screen_loc = "CENTER-7,CENTER-7"
|
||||
layer = FULLSCREEN_LAYER
|
||||
mouse_opacity = 0
|
||||
var/severity = 0
|
||||
|
||||
/obj/screen/fullscreen/Destroy()
|
||||
..()
|
||||
severity = 0
|
||||
return QDEL_HINT_PUTINPOOL
|
||||
|
||||
/obj/screen/fullscreen/brute
|
||||
icon_state = "brutedamageoverlay"
|
||||
layer = DAMAGE_LAYER
|
||||
|
||||
/obj/screen/fullscreen/oxy
|
||||
icon_state = "oxydamageoverlay"
|
||||
layer = DAMAGE_LAYER
|
||||
|
||||
/obj/screen/fullscreen/crit
|
||||
icon_state = "passage"
|
||||
layer = CRIT_LAYER
|
||||
|
||||
/obj/screen/fullscreen/blind
|
||||
icon_state = "blackimageoverlay"
|
||||
layer = BLIND_LAYER
|
||||
|
||||
/obj/screen/fullscreen/impaired
|
||||
icon_state = "impairedoverlay"
|
||||
|
||||
/obj/screen/fullscreen/blurry
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
icon_state = "blurry"
|
||||
|
||||
/obj/screen/fullscreen/flash
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
icon_state = "flash"
|
||||
|
||||
/obj/screen/fullscreen/flash/noise
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
icon_state = "noise"
|
||||
|
||||
/obj/screen/fullscreen/high
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
icon_state = "druggy"
|
||||
|
||||
#undef FULLSCREEN_LAYER
|
||||
#undef BLIND_LAYER
|
||||
#undef DAMAGE_LAYER
|
||||
#undef CRIT_LAYER
|
||||
@@ -1,93 +1,3 @@
|
||||
/*
|
||||
The global hud:
|
||||
Uses the same visual objects for all players.
|
||||
*/
|
||||
|
||||
var/datum/global_hud/global_hud = new()
|
||||
|
||||
/datum/global_hud
|
||||
var/obj/screen/druggy
|
||||
var/obj/screen/blurry
|
||||
var/obj/screen/blind
|
||||
var/list/vimpaired
|
||||
var/list/darkMask
|
||||
|
||||
/datum/global_hud/New()
|
||||
//420erryday psychedellic colours screen overlay for when you are high
|
||||
druggy = new /obj/screen()
|
||||
druggy.screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
druggy.icon_state = "druggy"
|
||||
druggy.blend_mode = BLEND_MULTIPLY
|
||||
druggy.layer = 17
|
||||
druggy.mouse_opacity = 0
|
||||
|
||||
//that white blurry effect you get when you eyes are damaged
|
||||
blurry = new /obj/screen()
|
||||
blurry.screen_loc = "WEST,SOUTH to EAST,NORTH"
|
||||
blurry.icon_state = "blurry"
|
||||
blurry.layer = 17
|
||||
blurry.mouse_opacity = 0
|
||||
|
||||
blind = new /obj/screen()
|
||||
blind.icon = 'icons/mob/screen_full.dmi'
|
||||
blind.icon_state = "blackimageoverlay"
|
||||
blind.screen_loc = "CENTER-7,CENTER-7"
|
||||
blind.mouse_opacity = 0
|
||||
blind.layer = 18
|
||||
|
||||
var/obj/screen/O
|
||||
var/i
|
||||
//that nasty looking dither you get when you're short-sighted
|
||||
vimpaired = newlist(/obj/screen,/obj/screen,/obj/screen,/obj/screen)
|
||||
O = vimpaired[1]
|
||||
O.screen_loc = "WEST,SOUTH to CENTER-3,NORTH" //West dither
|
||||
O = vimpaired[2]
|
||||
O.screen_loc = "WEST,SOUTH to EAST,CENTER-3" //South dither
|
||||
O = vimpaired[3]
|
||||
O.screen_loc = "CENTER+3,SOUTH to EAST,NORTH" //East dither
|
||||
O = vimpaired[4]
|
||||
O.screen_loc = "WEST,CENTER+3 to EAST,NORTH" //North dither
|
||||
|
||||
//welding mask overlay black/dither
|
||||
darkMask = newlist(/obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen, /obj/screen)
|
||||
O = darkMask[1]
|
||||
O.screen_loc = "CENTER-5,CENTER-5 to CENTER-3,CENTER+5" //West dither
|
||||
O = darkMask[2]
|
||||
O.screen_loc = "CENTER-5,CENTER-5 to CENTER+5,CENTER-3" //South dither
|
||||
O = darkMask[3]
|
||||
O.screen_loc = "CENTER+3,CENTER-5 to CENTER+5,CENTER+5" //East dither
|
||||
O = darkMask[4]
|
||||
O.screen_loc = "CENTER-5,CENTER+3 to CENTER+5,CENTER+5" //North dither
|
||||
O = darkMask[5]
|
||||
O.screen_loc = "WEST,SOUTH to CENTER-5,NORTH" //West black
|
||||
O = darkMask[6]
|
||||
O.screen_loc = "WEST,SOUTH to EAST,CENTER-5" //South black
|
||||
O = darkMask[7]
|
||||
O.screen_loc = "CENTER+5,SOUTH to EAST,NORTH" //East black
|
||||
O = darkMask[8]
|
||||
O.screen_loc = "WEST,CENTER+5 to EAST,NORTH" //North black
|
||||
|
||||
|
||||
for(i = 1, i <= 4, i++)
|
||||
O = vimpaired[i]
|
||||
O.icon_state = "dither50"
|
||||
O.blend_mode = BLEND_MULTIPLY
|
||||
O.layer = 17
|
||||
O.mouse_opacity = 0
|
||||
|
||||
O = darkMask[i]
|
||||
O.icon_state = "dither50"
|
||||
O.blend_mode = BLEND_MULTIPLY
|
||||
O.layer = 17
|
||||
O.mouse_opacity = 0
|
||||
|
||||
for(i = 5, i <= 8, i++)
|
||||
O = darkMask[i]
|
||||
O.icon_state = "black"
|
||||
O.blend_mode = BLEND_MULTIPLY
|
||||
O.layer = 17
|
||||
O.mouse_opacity = 0
|
||||
|
||||
/*
|
||||
The hud datum
|
||||
Used to show and hide huds for all the different mob types,
|
||||
@@ -259,14 +169,12 @@ var/datum/global_hud/global_hud = new()
|
||||
if(infodisplay.len)
|
||||
mymob.client.screen -= infodisplay
|
||||
|
||||
if(screenoverlays.len)
|
||||
mymob.client.screen += screenoverlays
|
||||
mymob.client.screen += mymob.client.void
|
||||
hud_version = display_hud_version
|
||||
persistant_inventory_update()
|
||||
mymob.update_action_buttons()
|
||||
reorganize_alerts()
|
||||
|
||||
|
||||
/datum/hud/human/show_hud(version = 0)
|
||||
..()
|
||||
hidden_inventory_update()
|
||||
|
||||
@@ -282,11 +282,6 @@
|
||||
lingstingdisplay = new /obj/screen/ling/sting()
|
||||
infodisplay += lingstingdisplay
|
||||
|
||||
mymob.damageoverlay = new /obj/screen/damageoverlay()
|
||||
screenoverlays += mymob.damageoverlay
|
||||
|
||||
mymob.flash = new /obj/screen/flash()
|
||||
screenoverlays += mymob.flash
|
||||
|
||||
zone_select = new /obj/screen/zone_sel()
|
||||
zone_select.icon = ui_style
|
||||
|
||||
@@ -115,11 +115,6 @@
|
||||
lingstingdisplay = new /obj/screen/ling/sting()
|
||||
infodisplay += lingstingdisplay
|
||||
|
||||
mymob.damageoverlay = new /obj/screen/damageoverlay()
|
||||
screenoverlays += mymob.damageoverlay
|
||||
|
||||
mymob.flash = new /obj/screen/flash()
|
||||
screenoverlays += mymob.flash
|
||||
|
||||
zone_select = new /obj/screen/zone_sel()
|
||||
zone_select.icon = ui_style
|
||||
|
||||
@@ -27,13 +27,13 @@
|
||||
return
|
||||
|
||||
//Split screen-loc up into X+Pixel_X and Y+Pixel_Y
|
||||
var/list/screen_loc_params = text2list(PM["screen-loc"], ",")
|
||||
var/list/screen_loc_params = splittext(PM["screen-loc"], ",")
|
||||
|
||||
//Split X+Pixel_X up into list(X, Pixel_X)
|
||||
var/list/screen_loc_X = text2list(screen_loc_params[1],":")
|
||||
var/list/screen_loc_X = splittext(screen_loc_params[1],":")
|
||||
|
||||
//Split Y+Pixel_Y up into list(Y, Pixel_Y)
|
||||
var/list/screen_loc_Y = text2list(screen_loc_params[2],":")
|
||||
var/list/screen_loc_Y = splittext(screen_loc_params[2],":")
|
||||
|
||||
if(snap2grid) //Discard Pixel Values
|
||||
screen_loc = "[screen_loc_X[1]],[screen_loc_Y[1]]"
|
||||
|
||||
@@ -138,8 +138,6 @@
|
||||
pull_icon.screen_loc = ui_borg_pull
|
||||
hotkeybuttons += pull_icon
|
||||
|
||||
mymob.flash = new /obj/screen/flash()
|
||||
screenoverlays += mymob.flash
|
||||
|
||||
zone_select = new /obj/screen/zone_sel/robot()
|
||||
zone_select.update_icon(mymob)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/atom/movable/attackby(obj/item/W, mob/living/user, params)
|
||||
user.do_attack_animation(src)
|
||||
if(W && !(W.flags&NOBLUDGEON))
|
||||
if(W && !(W.flags & NOBLUDGEON))
|
||||
visible_message("<span class='danger'>[user] has hit [src] with [W]!</span>")
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/user, params)
|
||||
@@ -25,7 +25,6 @@
|
||||
I.attack(src, user)
|
||||
|
||||
/mob/living/proc/attacked_by(obj/item/I, mob/living/user, def_zone)
|
||||
apply_damage(I.force, I.damtype, def_zone)
|
||||
if(I.damtype == "brute")
|
||||
if(prob(33) && I.force)
|
||||
var/turf/location = src.loc
|
||||
@@ -46,16 +45,14 @@
|
||||
if(message_verb)
|
||||
visible_message("<span class='danger'>[attack_message]</span>",
|
||||
"<span class='userdanger'>[attack_message]</span>")
|
||||
apply_damage(I.force, I.damtype, def_zone, threshold_check = 1, threshold_message = 1)
|
||||
|
||||
/mob/living/simple_animal/attacked_by(var/obj/item/I, var/mob/living/user)
|
||||
if(!I.force)
|
||||
user.visible_message("<span class='warning'>[user] gently taps [src] with [I].</span>",\
|
||||
"<span class='warning'>This weapon is ineffective, it does no damage!</span>")
|
||||
else if(I.force >= force_threshold && I.damtype != STAMINA)
|
||||
..()
|
||||
else
|
||||
visible_message("<span class='warning'>[I] bounces harmlessly off of [src].</span>",\
|
||||
"<span class='warning'>[I] bounces harmlessly off of [src]!</span>")
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@ var/datum/subsystem/air/SSair
|
||||
var/list/networks = list()
|
||||
var/list/obj/machinery/atmos_machinery = list()
|
||||
|
||||
|
||||
//Special functions lists
|
||||
var/list/turf/simulated/active_super_conductivity = list()
|
||||
var/list/turf/simulated/high_pressure_delta = list()
|
||||
|
||||
@@ -426,10 +426,10 @@ var/datum/subsystem/job/SSjob
|
||||
/datum/subsystem/job/proc/LoadJobs()
|
||||
var/jobstext = return_file_text("config/jobs.txt")
|
||||
for(var/datum/job/J in occupations)
|
||||
var/regex = "[J.title]=(-1|\\d+),(-1|\\d+)"
|
||||
var/datum/regex/results = regex_find(jobstext, regex)
|
||||
J.total_positions = text2num(results.str(2))
|
||||
J.spawn_positions = text2num(results.str(3))
|
||||
var/regex/jobs = new("[J.title]=(-1|\\d+),(-1|\\d+)")
|
||||
jobs.Find(jobstext)
|
||||
J.total_positions = text2num(jobs.group[2])
|
||||
J.spawn_positions = text2num(jobs.group[3])
|
||||
|
||||
/datum/subsystem/job/proc/HandleFeedbackGathering()
|
||||
for(var/datum/job/job in occupations)
|
||||
|
||||
@@ -210,126 +210,3 @@ var/datum/subsystem/shuttle/SSshuttle
|
||||
S.dwidth = M.dwidth
|
||||
S.dheight = M.dheight
|
||||
moveShuttle(M.id, "[M.roundstart_move]", 0)
|
||||
|
||||
/datum/supply_order
|
||||
var/ordernum
|
||||
var/datum/supply_packs/object = null
|
||||
var/orderedby = null
|
||||
var/orderedbyRank
|
||||
var/comment = null
|
||||
|
||||
/datum/supply_order/proc/generateRequisition(atom/_loc)
|
||||
if(!object)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(_loc)
|
||||
reqform.name = "requisition form - [object.name]"
|
||||
reqform.info += "<h3>[station_name] Supply Requisition Form</h3><hr>"
|
||||
reqform.info += "INDEX: #[ordernum]<br>"
|
||||
reqform.info += "REQUESTED BY: [orderedby]<br>"
|
||||
reqform.info += "RANK: [orderedbyRank]<br>"
|
||||
reqform.info += "REASON: [comment]<br>"
|
||||
reqform.info += "SUPPLY CRATE TYPE: [object.name]<br>"
|
||||
reqform.info += "ACCESS RESTRICTION: [get_access_desc(object.access)]<br>"
|
||||
reqform.info += "CONTENTS:<br>"
|
||||
reqform.info += object.manifest
|
||||
reqform.info += "<hr>"
|
||||
reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:<br>"
|
||||
|
||||
reqform.update_icon() //Fix for appearing blank when printed.
|
||||
|
||||
return reqform
|
||||
|
||||
/datum/supply_order/proc/createObject(atom/_loc, errors=0)
|
||||
if(!object)
|
||||
return
|
||||
|
||||
//create the crate
|
||||
var/atom/Crate = new object.containertype(_loc)
|
||||
Crate.name = "[object.containername] [comment ? "([comment])":"" ]"
|
||||
if(object.access)
|
||||
Crate:req_access = list(text2num(object.access))
|
||||
|
||||
//create the manifest slip
|
||||
var/obj/item/weapon/paper/manifest/slip = new /obj/item/weapon/paper/manifest()
|
||||
slip.erroneous = errors
|
||||
slip.points = object.cost
|
||||
slip.ordernumber = ordernum
|
||||
|
||||
var/stationName = (errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name()
|
||||
var/packagesAmt = SSshuttle.shoppinglist.len + ((errors & MANIFEST_ERROR_COUNT) ? rand(1,2) : 0)
|
||||
|
||||
slip.info = "<h3>[command_name()] Shipping Manifest</h3><hr><br>"
|
||||
slip.info +="Order #[ordernum]<br>"
|
||||
slip.info +="Destination: [stationName]<br>"
|
||||
slip.info +="[packagesAmt] PACKAGES IN THIS SHIPMENT<br>"
|
||||
slip.info +="CONTENTS:<br><ul>"
|
||||
|
||||
//we now create the actual contents
|
||||
var/list/contains
|
||||
if(istype(object, /datum/supply_packs/misc/randomised))
|
||||
var/datum/supply_packs/misc/randomised/SO = object
|
||||
contains = list()
|
||||
if(object.contains.len)
|
||||
for(var/j=1, j<=SO.num_contained, j++)
|
||||
contains += pick(object.contains)
|
||||
else
|
||||
contains = object.contains
|
||||
|
||||
for(var/typepath in contains)
|
||||
if(!typepath)
|
||||
continue
|
||||
var/atom/A = new typepath(Crate)
|
||||
if(object.amount && A.vars.Find("amount") && A:amount)
|
||||
A:amount = object.amount
|
||||
slip.info += "<li>[A.name]</li>" //add the item to the manifest (even if it was misplaced)
|
||||
|
||||
if(istype(Crate, /obj/structure/closet/critter)) // critter crates do not actually spawn mobs yet and have no contains var, but the manifest still needs to list them
|
||||
var/obj/structure/closet/critter/CritCrate = Crate
|
||||
if(CritCrate.content_mob)
|
||||
var/mob/crittername = CritCrate.content_mob
|
||||
slip.info += "<li>[initial(crittername.name)]</li>"
|
||||
|
||||
if((errors & MANIFEST_ERROR_ITEM))
|
||||
//secure and large crates cannot lose items
|
||||
if(findtext("[object.containertype]", "/secure/") || findtext("[object.containertype]","/largecrate/"))
|
||||
errors &= ~MANIFEST_ERROR_ITEM
|
||||
else
|
||||
var/lostAmt = max(round(Crate.contents.len/10), 1)
|
||||
//lose some of the items
|
||||
while(--lostAmt >= 0)
|
||||
qdel(pick(Crate.contents))
|
||||
|
||||
//manifest finalisation
|
||||
slip.info += "</ul><br>"
|
||||
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>" // And now this is actually meaningful.
|
||||
slip.loc = Crate
|
||||
if(istype(Crate, /obj/structure/closet/crate))
|
||||
var/obj/structure/closet/crate/CR = Crate
|
||||
CR.manifest = slip
|
||||
CR.update_icon()
|
||||
if(istype(Crate, /obj/structure/largecrate))
|
||||
var/obj/structure/largecrate/LC = Crate
|
||||
LC.manifest = slip
|
||||
LC.update_icon()
|
||||
|
||||
return Crate
|
||||
|
||||
/datum/subsystem/shuttle/proc/generateSupplyOrder(packId, _orderedby, _orderedbyRank, _comment)
|
||||
if(!packId)
|
||||
return
|
||||
var/datum/supply_packs/P = supply_packs["[packId]"]
|
||||
if(!P)
|
||||
return
|
||||
|
||||
var/datum/supply_order/O = new()
|
||||
O.ordernum = ordernum++
|
||||
O.object = P
|
||||
O.orderedby = _orderedby
|
||||
O.orderedbyRank = _orderedbyRank
|
||||
O.comment = _comment
|
||||
|
||||
requestlist += O
|
||||
|
||||
return O
|
||||
|
||||
|
||||
@@ -16,205 +16,6 @@
|
||||
height = 7
|
||||
roundstart_move = "supply_away"
|
||||
|
||||
/obj/docking_port/mobile/supply/New()
|
||||
..()
|
||||
SSshuttle.supply = src
|
||||
|
||||
/obj/docking_port/mobile/supply/canMove()
|
||||
if(z == ZLEVEL_STATION)
|
||||
return forbidden_atoms_check(areaInstance)
|
||||
return ..()
|
||||
|
||||
/obj/docking_port/mobile/supply/request(obj/docking_port/stationary/S)
|
||||
if(mode != SHUTTLE_IDLE)
|
||||
return 2
|
||||
return ..()
|
||||
|
||||
/obj/docking_port/mobile/supply/dock()
|
||||
. = ..()
|
||||
if(.)
|
||||
return .
|
||||
|
||||
buy()
|
||||
sell()
|
||||
|
||||
/obj/docking_port/mobile/supply/proc/buy()
|
||||
if(z != ZLEVEL_STATION) //we only buy when we are -at- the station
|
||||
return 1
|
||||
|
||||
if(!SSshuttle.shoppinglist.len)
|
||||
return 2
|
||||
|
||||
var/list/emptyTurfs = list()
|
||||
for(var/turf/simulated/floor/T in areaInstance)
|
||||
if(T.density || T.contents.len)
|
||||
continue
|
||||
emptyTurfs += T
|
||||
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
if(!SO.object)
|
||||
continue
|
||||
|
||||
var/turf/T = pick_n_take(emptyTurfs) //turf we will place it in
|
||||
if(!T)
|
||||
SSshuttle.shoppinglist.Cut(1, SSshuttle.shoppinglist.Find(SO))
|
||||
return
|
||||
|
||||
var/errors = 0
|
||||
if(prob(5))
|
||||
errors |= MANIFEST_ERROR_COUNT
|
||||
if(prob(5))
|
||||
errors |= MANIFEST_ERROR_NAME
|
||||
if(prob(5))
|
||||
errors |= MANIFEST_ERROR_ITEM
|
||||
SO.createObject(T, errors)
|
||||
|
||||
SSshuttle.shoppinglist.Cut()
|
||||
|
||||
|
||||
/obj/docking_port/mobile/supply/proc/sell()
|
||||
if(z != ZLEVEL_CENTCOM) //we only sell when we are -at- centcomm
|
||||
return 1
|
||||
|
||||
var/plasma_count = 0
|
||||
var/intel_count = 0
|
||||
var/crate_count = 0
|
||||
|
||||
var/msg = ""
|
||||
var/pointsEarned
|
||||
|
||||
for(var/atom/movable/MA in areaInstance)
|
||||
if(MA.anchored)
|
||||
continue
|
||||
SSshuttle.sold_atoms += " [MA.name]"
|
||||
|
||||
// Must be in a crate (or a critter crate)!
|
||||
if(istype(MA,/obj/structure/closet/crate) || istype(MA,/obj/structure/closet/critter))
|
||||
SSshuttle.sold_atoms += ":"
|
||||
if(!MA.contents.len)
|
||||
SSshuttle.sold_atoms += " (empty)"
|
||||
++crate_count
|
||||
|
||||
var/find_slip = 1
|
||||
for(var/thing in MA)
|
||||
// Sell manifests
|
||||
SSshuttle.sold_atoms += " [thing:name]"
|
||||
if(find_slip && istype(thing,/obj/item/weapon/paper/manifest))
|
||||
var/obj/item/weapon/paper/manifest/slip = thing
|
||||
// TODO: Check for a signature, too.
|
||||
if(slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
|
||||
// Did they mark it as erroneous?
|
||||
var/denied = 0
|
||||
for(var/i=1,i<=slip.stamped.len,i++)
|
||||
if(slip.stamped[i] == /obj/item/weapon/stamp/denied)
|
||||
denied = 1
|
||||
if(slip.erroneous && denied) // Caught a mistake by Centcom (IDEA: maybe Centcom rarely gets offended by this)
|
||||
pointsEarned = slip.points - SSshuttle.points_per_crate
|
||||
SSshuttle.points += pointsEarned // For now, give a full refund for paying attention (minus the crate cost)
|
||||
msg += "<font color=green>+[pointsEarned]</font>: Station correctly denied package [slip.ordernumber]: "
|
||||
if(slip.erroneous & MANIFEST_ERROR_NAME)
|
||||
msg += "Destination station incorrect. "
|
||||
else if(slip.erroneous & MANIFEST_ERROR_COUNT)
|
||||
msg += "Packages incorrectly counted. "
|
||||
else if(slip.erroneous & MANIFEST_ERROR_ITEM)
|
||||
msg += "Package incomplete. "
|
||||
msg += "Points refunded.<BR>"
|
||||
else if(!slip.erroneous && !denied) // Approving a proper order awards the relatively tiny points_per_slip
|
||||
SSshuttle.points += SSshuttle.points_per_slip
|
||||
msg += "<font color=green>+[SSshuttle.points_per_slip]</font>: Package [slip.ordernumber] accorded.<BR>"
|
||||
else // You done goofed.
|
||||
if(slip.erroneous)
|
||||
msg += "<font color=red>+0</font>: Station approved package [slip.ordernumber] despite error: "
|
||||
if(slip.erroneous & MANIFEST_ERROR_NAME)
|
||||
msg += "Destination station incorrect."
|
||||
else if(slip.erroneous & MANIFEST_ERROR_COUNT)
|
||||
msg += "Packages incorrectly counted."
|
||||
else if(slip.erroneous & MANIFEST_ERROR_ITEM)
|
||||
msg += "We found unshipped items on our dock."
|
||||
msg += " Be more vigilant.<BR>"
|
||||
else
|
||||
pointsEarned = round(SSshuttle.points_per_crate - slip.points)
|
||||
SSshuttle.points += pointsEarned
|
||||
msg += "<font color=red>[pointsEarned]</font>: Station denied package [slip.ordernumber]. Our records show no fault on our part.<BR>"
|
||||
find_slip = 0
|
||||
continue
|
||||
|
||||
// Sell plasma
|
||||
if(istype(thing, /obj/item/stack/sheet/mineral/plasma))
|
||||
var/obj/item/stack/sheet/mineral/plasma/P = thing
|
||||
plasma_count += P.amount
|
||||
|
||||
// Sell syndicate intel
|
||||
if(istype(thing, /obj/item/documents/syndicate))
|
||||
++intel_count
|
||||
|
||||
// Sell tech levels
|
||||
if(istype(thing, /obj/item/weapon/disk/tech_disk))
|
||||
var/obj/item/weapon/disk/tech_disk/disk = thing
|
||||
if(!disk.stored)
|
||||
continue
|
||||
var/datum/tech/tech = disk.stored
|
||||
|
||||
var/cost = tech.getCost(SSshuttle.techLevels[tech.id])
|
||||
if(cost)
|
||||
SSshuttle.techLevels[tech.id] = tech.level
|
||||
SSshuttle.points += cost
|
||||
msg += "<font color=green>+[cost]</font>: [tech.name] - new data.<BR>"
|
||||
|
||||
// Sell max reliablity designs
|
||||
if(istype(thing, /obj/item/weapon/disk/design_disk))
|
||||
var/obj/item/weapon/disk/design_disk/disk = thing
|
||||
if(!disk.blueprint)
|
||||
continue
|
||||
var/datum/design/design = disk.blueprint
|
||||
if(design.id in SSshuttle.researchDesigns)
|
||||
continue
|
||||
|
||||
if(initial(design.reliability) < 100 && design.reliability >= 100)
|
||||
// Maxed out reliability designs only.
|
||||
SSshuttle.points += SSshuttle.points_per_design
|
||||
SSshuttle.researchDesigns += design.id
|
||||
msg += "<font color=green>+[SSshuttle.points_per_design]</font>: Reliable [design.name] design.<BR>"
|
||||
|
||||
// Sell exotic plants
|
||||
if(istype(thing, /obj/item/seeds))
|
||||
var/obj/item/seeds/S = thing
|
||||
if(S.rarity == 0) // Mundane species
|
||||
msg += "<font color=red>+0</font>: We don't need samples of mundane species \"[capitalize(S.species)]\".<BR>"
|
||||
else if(SSshuttle.discoveredPlants[S.type]) // This species has already been sent to CentComm
|
||||
var/potDiff = S.potency - SSshuttle.discoveredPlants[S.type] // Compare it to the previous best
|
||||
if(potDiff > 0) // This sample is better
|
||||
SSshuttle.discoveredPlants[S.type] = S.potency
|
||||
msg += "<font color=green>+[potDiff]</font>: New sample of \"[capitalize(S.species)]\" is superior. Good work.<BR>"
|
||||
SSshuttle.points += potDiff
|
||||
else // This sample is worthless
|
||||
msg += "<font color=red>+0</font>: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([SSshuttle.discoveredPlants[S.type]] potency).<BR>"
|
||||
else // This is a new discovery!
|
||||
SSshuttle.discoveredPlants[S.type] = S.potency
|
||||
msg += "<font color=green>+[S.rarity]</font>: New species discovered: \"[capitalize(S.species)]\". Excellent work.<BR>"
|
||||
SSshuttle.points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later
|
||||
qdel(MA)
|
||||
SSshuttle.sold_atoms += "."
|
||||
|
||||
if(plasma_count > 0)
|
||||
pointsEarned = round(plasma_count * SSshuttle.points_per_plasma)
|
||||
msg += "<font color=green>+[pointsEarned]</font>: Received [plasma_count] unit(s) of exotic material.<BR>"
|
||||
SSshuttle.points += pointsEarned
|
||||
|
||||
if(intel_count > 0)
|
||||
pointsEarned = round(intel_count * SSshuttle.points_per_intel)
|
||||
msg += "<font color=green>+[pointsEarned]</font>: Received [intel_count] article(s) of enemy intelligence.<BR>"
|
||||
SSshuttle.points += pointsEarned
|
||||
|
||||
if(crate_count > 0)
|
||||
pointsEarned = round(crate_count * SSshuttle.points_per_crate)
|
||||
msg += "<font color=green>+[pointsEarned]</font>: Received [crate_count] crate(s).<BR>"
|
||||
SSshuttle.points += pointsEarned
|
||||
|
||||
SSshuttle.centcom_message = msg
|
||||
|
||||
|
||||
/proc/forbidden_atoms_check(atom/A)
|
||||
var/list/blacklist = list(
|
||||
/mob/living,
|
||||
/obj/effect/blob,
|
||||
@@ -230,348 +31,199 @@
|
||||
/obj/machinery/telepad,
|
||||
/obj/machinery/clonepod
|
||||
)
|
||||
if(A)
|
||||
if(is_type_in_list(A, blacklist))
|
||||
|
||||
/obj/docking_port/mobile/supply/New()
|
||||
..()
|
||||
SSshuttle.supply = src
|
||||
|
||||
/obj/docking_port/mobile/supply/canMove()
|
||||
if(z == ZLEVEL_STATION)
|
||||
return check_blacklist(areaInstance)
|
||||
return ..()
|
||||
|
||||
/obj/docking_port/mobile/supply/proc/check_blacklist(atom/A)
|
||||
if(is_type_in_list(A, blacklist))
|
||||
return 1
|
||||
for(var/thing in A)
|
||||
if(.(thing))
|
||||
return 1
|
||||
for(var/thing in A)
|
||||
if(.(thing))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
/obj/docking_port/mobile/supply/request()
|
||||
if(mode != SHUTTLE_IDLE)
|
||||
return 2
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/computer/ordercomp/attack_hand(mob/user)
|
||||
if(..())
|
||||
/obj/docking_port/mobile/supply/dock()
|
||||
if(getDockedId() == "supply_away") // Buy when we leave home.
|
||||
buy()
|
||||
if(..()) // Fly/enter transit.
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat
|
||||
if(temp)
|
||||
dat = temp
|
||||
else
|
||||
dat += {"<div class='statusDisplay'>Shuttle Location: [SSshuttle.supply.name]<BR>
|
||||
<HR>Supply Points: [SSshuttle.points]<BR></div>
|
||||
if(getDockedId() == "supply_away") // Sell when we get home
|
||||
sell()
|
||||
|
||||
<BR>\n<A href='?src=\ref[src];order=categories'>Request items</A><BR><BR>
|
||||
<A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR>
|
||||
<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR>
|
||||
<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
|
||||
|
||||
// Removing the old window method but leaving it here for reference
|
||||
//user << browse(dat, "window=computer;size=575x450")
|
||||
//onclose(user, "computer")
|
||||
|
||||
// Added the new browser window method
|
||||
var/datum/browser/popup = new(user, "computer", "Supply Ordering Console", 575, 450)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/ordercomp/Topic(href, href_list)
|
||||
if(..())
|
||||
/obj/docking_port/mobile/supply/proc/buy()
|
||||
if(!SSshuttle.shoppinglist.len)
|
||||
return
|
||||
|
||||
if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) )
|
||||
usr.set_machine(src)
|
||||
var/list/emptyTurfs = list()
|
||||
for(var/turf/simulated/floor/T in areaInstance)
|
||||
if(T.density || T.contents.len)
|
||||
continue
|
||||
emptyTurfs += T
|
||||
|
||||
if(href_list["order"])
|
||||
if(href_list["order"] == "categories")
|
||||
//all_supply_groups
|
||||
//Request what?
|
||||
last_viewed_group = "categories"
|
||||
temp = "<div class='statusDisplay'><b>Supply points: [SSshuttle.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR></div><BR>"
|
||||
temp += "<b>Select a category</b><BR><BR>"
|
||||
for(var/cat in all_supply_groups )
|
||||
temp += "<A href='?src=\ref[src];order=[cat]'>[get_supply_group_name(cat)]</A><BR>"
|
||||
else
|
||||
last_viewed_group = href_list["order"]
|
||||
var/cat = text2num(last_viewed_group)
|
||||
temp = "<div class='statusDisplay'><b>Supply points: [SSshuttle.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];order=categories'>Back to all categories</A><BR></div><BR>"
|
||||
temp += "<b>Request from: [get_supply_group_name(cat)]</b><BR><BR>"
|
||||
for(var/supply_type in SSshuttle.supply_packs )
|
||||
var/datum/supply_packs/N = SSshuttle.supply_packs[supply_type]
|
||||
if(N.hidden || N.contraband || N.group != cat)
|
||||
continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_type]'>[N.name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
else if (href_list["doorder"])
|
||||
if(world.time < reqtime)
|
||||
say("[world.time - reqtime] seconds remaining until another requisition form may be printed.")
|
||||
return
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
if(!SO.object)
|
||||
continue
|
||||
if(SO.object.cost > SSshuttle.points)
|
||||
continue
|
||||
|
||||
//Find the correct supply_pack datum
|
||||
if(!SSshuttle.supply_packs["[href_list["doorder"]]"])
|
||||
return
|
||||
var/errors = 0
|
||||
if(prob(5))
|
||||
errors |= MANIFEST_ERROR_COUNT
|
||||
if(prob(5))
|
||||
errors |= MANIFEST_ERROR_NAME
|
||||
if(prob(5))
|
||||
errors |= MANIFEST_ERROR_ITEM
|
||||
|
||||
var/timeout = world.time + 600
|
||||
var/reason = stripped_input(usr,"Reason:","Why do you require this item?","")
|
||||
if(world.time > timeout)
|
||||
return
|
||||
if(!reason)
|
||||
return
|
||||
var/turf/T = pick_n_take(emptyTurfs)
|
||||
SO.createObject(T, errors)
|
||||
|
||||
var/idname = "*None Provided*"
|
||||
var/idrank = "*None Provided*"
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
idname = H.get_authentification_name()
|
||||
idrank = H.get_assignment()
|
||||
else if(issilicon(usr))
|
||||
idname = usr.real_name
|
||||
SSshuttle.points -= SO.object.cost
|
||||
SSshuttle.shoppinglist -= SO
|
||||
|
||||
var/datum/supply_order/O = SSshuttle.generateSupplyOrder(href_list["doorder"], idname, idrank, reason)
|
||||
if(!O)
|
||||
return
|
||||
O.generateRequisition(loc)
|
||||
/obj/docking_port/mobile/supply/proc/sell()
|
||||
var/crates = 0
|
||||
var/plasma = 0
|
||||
var/intel = 0
|
||||
|
||||
reqtime = (world.time + 5) % 1e5
|
||||
var/msg = ""
|
||||
var/pointsEarned = 0
|
||||
|
||||
temp = "Thanks for your request. The cargo team will process it as soon as possible.<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];order=[last_viewed_group]'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
for(var/atom/movable/AM in areaInstance)
|
||||
if(AM.anchored)
|
||||
continue
|
||||
SSshuttle.sold_atoms += " [AM.name]"
|
||||
|
||||
else if (href_list["vieworders"])
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current approved orders: <BR><BR>"
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]<BR>"
|
||||
|
||||
else if (href_list["viewrequests"])
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current requests: <BR><BR>"
|
||||
for(var/datum/supply_order/SO in SSshuttle.requestlist)
|
||||
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]<BR>"
|
||||
|
||||
else if (href_list["mainmenu"])
|
||||
temp = null
|
||||
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/supplycomp/attack_hand(mob/user)
|
||||
if(!allowed(user))
|
||||
user << "<span class='warning'>Access Denied.</span>"
|
||||
return
|
||||
|
||||
if(..())
|
||||
return
|
||||
user.set_machine(src)
|
||||
post_signal("supply")
|
||||
var/dat
|
||||
if (temp)
|
||||
dat = temp
|
||||
else
|
||||
var/atDepot = (SSshuttle.supply.getDockedId() == "supply_away")
|
||||
var/inTransit = (SSshuttle.supply.mode != SHUTTLE_IDLE)
|
||||
var/canOrder = atDepot && !inTransit
|
||||
|
||||
dat += {"<div class='statusDisplay'><B>Supply shuttle</B><HR>
|
||||
Location: [SSshuttle.supply.getStatusText()]<BR>
|
||||
<HR>\nSupply Points: [SSshuttle.points]<BR>\n</div><BR>
|
||||
[canOrder ? "\n<A href='?src=\ref[src];order=categories'>Order items</A><BR>\n<BR>" : "\n*Must be away to order items*<BR>\n<BR>"]
|
||||
[inTransit ? "\n*Shuttle already called*<BR>\n<BR>": atDepot ? "\n<A href='?src=\ref[src];send=1'>Send to station</A><BR>\n<BR>":"\n<A href='?src=\ref[src];send=1'>Send to centcom</A><BR>\n<BR>"]
|
||||
[SSshuttle.shuttle_loan ? (SSshuttle.shuttle_loan.dispatched ? "\n*Shuttle loaned to Centcom*<BR>\n<BR>" : "\n<A href='?src=\ref[src];send=1;loan=1'>Loan shuttle to Centcom (5 mins duration)</A><BR>\n<BR>") : "\n*No pending external shuttle requests*<BR>\n<BR>"]
|
||||
\n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR>
|
||||
\n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR>
|
||||
\n<A href='?src=\ref[user];mach_close=computer'>Close</A><BR>
|
||||
<HR>\n<B>Central Command messages:</B><BR> [SSshuttle.centcom_message ? SSshuttle.centcom_message : "Remember to stamp and send back the supply manifests."]"}
|
||||
|
||||
var/datum/browser/popup = new(user, "computer", "Supply Shuttle Console", 700, 455)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/supplycomp/emag_act(mob/user)
|
||||
if(!hacked)
|
||||
user << "<span class='notice'>Special supplies unlocked.</span>"
|
||||
hacked = 1
|
||||
|
||||
/obj/machinery/computer/supplycomp/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) )
|
||||
usr.set_machine(src)
|
||||
|
||||
//Calling the shuttle
|
||||
if(href_list["send"])
|
||||
if(SSshuttle.supply.canMove())
|
||||
if(SSshuttle.shuttle_loan)
|
||||
temp = "The supply shuttle must be docked to send new commands.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
if(istype(AM, /obj/structure/closet/crate) || istype(AM, /obj/structure/closet/critter))
|
||||
crates++
|
||||
SSshuttle.sold_atoms += ":"
|
||||
if(!AM.contents.len)
|
||||
SSshuttle.sold_atoms += " (empty)"
|
||||
else
|
||||
temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
var/slip_found = FALSE
|
||||
for(var/atom/movable/thing in AM)
|
||||
SSshuttle.sold_atoms += " [thing.name]"
|
||||
if(!slip_found && istype(thing, /obj/item/weapon/paper/manifest))
|
||||
var/obj/item/weapon/paper/manifest/slip = thing
|
||||
if(slip.stamped && slip.stamped.len)
|
||||
slip_found = TRUE
|
||||
var/denied = FALSE
|
||||
for(var/stamp in slip.stamped)
|
||||
if(stamp == /obj/item/weapon/stamp/denied)
|
||||
denied = TRUE
|
||||
break
|
||||
if(slip.erroneous && denied) // Caught a mistake by Centcom.
|
||||
pointsEarned = slip.points - SSshuttle.points_per_crate
|
||||
SSshuttle.points += pointsEarned // Give a full refund (minus the crate).
|
||||
msg += "[pointsEarned]: Station correctly denied package [slip.ordernumber]: "
|
||||
if(slip.erroneous & MANIFEST_ERROR_NAME)
|
||||
msg += "Destination station incorrect. "
|
||||
else if(slip.erroneous & MANIFEST_ERROR_COUNT)
|
||||
msg += "Packages incorrectly counted. "
|
||||
else if(slip.erroneous & MANIFEST_ERROR_ITEM)
|
||||
msg += "Package incomplete. "
|
||||
msg += "Points refunded."
|
||||
else if(!slip.erroneous && !denied) // Approved a slip correctly.
|
||||
pointsEarned = SSshuttle.points_per_slip
|
||||
SSshuttle.points += pointsEarned
|
||||
msg += "+[pointsEarned]: Package [slip.ordernumber] accorded."
|
||||
else if(slip.erroneous) // You done goofed.
|
||||
pointsEarned = -SSshuttle.points_per_slip
|
||||
SSshuttle.points += pointsEarned
|
||||
msg += "[pointsEarned]: Station erroneously approved package [slip.ordernumber]: "
|
||||
if(slip.erroneous & MANIFEST_ERROR_NAME)
|
||||
msg += "Destination station incorrect."
|
||||
else if(slip.erroneous & MANIFEST_ERROR_COUNT)
|
||||
msg += "Packages incorrectly counted."
|
||||
else if(slip.erroneous & MANIFEST_ERROR_ITEM)
|
||||
msg += "We found unshipped items on our dock."
|
||||
msg += " Be more vigilant."
|
||||
else
|
||||
pointsEarned = round(SSshuttle.points_per_crate - slip.points)
|
||||
SSshuttle.points += pointsEarned
|
||||
msg += "[pointsEarned]: Station erroneously denied package [slip.ordernumber]."
|
||||
|
||||
else if(SSshuttle.supply.getDockedId() == "supply_home")
|
||||
if(href_list["loan"] && SSshuttle.shuttle_loan)
|
||||
if(!SSshuttle.shuttle_loan.dispatched)
|
||||
SSshuttle.shuttle_loan.loan_shuttle()
|
||||
temp = "The supply shuttle has been loaned to Centcom.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
post_signal("supply")
|
||||
else
|
||||
temp = "You can not loan the supply shuttle at this time.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
else
|
||||
temp = "The supply shuttle has departed.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
SSshuttle.toggleShuttle("supply", "supply_home", "supply_away", 1)
|
||||
investigate_log("[usr.key] has sent the supply shuttle away. Remaining points: [SSshuttle.points]. Shuttle contents:[SSshuttle.sold_atoms]", "cargo")
|
||||
else
|
||||
if(href_list["loan"] && SSshuttle.shuttle_loan)
|
||||
if(!SSshuttle.shuttle_loan.dispatched && SSshuttle.supply.mode == SHUTTLE_IDLE) // Must either be at centcom, or at the station. No redirecting off course!
|
||||
SSshuttle.shuttle_loan.loan_shuttle()
|
||||
temp = "The supply shuttle has been loaned to Centcom.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
post_signal("supply")
|
||||
else
|
||||
temp = "You can not loan the supply shuttle at this time.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
else
|
||||
if(!SSshuttle.supply.request(SSshuttle.getDock("supply_home")))
|
||||
temp = "The supply shuttle has been called and will arrive in [SSshuttle.supply.timeLeft(600)] minutes.<BR><BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
post_signal("supply")
|
||||
// Sell plasma
|
||||
if(istype(thing, /obj/item/stack/sheet/mineral/plasma))
|
||||
var/obj/item/stack/sheet/mineral/plasma/P = thing
|
||||
plasma += P.amount
|
||||
|
||||
else if (href_list["order"])
|
||||
if(SSshuttle.supply.mode != SHUTTLE_IDLE)
|
||||
return
|
||||
if(href_list["order"] == "categories")
|
||||
//all_supply_groups
|
||||
//Request what?
|
||||
last_viewed_group = "categories"
|
||||
temp = "<div class='statusDisplay'><b>Supply points: [SSshuttle.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR></div><BR>"
|
||||
temp += "<b>Select a category</b><BR><BR>"
|
||||
for(var/cat in all_supply_groups )
|
||||
temp += "<A href='?src=\ref[src];order=[cat]'>[get_supply_group_name(cat)]</A><BR>"
|
||||
else
|
||||
last_viewed_group = href_list["order"]
|
||||
var/cat = text2num(last_viewed_group)
|
||||
temp = "<div class='statusDisplay'><b>Supply points: [SSshuttle.points]</b><BR>"
|
||||
temp += "<A href='?src=\ref[src];order=categories'>Back to all categories</A><BR></div><BR>"
|
||||
temp += "<b>Request from: [get_supply_group_name(cat)]</b><BR><BR>"
|
||||
for(var/supply_type in SSshuttle.supply_packs )
|
||||
var/datum/supply_packs/N = SSshuttle.supply_packs[supply_type]
|
||||
if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != cat)
|
||||
continue //Have to send the type instead of a reference to
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_type]'>[N.name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
// Sell syndicate intel
|
||||
if(istype(thing, /obj/item/documents/syndicate))
|
||||
intel++
|
||||
|
||||
/*temp = "Supply points: [supply_shuttle.points]<BR><HR><BR>Request what?<BR><BR>"
|
||||
// Sell tech levels
|
||||
if(istype(thing, /obj/item/weapon/disk/tech_disk))
|
||||
var/obj/item/weapon/disk/tech_disk/disk = thing
|
||||
if(!disk.stored)
|
||||
continue
|
||||
var/datum/tech/tech = disk.stored
|
||||
|
||||
for(var/supply_name in supply_shuttle.supply_packs )
|
||||
var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name]
|
||||
if(N.hidden && !hacked) continue
|
||||
if(N.contraband && !can_order_contraband) continue
|
||||
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"*/
|
||||
var/cost = tech.getCost(SSshuttle.techLevels[tech.id])
|
||||
if(cost)
|
||||
SSshuttle.techLevels[tech.id] = tech.level
|
||||
SSshuttle.points += cost
|
||||
msg += "+[cost]: Data: [tech.name]."
|
||||
|
||||
else if (href_list["doorder"])
|
||||
if(world.time < reqtime)
|
||||
say("[world.time - reqtime] seconds remaining until another requisition form may be printed.")
|
||||
return
|
||||
// Sell max reliablity designs
|
||||
if(istype(thing, /obj/item/weapon/disk/design_disk))
|
||||
var/obj/item/weapon/disk/design_disk/disk = thing
|
||||
if(!disk.blueprint)
|
||||
continue
|
||||
var/datum/design/design = disk.blueprint
|
||||
if(design.id in SSshuttle.researchDesigns)
|
||||
continue
|
||||
|
||||
//Find the correct supply_pack datum
|
||||
if(!SSshuttle.supply_packs[href_list["doorder"]])
|
||||
return
|
||||
if(initial(design.reliability) < 100 && design.reliability >= 100)
|
||||
// Maxed out reliability designs only.
|
||||
SSshuttle.points += SSshuttle.points_per_design
|
||||
SSshuttle.researchDesigns += design.id
|
||||
msg += "+[SSshuttle.points_per_design]: Design: [design.name]."
|
||||
|
||||
var/timeout = world.time + 600
|
||||
var/reason = stripped_input(usr,"Reason:","Why do you require this item?","")
|
||||
if(world.time > timeout)
|
||||
return
|
||||
// if(!reason)
|
||||
// return
|
||||
// Sell exotic plants
|
||||
if(istype(thing, /obj/item/seeds))
|
||||
var/obj/item/seeds/S = thing
|
||||
if(S.rarity == 0) // Mundane species
|
||||
msg += "+0: We don't need samples of mundane species \"[capitalize(S.species)]\"."
|
||||
else if(SSshuttle.discoveredPlants[S.type]) // This species has already been sent to CentComm
|
||||
var/potDiff = S.potency - SSshuttle.discoveredPlants[S.type] // Compare it to the previous best
|
||||
if(potDiff > 0) // This sample is better
|
||||
SSshuttle.discoveredPlants[S.type] = S.potency
|
||||
msg += "+[potDiff]: New sample of \"[capitalize(S.species)]\" is superior. Good work."
|
||||
SSshuttle.points += potDiff
|
||||
else // This sample is worthless
|
||||
msg += "+0: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([SSshuttle.discoveredPlants[S.type]] potency)."
|
||||
else // This is a new discovery!
|
||||
SSshuttle.discoveredPlants[S.type] = S.potency
|
||||
msg += "[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work."
|
||||
SSshuttle.points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later
|
||||
qdel(thing)
|
||||
qdel(AM)
|
||||
SSshuttle.sold_atoms += "."
|
||||
|
||||
var/idname = "*None Provided*"
|
||||
var/idrank = "*None Provided*"
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
idname = H.get_authentification_name()
|
||||
idrank = H.get_assignment()
|
||||
else if(issilicon(usr))
|
||||
idname = usr.real_name
|
||||
if(plasma > 0)
|
||||
pointsEarned = round(plasma * SSshuttle.points_per_plasma)
|
||||
msg += "[pointsEarned]: Received [plasma] unit(s) of exotic material."
|
||||
SSshuttle.points += pointsEarned
|
||||
|
||||
var/datum/supply_order/O = SSshuttle.generateSupplyOrder(href_list["doorder"], idname, idrank, reason)
|
||||
if(!O)
|
||||
return
|
||||
O.generateRequisition(loc)
|
||||
if(intel > 0)
|
||||
pointsEarned = round(intel * SSshuttle.points_per_intel)
|
||||
msg += "[pointsEarned]: Received [intel] article(s) of enemy intelligence."
|
||||
SSshuttle.points += pointsEarned
|
||||
|
||||
reqtime = (world.time + 5) % 1e5
|
||||
if(crates > 0)
|
||||
pointsEarned = round(crates * SSshuttle.points_per_crate)
|
||||
msg += "+[pointsEarned]: Received [crates] crate(s)."
|
||||
SSshuttle.points += pointsEarned
|
||||
|
||||
temp = "Order request placed.<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];order=[last_viewed_group]'>Back</A> | <A href='?src=\ref[src];mainmenu=1'>Main Menu</A> | <A href='?src=\ref[src];confirmorder=[O.ordernum]'>Authorize Order</A>"
|
||||
|
||||
else if(href_list["confirmorder"])
|
||||
//Find the correct supply_order datum
|
||||
var/ordernum = text2num(href_list["confirmorder"])
|
||||
var/datum/supply_order/O
|
||||
var/datum/supply_packs/P
|
||||
temp = "Invalid Request"
|
||||
for(var/i=1, i<=SSshuttle.requestlist.len, i++)
|
||||
var/datum/supply_order/SO = SSshuttle.requestlist[i]
|
||||
if(SO && SO.ordernum == ordernum)
|
||||
O = SO
|
||||
P = O.object
|
||||
if(SSshuttle.points >= P.cost)
|
||||
SSshuttle.requestlist.Cut(i,i+1)
|
||||
SSshuttle.points -= P.cost
|
||||
SSshuttle.shoppinglist += O
|
||||
temp = "Thanks for your order."
|
||||
investigate_log("[usr.key] has authorized an order for [P.name]. Remaining points: [SSshuttle.points].", "cargo")
|
||||
else
|
||||
temp = "Not enough supply points."
|
||||
break
|
||||
temp += "<BR><BR><A href='?src=\ref[src];viewrequests=1'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["vieworders"])
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current approved orders: <BR><BR>"
|
||||
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
|
||||
temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]<BR>"// <A href='?src=\ref[src];cancelorder=[S]'>(Cancel)</A><BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
/*
|
||||
else if (href_list["cancelorder"])
|
||||
var/datum/supply_order/remove_supply = href_list["cancelorder"]
|
||||
supply_shuttle_shoppinglist -= remove_supply
|
||||
supply_shuttle_points += remove_supply.object.cost
|
||||
temp += "Canceled: [remove_supply.object.name]<BR><BR><BR>"
|
||||
|
||||
for(var/S in supply_shuttle_shoppinglist)
|
||||
var/datum/supply_order/SO = S
|
||||
temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] <A href='?src=\ref[src];cancelorder=[S]'>(Cancel)</A><BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
*/
|
||||
else if (href_list["viewrequests"])
|
||||
temp = "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><BR><BR>Current requests: <BR><BR>"
|
||||
for(var/datum/supply_order/SO in SSshuttle.requestlist)
|
||||
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] [SSshuttle.supply.getDockedId() == "supply_away" ? "<A href='?src=\ref[src];confirmorder=[SO.ordernum]'>Approve</A> <A href='?src=\ref[src];rreq=[SO.ordernum]'>Remove</A>" : ""]<BR>"
|
||||
|
||||
temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>"
|
||||
|
||||
else if (href_list["rreq"])
|
||||
var/ordernum = text2num(href_list["rreq"])
|
||||
temp = "Invalid Request.<BR>"
|
||||
for(var/i=1, i<=SSshuttle.requestlist.len, i++)
|
||||
var/datum/supply_order/SO = SSshuttle.requestlist[i]
|
||||
if(SO && SO.ordernum == ordernum)
|
||||
SSshuttle.requestlist.Cut(i,i+1)
|
||||
temp = "Request removed.<BR>"
|
||||
break
|
||||
temp += "<BR><A href='?src=\ref[src];viewrequests=1'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["clearreq"])
|
||||
SSshuttle.requestlist.Cut()
|
||||
temp = "List cleared.<BR>"
|
||||
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
|
||||
|
||||
else if (href_list["mainmenu"])
|
||||
temp = null
|
||||
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/supplycomp/proc/post_signal(command)
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
status_signal.transmission_method = 1
|
||||
status_signal.data["command"] = command
|
||||
|
||||
frequency.post_signal(src, status_signal)
|
||||
SSshuttle.centcom_message = msg
|
||||
|
||||
@@ -63,7 +63,7 @@ var/datum/subsystem/timer/SStimer
|
||||
event.thingToCall = thingToCall
|
||||
event.procToCall = procToCall
|
||||
event.timeToRun = world.time + wait
|
||||
event.hash = list2text(args)
|
||||
event.hash = jointext(args, null)
|
||||
if(args.len > 4)
|
||||
event.argList = args.Copy(5)
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
/datum/debug
|
||||
var/list/debuglist
|
||||
@@ -294,7 +294,7 @@ var/list/advance_cures = list(
|
||||
for(var/datum/symptom/S in symptoms)
|
||||
L += S.id
|
||||
L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in.
|
||||
var/result = list2text(L, ":")
|
||||
var/result = jointext(L, ":")
|
||||
id = result
|
||||
return id
|
||||
|
||||
|
||||
@@ -87,10 +87,9 @@ STI KALY - blind
|
||||
|
||||
|
||||
/datum/disease/wizarditis/proc/teleport()
|
||||
var/list/theareas = list()
|
||||
for(var/area/AR in ultra_range(80, affected_mob, 1))
|
||||
if(theareas.Find(AR) || istype(AR,/area/space)) continue
|
||||
theareas += AR
|
||||
var/list/theareas = get_areas_in_range(80, affected_mob)
|
||||
for(var/area/space/S in theareas)
|
||||
theareas -= S
|
||||
|
||||
if(!theareas||!theareas.len)
|
||||
return
|
||||
|
||||
@@ -9,7 +9,7 @@ var/global/datum/getrev/revdata = new()
|
||||
var/list/head_log = file2list(".git/logs/HEAD", "\n")
|
||||
for(var/line=head_log.len, line>=1, line--)
|
||||
if(head_log[line])
|
||||
var/list/last_entry = text2list(head_log[line], " ")
|
||||
var/list/last_entry = splittext(head_log[line], " ")
|
||||
if(last_entry.len < 2)
|
||||
continue
|
||||
revision = last_entry[2]
|
||||
|
||||
@@ -514,7 +514,7 @@
|
||||
else
|
||||
prefix=""
|
||||
|
||||
var/list/words = text2list(message," ")
|
||||
var/list/words = splittext(message," ")
|
||||
var/list/rearranged = list()
|
||||
for(var/i=1;i<=words.len;i++)
|
||||
var/cword = pick(words)
|
||||
@@ -525,7 +525,7 @@
|
||||
suffix = copytext(cword,length(cword)-1,length(cword) )
|
||||
if(length(cword))
|
||||
rearranged += cword
|
||||
message = "[prefix][uppertext(list2text(rearranged," "))]!!"
|
||||
message = "[prefix][uppertext(jointext(rearranged," "))]!!"
|
||||
return message
|
||||
|
||||
/datum/mutation/human/swedish
|
||||
|
||||
@@ -91,7 +91,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "emergency crate"
|
||||
group = supply_emergency
|
||||
|
||||
/datum/supply_packs/emergency/internals
|
||||
name = "Internals Crate"
|
||||
@@ -721,21 +720,21 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/science/robotics/mecha_ripley
|
||||
name = "Circuit Crate (\"Ripley\" APLU)"
|
||||
name = "Circuit Crate (Ripley APLU)"
|
||||
contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/main, //TEMPORARY due to lack of circuitboard printer
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/peripherals) //TEMPORARY due to lack of circuitboard printer
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "\improper APLU \"Ripley\" circuit crate"
|
||||
containername = "\improper APLU Ripley circuit crate"
|
||||
|
||||
/datum/supply_packs/science/robotics/mecha_odysseus
|
||||
name = "Circuit Crate (\"Odysseus\")"
|
||||
name = "Circuit Crate (Odysseus)"
|
||||
contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, //TEMPORARY due to lack of circuitboard printer
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/main) //TEMPORARY due to lack of circuitboard printer
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "\improper \"Odysseus\" circuit crate"
|
||||
containername = "\improper Odysseus circuit crate"
|
||||
|
||||
/datum/supply_packs/science/plasma
|
||||
name = "Plasma Assembly Crate"
|
||||
|
||||
@@ -172,7 +172,7 @@ var/list/wire_color_directory = list()
|
||||
wires += dud
|
||||
|
||||
/datum/wires/proc/randomize()
|
||||
var/list/possible_colors = shuffle(wire_colors.Copy())
|
||||
var/list/possible_colors = wire_colors.Copy()
|
||||
|
||||
for(var/wire in shuffle(wires))
|
||||
colors[pick_n_take(possible_colors)] = wire
|
||||
@@ -291,7 +291,7 @@ var/list/wire_color_directory = list()
|
||||
ui = new(user, src, ui_key, "wires", "[holder.name] wires", 350, 150 + wires.len * 30, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/datum/wires/get_ui_data(mob/user)
|
||||
/datum/wires/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/list/payload = list()
|
||||
for(var/color in colors)
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
/mob/living/simple_animal/hostile/blob/blob_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
adjustFireLoss(Clamp(0.01 * exposed_temperature, 1, 5))
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/CanPass(atom/movable/mover, turf/target, height = 0)
|
||||
if(istype(mover, /obj/effect/blob))
|
||||
return 1
|
||||
@@ -42,16 +46,12 @@
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/weapons/genhit1.ogg'
|
||||
speak_emote = list("pulses")
|
||||
var/death_cloud_size = 1 //size of cloud produced from a dying spore
|
||||
var/obj/effect/blob/factory/factory = null
|
||||
var/list/human_overlays = list()
|
||||
var/is_zombie = 0
|
||||
gold_core_spawnable = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/New(loc, var/obj/effect/blob/factory/linked_node)
|
||||
if(istype(linked_node))
|
||||
factory = linked_node
|
||||
@@ -80,6 +80,7 @@
|
||||
desc = "A shambling corpse animated by the blob."
|
||||
melee_damage_lower += 8
|
||||
melee_damage_upper += 11
|
||||
death_cloud_size = 0
|
||||
icon = H.icon
|
||||
speak_emote = list("groans")
|
||||
icon_state = "zombie_s"
|
||||
@@ -106,7 +107,7 @@
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
S.set_up(reagents, 0, location, silent=1)
|
||||
S.set_up(reagents, death_cloud_size, location, silent=1)
|
||||
S.start()
|
||||
|
||||
ghostize()
|
||||
@@ -137,6 +138,7 @@
|
||||
maxHealth = 20
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
death_cloud_size = 0
|
||||
|
||||
/////////////////
|
||||
// BLOBBERNAUT //
|
||||
@@ -148,27 +150,30 @@
|
||||
icon_state = "blobbernaut"
|
||||
icon_living = "blobbernaut"
|
||||
icon_dead = "blobbernaut_dead"
|
||||
health = 240
|
||||
maxHealth = 240
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
attacktext = "slams"
|
||||
attack_sound = 'sound/effects/blobattack.ogg'
|
||||
speak_emote = list("gurgles")
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
force_threshold = 10
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
gold_core_spawnable = 1
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
see_in_dark = 8
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/New()
|
||||
..()
|
||||
verbs -= /mob/living/verb/pulled //no pulling people deep into the blob
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/AttackingTarget()
|
||||
if(isliving(target))
|
||||
if(overmind)
|
||||
var/mob/living/L = target
|
||||
var/mob_protection = L.get_permeability_protection()
|
||||
overmind.blob_reagent_datum.reaction_mob(L, VAPOR, 17.5, 0, mob_protection)//this will do between 7 and 17 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage.
|
||||
overmind.blob_reagent_datum.reaction_mob(L, VAPOR, 20, 0, mob_protection)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage.
|
||||
if(target)
|
||||
..()
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
if(!B)
|
||||
src << "<span class='warning'>You must be on a factory blob!</span>"
|
||||
return
|
||||
if(B.health < B.maxhealth*0.8) //if it's at less than 80% of its health, you can't blobbernaut it
|
||||
if(B.health <= B.maxhealth*0.8) //if it's at less than 80% of its health, you can't blobbernaut it
|
||||
src << "<span class='warning'>This factory blob is too damaged to produce a blobbernaut.</span>"
|
||||
return
|
||||
if(!can_buy(30))
|
||||
@@ -92,6 +92,7 @@
|
||||
B.take_damage(B.maxhealth*0.8, CLONE, null, 0) //take a bunch of damage, so you can't produce tons of blobbernauts from a single factory
|
||||
B.visible_message("<span class='warning'><b>The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!</b></span>")
|
||||
B.spore_delay = world.time + 600 //one minute before it can spawn spores again
|
||||
playsound(B.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
blobber.overmind = src
|
||||
blobber.update_icons()
|
||||
blobber.AIStatus = AI_OFF
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
if(expand_range)
|
||||
src.expand()
|
||||
for(var/obj/effect/blob/B in orange(expand_range, src))
|
||||
if(prob(12))
|
||||
if(prob(20 - get_dist(get_turf(src), get_turf(B)) * 4)) //expand falls off with range but is faster near the blob causing the expansion
|
||||
B.expand()
|
||||
return
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
B.loc = T
|
||||
B.update_icon()
|
||||
if(B.overmind)
|
||||
B.overmind.blob_reagent_datum.expand_reaction(B, T)
|
||||
B.overmind.blob_reagent_datum.expand_reaction(src, B, T)
|
||||
return B
|
||||
else
|
||||
T.blob_act() //if we can't move in hit the turf again
|
||||
|
||||
@@ -10,10 +10,11 @@
|
||||
if(user.digitalcamo)
|
||||
user << "<span class='notice'>We return to normal.</span>"
|
||||
user.digitalinvis = 0
|
||||
user.digitalcamo = 0
|
||||
else
|
||||
user << "<span class='notice'>We distort our form to hide from the AI</span>"
|
||||
user.digitalcamo = 1
|
||||
user.digitalinvis = !user.digitalcamo
|
||||
user.digitalinvis = 1
|
||||
|
||||
|
||||
feedback_add_details("changeling_powers","CAM")
|
||||
|
||||
@@ -680,7 +680,7 @@ var/list/teleport_other_runes = list()
|
||||
log_game("Talisman Imbue rune failed - no nearby runes")
|
||||
return
|
||||
var/obj/effect/rune/picked_rune = pick(nearby_runes)
|
||||
var/list/split_rune_type = text2list("[picked_rune.type]", "/")
|
||||
var/list/split_rune_type = splittext("[picked_rune.type]", "/")
|
||||
var/imbue_type = split_rune_type[split_rune_type.len]
|
||||
var/talisman_type = text2path("/obj/item/weapon/paper/talisman/[imbue_type]")
|
||||
if(ispath(talisman_type))
|
||||
|
||||
@@ -31,8 +31,9 @@
|
||||
set category = "Malfunction"
|
||||
set name = "Doomsday Device"
|
||||
|
||||
for(var/turf/simulated/floor/bluegrid/T in orange(5, src))
|
||||
T.icon_state = "rcircuitanim" //Causes blue tiles near the AI to change to flashing red
|
||||
for(var/N in nuke_tiles)
|
||||
var/turf/T = N
|
||||
T.icon_state = "rcircuitanim" //This causes all blue "circuit" tiles on the map to change to animated red icon state.
|
||||
|
||||
src << "<span class='notice'>Nuclear device armed.</span>"
|
||||
priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/AI/aimalf.ogg')
|
||||
@@ -59,18 +60,18 @@
|
||||
var/timer = 450
|
||||
|
||||
/obj/machinery/doomsday_device/process()
|
||||
if(z != ZLEVEL_STATION)
|
||||
minor_announce("DOOMSDAY DEVICE OUT OF RANGE OF STATION, ABORTING", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 1)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T || T.z != ZLEVEL_STATION)
|
||||
minor_announce("DOOMSDAY DEVICE OUT OF STATION RANGE, ABORTING", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 1)
|
||||
SSshuttle.emergencyNoEscape = 0
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
|
||||
SSshuttle.emergency.mode = SHUTTLE_DOCKED
|
||||
SSshuttle.emergency.timer = world.time
|
||||
priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
|
||||
qdel(src)
|
||||
priority_announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
|
||||
qdel(src)
|
||||
if(!timing)
|
||||
return
|
||||
if(timer <= 0)
|
||||
var/turf/T = get_turf(src)
|
||||
timing = 0
|
||||
detonate(T.z)
|
||||
qdel(src)
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
see_in_dark = 8
|
||||
languages = ALL
|
||||
force_threshold = 5
|
||||
response_help = "passes through"
|
||||
response_disarm = "swings through"
|
||||
response_harm = "punches through"
|
||||
@@ -31,7 +32,6 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
harm_intent_damage = 0
|
||||
friendly = "touches"
|
||||
status_flags = 0
|
||||
wander = 0
|
||||
|
||||
@@ -391,8 +391,9 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
|
||||
/obj/machinery/nuclearbomb/selfdestruct/proc/SetTurfs()
|
||||
if(loc == initial(loc))
|
||||
for(var/turf/simulated/floor/bluegrid/T in orange(src, 1))
|
||||
T.icon_state = (timing ? "rcircuitanim" : "bcircuit")
|
||||
for(var/N in nuke_tiles)
|
||||
var/turf/simulated/floor/T = N
|
||||
T.icon_state = (timing ? "rcircuitanim" : T.icon_regular_floor)
|
||||
|
||||
/obj/machinery/nuclearbomb/selfdestruct/set_anchor()
|
||||
return
|
||||
@@ -401,6 +402,10 @@ This is here to make the tiles around the station mininuke change when it's arme
|
||||
..()
|
||||
SetTurfs()
|
||||
|
||||
/obj/machinery/nuclearbomb/selfdestruct/set_safety()
|
||||
..()
|
||||
SetTurfs()
|
||||
|
||||
//==========DAT FUKKEN DISK===============
|
||||
/obj/item/weapon/disk/nuclear
|
||||
name = "nuclear authentication disk"
|
||||
|
||||
+146
-194
@@ -2,225 +2,177 @@
|
||||
name = "sleeper console"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "console"
|
||||
anchored = 1 //About time someone fixed this.
|
||||
density = 0
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/sleeper
|
||||
name = "sleeper"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper-open"
|
||||
density = 0
|
||||
anchored = 1
|
||||
state_open = 1
|
||||
var/efficiency
|
||||
var/initial_bin_rating = 1
|
||||
var/min_health = 25
|
||||
var/list/injection_chems = list() //list of injectable chems except ephedrine, coz ephedrine is always avalible
|
||||
var/list/possible_chems = list(list("morphine", "salbutamol", "bicaridine", "kelotane"),
|
||||
list("morphine", "salbutamol", "bicaridine", "kelotane", "oculine"),
|
||||
list("morphine", "salbutamol", "bicaridine", "kelotane", "oculine", "antitoxin", "mutadone", "mannitol", "pen_acid"),
|
||||
list("morphine", "salbutamol", "bicaridine", "kelotane", "oculine", "antitoxin", "mutadone", "mannitol", "pen_acid", "omnizine"))
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
state_open = TRUE
|
||||
var/efficiency = 1
|
||||
var/min_health = -25
|
||||
var/list/available_chems
|
||||
var/list/possible_chems = list(
|
||||
list("epinephrine", "morphine", "salbutamol", "bicaridine", "kelotane"),
|
||||
list("oculine"),
|
||||
list("antitoxin", "mutadone", "mannitol", "pen_acid"),
|
||||
list("omnizine")
|
||||
)
|
||||
|
||||
/obj/machinery/sleeper/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/sleeper(null)
|
||||
|
||||
// Customizable bin rating, used by the labor camp to stop people filling themselves with chemicals and escaping.
|
||||
var/obj/item/weapon/stock_parts/matter_bin/B = new(null)
|
||||
B.rating = initial_bin_rating
|
||||
component_parts += B
|
||||
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 1)
|
||||
component_parts += new /obj/item/weapon/circuitboard/sleeper(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/sleeper/Destroy()
|
||||
go_out()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/sleeper/RefreshParts()
|
||||
var/E
|
||||
var/I
|
||||
for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts)
|
||||
E += B.rating
|
||||
var/I
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
I += M.rating
|
||||
|
||||
injection_chems = possible_chems[I]
|
||||
efficiency = E
|
||||
min_health = -E * 25
|
||||
efficiency = initial(efficiency)* E
|
||||
min_health = initial(min_health) * E
|
||||
available_chems = list()
|
||||
for(var/i in 1 to I)
|
||||
available_chems |= possible_chems[i]
|
||||
|
||||
/obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user)
|
||||
if(stat || user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !iscarbon(target))
|
||||
return
|
||||
close_machine(target)
|
||||
|
||||
/obj/machinery/sleeper/blob_act()
|
||||
if(prob(75))
|
||||
for(var/atom/movable/A in src)
|
||||
A.loc = loc
|
||||
A.blob_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/sleeper/attack_animal(mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
|
||||
if(M.environment_smash)
|
||||
M.do_attack_animation(src)
|
||||
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params)
|
||||
if(!state_open && !occupant)
|
||||
if(default_deconstruction_screwdriver(user, "sleeper-o", "sleeper", I))
|
||||
return
|
||||
|
||||
if(default_change_direction_wrench(user, I))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(default_pry_open(I))
|
||||
return
|
||||
|
||||
default_deconstruction_crowbar(I)
|
||||
|
||||
/obj/machinery/sleeper/emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
..(severity)
|
||||
return
|
||||
if(occupant)
|
||||
go_out()
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/sleeper/proc/go_out()
|
||||
if(!occupant)
|
||||
return
|
||||
for(var/atom/movable/O in src)
|
||||
O.loc = loc
|
||||
occupant.reset_perspective(null)
|
||||
occupant = null
|
||||
icon_state = "sleeper-open"
|
||||
|
||||
/obj/machinery/sleeper/container_resist()
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/sleeper/relaymove(mob/user)
|
||||
..()
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/sleeper/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
|
||||
sleeperUI(user)
|
||||
|
||||
/obj/machinery/sleeper/proc/sleeperUI(mob/user)
|
||||
var/dat
|
||||
dat += "<h3>Injector</h3>"
|
||||
if(occupant)
|
||||
dat += "<A href='?src=\ref[src];inject=epinephrine'>Inject Epinephrine</A>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Inject Epinephrine</span>"
|
||||
if(occupant && occupant.health > min_health)
|
||||
for(var/re in injection_chems)
|
||||
var/datum/reagent/C = chemical_reagents_list[re]
|
||||
if(C)
|
||||
dat += "<BR><A href='?src=\ref[src];inject=[C.id]'>Inject [C.name]</A>"
|
||||
else
|
||||
for(var/re in injection_chems)
|
||||
var/datum/reagent/C = chemical_reagents_list[re]
|
||||
if(C)
|
||||
dat += "<BR><span class='linkOff'>Inject [C.name]</span>"
|
||||
|
||||
dat += "<h3>Sleeper Status</h3>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Scan</A>"
|
||||
dat += "<A href='?src=\ref[src];[state_open ? "close=1'>Close</A>" : "open=1'>Open</A>"]"
|
||||
dat += "<div class='statusDisplay'>"
|
||||
if(!occupant)
|
||||
dat += "Sleeper Unoccupied"
|
||||
else
|
||||
dat += "[occupant.name] => "
|
||||
switch(occupant.stat) //obvious, see what their status is
|
||||
if(0)
|
||||
dat += "<span class='good'>Conscious</span>"
|
||||
if(1)
|
||||
dat += "<span class='average'>Unconscious</span>"
|
||||
else
|
||||
dat += "<span class='bad'>DEAD</span>"
|
||||
dat += "<br />"
|
||||
dat += "<div class='line'><div class='statusLabel'>Health:</div><div class='progressBar'><div style='width: [occupant.health < 0 ? "0" : "[occupant.health]"]%;' class='progressFill good'></div></div><div class='statusValue'>[occupant.stat > 1 ? "" : "[occupant.health]%"]</div></div>"
|
||||
dat += "<div class='line'><div class='statusLabel'>\> Brute Damage:</div><div class='progressBar'><div style='width: [occupant.getBruteLoss()]%;' class='progressFill bad'></div></div><div class='statusValue'>[occupant.getBruteLoss()]%</div></div>"
|
||||
dat += "<div class='line'><div class='statusLabel'>\> Resp. Damage:</div><div class='progressBar'><div style='width: [occupant.getOxyLoss()]%;' class='progressFill bad'></div></div><div class='statusValue'>[occupant.getOxyLoss()]%</div></div>"
|
||||
dat += "<div class='line'><div class='statusLabel'>\> Toxin Content:</div><div class='progressBar'><div style='width: [occupant.getToxLoss()]%;' class='progressFill bad'></div></div><div class='statusValue'>[occupant.getToxLoss()]%</div></div>"
|
||||
dat += "<div class='line'><div class='statusLabel'>\> Burn Severity:</div><div class='progressBar'><div style='width: [occupant.getFireLoss()]%;' class='progressFill bad'></div></div><div class='statusValue'>[occupant.getFireLoss()]%</div></div><br>"
|
||||
|
||||
dat += "<HR><div class='line'><div style='width: 170px;' class='statusLabel'>Paralysis Summary:</div><div class='statusValue'>[round(occupant.paralysis)]% [occupant.paralysis ? "([round(occupant.paralysis / 4)] seconds left)" : ""]</div></div><br>"
|
||||
if(occupant.getCloneLoss())
|
||||
dat += "<div class='line'><span class='average'>Subject appears to have cellular damage.</span></div><br>"
|
||||
if(occupant.getBrainLoss())
|
||||
dat += "<div class='line'><span class='average'>Significant brain damage detected.</span></div><br>"
|
||||
if(occupant.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in occupant.reagents.reagent_list)
|
||||
dat += "<div class='line'><div style='width: 170px;' class='statusLabel'>[R.name]:</div><div class='statusValue'>[round(R.volume, 0.1)] units</div></div><br>"
|
||||
dat += "</div>"
|
||||
|
||||
var/datum/browser/popup = new(user, "sleeper", "Sleeper Console", 520, 540) //Set up the popup browser window
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/sleeper/Topic(href, href_list)
|
||||
if(..() || usr == occupant)
|
||||
return
|
||||
usr.set_machine(src)
|
||||
if(href_list["refresh"])
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(href_list["open"])
|
||||
open_machine()
|
||||
return
|
||||
if(href_list["close"])
|
||||
close_machine()
|
||||
return
|
||||
if(occupant && occupant.stat != DEAD)
|
||||
if(href_list["inject"] == "epinephrine" || occupant.health > min_health)
|
||||
inject_chem(usr, href_list["inject"])
|
||||
else
|
||||
usr << "<span class='notice'>ERROR: Subject is not in stable condition for auto-injection.</span>"
|
||||
else
|
||||
usr << "<span class='notice'>ERROR: Subject cannot metabolise chemicals.</span>"
|
||||
updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/sleeper/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/sleeper/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/sleeper/open_machine()
|
||||
if(!state_open && !panel_open)
|
||||
..()
|
||||
|
||||
/obj/machinery/sleeper/close_machine(mob/target)
|
||||
if(state_open && !panel_open)
|
||||
..(target)
|
||||
|
||||
/obj/machinery/sleeper/proc/inject_chem(mob/user, chem)
|
||||
if(!is_operational())
|
||||
return
|
||||
if(occupant && occupant.reagents)
|
||||
if(chem in injection_chems + "epinephrine")
|
||||
if(occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency)
|
||||
occupant.reagents.add_reagent(chem, 10)
|
||||
var/units = round(occupant.reagents.get_reagent_amount(chem))
|
||||
user << "<span class='notice'>Occupant now has [units] unit\s of [chemical_reagents_list[chem]] in their bloodstream.</span>"
|
||||
/obj/machinery/sleeper/Destroy()
|
||||
var/turf/T = loc
|
||||
T.contents += contents
|
||||
return ..()
|
||||
|
||||
/obj/machinery/sleeper/update_icon()
|
||||
if(state_open)
|
||||
icon_state = "sleeper-open"
|
||||
else
|
||||
icon_state = "sleeper"
|
||||
|
||||
/obj/machinery/sleeper/container_resist()
|
||||
visible_message("<span class='notice'>[occupant] emerges from [src]!</span>",
|
||||
"<span class='notice'>You climb out of [src]!</span>")
|
||||
open_machine()
|
||||
|
||||
/obj/machinery/sleeper/relaymove(mob/user)
|
||||
container_resist()
|
||||
|
||||
/obj/machinery/sleeper/open_machine()
|
||||
if(!state_open && !panel_open)
|
||||
..()
|
||||
|
||||
/obj/machinery/sleeper/close_machine(mob/user)
|
||||
if((isnull(user) || istype(user)) && state_open && !panel_open)
|
||||
..(user)
|
||||
|
||||
/obj/machinery/sleeper/attack_animal(mob/living/simple_animal/M)
|
||||
if(M.environment_smash)
|
||||
M.do_attack_animation(src)
|
||||
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/sleeper/emp_act(severity)
|
||||
if(is_operational() && occupant)
|
||||
open_machine()
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/sleeper/blob_act()
|
||||
if(prob(75))
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(T)
|
||||
A.blob_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target))
|
||||
return
|
||||
close_machine(target)
|
||||
|
||||
/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params)
|
||||
if(!state_open && !occupant)
|
||||
if(default_deconstruction_screwdriver(user, "sleeper-o", "sleeper", I))
|
||||
return
|
||||
if(default_change_direction_wrench(user, I))
|
||||
return
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
if(default_pry_open(I))
|
||||
return
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "sleeper", name, 375, 550, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/sleeper/ui_data()
|
||||
var/list/data = list()
|
||||
data["occupied"] = occupant ? 1 : 0
|
||||
data["open"] = state_open
|
||||
|
||||
data["chems"] = list()
|
||||
for(var/chem in available_chems)
|
||||
var/datum/reagent/R = chemical_reagents_list[chem]
|
||||
data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem)))
|
||||
|
||||
data["occupant"] = list()
|
||||
if(occupant)
|
||||
data["occupant"]["name"] = occupant.name
|
||||
data["occupant"]["stat"] = occupant.stat
|
||||
data["occupant"]["health"] = occupant.health
|
||||
data["occupant"]["maxHealth"] = occupant.maxHealth
|
||||
data["occupant"]["minHealth"] = config.health_threshold_dead
|
||||
data["occupant"]["bruteLoss"] = occupant.getBruteLoss()
|
||||
data["occupant"]["oxyLoss"] = occupant.getOxyLoss()
|
||||
data["occupant"]["toxLoss"] = occupant.getToxLoss()
|
||||
data["occupant"]["fireLoss"] = occupant.getFireLoss()
|
||||
data["occupant"]["cloneLoss"] = occupant.getCloneLoss()
|
||||
data["occupant"]["brainLoss"] = occupant.getBrainLoss()
|
||||
data["occupant"]["reagents"] = list()
|
||||
if(occupant.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in occupant.reagents.reagent_list)
|
||||
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
|
||||
return data
|
||||
|
||||
/obj/machinery/sleeper/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("door")
|
||||
if(state_open)
|
||||
close_machine()
|
||||
else
|
||||
open_machine()
|
||||
. = TRUE
|
||||
if("inject")
|
||||
var/chem = params["chem"]
|
||||
if(!is_operational() || !occupant)
|
||||
return
|
||||
if(occupant.health < min_health && chem != "epinephrine")
|
||||
return
|
||||
if(inject_chem(chem))
|
||||
. = TRUE
|
||||
|
||||
/obj/machinery/sleeper/proc/inject_chem(chem)
|
||||
if((chem in available_chems) && chem_allowed(chem))
|
||||
occupant.reagents.add_reagent(chem, 10)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/sleeper/proc/chem_allowed(chem)
|
||||
if(!occupant)
|
||||
return
|
||||
var/amount = occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency
|
||||
var/health = occupant.health > min_health || chem == "epinephrine"
|
||||
return amount && health
|
||||
@@ -78,7 +78,7 @@
|
||||
usr << "<span class='warning'>No input found, please hang up and try your call again!</span>"
|
||||
return
|
||||
|
||||
var/list/tempnetwork = text2list(input, ",")
|
||||
var/list/tempnetwork = splittext(input, ",")
|
||||
if(tempnetwork.len < 1)
|
||||
usr << "<span class='warning'>No network found, please hang up and try your call again!</span>"
|
||||
return
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ui = new(user, src, ui_key, "atmos_alert", name, 350, 300, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/atmos_alert/get_ui_data(mob/user)
|
||||
/obj/machinery/computer/atmos_alert/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
data["priority"] = list()
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
ui = new(user, src, ui_key, "atmos_control", name, 400, 925, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/atmos_control/get_ui_data(mob/user)
|
||||
/obj/machinery/computer/atmos_control/ui_data(mob/user)
|
||||
var/data = list()
|
||||
|
||||
data["sensors"] = list()
|
||||
@@ -157,10 +157,10 @@
|
||||
var/datum/radio_frequency/freq = SSradio.return_frequency(1441)
|
||||
var/list/devices = freq.devices["_default"]
|
||||
for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in devices)
|
||||
var/list/text = text2list(U.id_tag, "_")
|
||||
var/list/text = splittext(U.id_tag, "_")
|
||||
IO |= text[1]
|
||||
for(var/obj/machinery/atmospherics/components/unary/outlet_injector/U in devices)
|
||||
var/list/text = text2list(U.id, "_")
|
||||
var/list/text = splittext(U.id, "_")
|
||||
IO |= text[1]
|
||||
if(!IO.len)
|
||||
user << "<span class='alert'>No machinery detected.</span>"
|
||||
@@ -171,7 +171,7 @@
|
||||
name = "[uppertext(S)] Supply Control"
|
||||
var/list/new_devices = freq.devices["4"]
|
||||
for(var/obj/machinery/air_sensor/U in new_devices)
|
||||
var/list/text = text2list(U.id_tag, "_")
|
||||
var/list/text = splittext(U.id_tag, "_")
|
||||
if(text[1] == S)
|
||||
sensors = list("[S]_sensor" = "Tank")
|
||||
break
|
||||
@@ -188,7 +188,7 @@
|
||||
ui = new(user, src, ui_key, "atmos_control", name, 500, 305, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/atmos_control/tank/get_ui_data(mob/user)
|
||||
/obj/machinery/computer/atmos_control/tank/ui_data(mob/user)
|
||||
var/list/data = ..()
|
||||
data["tank"] = TRUE
|
||||
data["inputting"] = input_info ? input_info["power"] : FALSE
|
||||
|
||||
@@ -167,14 +167,14 @@
|
||||
name = "circuit board (Mech Bay Power Control Console)"
|
||||
build_path = /obj/machinery/computer/mech_bay_power_console
|
||||
origin_tech = "programming=2;powerstorage=3"
|
||||
/obj/item/weapon/circuitboard/ordercomp
|
||||
name = "circuit board (Supply Ordering Console)"
|
||||
build_path = /obj/machinery/computer/ordercomp
|
||||
/obj/item/weapon/circuitboard/supplycomp
|
||||
name = "circuit board (Supply shuttle console)"
|
||||
build_path = /obj/machinery/computer/supplycomp
|
||||
/obj/item/weapon/circuitboard/cargo
|
||||
name = "circuit board (Supply Console)"
|
||||
build_path = /obj/machinery/computer/cargo
|
||||
origin_tech = "programming=3"
|
||||
var/contraband_enabled = 0
|
||||
var/contraband = 0
|
||||
/obj/item/weapon/circuitboard/cargo/request
|
||||
name = "circuit board (Supply Request Console)"
|
||||
build_path = /obj/machinery/computer/cargo/request
|
||||
/obj/item/weapon/circuitboard/operating
|
||||
name = "circuit board (Operating Computer)"
|
||||
build_path = /obj/machinery/computer/operating
|
||||
@@ -221,9 +221,6 @@
|
||||
name = "circuit board (AI Integrity Restorer)"
|
||||
build_path = /obj/machinery/computer/aifixer
|
||||
origin_tech = "programming=3;biotech=2"
|
||||
/obj/item/weapon/circuitboard/area_atmos
|
||||
name = "circuit board (Area Air Control)"
|
||||
build_path = /obj/machinery/computer/area_atmos
|
||||
/*/obj/item/weapon/circuitboard/prison_shuttle
|
||||
name = "circuit board (Prison Shuttle)"
|
||||
build_path = /obj/machinery/computer/prison_shuttle*/
|
||||
@@ -244,27 +241,10 @@
|
||||
target_dept = dept_list.Find(choice)
|
||||
return
|
||||
|
||||
/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I, mob/user, params)
|
||||
/obj/item/weapon/circuitboard/cargo/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I,/obj/item/device/multitool))
|
||||
var/catastasis = src.contraband_enabled
|
||||
var/opposite_catastasis
|
||||
if(catastasis)
|
||||
opposite_catastasis = "STANDARD"
|
||||
catastasis = "BROAD"
|
||||
else
|
||||
opposite_catastasis = "BROAD"
|
||||
catastasis = "STANDARD"
|
||||
|
||||
switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
|
||||
//switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
|
||||
if("Switch to STANDARD","Switch to BROAD")
|
||||
src.contraband_enabled = !src.contraband_enabled
|
||||
|
||||
if("Cancel")
|
||||
return
|
||||
else
|
||||
user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
|
||||
return
|
||||
contraband = !contraband
|
||||
user << "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>"
|
||||
|
||||
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I,/obj/item/weapon/screwdriver))
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 300
|
||||
active_power_usage = 300
|
||||
var/obj/item/weapon/circuitboard/circuit = null //if circuit==null, computer can't disassembly
|
||||
var/obj/item/weapon/circuitboard/circuit = null // if circuit==null, computer can't disassembly
|
||||
var/processing = 0
|
||||
var/brightness_on = 2
|
||||
var/icon_keyboard = "generic_key"
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
// the power monitoring computer
|
||||
// for the moment, just report the status of all APCs in the same powernet
|
||||
/obj/machinery/computer/monitor
|
||||
name = "power monitoring console"
|
||||
desc = "It monitors power levels across the station."
|
||||
icon_screen = "power"
|
||||
icon_keyboard = "power_key"
|
||||
use_power = 2
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 80
|
||||
circuit = /obj/item/weapon/circuitboard/powermonitor
|
||||
var/datum/powernet/powernet = null
|
||||
|
||||
//fix for issue 521, by QualityVan.
|
||||
//someone should really look into why circuits have a powernet var, it's several kinds of retarded.
|
||||
/obj/machinery/computer/monitor/New()
|
||||
..()
|
||||
var/obj/structure/cable/attached = null
|
||||
var/turf/T = loc
|
||||
if(isturf(T))
|
||||
attached = locate() in T
|
||||
if(attached)
|
||||
powernet = attached.get_powernet()
|
||||
|
||||
/obj/machinery/computer/monitor/process() //oh shit, somehow we didnt end up with a powernet... lets look for one.
|
||||
if(!powernet)
|
||||
var/obj/structure/cable/attached = null
|
||||
var/turf/T = loc
|
||||
if(isturf(T))
|
||||
attached = locate() in T
|
||||
if(attached)
|
||||
powernet = attached.get_powernet()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/monitor/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/monitor/interact(mob/user)
|
||||
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
|
||||
if (!(istype(user, /mob/living/silicon) || IsAdminGhost(user)))
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=powcomp")
|
||||
return
|
||||
|
||||
|
||||
user.set_machine(src)
|
||||
var/t = ""
|
||||
|
||||
t += "<A href='?src=\ref[src];update=1'>Refresh</A> <A href='?src=\ref[src];close=1'>Close</A><br /><br />"
|
||||
|
||||
if(!powernet)
|
||||
t += "<span class='danger'>No connection.</span>"
|
||||
else
|
||||
|
||||
var/list/L = list()
|
||||
for(var/obj/machinery/power/terminal/term in powernet.nodes)
|
||||
if(istype(term.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = term.master
|
||||
L += A
|
||||
|
||||
t += "<PRE>Total power: [powernet.avail] W<BR>Total load: [num2text(powernet.viewload,10)] W<BR>"
|
||||
|
||||
t += "<FONT SIZE=-1>"
|
||||
|
||||
if(L.len > 0)
|
||||
|
||||
t += "Area Eqp./Lgt./Env. Load Cell<HR>"
|
||||
|
||||
var/list/S = list("<SPAN class='bad'> Off</SPAN>","<SPAN class='bad'>AOff</SPAN>","<SPAN class='good'> On</SPAN>", "<SPAN class='good'> AOn</SPAN>")
|
||||
var/list/chg = list("<SPAN class='bad'>N</SPAN>","<SPAN class='average'>C</SPAN>","<SPAN class='good'>F</SPAN>")
|
||||
|
||||
var/percent = 0
|
||||
var/c = ""
|
||||
|
||||
for(var/obj/machinery/power/apc/A in L)
|
||||
|
||||
t += copytext(add_tspace("[format_text(A.area.name)]", 30), 1, 30)
|
||||
t += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)]"
|
||||
|
||||
if (A.cell)
|
||||
percent = round(A.cell.percent())
|
||||
|
||||
c = "bad"
|
||||
if (percent > 50)
|
||||
c = "good"
|
||||
else if (percent > 25)
|
||||
c = "average"
|
||||
|
||||
t += "<SPAN class='[c]'>[add_lspace(percent, 4)]%</SPAN> [chg[A.charging+1]]<BR>"
|
||||
else
|
||||
t += " N/C<BR>"
|
||||
|
||||
t += "</FONT></PRE>"
|
||||
|
||||
//user << browse(t, "window=powcomp;size=420x900")
|
||||
//onclose(user, "powcomp")
|
||||
var/datum/browser/popup = new(user, "powcomp", name, 500, 450)
|
||||
popup.set_content(t)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/computer/monitor/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=powcomp")
|
||||
usr.unset_machine()
|
||||
return
|
||||
if( href_list["update"] )
|
||||
src.updateDialog()
|
||||
return
|
||||
@@ -13,7 +13,7 @@
|
||||
ui = new(user, src, ui_key, "station_alert", name, 300, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/station_alert/get_ui_data(mob/user)
|
||||
/obj/machinery/computer/station_alert/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
data["alarms"] = list()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/weapon/electronics/airlock/get_ui_data()
|
||||
/obj/item/weapon/electronics/airlock/ui_data()
|
||||
var/list/data = list()
|
||||
var/list/regions = list()
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
ui = new(user, src, ui_key, "firealarm", name, 300, 150, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/firealarm/get_ui_data(mob/user)
|
||||
/obj/machinery/firealarm/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["emagged"] = emagged
|
||||
data["seclevel"] = get_security_level()
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
codes = new()
|
||||
|
||||
var/list/entries = text2list(codes_txt, ";") // entries are separated by semicolons
|
||||
var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons
|
||||
|
||||
for(var/e in entries)
|
||||
var/index = findtext(e, "=") // format is "key=value"
|
||||
|
||||
@@ -240,6 +240,21 @@ var/global/list/pipeID2State = list(
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/pipe/suicide_act(mob/user)
|
||||
if (pipe_type in list(PIPE_PUMP, PIPE_PASSIVE_GATE, PIPE_VOLUME_PUMP))
|
||||
user.visible_message("<span class='suicide'>[user] shoved the [src] in \his mouth and turned it on! It looks like \he's trying to commit suicide.</span>")
|
||||
if(istype(user, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = user
|
||||
for(var/i=1 to 20)
|
||||
C.vomit(0,1,0,4,0)
|
||||
sleep(5)
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = C
|
||||
H.vessel.remove_reagent("blood",560)
|
||||
return(OXYLOSS|BRUTELOSS)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/pipe_meter
|
||||
name = "meter"
|
||||
desc = "A meter that can be laid on pipes"
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
ui = new(user, src, ui_key, "space_heater", name, 400, 305, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/space_heater/get_ui_data()
|
||||
/obj/machinery/space_heater/ui_data()
|
||||
var/list/data = list()
|
||||
data["open"] = panel_open
|
||||
data["on"] = on
|
||||
|
||||
@@ -290,13 +290,13 @@
|
||||
return
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/suit_storage_unit/get_ui_data()
|
||||
/obj/machinery/suit_storage_unit/ui_data()
|
||||
var/list/data = list()
|
||||
data["locked"] = locked
|
||||
data["open"] = state_open
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
build_inventory(contraband, 1)
|
||||
build_inventory(premium, 0, 1)
|
||||
|
||||
slogan_list = text2list(product_slogans, ";")
|
||||
slogan_list = splittext(product_slogans, ";")
|
||||
// So not all machines speak at the exact same time.
|
||||
// The first time this machine says something will be at slogantime + this random value,
|
||||
// so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
|
||||
|
||||
@@ -29,8 +29,9 @@
|
||||
/obj/mecha/combat/honker/get_stats_part()
|
||||
var/integrity = health/initial(health)*100
|
||||
var/cell_charge = get_charge()
|
||||
var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None"
|
||||
var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown"
|
||||
var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
|
||||
var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None"
|
||||
var/tank_temperature = internal_tank ? int_tank_air.temperature : "Unknown"
|
||||
var/cabin_pressure = round(return_pressure(),0.01)
|
||||
var/output = {"[report_internal_damage()]
|
||||
[integrity<30?"<font color='red'><b>DAMAGE LEVEL CRITICAL</b></font><br>":null]
|
||||
|
||||
@@ -35,11 +35,9 @@
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target)
|
||||
if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return
|
||||
var/list/theareas = list()
|
||||
for(var/area/AR in ultra_range(100, chassis, 1))
|
||||
if(AR in theareas) continue
|
||||
theareas += AR
|
||||
if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM)
|
||||
return
|
||||
var/list/theareas = get_areas_in_range(100, chassis)
|
||||
if(!theareas.len)
|
||||
return
|
||||
var/area/thearea = pick(theareas)
|
||||
|
||||
@@ -254,19 +254,17 @@
|
||||
|
||||
//processing internal damage, temperature, air regulation, alert updates, lights power use.
|
||||
/obj/mecha/process()
|
||||
|
||||
var/internal_temp_regulation = 1
|
||||
|
||||
if(internal_damage)
|
||||
|
||||
if(internal_damage & MECHA_INT_FIRE)
|
||||
if(!(internal_damage & MECHA_INT_TEMP_CONTROL) && prob(5))
|
||||
clearInternalDamage(MECHA_INT_FIRE)
|
||||
if(internal_tank)
|
||||
if(internal_tank.return_pressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
|
||||
setInternalDamage(MECHA_INT_TANK_BREACH)
|
||||
var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
|
||||
if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents
|
||||
if(int_tank_air.return_pressure() > internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH))
|
||||
setInternalDamage(MECHA_INT_TANK_BREACH)
|
||||
if(int_tank_air && int_tank_air.return_volume() > 0) //heat the air_contents
|
||||
int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15))
|
||||
if(cabin_air && cabin_air.return_volume()>0)
|
||||
cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15))
|
||||
@@ -558,7 +556,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
//////// Internal damage ////////
|
||||
///////////////////////////////////
|
||||
|
||||
@@ -71,8 +71,9 @@
|
||||
/obj/mecha/proc/get_stats_part()
|
||||
var/integrity = health/initial(health)*100
|
||||
var/cell_charge = get_charge()
|
||||
var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None"
|
||||
var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown"
|
||||
var/datum/gas_mixture/int_tank_air = internal_tank.return_air()
|
||||
var/tank_pressure = internal_tank ? round(int_tank_air.return_pressure(),0.01) : "None"
|
||||
var/tank_temperature = internal_tank ? int_tank_air.temperature : "Unknown"
|
||||
var/cabin_pressure = round(return_pressure(),0.01)
|
||||
. = {"[report_internal_damage()]
|
||||
[integrity<30?"<span class='userdanger'>DAMAGE LEVEL CRITICAL</span><br>":null]
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
var/obj/item/device/assembly/signaler/anomaly/aSignal = null
|
||||
|
||||
/obj/effect/anomaly/New()
|
||||
..()
|
||||
poi_list |= src
|
||||
SetLuminosity(initial(luminosity))
|
||||
aSignal = new(src)
|
||||
aSignal.code = rand(1,100)
|
||||
@@ -21,6 +23,9 @@
|
||||
if(IsMultiple(aSignal.frequency, 2))//signaller frequencies are always uneven!
|
||||
aSignal.frequency++
|
||||
|
||||
/obj/effect/anomaly/Destroy()
|
||||
poi_list.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/anomaly/proc/anomalyEffect()
|
||||
if(prob(movechance))
|
||||
|
||||
@@ -347,12 +347,12 @@ Code:
|
||||
menu += "<span class='danger'>No connection<BR></span>"
|
||||
else
|
||||
var/list/L = list()
|
||||
for(var/obj/machinery/power/terminal/term in powmonitor.powernet.nodes)
|
||||
for(var/obj/machinery/power/terminal/term in powmonitor.attached.powernet.nodes)
|
||||
if(istype(term.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = term.master
|
||||
L += A
|
||||
|
||||
menu += "<PRE>Total power: [powmonitor.powernet.avail] W<BR>Total load: [num2text(powmonitor.powernet.viewload,10)] W<BR>"
|
||||
menu += "<PRE>Total power: [powmonitor.attached.powernet.viewavail] W<BR>Total load: [num2text(powmonitor.attached.powernet.viewload,10)] W<BR>"
|
||||
|
||||
menu += "<FONT SIZE=-1>"
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/device/aicard/get_ui_data()
|
||||
/obj/item/device/aicard/ui_data()
|
||||
var/list/data = list()
|
||||
if(AI)
|
||||
data["name"] = AI.name
|
||||
|
||||
@@ -61,8 +61,7 @@
|
||||
return
|
||||
|
||||
if(M == user) //they're using it on themselves
|
||||
if(!M.eye_blind)
|
||||
flick("flash", M.flash)
|
||||
if(M.flash_eyes(visual = 1))
|
||||
M.visible_message("[M] directs [src] to \his eyes.", \
|
||||
"<span class='notice'>You wave the light in front of your eyes! Trippy!</span>")
|
||||
else
|
||||
@@ -80,8 +79,7 @@
|
||||
else if(M.dna.check_mutation(XRAY)) //mob has X-RAY vision
|
||||
user << "<span class='danger'>[M] pupils give an eerie glow!</span>"
|
||||
else //they're okay!
|
||||
if(!M.eye_blind)
|
||||
flick("flash", M.flash) //flash the affected mob
|
||||
if(M.flash_eyes(visual = 1))
|
||||
user << "<span class='notice'>[M]'s pupils narrow.</span>"
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
var/mob/living/silicon/S = target
|
||||
//20% chance to actually hit the sensors
|
||||
if(prob(effectchance * diode.rating))
|
||||
flick("e_flash", S.flash)
|
||||
S.flash_eyes(affect_silicon = 1)
|
||||
S.Weaken(rand(5,10))
|
||||
S << "<span class='danger'>Your sensors were overloaded by a laser!</span>"
|
||||
outmsg = "<span class='notice'>You overload [S] by shining [src] at their sensors.</span>"
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
ui = new(user, src, ui_key, "radio", name, 370, 220 + channels.len * 22, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/device/radio/get_ui_data(mob/user)
|
||||
/obj/item/device/radio/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
data["broadcasting"] = broadcasting
|
||||
|
||||
@@ -121,7 +121,7 @@ MASS SPECTROMETER
|
||||
var/tox_loss = M.getToxLoss()
|
||||
var/fire_loss = M.getFireLoss()
|
||||
var/brute_loss = M.getBruteLoss()
|
||||
var/mob_status = (M.stat > 1 ? "<span class='alert'><b>Deceased</b></span>" : "<b>[M.health] % healthy</b>")
|
||||
var/mob_status = (M.stat > 1 ? "<span class='alert'><b>Deceased</b></span>" : "<b>[round(M.health/M.maxHealth,0.01)*100] % healthy</b>")
|
||||
|
||||
if(M.status_flags & FAKEDEATH)
|
||||
mob_status = "<span class='alert'>Deceased</span>"
|
||||
@@ -409,7 +409,7 @@ MASS SPECTROMETER
|
||||
else if (T.nutrition < T.get_hunger_nutrition())
|
||||
user << "<span class='warning'>Warning: slime is hungry</span>"
|
||||
user << "Electric change strength: [T.powerlevel]"
|
||||
user << "Health: [T.health]"
|
||||
user << "Health: [round(T.health/T.maxHealth,0.01)*100]"
|
||||
if (T.slime_mutation[4] == T.colour)
|
||||
user << "This slime does not evolve any further."
|
||||
else
|
||||
|
||||
@@ -384,12 +384,12 @@
|
||||
dat = ""
|
||||
|
||||
/obj/item/toy/crayon/proc/crayon_text_strip(text)
|
||||
var/list/base = text2list(lowertext(text),"")
|
||||
var/list/base = splittext(lowertext(text),"")
|
||||
var/list/out = list()
|
||||
for(var/a in base)
|
||||
if(a in (letters|numerals))
|
||||
out += a
|
||||
return list2text(out)
|
||||
return jointext(out, null)
|
||||
|
||||
/obj/item/toy/crayon/Topic(href, href_list, hsrc)
|
||||
var/temp = "a"
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
ui = new(user, src, ui_key, "tanks", name, 420, 200, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/weapon/tank/get_ui_data()
|
||||
/obj/item/weapon/tank/ui_data()
|
||||
var/list/data = list()
|
||||
data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0)
|
||||
data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0)
|
||||
@@ -127,16 +127,16 @@
|
||||
else if(istype(loc.loc, /mob/living/carbon))
|
||||
user = loc.loc
|
||||
|
||||
if(user && user.internal == src)
|
||||
data["valveOpen"] = TRUE
|
||||
else
|
||||
data["valveOpen"] = FALSE
|
||||
data["valveOpen"] = FALSE
|
||||
data["maskConnected"] = FALSE
|
||||
if(!istype(user))
|
||||
return data
|
||||
|
||||
if(user.internal == src)
|
||||
data["valveOpen"] = TRUE
|
||||
if(user.wear_mask && (user.wear_mask.flags & MASKINTERNALS) && user.internal == src)
|
||||
data["maskConnected"] = TRUE
|
||||
|
||||
if(user.wear_mask && (user.wear_mask.flags & MASKINTERNALS))
|
||||
if(data["valveOpen"] || ((src in user) && !user.internal))
|
||||
data["maskConnected"] = TRUE
|
||||
else
|
||||
data["maskConnected"] = FALSE
|
||||
return data
|
||||
|
||||
/obj/item/weapon/tank/ui_act(action, params)
|
||||
|
||||
@@ -84,10 +84,10 @@
|
||||
|
||||
for(var/line in lines)
|
||||
//world << line
|
||||
for(var/beat in text2list(lowertext(line), ","))
|
||||
for(var/beat in splittext(lowertext(line), ","))
|
||||
//world << "beat: [beat]"
|
||||
var/list/notes = text2list(beat, "/")
|
||||
for(var/note in text2list(notes[1], "-"))
|
||||
var/list/notes = splittext(beat, "/")
|
||||
for(var/note in splittext(notes[1], "-"))
|
||||
//world << "note: [note]"
|
||||
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
|
||||
playing = 0
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
//split into lines
|
||||
spawn()
|
||||
lines = text2list(t, "\n")
|
||||
lines = splittext(t, "\n")
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
|
||||
lines.Cut(1,2)
|
||||
|
||||
@@ -44,16 +44,28 @@
|
||||
smooth_icon_neighbors(src)
|
||||
|
||||
/obj/structure/table/ex_act(severity, target)
|
||||
..()
|
||||
if(severity == 3)
|
||||
if(prob(25))
|
||||
table_destroy(1)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if(prob(50))
|
||||
table_destroy(1)
|
||||
else
|
||||
qdel(src)
|
||||
if(3)
|
||||
if(prob(25))
|
||||
table_destroy(1)
|
||||
|
||||
/obj/structure/table/blob_act()
|
||||
if(prob(75))
|
||||
table_destroy(1)
|
||||
return
|
||||
|
||||
/obj/structure/table/mech_melee_attack(obj/mecha/M)
|
||||
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
|
||||
playsound(src.loc, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
table_destroy(1)
|
||||
|
||||
/obj/structure/table/attack_alien(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
playsound(src.loc, 'sound/weapons/bladeslice.ogg', 50, 1)
|
||||
@@ -447,6 +459,10 @@
|
||||
rack_destroy()
|
||||
return
|
||||
|
||||
/obj/structure/rack/mech_melee_attack(obj/mecha/M)
|
||||
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
|
||||
rack_destroy(1)
|
||||
|
||||
/obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!|
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
ui = new(user, src, ui_key, "tank_dispenser", name, 275, 100, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/structure/tank_dispenser/get_ui_data(mob/user)
|
||||
/obj/structure/tank_dispenser/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["oxygen"] = oxygentanks
|
||||
data["plasma"] = plasmatanks
|
||||
|
||||
@@ -262,7 +262,7 @@ obj/structure/transit_tube/ex_act(severity, target)
|
||||
if(text in direction_table)
|
||||
return direction_table[text]
|
||||
|
||||
var/list/split_text = text2list(text, "-")
|
||||
var/list/split_text = splittext(text, "-")
|
||||
|
||||
// If the first token is D, the icon_state represents
|
||||
// a purely decorative tube, and doesn't actually
|
||||
|
||||
@@ -16,19 +16,19 @@
|
||||
//wrapper for turn that changes the transit tube formatted icon_state instead of the dir
|
||||
/obj/structure/c_transit_tube/proc/tube_turn(angle)
|
||||
var/list/badtubes = list("W-E", "W-E-Pass", "S-N", "S-N-Pass", "SW-NE", "SE-NW")
|
||||
var/list/split_text = text2list(icon_state, "-")
|
||||
var/list/split_text = splittext(icon_state, "-")
|
||||
for(var/i=1; i<=split_text.len; i++)
|
||||
var/curdir = text2dir_extended(split_text[i]) //0 if not a valid direction (e.g. Pass, Block)
|
||||
if(curdir)
|
||||
split_text[i] = dir2text_short(turn(curdir, angle))
|
||||
var/newdir = list2text(split_text, "-")
|
||||
var/newdir = jointext(split_text, "-")
|
||||
if(badtubes.Find(newdir))
|
||||
split_text.Swap(1,2)
|
||||
newdir = list2text(split_text, "-")
|
||||
newdir = jointext(split_text, "-")
|
||||
icon_state = newdir
|
||||
|
||||
/obj/structure/c_transit_tube/proc/tube_flip()
|
||||
var/list/split_text = text2list(icon_state, "-")
|
||||
var/list/split_text = splittext(icon_state, "-")
|
||||
//skip straight pipes
|
||||
if(length(split_text[2]) < 2)
|
||||
return
|
||||
@@ -44,7 +44,7 @@
|
||||
split_text[2] = copytext(split_text[2],1,2) + ((copytext(split_text[2],2,3) == "E") ? "W" : "E")
|
||||
else
|
||||
split_text[2] = ((copytext(split_text[2],1,2) == "N") ? "S" : "N") + copytext(split_text[2],2,3)
|
||||
icon_state = list2text(split_text, "-")
|
||||
icon_state = jointext(split_text, "-")
|
||||
|
||||
// disposals-style flip and rotate verbs
|
||||
/obj/structure/c_transit_tube/verb/rotate()
|
||||
|
||||
@@ -13,6 +13,14 @@
|
||||
icon_state = "bcircuit"
|
||||
floor_tile = /obj/item/stack/tile/plasteel
|
||||
|
||||
/turf/simulated/floor/bluegrid/New()
|
||||
..()
|
||||
nuke_tiles += src
|
||||
|
||||
/turf/simulated/floor/bluegrid/Destroy()
|
||||
nuke_tiles -= src
|
||||
return ..()
|
||||
|
||||
/turf/simulated/floor/greengrid
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "gcircuit"
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
if(M.damtype == "brute")
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
visible_message("<span class='danger'>[M.name] has hit [src]!</span>")
|
||||
if(prob(5) && M.force > 20)
|
||||
if(prob(hardness) && M.force > 20)
|
||||
dismantle_wall(1)
|
||||
visible_message("<span class='warning'>[src.name] smashes through the wall!</span>")
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
|
||||
@@ -177,7 +177,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
continue
|
||||
|
||||
//Split the line at every "="
|
||||
var/list/List = text2list(line, "=")
|
||||
var/list/List = splittext(line, "=")
|
||||
if(!List.len)
|
||||
continue
|
||||
|
||||
|
||||
@@ -596,7 +596,7 @@ var/list/admin_verbs_hideable = list(
|
||||
//load text from file
|
||||
var/list/Lines = file2list("config/admins.txt")
|
||||
for(var/line in Lines)
|
||||
var/list/splitline = text2list(line, " = ")
|
||||
var/list/splitline = splittext(line, " = ")
|
||||
if(ckey(splitline[1]) == ckey)
|
||||
if(splitline.len >= 2)
|
||||
rank = ckeyEx(splitline[2])
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/datum/admins/proc/create_mob(mob/user)
|
||||
if (!create_mob_html)
|
||||
var/mobjs = null
|
||||
mobjs = list2text(typesof(/mob), ";")
|
||||
mobjs = jointext(typesof(/mob), ";")
|
||||
create_mob_html = file2text('html/create_object.html')
|
||||
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ var/list/create_object_forms = list(
|
||||
/datum/admins/proc/create_object(mob/user)
|
||||
if (!create_object_html)
|
||||
var/objectjs = null
|
||||
objectjs = list2text(typesof(/obj), ";")
|
||||
objectjs = jointext(typesof(/obj), ";")
|
||||
create_object_html = file2text('html/create_object.html')
|
||||
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
|
||||
|
||||
@@ -19,7 +19,7 @@ var/list/create_object_forms = list(
|
||||
var/html_form = create_object_forms[path]
|
||||
|
||||
if (!html_form)
|
||||
var/objectjs = list2text(typesof(path), ";")
|
||||
var/objectjs = jointext(typesof(path), ";")
|
||||
html_form = file2text('html/create_object.html')
|
||||
html_form = replacetext(html_form, "null /* object types */", "\"[objectjs]\"")
|
||||
create_object_forms[path] = html_form
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/datum/admins/proc/create_turf(mob/user)
|
||||
if (!create_turf_html)
|
||||
var/turfjs = null
|
||||
turfjs = list2text(typesof(/turf), ";")
|
||||
turfjs = jointext(typesof(/turf), ";")
|
||||
create_turf_html = file2text('html/create_object.html')
|
||||
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
|
||||
|
||||
|
||||
@@ -169,9 +169,6 @@
|
||||
output += ruler
|
||||
usr << browse(output, "window=show_notes;size=900x500")
|
||||
|
||||
/proc/regex_note_sql_extract(str, exp)
|
||||
return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
|
||||
|
||||
#define NOTESFILE "data/player_notes.sav"
|
||||
//if the AUTOCONVERT_NOTES is turned on, anytime a player connects this will be run to try and add all their notes to the databas
|
||||
/proc/convert_notes_sql(ckey)
|
||||
@@ -184,13 +181,13 @@
|
||||
var/notetext
|
||||
notesfile >> notetext
|
||||
var/server
|
||||
if (config && config.server_name)
|
||||
if(config && config.server_name)
|
||||
server = config.server_name
|
||||
var/regex = "^(\\d{2}-\\w{3}-\\d{4}) \\| (.+) ~(\\w+)$"
|
||||
var/datum/regex/results = regex_note_sql_extract(notetext, regex)
|
||||
var/timestamp = results.str(2)
|
||||
notetext = results.str(3)
|
||||
var/adminckey = results.str(4)
|
||||
var/regex/note = new("^(\\d{2}-\\w{3}-\\d{4}) \\| (.+) ~(\\w+)$", "i")
|
||||
note.Find(notetext)
|
||||
var/timestamp = note.group[2]
|
||||
notetext = note.group[3]
|
||||
var/adminckey = note.group[4]
|
||||
var/DBQuery/query_convert_time = dbcon.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')")
|
||||
if(!query_convert_time.Execute())
|
||||
var/err = query_convert_time.ErrorMsg()
|
||||
@@ -217,4 +214,4 @@ this proc can take several minutes to execute fully if converting and cause DD t
|
||||
world << "Deleting NOTESFILE"
|
||||
fdel(NOTESFILE)
|
||||
world << "Finished mass note conversion, remember to turn off AUTOCONVERT_NOTES"*/
|
||||
#undef NOTESFILE
|
||||
#undef NOTESFILE
|
||||
@@ -175,10 +175,10 @@
|
||||
if (!ban)
|
||||
return null
|
||||
. = params2list(ban)
|
||||
.["keys"] = text2list(.["keys"], ",")
|
||||
.["type"] = text2list(.["type"], ",")
|
||||
.["IP"] = text2list(.["IP"], ",")
|
||||
.["computer_id"] = text2list(.["computer_id"], ",")
|
||||
.["keys"] = splittext(.["keys"], ",")
|
||||
.["type"] = splittext(.["type"], ",")
|
||||
.["IP"] = splittext(.["IP"], ",")
|
||||
.["computer_id"] = splittext(.["computer_id"], ",")
|
||||
|
||||
|
||||
/proc/list2stickyban(var/list/ban)
|
||||
@@ -186,13 +186,13 @@
|
||||
return null
|
||||
. = ban.Copy()
|
||||
if (.["keys"])
|
||||
.["keys"] = list2text(.["keys"], ",")
|
||||
.["keys"] = jointext(.["keys"], ",")
|
||||
if (.["type"])
|
||||
.["type"] = list2text(.["type"], ",")
|
||||
.["type"] = jointext(.["type"], ",")
|
||||
if (.["IP"])
|
||||
.["IP"] = list2text(.["IP"], ",")
|
||||
.["IP"] = jointext(.["IP"], ",")
|
||||
if (.["computer_id"])
|
||||
.["computer_id"] = list2text(.["computer_id"], ",")
|
||||
.["computer_id"] = jointext(.["computer_id"], ",")
|
||||
. = list2params(.)
|
||||
|
||||
|
||||
|
||||
@@ -1882,7 +1882,7 @@
|
||||
alert("Select fewer object types, (max 5)")
|
||||
return
|
||||
|
||||
var/list/offset = text2list(href_list["offset"],",")
|
||||
var/list/offset = splittext(href_list["offset"],",")
|
||||
var/number = Clamp(text2num(href_list["object_count"]), 1, 100)
|
||||
var/X = offset.len > 0 ? text2num(offset[1]) : 0
|
||||
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as", "i")
|
||||
|
||||
//explode the input msg into a list
|
||||
var/list/msglist = text2list(msg, " ")
|
||||
var/list/msglist = splittext(msg, " ")
|
||||
|
||||
//generate keywords lookup
|
||||
var/list/surnames = list()
|
||||
@@ -16,7 +16,7 @@
|
||||
indexing += M.mind.name
|
||||
|
||||
for(var/string in indexing)
|
||||
var/list/L = text2list(string, " ")
|
||||
var/list/L = splittext(string, " ")
|
||||
var/surname_found = 0
|
||||
//surnames
|
||||
for(var/i=L.len, i>=1, i--)
|
||||
|
||||
@@ -688,19 +688,19 @@ var/global/list/g_fancy_list_of_types = null
|
||||
|
||||
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Clients","Joined Clients"))
|
||||
if("Players")
|
||||
usr << list2text(player_list,",")
|
||||
usr << jointext(player_list,",")
|
||||
if("Admins")
|
||||
usr << list2text(admins,",")
|
||||
usr << jointext(admins,",")
|
||||
if("Mobs")
|
||||
usr << list2text(mob_list,",")
|
||||
usr << jointext(mob_list,",")
|
||||
if("Living Mobs")
|
||||
usr << list2text(living_mob_list,",")
|
||||
usr << jointext(living_mob_list,",")
|
||||
if("Dead Mobs")
|
||||
usr << list2text(dead_mob_list,",")
|
||||
usr << jointext(dead_mob_list,",")
|
||||
if("Clients")
|
||||
usr << list2text(clients,",")
|
||||
usr << jointext(clients,",")
|
||||
if("Joined Clients")
|
||||
usr << list2text(joined_player_list,",")
|
||||
usr << jointext(joined_player_list,",")
|
||||
|
||||
/client/proc/cmd_display_del_log()
|
||||
set category = "Debug"
|
||||
|
||||
@@ -8,91 +8,92 @@ What are the archived variables for?
|
||||
once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */
|
||||
|
||||
var/list/meta_gas_info = meta_gas_list() //see ATMOSPHERICS/gas_types.dm
|
||||
var/list/cached_gases_list = null
|
||||
|
||||
/proc/gaslist(gasid)
|
||||
if(!cached_gases_list)
|
||||
cached_gases_list = new /list(meta_gas_info.len)
|
||||
var/list/gaslist_cache = null
|
||||
/proc/gaslist(id)
|
||||
var/list/cached_gas
|
||||
|
||||
if(!cached_gases_list[gasid])
|
||||
if(!meta_gas_info[gasid])
|
||||
CRASH("Error: no such gas type! Type : [gasid]")
|
||||
if(!gaslist_cache)
|
||||
gaslist_cache = new(meta_gas_info.len)
|
||||
|
||||
var/list/new_gas_list = new(3)
|
||||
new_gas_list[MOLES] = 0
|
||||
new_gas_list[ARCHIVE] = 0
|
||||
new_gas_list[GAS_META] = meta_gas_info[gasid]
|
||||
cached_gases_list[gasid] = new_gas_list
|
||||
if(!gaslist_cache[id])
|
||||
if(!meta_gas_info[id])
|
||||
CRASH("Gas [id] does not exist!")
|
||||
cached_gas = new(3)
|
||||
gaslist_cache[id] = cached_gas
|
||||
|
||||
var/list/gas = cached_gases_list[gasid]
|
||||
. = gas.Copy()
|
||||
cached_gas[MOLES] = 0
|
||||
cached_gas[ARCHIVE] = 0
|
||||
cached_gas[GAS_META] = meta_gas_info[id]
|
||||
else
|
||||
cached_gas = gaslist_cache[id]
|
||||
return cached_gas.Copy()
|
||||
|
||||
/datum/gas_mixture
|
||||
var/list/gases
|
||||
var/temperature //in Kelvin
|
||||
var/temperature // degrees Kelvin
|
||||
var/tmp/temperature_archived
|
||||
var/volume
|
||||
var/last_share
|
||||
var/tmp/fuel_burnt
|
||||
|
||||
/datum/gas_mixture/New(Volume = CELL_VOLUME)
|
||||
. = ..()
|
||||
/datum/gas_mixture/New(volume = CELL_VOLUME)
|
||||
..()
|
||||
gases = new
|
||||
temperature = 0
|
||||
temperature_archived = 0
|
||||
volume = Volume
|
||||
src.volume = volume
|
||||
last_share = 0
|
||||
fuel_burnt = 0
|
||||
|
||||
//listmos procs
|
||||
//listmos procs
|
||||
|
||||
//assert_gas(gas_id) - used to guarantee that the gas list for this id exists.
|
||||
//Must be used before adding to a gas. May be used before reading from a gas.
|
||||
//assert_gas(gas_id) - used to guarantee that the gas list for this id exists.
|
||||
//Must be used before adding to a gas. May be used before reading from a gas.
|
||||
/datum/gas_mixture/proc/assert_gas(gas_id)
|
||||
var/cached_gases = gases
|
||||
if(cached_gases[gas_id])
|
||||
return
|
||||
cached_gases[gas_id] = gaslist(gas_id) //see ATMOSPHERICS/gas_types.dm
|
||||
|
||||
//assert_gases(args) - shorthand for calling assert_gas() once for each gas type.
|
||||
//assert_gases(args) - shorthand for calling assert_gas() once for each gas type.
|
||||
/datum/gas_mixture/proc/assert_gases()
|
||||
for(var/id in args)
|
||||
assert_gas(id)
|
||||
|
||||
//add_gas(gas_id) - similar to assert_gas(), but does not check for an existing
|
||||
//gas list for this id.
|
||||
//Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas().
|
||||
//add_gas(gas_id) - similar to assert_gas(), but does not check for an existing
|
||||
//gas list for this id. This can clobber existing gases.
|
||||
//Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas().
|
||||
/datum/gas_mixture/proc/add_gas(gas_id)
|
||||
gases[gas_id] = gaslist(gas_id)
|
||||
|
||||
//add_gases(args) - shorthand for calling add_gas() once for each gas_type.
|
||||
//add_gases(args) - shorthand for calling add_gas() once for each gas_type.
|
||||
/datum/gas_mixture/proc/add_gases()
|
||||
for(var/id in args)
|
||||
add_gas(id)
|
||||
|
||||
//garbage_collect() - removes any gas list which is empty.
|
||||
//Must be used after subtracting from a gas. Must be used after assert_gas()
|
||||
//if assert_gas() was called only to read from the gas.
|
||||
//By removing empty gases, processing speed is increased.
|
||||
//garbage_collect() - removes any gas list which is empty.
|
||||
//Must be used after subtracting from a gas. Must be used after assert_gas()
|
||||
//if assert_gas() was called only to read from the gas.
|
||||
//By removing empty gases, processing speed is increased.
|
||||
/datum/gas_mixture/proc/garbage_collect()
|
||||
var/list/cached_gases = gases
|
||||
for(var/id in cached_gases)
|
||||
var/gas = cached_gases[id]
|
||||
if(QUANTIZE(gas[MOLES]) <= 0 && QUANTIZE(gas[ARCHIVE]) <= 0)
|
||||
if(cached_gases[id][MOLES] <= 0 && cached_gases[id][ARCHIVE] <= 0)
|
||||
cached_gases -= id
|
||||
|
||||
//PV=nRT - related procedures
|
||||
//PV = nRT
|
||||
/datum/gas_mixture/proc/heat_capacity()
|
||||
var/list/cached_gases = gases
|
||||
. = 0
|
||||
for(var/id in cached_gases)
|
||||
. += cached_gases[id][MOLES]*cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
|
||||
. += cached_gases[id][MOLES] * cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
|
||||
|
||||
/datum/gas_mixture/proc/heat_capacity_archived()
|
||||
var/list/cached_gases = gases
|
||||
. = 0
|
||||
for(var/id in cached_gases)
|
||||
. += cached_gases[id][ARCHIVE]*cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
|
||||
. += cached_gases[id][ARCHIVE] * cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
|
||||
|
||||
/datum/gas_mixture/proc/total_moles()
|
||||
var/list/cached_gases = gases
|
||||
@@ -101,40 +102,38 @@ var/list/cached_gases_list = null
|
||||
. += cached_gases[id][MOLES]
|
||||
|
||||
/datum/gas_mixture/proc/return_pressure()
|
||||
if(volume>0)
|
||||
return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume
|
||||
if(volume > 0) // to prevent division by zero
|
||||
return total_moles() * R_IDEAL_GAS_EQUATION * temperature / volume
|
||||
return 0
|
||||
|
||||
/datum/gas_mixture/proc/return_temperature()
|
||||
return temperature
|
||||
|
||||
|
||||
/datum/gas_mixture/proc/return_volume()
|
||||
return max(0, volume)
|
||||
|
||||
|
||||
/datum/gas_mixture/proc/thermal_energy()
|
||||
return temperature*heat_capacity()
|
||||
|
||||
return temperature * heat_capacity()
|
||||
|
||||
//Procedures used for very specific events
|
||||
|
||||
|
||||
/datum/gas_mixture/proc/react(atom/dump_location)
|
||||
var/list/procgases = gases //this speeds things up because >byond
|
||||
var/list/cached_gases = gases //this speeds things up because >byond
|
||||
var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network)
|
||||
|
||||
if(temperature < TCMB)
|
||||
temperature = TCMB
|
||||
if(procgases["agent_b"] && temperature > 900 && procgases["plasma"] && procgases["co2"])
|
||||
if(procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY)
|
||||
var/reaction_rate = min(procgases["co2"][MOLES]*0.75, procgases["plasma"][MOLES]*0.25, procgases["agent_b"][MOLES]*0.05)
|
||||
|
||||
procgases["co2"][MOLES] -= reaction_rate
|
||||
if(cached_gases["agent_b"] && temperature > 900 && cached_gases["plasma"] && cached_gases["co2"])
|
||||
if(cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && cached_gases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY)
|
||||
var/reaction_rate = min(cached_gases["co2"][MOLES]*0.75, cached_gases["plasma"][MOLES]*0.25, cached_gases["agent_b"][MOLES]*0.05)
|
||||
|
||||
cached_gases["co2"][MOLES] -= reaction_rate
|
||||
|
||||
assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing
|
||||
procgases["o2"][MOLES] += reaction_rate
|
||||
cached_gases["o2"][MOLES] += reaction_rate
|
||||
|
||||
procgases["agent_b"][MOLES] -= reaction_rate*0.05
|
||||
cached_gases["agent_b"][MOLES] -= reaction_rate*0.05
|
||||
|
||||
temperature -= (reaction_rate*20000)/heat_capacity()
|
||||
|
||||
@@ -143,26 +142,26 @@ var/list/cached_gases_list = null
|
||||
reacting = 1
|
||||
/*
|
||||
if(thermal_energy() > (PLASMA_BINDING_ENERGY*10))
|
||||
if(procgases["plasma"] && procgases["co2"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (procgases["plasma"][MOLES]+procgases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high.
|
||||
//world << "pre [temperature, [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]]
|
||||
if(cached_gases["plasma"] && cached_gases["co2"] && cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && cached_gases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (cached_gases["plasma"][MOLES]+cached_gases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high.
|
||||
//world << "pre [temperature, [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]
|
||||
var/old_heat_capacity = heat_capacity()
|
||||
var/carbon_efficency = min(procgases["plasma"][MOLES]/procgases["co2"][MOLES],MAX_CARBON_EFFICENCY)
|
||||
var/carbon_efficency = min(cached_gases["plasma"][MOLES]/cached_gases["co2"][MOLES],MAX_CARBON_EFFICENCY)
|
||||
var/reaction_energy = thermal_energy()
|
||||
var/moles_impurities = total_moles()-(procgases["plasma"][MOLES]+procgases["co2"][MOLES])
|
||||
var/moles_impurities = total_moles()-(cached_gases["plasma"][MOLES]+cached_gases["co2"][MOLES])
|
||||
|
||||
var/plasma_fused = (PLASMA_FUSED_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY)
|
||||
var/carbon_catalyzed = (CARBON_CATALYST_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY)
|
||||
var/oxygen_added = carbon_catalyzed
|
||||
var/nitrogen_added = (plasma_fused-oxygen_added)-(thermal_energy()/PLASMA_BINDING_ENERGY)
|
||||
|
||||
reaction_energy = max(reaction_energy+((carbon_efficency*procgases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0)
|
||||
reaction_energy = max(reaction_energy+((carbon_efficency*cached_gases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0)
|
||||
|
||||
assert_gases("o2", "n2")
|
||||
|
||||
procgases["plasma"][MOLES] -= plasma_fused
|
||||
procgases["co2"][MOLES] -= carbon_catalyzed
|
||||
procgases["o2"][MOLES] += oxygen_added
|
||||
procgases["n2"][MOLES] += nitrogen_added
|
||||
cached_gases["plasma"][MOLES] -= plasma_fused
|
||||
cached_gases["co2"][MOLES] -= carbon_catalyzed
|
||||
cached_gases["o2"][MOLES] += oxygen_added
|
||||
cached_gases["n2"][MOLES] += nitrogen_added
|
||||
|
||||
garbage_collect()
|
||||
|
||||
@@ -172,45 +171,46 @@ var/list/cached_gases_list = null
|
||||
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
temperature = max(((temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB)
|
||||
//Prevents whatever mechanism is causing it to hit negative temperatures.
|
||||
//world << "post [temperature], [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]]
|
||||
//world << "post [temperature], [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]
|
||||
*/
|
||||
fuel_burnt = 0
|
||||
if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
|
||||
//world << "pre [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]"
|
||||
//world << "pre [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]"
|
||||
if(fire())
|
||||
reacting = 1
|
||||
//world << "post [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]"
|
||||
//world << "post [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]"
|
||||
|
||||
return reacting
|
||||
|
||||
/datum/gas_mixture/proc/fire()
|
||||
var/energy_released = 0
|
||||
var/old_heat_capacity = heat_capacity()
|
||||
var/list/procgases = gases //this speeds things up because accessing datum vars is slow
|
||||
var/list/cached_gases = gases //this speeds things up because accessing datum vars is slow
|
||||
|
||||
if(procgases["v_fuel"] && procgases["v_fuel"][MOLES]) //General volatile gas burn
|
||||
//General volatile gas burn
|
||||
if(cached_gases["v_fuel"] && cached_gases["v_fuel"][MOLES])
|
||||
var/burned_fuel
|
||||
|
||||
if(!procgases["o2"])
|
||||
if(!cached_gases["o2"])
|
||||
burned_fuel = 0
|
||||
else if(procgases["o2"][MOLES] < procgases["v_fuel"][MOLES])
|
||||
burned_fuel = procgases["o2"][MOLES]
|
||||
procgases["v_fuel"][MOLES] -= burned_fuel
|
||||
procgases["o2"][MOLES] = 0
|
||||
else if(cached_gases["o2"][MOLES] < cached_gases["v_fuel"][MOLES])
|
||||
burned_fuel = cached_gases["o2"][MOLES]
|
||||
cached_gases["v_fuel"][MOLES] -= burned_fuel
|
||||
cached_gases["o2"][MOLES] = 0
|
||||
else
|
||||
burned_fuel = procgases["v_fuel"][MOLES]
|
||||
procgases["o2"][MOLES] -= procgases["v_fuel"][MOLES]
|
||||
burned_fuel = cached_gases["v_fuel"][MOLES]
|
||||
cached_gases["o2"][MOLES] -= cached_gases["v_fuel"][MOLES]
|
||||
|
||||
if(burned_fuel)
|
||||
energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel
|
||||
|
||||
assert_gas("co2")
|
||||
procgases["co2"][MOLES] += burned_fuel
|
||||
cached_gases["co2"][MOLES] += burned_fuel
|
||||
|
||||
fuel_burnt += burned_fuel
|
||||
|
||||
//Handle plasma burning
|
||||
if(procgases["plasma"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY)
|
||||
if(cached_gases["plasma"] && cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY)
|
||||
var/plasma_burn_rate = 0
|
||||
var/oxygen_burn_rate = 0
|
||||
//more plasma released at higher temperatures
|
||||
@@ -221,16 +221,16 @@ var/list/cached_gases_list = null
|
||||
temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE)
|
||||
if(temperature_scale > 0)
|
||||
assert_gas("o2")
|
||||
assert_gas("co2")
|
||||
oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale
|
||||
if(procgases["o2"][MOLES] > procgases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN)
|
||||
plasma_burn_rate = (procgases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA
|
||||
if(cached_gases["o2"][MOLES] > cached_gases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN)
|
||||
plasma_burn_rate = (cached_gases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA
|
||||
else
|
||||
plasma_burn_rate = (temperature_scale*(procgases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA
|
||||
plasma_burn_rate = (temperature_scale*(cached_gases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA
|
||||
if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY)
|
||||
procgases["plasma"][MOLES] -= plasma_burn_rate
|
||||
procgases["o2"][MOLES] -= plasma_burn_rate*oxygen_burn_rate
|
||||
procgases["co2"][MOLES] += plasma_burn_rate
|
||||
assert_gas("co2")
|
||||
cached_gases["plasma"][MOLES] = QUANTIZE(cached_gases["plasma"][MOLES] - plasma_burn_rate)
|
||||
cached_gases["o2"][MOLES] = QUANTIZE(cached_gases["o2"][MOLES] - (plasma_burn_rate * oxygen_burn_rate))
|
||||
cached_gases["co2"][MOLES] += plasma_burn_rate
|
||||
|
||||
energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate)
|
||||
|
||||
@@ -260,12 +260,20 @@ var/list/cached_gases_list = null
|
||||
//Proportionally removes amount of gas from the gas_mixture
|
||||
//Returns: gas_mixture with the gases removed
|
||||
|
||||
/datum/gas_mixture/proc/copy()
|
||||
//Creates new, identical gas mixture
|
||||
//Returns: duplicate gas mixture
|
||||
|
||||
/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample)
|
||||
//Copies variables from sample
|
||||
|
||||
/datum/gas_mixture/proc/copy_from_turf(turf/model)
|
||||
//Copies all gas info from the turf into the gas list along with temperature
|
||||
|
||||
/datum/gas_mixture/proc/share(datum/gas_mixture/sharer)
|
||||
//Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length
|
||||
//Return: amount of gas exchanged (+ if sharer received)
|
||||
|
||||
/datum/gas_mixture/proc/mimic(turf/model)
|
||||
//Similar to share(...), except the model is not modified
|
||||
//Return: amount of gas exchanged
|
||||
@@ -283,138 +291,148 @@ var/list/cached_gases_list = null
|
||||
//Compares sample to self to see if within acceptable ranges that group processing may be enabled
|
||||
//returns: a string indicating what check failed, or "" if check passes
|
||||
|
||||
/datum/gas_mixture/proc/copy_from_turf(turf/model)
|
||||
//Copies all gas info from the turf into the gas list along with copying temperature, then archives
|
||||
|
||||
/datum/gas_mixture/archive()
|
||||
var/list/cached_gases = gases
|
||||
|
||||
temperature_archived = temperature
|
||||
for(var/id in cached_gases)
|
||||
cached_gases[id][ARCHIVE] = cached_gases[id][MOLES]
|
||||
temperature_archived = temperature
|
||||
. = 1
|
||||
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/merge(datum/gas_mixture/giver)
|
||||
if(!giver)
|
||||
return 0
|
||||
|
||||
if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
if(abs(temperature - giver.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity()
|
||||
var/giver_heat_capacity = giver.heat_capacity()
|
||||
var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
|
||||
if(combined_heat_capacity)
|
||||
temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity
|
||||
temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
|
||||
|
||||
var/list/cached_gases = gases //accessing datum vars is slower than proc vars
|
||||
var/list/giver_gases = giver.gases
|
||||
for(var/giver_id in giver_gases)
|
||||
assert_gas(giver_id)
|
||||
cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES]
|
||||
|
||||
. = 1
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/remove(amount)
|
||||
|
||||
var/sum = total_moles()
|
||||
amount = min(amount,sum) //Can not take more air than tile has!
|
||||
|
||||
amount = min(amount, sum) //Can not take more air than tile has!
|
||||
if(amount <= 0)
|
||||
return null
|
||||
|
||||
var/list/cached_gases = gases
|
||||
var/datum/gas_mixture/removed = new
|
||||
var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
|
||||
var/list/cached_gases = gases
|
||||
|
||||
for(var/id in cached_gases)
|
||||
removed.assert_gas(id)
|
||||
removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES]/sum)*amount)
|
||||
cached_gases[id][MOLES] -= removed_gases[id][MOLES]
|
||||
|
||||
removed.temperature = temperature
|
||||
|
||||
for(var/id in cached_gases)
|
||||
removed.add_gas(id)
|
||||
removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES] / sum) * amount)
|
||||
cached_gases[id][MOLES] -= removed_gases[id][MOLES]
|
||||
garbage_collect()
|
||||
|
||||
. = removed
|
||||
return removed
|
||||
|
||||
/datum/gas_mixture/remove_ratio(ratio)
|
||||
if(ratio <= 0)
|
||||
return null
|
||||
|
||||
ratio = min(ratio, 1)
|
||||
|
||||
var/list/cached_gases = gases
|
||||
var/datum/gas_mixture/removed = new
|
||||
var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
|
||||
var/list/cached_gases = gases
|
||||
|
||||
for(var/id in cached_gases)
|
||||
removed.assert_gas(id)
|
||||
removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES]*ratio)
|
||||
cached_gases[id][MOLES] -= removed_gases[id][MOLES]
|
||||
|
||||
removed.temperature = temperature
|
||||
|
||||
for(var/id in cached_gases)
|
||||
removed.add_gas(id)
|
||||
removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES] * ratio)
|
||||
cached_gases[id][MOLES] -= removed_gases[id][MOLES]
|
||||
garbage_collect()
|
||||
|
||||
. = removed
|
||||
return removed
|
||||
|
||||
/datum/gas_mixture/copy()
|
||||
var/list/cached_gases = gases
|
||||
var/datum/gas_mixture/copy = new
|
||||
var/list/copy_gases = copy.gases
|
||||
|
||||
copy.temperature = temperature
|
||||
for(var/id in cached_gases)
|
||||
add_gas(id)
|
||||
copy_gases[id][MOLES] = cached_gases[id][MOLES]
|
||||
|
||||
return copy
|
||||
|
||||
/datum/gas_mixture/copy_from(datum/gas_mixture/sample)
|
||||
var/list/cached_gases = gases //accessing datum vars is slower than proc vars
|
||||
var/list/sample_gases = sample.gases
|
||||
var/list/copied_gases = list()
|
||||
for(var/sample_id in sample_gases)
|
||||
assert_gas(sample_id)
|
||||
cached_gases[sample_id][MOLES] = sample_gases[sample_id][MOLES]
|
||||
copied_gases += sample_id
|
||||
for(var/id in cached_gases-copied_gases)
|
||||
assert_gas(id)
|
||||
cached_gases[id][MOLES] = 0
|
||||
|
||||
garbage_collect()
|
||||
|
||||
temperature = sample.temperature
|
||||
for(var/id in sample_gases)
|
||||
assert_gas(id)
|
||||
cached_gases[id][MOLES] = sample_gases[id][MOLES]
|
||||
cached_gases &= sample_gases
|
||||
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/copy_from_turf(turf/model)
|
||||
var/list/cached_gases = gases
|
||||
|
||||
temperature = model.temperature
|
||||
assert_gases(arglist(hardcoded_gases))
|
||||
cached_gases["o2"][MOLES] = model.oxygen
|
||||
cached_gases["n2"][MOLES] = model.nitrogen
|
||||
cached_gases["plasma"][MOLES] = model.toxins
|
||||
cached_gases["co2"][MOLES] = model.carbon_dioxide
|
||||
cached_gases &= hardcoded_gases
|
||||
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/check_turf(turf/model, atmos_adjacent_turfs = 4)
|
||||
var/datum/gas_mixture/copied = new
|
||||
copied.copy_from_turf(model)
|
||||
. = compare(copied, datatype = ARCHIVE, adjacents = atmos_adjacent_turfs)
|
||||
return compare(copied, datatype = ARCHIVE, adjacents = atmos_adjacent_turfs)
|
||||
|
||||
/datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
|
||||
. = 0
|
||||
if(!sharer)
|
||||
return
|
||||
return 0
|
||||
|
||||
var/moved_moles = 0
|
||||
var/abs_moved_moles = 0
|
||||
//make this local to the proc for sanic speed
|
||||
var/list/sharercache = sharer.gases
|
||||
var/list/selfcache = gases
|
||||
var/list/cached_gases = gases
|
||||
var/list/sharer_gases = sharer.gases
|
||||
|
||||
var/delta_temperature = (temperature_archived - sharer.temperature_archived)
|
||||
var/temperature_delta = temperature_archived - sharer.temperature_archived
|
||||
var/abs_temperature_delta = abs(temperature_delta)
|
||||
|
||||
var/old_self_heat_capacity = 0
|
||||
var/old_sharer_heat_capacity = 0
|
||||
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
if(abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
old_self_heat_capacity = heat_capacity()
|
||||
old_sharer_heat_capacity = sharer.heat_capacity()
|
||||
|
||||
var/heat_capacity_self_to_sharer = 0 //heat capacity of the moles transferred from us to the sharer
|
||||
var/heat_capacity_sharer_to_self = 0 //heat capacity of the moles transferred from the sharer to us
|
||||
|
||||
for(var/sharer_id in sharercache-selfcache)
|
||||
add_gas(sharer_id) //we can use add_gas() because we're looping only through the IDs not in our cache
|
||||
var/moved_moles = 0
|
||||
var/abs_moved_moles = 0
|
||||
|
||||
//GAS TRANSFER
|
||||
for(var/id in selfcache)
|
||||
if(!sharercache[id]) //checking here prevents an uneeded proc call if the check fails.
|
||||
for(var/id in sharer_gases - cached_gases) // create gases not in our cache
|
||||
add_gas(id)
|
||||
for(var/id in cached_gases) // transfer gases
|
||||
if(!sharer_gases[id]) //checking here prevents an uneeded proc call if the check fails.
|
||||
sharer.add_gas(id)
|
||||
|
||||
var/gas = selfcache[id]
|
||||
var/sharergas = sharercache[id]
|
||||
var/gas = cached_gases[id]
|
||||
var/sharergas = sharer_gases[id]
|
||||
|
||||
var/delta = QUANTIZE(gas[ARCHIVE] - sharergas[ARCHIVE])/(atmos_adjacent_turfs+1) //the amount of gas that gets moved between the mixtures
|
||||
|
||||
if(delta && abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
if(delta && abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/gas_heat_capacity = delta * gas[GAS_META][META_GAS_SPECIFIC_HEAT]
|
||||
if(delta > 0)
|
||||
heat_capacity_self_to_sharer += gas_heat_capacity
|
||||
@@ -429,7 +447,7 @@ var/list/cached_gases_list = null
|
||||
last_share = abs_moved_moles
|
||||
|
||||
//THERMAL ENERGY TRANSFER
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
if(abs_temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer
|
||||
var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self
|
||||
|
||||
@@ -445,9 +463,9 @@ var/list/cached_gases_list = null
|
||||
if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity
|
||||
temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT)
|
||||
|
||||
if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
|
||||
if(temperature_delta > MINIMUM_TEMPERATURE_TO_MOVE || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
|
||||
var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles)
|
||||
. = delta_pressure*R_IDEAL_GAS_EQUATION/volume
|
||||
. = delta_pressure * R_IDEAL_GAS_EQUATION / volume
|
||||
|
||||
garbage_collect()
|
||||
sharer.garbage_collect()
|
||||
@@ -455,17 +473,17 @@ var/list/cached_gases_list = null
|
||||
/datum/gas_mixture/mimic(turf/model, atmos_adjacent_turfs = 4)
|
||||
var/datum/gas_mixture/copied = new
|
||||
copied.copy_from_turf(model)
|
||||
. = share(copied, atmos_adjacent_turfs)
|
||||
return share(copied, atmos_adjacent_turfs)
|
||||
|
||||
/datum/gas_mixture/temperature_share(datum/gas_mixture/sharer, conduction_coefficient)
|
||||
//transfer of thermal energy (via conduction) between self and sharer
|
||||
var/delta_temperature = (temperature_archived - sharer.temperature_archived)
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/temperature_delta = temperature_archived - sharer.temperature_archived
|
||||
if(abs(temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity_archived()
|
||||
var/sharer_heat_capacity = sharer.heat_capacity_archived()
|
||||
|
||||
if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
var/heat = conduction_coefficient*temperature_delta* \
|
||||
(self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity))
|
||||
|
||||
temperature = max(temperature - heat/self_heat_capacity, TCMB)
|
||||
@@ -473,39 +491,38 @@ var/list/cached_gases_list = null
|
||||
//thermal energy of the system (self and sharer) is unchanged
|
||||
|
||||
/datum/gas_mixture/temperature_mimic(turf/model, conduction_coefficient)
|
||||
var/delta_temperature = (temperature - model.temperature)
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/temperature_delta = temperature - model.temperature
|
||||
if(abs(temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity()
|
||||
|
||||
if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
var/heat = conduction_coefficient*temperature_delta* \
|
||||
(self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity))
|
||||
|
||||
temperature = max(temperature - heat/self_heat_capacity, TCMB)
|
||||
|
||||
/datum/gas_mixture/temperature_turf_share(turf/simulated/sharer, conduction_coefficient)
|
||||
var/delta_temperature = (temperature_archived - sharer.temperature)
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/temperature_delta = temperature_archived - sharer.temperature
|
||||
if(abs(temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity()
|
||||
|
||||
if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
var/heat = conduction_coefficient*temperature_delta* \
|
||||
(self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity))
|
||||
|
||||
temperature = max(temperature - heat/self_heat_capacity, TCMB)
|
||||
sharer.temperature = max(sharer.temperature + heat/sharer.heat_capacity, TCMB)
|
||||
|
||||
/datum/gas_mixture/compare(datum/gas_mixture/sample, datatype = MOLES, adjacents = 0)
|
||||
. = ""
|
||||
var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars
|
||||
var/list/cached_gases = gases
|
||||
|
||||
for(var/id in cached_gases|sample_gases)
|
||||
for(var/id in cached_gases | sample_gases) // compare gases from either mixture
|
||||
var/gas_moles = cached_gases[id] ? cached_gases[id][datatype] : 0
|
||||
var/sample_moles = sample_gases[id] ? sample_gases[id][datatype] : 0
|
||||
var/delta = abs(gas_moles - sample_moles)/(adjacents+1)
|
||||
if(delta > MINIMUM_AIR_TO_SUSPEND && \
|
||||
delta > gas_moles*MINIMUM_AIR_RATIO_TO_SUSPEND)
|
||||
delta > gas_moles * MINIMUM_AIR_RATIO_TO_SUSPEND)
|
||||
return id
|
||||
|
||||
if(total_moles() > MINIMUM_AIR_TO_SUSPEND)
|
||||
@@ -520,50 +537,30 @@ var/list/cached_gases_list = null
|
||||
temp = temperature_archived
|
||||
sample_temp = sample.temperature_archived
|
||||
|
||||
var/delta_temperature = abs(temp-sample_temp)
|
||||
if((delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
|
||||
delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND*temp)
|
||||
var/temperature_delta = abs(temp - sample_temp)
|
||||
if((temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
|
||||
temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND * temp)
|
||||
return "temp"
|
||||
|
||||
/datum/gas_mixture/copy_from_turf(turf/model)
|
||||
assert_gases(arglist(hardcoded_gases))
|
||||
var/list/cached_gases = gases
|
||||
return ""
|
||||
|
||||
cached_gases["o2"][MOLES] = model.oxygen
|
||||
cached_gases["n2"][MOLES] = model.nitrogen
|
||||
cached_gases["plasma"][MOLES] = model.toxins
|
||||
cached_gases["co2"][MOLES] = model.carbon_dioxide
|
||||
|
||||
for(var/id in cached_gases-hardcoded_gases)
|
||||
cached_gases[id][MOLES] = 0 //turfs don't account for anything other than the four old hardcoded gases
|
||||
|
||||
temperature = model.temperature
|
||||
|
||||
garbage_collect()
|
||||
//Takes the amount of the gas you want to PP as an argument
|
||||
//So I don't have to do some hacky switches/defines/magic strings
|
||||
|
||||
//eg:
|
||||
//Tox_PP = get_partial_pressure(gas_mixture.toxins)
|
||||
//O2_PP = get_partial_pressure(gas_mixture.oxygen)
|
||||
|
||||
//Does handle trace gases!
|
||||
|
||||
/datum/gas_mixture/proc/get_breath_partial_pressure(gas_pressure)
|
||||
return (gas_pressure*R_IDEAL_GAS_EQUATION*temperature)/BREATH_VOLUME
|
||||
|
||||
|
||||
//Reverse of the above
|
||||
/datum/gas_mixture/proc/get_true_breath_pressure(breath_pp)
|
||||
return (breath_pp*BREATH_VOLUME)/(R_IDEAL_GAS_EQUATION*temperature)
|
||||
return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME
|
||||
//inverse
|
||||
/datum/gas_mixture/proc/get_true_breath_pressure(partial_pressure)
|
||||
return (partial_pressure * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * temperature)
|
||||
|
||||
//Mathematical proofs:
|
||||
/*
|
||||
|
||||
get_breath_partial_pressure(gas_pp) --> gas_pp/total_moles()*breath_pp = pp
|
||||
get_true_breath_pressure(pp) --> gas_pp = pp/breath_pp*total_moles()
|
||||
|
||||
10/20*5 = 2.5
|
||||
10 = 2.5/5*20
|
||||
|
||||
*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user