diff --git a/README.md b/README.md
index dfbbcebd098..8c2c30c5703 100644
--- a/README.md
+++ b/README.md
@@ -91,16 +91,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
diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
index 847208e2ccf..635debf3985 100644
--- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm
+++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
@@ -240,12 +240,12 @@
"aeF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"aeG" = (/obj/structure/lattice,/turf/space,/area/space/nearstation)
"aeH" = (/turf/space,/area/space/nearstation)
-"aeI" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aeI" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aeJ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aeK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aeL" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aeM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"aeN" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aeN" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aeO" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aeP" = (/obj/machinery/airalarm{dir = 4; pixel_x = -22},/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint)
"aeQ" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint)
@@ -596,11 +596,11 @@
"alx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"aly" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plasteel{icon_state = "dark"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server)
"alz" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
-"alA" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"alA" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/machinery/porta_turret/ai,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"alB" = (/obj/machinery/flasher{id = "AI"; pixel_x = 6; pixel_y = 32},/obj/machinery/computer/upload/ai,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"alC" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"alD" = (/obj/machinery/airalarm{pixel_y = 23},/obj/machinery/computer/upload/borg,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"alE" = (/obj/structure/sign/kiddieplaque{pixel_x = 32},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"alE" = (/obj/structure/sign/kiddieplaque{pixel_x = 32},/obj/machinery/porta_turret/ai,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"alF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"alG" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"alH" = (/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
@@ -846,9 +846,9 @@
"aqn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 1},/area/tcommsat/computer)
"aqo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating{icon_state = "warnplate"},/area/tcommsat/computer)
"aqp" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer)
-"aqq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/porta_turret{ai = 1; dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"aqq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/porta_turret/ai{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"aqr" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aqs" = (/obj/machinery/porta_turret{ai = 1; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"aqs" = (/obj/machinery/porta_turret/ai{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"aqt" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
"aqu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
"aqv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock)
diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm
index ae79c39b250..05482243770 100644
--- a/_maps/map_files/BirdStation/BirdStation.dmm
+++ b/_maps/map_files/BirdStation/BirdStation.dmm
@@ -207,12 +207,12 @@
"adY" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel,/area/engine/engineering)
"adZ" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 9},/obj/structure/lattice/catwalk,/turf/space,/area/space)
"aea" = (/obj/machinery/atmospherics/pipe/heat_exchanging/simple{dir = 9},/obj/structure/lattice,/turf/space,/area/space)
-"aeb" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai{name = "\improper AI Core"})
+"aeb" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai{name = "\improper AI Core"})
"aec" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai{name = "\improper AI Core"})
"aed" = (/obj/machinery/camera/autoname,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai{name = "\improper AI Core"})
"aee" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/cyan/visible{icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
"aef" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/autoname{icon_state = "camera"; dir = 6},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai{name = "\improper AI Core"})
-"aeg" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai{name = "\improper AI Core"})
+"aeg" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai{name = "\improper AI Core"})
"aeh" = (/turf/simulated/floor/engine{name = "high pressure o2 floor"; nitrogen = 0; oxygen = 500000},/area/engine/engineering)
"aei" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{name = "high pressure o2 floor"; nitrogen = 0; oxygen = 500000},/area/engine/engineering)
"aej" = (/obj/machinery/atmospherics/components/binary/pump/on{icon_state = "pump_map"; dir = 1},/turf/simulated/floor/plasteel,/area/engine/engineering)
@@ -334,10 +334,10 @@
"agv" = (/obj/machinery/telecomms/processor/preset_one/birdstation,/turf/simulated/floor/bluegrid,/area/turret_protected/tcomeast{name = "\improper Telecommunications Chamber"})
"agw" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/turret_protected/tcomeast{name = "\improper Telecommunications Chamber"})
"agx" = (/obj/machinery/telecomms/receiver/preset_left/birdstation,/turf/simulated/floor/bluegrid,/area/turret_protected/tcomeast{name = "\improper Telecommunications Chamber"})
-"agy" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel/black,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
+"agy" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel/black,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
"agz" = (/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel/black,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
"agA" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plasteel/black,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
-"agB" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/plasteel/black,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
+"agB" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/plasteel/black,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
"agC" = (/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior{name = "\improper AI Core Lobby"})
"agD" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "high pressure plasma floor"; nitrogen = 0; oxygen = 0; toxins = 240000},/area/engine/engineering)
"agE" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "high pressure plasma floor"; nitrogen = 0; oxygen = 0; toxins = 240000},/area/engine/engineering)
@@ -544,7 +544,7 @@
"akx" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/cable/cyan{icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore{name = "\improper Command Hallway"})
"aky" = (/obj/machinery/camera/autoname{icon_state = "camera"; dir = 9},/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/fore{name = "\improper Command Hallway"})
"akz" = (/obj/machinery/turretid{control_area = "AI Upload Chamber"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
-"akA" = (/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
+"akA" = (/obj/machinery/porta_turret/ai,/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"akB" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"akC" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/full/asimovpp,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/item/weapon/aiModule/core/full/robocop,/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"akD" = (/obj/structure/flora/kirbyplants{icon_state = "plant-02"; layer = 4.1},/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 4},/area/gateway)
@@ -609,7 +609,7 @@
"alK" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/door/airlock/glass_engineering{name = "engineering door"; req_access_txt = "10"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"alL" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/simulated/floor/plating,/area/hallway/primary/fore{name = "\improper Command Hallway"})
"alM" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/power/apc{dir = 8; name = "AI Upload APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable/cyan{icon_state = "0-2"},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
-"alN" = (/obj/machinery/porta_turret{ai = 1; dir = 1},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
+"alN" = (/obj/machinery/porta_turret/ai{dir = 1},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"alO" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/freeform,/obj/machinery/light/small,/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"alP" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/tyrant,/obj/item/weapon/aiModule/core/full/antimov,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/supplied/quarantine,/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/supplied/protectStation,/obj/item/weapon/aiModule/supplied/safeguard,/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"alQ" = (/obj/structure/cable/cyan{icon_state = "4-8"},/obj/machinery/camera/autoname{dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel,/area/hallway/primary/fore{name = "\improper Command Hallway"})
diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm
index 737327d1b0c..a33b2f874a4 100644
--- a/_maps/map_files/DreamStation/dreamstation04.dmm
+++ b/_maps/map_files/DreamStation/dreamstation04.dmm
@@ -56,10 +56,10 @@
"abd" = (/obj/machinery/airalarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abe" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abf" = (/obj/structure/cable/white{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai)
-"abg" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/turret_protected/ai)
+"abg" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/turret_protected/ai)
"abh" = (/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abi" = (/obj/structure/cable/white{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window{name = "AI Core Door"; req_access_txt = "16"},/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"abj" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/ai)
+"abj" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/ai)
"abk" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abl" = (/turf/simulated/wall/r_wall,/area/aisat)
"abm" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
@@ -82,11 +82,11 @@
"abD" = (/obj/structure/cable/blue{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/airalarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/cable/blue{tag = "icon-2-8"; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "AI Satellite East 1"; dir = 4; network = list("Sat"); start_active = 1},/turf/simulated/floor/plating,/area/aisat)
"abE" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable/white{tag = "icon-0-10"; icon_state = "0-10"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abF" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_n"; name = "north of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space)
-"abG" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/ai)
+"abG" = (/obj/machinery/porta_turret/ai{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/ai)
"abH" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/newscaster/security_unit{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/white{tag = "icon-2-5"; icon_state = "2-5"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abI" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/door/window{dir = 1; name = "AI SMES Door"; req_access_txt = "16"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/white{d2 = 2; icon_state = "0-2"; tag = "icon-0-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abJ" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/requests_console{department = "AI"; departmentType = 5; name = "AI RC"; pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"abK" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/turret_protected/ai)
+"abK" = (/obj/machinery/porta_turret/ai{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/turret_protected/ai)
"abL" = (/obj/structure/cable/white{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai)
"abM" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"abN" = (/obj/machinery/airalarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
@@ -119,7 +119,7 @@
"aco" = (/turf/simulated/wall,/area/turret_protected/aisat_interior)
"acp" = (/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
"acq" = (/obj/structure/table,/obj/item/weapon/secbot_assembly,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
-"acr" = (/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
+"acr" = (/obj/machinery/porta_turret/ai,/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
"acs" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/turret_protected/aisat_interior)
"act" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/white,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/turret_protected/aisat_interior)
"acu" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/machinery/camera/motion{c_tag = "AI Antechamber Motion Sensor"; desc = "It watches you carefully."; name = "motion-sensitive security camera"; network = list("Sat")},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/turret_protected/aisat_interior)
@@ -173,9 +173,9 @@
"adq" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"adr" = (/obj/structure/table,/obj/item/weapon/storage/box/zipties{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"ads" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
-"adt" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
+"adt" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
"adu" = (/obj/structure/cable/blue{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
-"adv" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
+"adv" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/aisat_interior)
"adw" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior)
"adx" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"ady" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
@@ -4014,11 +4014,11 @@
"bzj" = (/turf/simulated/floor/plasteel/black,/area/engine/gravity_generator)
"bzk" = (/turf/simulated/floor/plasteel{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/engine/gravity_generator)
"bzl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera{c_tag = "Engineering Gravity Generator Room"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (WEST)"; icon_state = "warndark"; dir = 8},/area/engine/gravity_generator)
-"bzm" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
+"bzm" = (/obj/machinery/porta_turret/ai{dir = 4},/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bzn" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/obj/structure/table,/obj/item/weapon/aiModule/supplied/protectStation,/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/turret_protected/ai_upload)
"bzo" = (/obj/machinery/computer/upload/ai,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/white{tag = "icon-2-8"; icon_state = "2-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bzp" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/obj/structure/table,/obj/item/weapon/aiModule/core/full/corp,/obj/structure/cable/white{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/turret_protected/ai_upload)
-"bzq" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/obj/structure/cable/white{tag = "icon-1-8"; icon_state = "1-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
+"bzq" = (/obj/machinery/porta_turret/ai{dir = 8},/obj/structure/cable/white{tag = "icon-1-8"; icon_state = "1-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bzr" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/space,/area/space/nearstation)
"bzs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/lattice,/turf/space,/area/space/nearstation)
"bzt" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/space,/area/space/nearstation)
@@ -4319,7 +4319,7 @@
"bFc" = (/obj/machinery/light,/obj/machinery/power/apc{auto_name = 1; dir = 2; name = "Autoname APC South"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/engine/gravity_generator)
"bFd" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/engine/gravity_generator)
"bFe" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/darkwarning/corner{tag = "icon-warndarkcorners (EAST)"; icon_state = "warndarkcorners"; dir = 4},/area/engine/gravity_generator)
-"bFf" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
+"bFf" = (/obj/machinery/porta_turret/ai{dir = 4},/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bFg" = (/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel/black,/area/turret_protected/ai_upload)
"bFh" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/turret_protected/ai_upload)
"bFi" = (/obj/machinery/hologram/holopad,/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
@@ -4616,11 +4616,11 @@
"bKN" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"bKO" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"bKP" = (/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"bKQ" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = -25; pixel_y = -2; tag = "WEST"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
+"bKQ" = (/obj/machinery/porta_turret/ai{dir = 4},/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = -25; pixel_y = -2; tag = "WEST"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bKR" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/structure/cable/white{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/turret_protected/ai_upload)
"bKS" = (/obj/machinery/computer/upload/borg,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/white{tag = "icon-1-4"; icon_state = "1-4"},/obj/machinery/light,/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bKT" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/obj/structure/table,/obj/item/weapon/aiModule/supplied/freeform,/obj/structure/cable/white{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable/white{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/turret_protected/ai_upload)
-"bKU" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/obj/structure/cable/white{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
+"bKU" = (/obj/machinery/porta_turret/ai{dir = 8},/obj/structure/cable/white{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/floor/plasteel{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bKV" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/space,/area/space/nearstation)
"bKW" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/space,/area/space/nearstation)
"bKX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
index 8a69888cf4d..9c8c0624788 100644
--- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
+++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
@@ -112,11 +112,11 @@
"ach" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/blood/gibs/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/ash{desc = "They look like human remains, and have clearly been gnawed at."; icon = 'icons/effects/blood.dmi'; icon_state = "remains"; name = "remains"},/obj/item/weapon/gun/energy/laser/retro,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/abandoned)
"aci" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/under/rank/centcom_officer{desc = "A badge on the arm indicates that it's meant to be worn by Centcom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; name = "\improper dusty old Centcom jumpsuit"},/obj/item/clothing/under/rank/centcom_commander{desc = "A badge on the arm indicates that it's meant to be worn by Centcom recovery teams. This one seems dusty and clearly hasn't been cleaned in some time."; name = "\improper dusty old Centcom jumpsuit"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"acj" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai)
-"ack" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"ack" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"acl" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"acm" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"acn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"aco" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aco" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"acp" = (/turf/space,/turf/simulated/wall/shuttle{dir = 2; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"acq" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"acr" = (/turf/space,/turf/simulated/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
@@ -191,14 +191,14 @@
"adI" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"adJ" = (/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"adK" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
-"adL" = (/obj/machinery/porta_turret{ai = 1},/obj/machinery/ai_status_display{pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
+"adL" = (/obj/machinery/porta_turret/ai,/obj/machinery/ai_status_display{pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
"adM" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "AI Satellite West Wing APC"; pixel_y = 25},/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "AI Satellite West"; network = list("SS13","AISat"); start_active = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
"adN" = (/obj/structure/tank_dispenser/oxygen{pixel_x = -1; pixel_y = 2},/obj/machinery/computer/security/telescreen{desc = "Used for watching the AI satellite."; name = "AI Satellite Monitor"; network = list("AISat"); pixel_y = 29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
"adO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/shutters/preopen{id = "AIBlast"; name = "AI Chamber Blast Shutter"},/turf/simulated/floor/plating,/area/turret_protected/ai)
"adP" = (/obj/machinery/door/airlock/glass_command{name = "AI Chamber"; req_access_txt = "16"},/obj/machinery/door/poddoor/shutters/preopen{id = "AIBlast"; name = "AI Chamber Blast Shutter"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"adQ" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the AI satellite."; name = "AI Satellite Monitor"; network = list("AISat"); pixel_y = 29},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"adR" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "AI Satellite East Wing APC"; pixel_y = 25},/obj/machinery/light/small{dir = 1},/obj/machinery/camera{c_tag = "AI Satellite East"; network = list("SS13","AISat"); start_active = 1},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/pen,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
-"adS" = (/obj/machinery/porta_turret{ai = 1},/obj/machinery/ai_status_display{pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"adS" = (/obj/machinery/porta_turret/ai,/obj/machinery/ai_status_display{pixel_y = 31},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"adT" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate)
"adU" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
"adV" = (/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/chem_dispenser,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned)
@@ -211,7 +211,7 @@
"aec" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
"aed" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Storage"})
"aee" = (/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
-"aef" = (/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
+"aef" = (/obj/machinery/porta_turret/ai,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
"aeg" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
"aeh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior)
"aei" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
@@ -2442,10 +2442,10 @@
"aUX" = (/obj/machinery/airalarm{frequency = 1439; pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"})
"aUY" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/plasteel{icon_state = "darkblue"; dir = 4},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"})
"aUZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard)
-"aVa" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/sign/kiddieplaque{pixel_x = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"aVa" = (/obj/machinery/porta_turret/ai{dir = 4},/obj/structure/sign/kiddieplaque{pixel_x = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"aVb" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aVc" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aVd" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"aVd" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"aVe" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos)
"aVf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "caution"},/area/atmos)
"aVg" = (/obj/machinery/airalarm{pixel_y = 23},/obj/machinery/camera{c_tag = "Atmospherics Monitoring"},/turf/simulated/floor/plasteel{icon_state = "cautioncorner"; dir = 1},/area/atmos)
diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm
index 4e761307eae..dfa8ada1a5e 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm
@@ -1981,11 +1981,11 @@
"aMe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/storage/primary)
"aMf" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/space,/area/space)
"aMg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
-"aMh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aMh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/porta_turret/ai,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aMi" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aMj" = (/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/structure/table,/obj/machinery/camera/motion{c_tag = "AI Upload Chamber - Fore"; network = list("SS13","RD","AIUpload")},/obj/structure/flora/kirbyplants{icon_state = "plant-07"; name = "Photosynthetic Potted plant"; pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aMk" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/machinery/airalarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aMl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aMl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/porta_turret/ai,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aMm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
"aMn" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/space,/area/space)
"aMo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/hallway/primary/fore)
@@ -2132,11 +2132,11 @@
"aOZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/storage/primary)
"aPa" = (/obj/structure/table,/obj/item/device/assembly/igniter{pixel_x = -4; pixel_y = -4},/obj/item/device/assembly/igniter,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary)
"aPb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
-"aPc" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aPc" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aPd" = (/obj/machinery/computer/upload/borg,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/westleft{base_state = "left"; dir = 2; icon_state = "left"; layer = 3.1; name = "Cyborg Upload Console Window"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aPe" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aPf" = (/obj/machinery/computer/upload/ai,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/westleft{base_state = "right"; dir = 2; icon_state = "right"; layer = 3.1; name = "Upload Console Window"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aPg" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aPg" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aPh" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
"aPi" = (/obj/structure/bed/chair{dir = 4; name = "Prosecution"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/crew_quarters/courtroom)
"aPj" = (/obj/structure/table/wood,/obj/item/weapon/paper,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 10},/area/crew_quarters/courtroom)
@@ -2342,9 +2342,9 @@
"aTb" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/storage/primary)
"aTc" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/storage/primary)
"aTd" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "brown"},/area/storage/primary)
-"aTe" = (/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -24},/obj/machinery/porta_turret{ai = 1; dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aTe" = (/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -24},/obj/machinery/porta_turret/ai{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aTf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aTg" = (/obj/machinery/porta_turret{ai = 1; dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aTg" = (/obj/machinery/porta_turret/ai{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aTh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aTi" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Courtroom"; opacity = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom)
"aTj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/courtroom)
@@ -2525,13 +2525,13 @@
"aWC" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"aWD" = (/obj/machinery/camera/emp_proof{c_tag = "Aft Arm - Far"; dir = 8; network = list("Singulo")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"aWE" = (/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
-"aWF" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"aWF" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"aWG" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"aWH" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 2; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 0; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"aWI" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/sign/poster{pixel_y = -32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "browncorner"},/area/construction/Storage{name = "Storage Wing"})
"aWJ" = (/obj/machinery/camera{c_tag = "AI Chamber - Fore"; dir = 2; network = list("RD")},/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 2; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 0; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"aWK" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
-"aWL" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
+"aWL" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai)
"aWM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"aWN" = (/obj/structure/flora/kirbyplants{icon_state = "plant-13"; layer = 4.1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"})
"aWO" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"})
@@ -3741,14 +3741,14 @@
"btW" = (/obj/structure/window/reinforced,/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/construction/hallway{name = "\improper MiniSat Exterior"})
"btX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/construction/hallway{name = "\improper MiniSat Exterior"})
"btY" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/tcomfoyer{name = "\improper MiniSat Foyer"})
-"btZ" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/porta_turret{ai = 1; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; dir = 4; name = "Research Monitor"; network = list("RD"); pixel_x = -28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/aisat_interior)
+"btZ" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/porta_turret/ai{dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; dir = 4; name = "Research Monitor"; network = list("RD"); pixel_x = -28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/turret_protected/aisat_interior)
"bua" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/power/apc{aidisabled = 0; cell_type = 5000; dir = 2; name = "MiniSat Foyer APC"; pixel_x = 0; pixel_y = -29},/obj/structure/cable/yellow,/obj/machinery/camera/motion{c_tag = "MiniSat Foyer"; dir = 8; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/tcomfoyer{name = "\improper MiniSat Foyer"})
"bub" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior)
"buc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/airalarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/mob/living/simple_animal/bot/floorbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
"bud" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
"bue" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
"buf" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
-"bug" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/porta_turret{ai = 1; dir = 2},/obj/machinery/computer/security/telescreen{dir = 8; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/turret_protected/aisat_interior)
+"bug" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/porta_turret/ai{dir = 2},/obj/machinery/computer/security/telescreen{dir = 8; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/turret_protected/aisat_interior)
"buh" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/tcomfoyer{name = "\improper MiniSat Foyer"})
"bui" = (/obj/machinery/computer/station_alert,/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure{name = "MiniSat Maintenance"})
"buj" = (/obj/structure/table,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/computer/monitor,/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure{name = "MiniSat Maintenance"})
@@ -4081,7 +4081,7 @@
"bAy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/maintcentral{name = "Central Maintenance"})
"bAz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central)
"bAA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central)
-"bAB" = (/obj/machinery/porta_turret{ai = 1; dir = 2},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai)
+"bAB" = (/obj/machinery/porta_turret/ai{dir = 2},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai)
"bAC" = (/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"bAD" = (/mob/living/carbon/monkey{name = "Pun Pun"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"bAE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index 6d0134872f5..0757e74208e 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -2694,9 +2694,9 @@
"aZP" = (/turf/simulated/wall,/area/bridge/meeting_room)
"aZQ" = (/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"aZR" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"aZS" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aZS" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aZT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aZU" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"aZU" = (/obj/machinery/porta_turret/ai{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"aZV" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"aZW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"aZX" = (/obj/machinery/door/airlock/command{name = "Captain's Office"; req_access = null; req_access_txt = "20"},/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/wood,/area/crew_quarters/captain)
@@ -2863,7 +2863,7 @@
"bdc" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitecorner"},/area/hallway/primary/starboard)
"bdd" = (/obj/machinery/vending/cola,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"bde" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room)
-"bdf" = (/obj/machinery/airalarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
+"bdf" = (/obj/machinery/airalarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload)
"bdg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bdh" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"bdi" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -6496,16 +6496,16 @@
"cuV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"cuW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"cuX" = (/obj/machinery/power/apc{dir = 4; name = "MiniSat Service Bay APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
-"cuY" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
+"cuY" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
"cuZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/floorbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"})
"cva" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"cvb" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"cvc" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
-"cvd" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
+"cvc" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret/ai{dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior)
+"cvd" = (/obj/machinery/porta_turret/ai{dir = 4},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior)
"cve" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/turretid{control_area = "AI Satellite Hallway"; enabled = 1; icon_state = "control_standby"; name = "Chamber Hallway Turret Control"; pixel_x = 32; pixel_y = -24; req_access = list(65)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
"cvf" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"cvg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/cleanbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
-"cvh" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
+"cvh" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"cvi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"})
"cvj" = (/turf/simulated/wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvk" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
@@ -6515,7 +6515,7 @@
"cvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Hallway"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvp" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"cvq" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
-"cvr" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"cvr" = (/obj/machinery/porta_turret/ai{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"cvs" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
@@ -6530,10 +6530,10 @@
"cvD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvF" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
-"cvG" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvG" = (/obj/machinery/porta_turret/ai{dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
-"cvJ" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
+"cvJ" = (/obj/machinery/porta_turret/ai{dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvK" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space)
"cvL" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
"cvM" = (/obj/machinery/camera/motion{c_tag = "MiniSat Core Hallway"; dir = 4; network = list("MiniSat")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"})
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index ac392f1bfb9..895e025eb02 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -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)
..()
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index a67659314ac..a489e4d5407 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -83,7 +83,7 @@
if(!B)
src << "You must be on a factory blob!"
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 << "This factory blob is too damaged to produce a blobbernaut."
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("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!")
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
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 942110135f2..3b67eab6a7c 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -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
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index aca9055edc1..777dbd09a9d 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -135,11 +135,11 @@
return
src.verbs -= /mob/living/silicon/ai/proc/upgrade_turrets
- for(var/obj/machinery/porta_turret/turret in machines)
- if(turret.ai) //Make sure only the AI's turrets are affected.
- turret.health += 30
- turret.eprojectile = /obj/item/projectile/beam/heavylaser //Once you see it, you will know what it means to FEAR.
- turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg'
+ //Upgrade AI turrets around the world
+ for(var/obj/machinery/porta_turret/ai/turret in machines)
+ turret.health += 30
+ turret.eprojectile = /obj/item/projectile/beam/heavylaser //Once you see it, you will know what it means to FEAR.
+ turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg'
src << "Turrets upgraded."
/datum/AI_Module/large/lockdown
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 77e42cc5a38..fbdd98e3282 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -51,7 +51,6 @@
var/auth_weapons = 0 //checks if it can shoot people that have a weapon they aren't authorized to have
var/stun_all = 0 //if this is active, the turret shoots everything that isn't security or head of staff
var/check_anomalies = 1 //checks if it can shoot at unidentified lifeforms (ie xenos)
- var/ai = 0 //if active, will shoot at anything not an AI or cyborg
var/attacked = 0 //if set to 1, the turret gets pissed off and shoots at people nearby (unless they have sec access!)
@@ -408,8 +407,6 @@
criminals = pick(0, 1)
auth_weapons = pick(0, 1)
stun_all = pick(0, 0, 0, 0, 1) //stun_all is a pretty big deal, so it's least likely to get turned on
- if(prob(5))
- emagged = 1
on=0
spawn(rand(60,600))
@@ -467,47 +464,50 @@
popDown()
return
- var/list/targets = list() //list of primary targets
- var/turretview = view(scan_range, base)
-
- if(check_anomalies) //if it's set to check for xenos/simpleanimals
- for(var/mob/living/simple_animal/SA in turretview)
- if(SA.stat || (faction in SA.faction) || SA.has_unlimited_silicon_privilege) //don't target dead animals or NT maint drones.
- continue
- targets += SA
-
- for(var/mob/living/carbon/C in turretview) //loops through all carbon-based lifeforms in view(7)
- if(emagged && C.stat != DEAD) //if emagged, every living carbon is a target.
- targets += C
- continue
-
- if(C.stat || C.handcuffed || (C.lying && !(C.buckled))) //if the perp is handcuffed or lying or dead/dying, no need to bother really
- continue
-
- if(ai) //If it's set to attack all nonsilicons, target them!
- targets += C
- continue
-
- if(istype(C, /mob/living/carbon/human)) //if the target is a human, analyze threat level
- if(assess_perp(C) >= 4)
- targets += C
-
- else if(check_anomalies)
- if(!(faction in C.faction))
- for(var/F in C.faction) //We target carbons without the portaturret's faction and who also have alien or slime faction.
- if(F == "alien" || F == "slime")
- targets += C
- break
-
- for(var/obj/mecha/M in turretview)
- if(M.occupant)
- if(ai || emagged || assess_perp(M.occupant) >= 4) // we target all occupied mechs if we're emagged or set to attack all non silicons.
- targets += M
+ var/list/targets = calculate_targets()
if(!tryToShootAt(targets))
if(!always_up)
popDown() // no valid targets, close the cover
+/obj/machinery/porta_turret/proc/calculate_targets()
+ var/list/targets = list()
+ var/turretview = view(scan_range, base)
+ for(var/A in turretview)
+ if(check_anomalies)//if it's set to check for simple animals
+ if(istype(A, /mob/living/simple_animal))
+ var/mob/living/simple_animal/SA = A
+ if(SA.stat || in_faction(SA)) //don't target if dead or in faction
+ continue
+ targets += SA
+
+ if(istype(A, /mob/living/carbon))
+ var/mob/living/carbon/C = A
+ //If not emagged, only target non downed carbons
+ if(!emagged && (C.stat || C.handcuffed || C.lying))
+ continue
+
+ //If emagged, target all but dead carbons
+ if(emagged && C.stat == DEAD)
+ continue
+
+ //if the target is a human and not in our faction, analyze threat level
+ if(istype(C, /mob/living/carbon/human) && !in_faction(C))
+ if(assess_perp(C) >= 4)
+ targets += C
+
+ else if(check_anomalies) //non humans who are not simple animals (xenos etc)
+ if(!in_faction(C))
+ targets += C
+
+ if(istype(A, /obj/mecha/))
+ var/obj/mecha/M = A
+ //If there is a user and they're not in our faction
+ if(M.occupant && !in_faction(M.occupant))
+ if(assess_perp(M.occupant) >= 4)
+ targets += M
+
+ return targets
/obj/machinery/porta_turret/proc/tryToShootAt(list/atom/movable/targets)
while(targets.len > 0)
@@ -608,6 +608,11 @@
return threatcount
+/obj/machinery/porta_turret/proc/in_faction(mob/target)
+ if(!(faction in target.faction))
+ return 0
+ return 1
+
/obj/machinery/porta_turret/proc/target(atom/movable/target)
if(disabled)
return
@@ -668,10 +673,6 @@
src.active_state = "Laser"
src.power_change()
-/*
- Portable turret constructions
- Known as "turret frame"s
-*/
/obj/machinery/porta_turret_construct
name = "turret frame"
@@ -778,7 +779,6 @@
qdel(I)
return
- //attack_hand() removes the gun
if(5)
if(istype(I, /obj/item/weapon/screwdriver))
@@ -787,7 +787,6 @@
user << "You close the internal access hatch."
return
- //attack_hand() removes the prox sensor
if(6)
if(istype(I, /obj/item/stack/sheet/metal))
@@ -827,9 +826,6 @@
Turret.gun_charge = gun_charge
Turret.setup()
-// Turret.cover=new/obj/machinery/porta_turret_cover(loc)
-// Turret.cover.Parent_Turret=Turret
-// Turret.cover.name = finish_name
qdel(src)
else if(istype(I, /obj/item/weapon/crowbar))
@@ -996,6 +992,10 @@
projectile = /obj/item/projectile/bullet/weakbullet3
eprojectile = /obj/item/projectile/bullet/weakbullet3
+//Blame MSO
+/obj/machinery/porta_turret/ai
+ faction = "silicon"
+
////////////////////////
//Turret Control Panel//
////////////////////////
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 7c9eb724098..ae8d23b9ecb 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -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 ? "Deceased" : "[M.health] % healthy")
+ var/mob_status = (M.stat > 1 ? "Deceased" : "[round(M.health/M.maxHealth,0.01)*100] % healthy")
if(M.status_flags & FAKEDEATH)
mob_status = "Deceased"
@@ -409,7 +409,7 @@ MASS SPECTROMETER
else if (T.nutrition < T.get_hunger_nutrition())
user << "Warning: slime is hungry"
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
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index 6f31a22f717..5f08f86d952 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -150,29 +150,25 @@
/obj/machinery/computer/holodeck/Topic(href, list/href_list)
if(..())
return
- if(Adjacent(usr) || istype(usr, /mob/living/silicon))
- usr.set_machine(src)
- src.add_fingerprint(usr)
- if(href_list["loadarea"])
- var/typepath = text2path(href_list["loadarea"])
- if(ispath(typepath,/area))
- var/area/target = locate(typepath)
- if(istype(target))
- load_program(target)
- else
- world.log << "area not ready: [typepath]"
- else
- world.log << "bad area argument: [href_list["loadarea"]]"
- else if("safety" in href_list)
- var/oe = emagged
- emagged = !text2num(href_list["safety"])
- if(oe == emagged) return
- if(program && !stat)
- if(!emagged && program.restricted)
- load_program(offline_program)
- else
- nerf(!emagged)
- src.updateUsrDialog()
+ if(!Adjacent(usr) && !istype(usr, /mob/living/silicon))
+ return
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+ if(href_list["loadarea"])
+ var/areapath = text2path(href_list["loadarea"])
+ if(!ispath(areapath, /area/holodeck))
+ return
+ var/area/holodeck/area = locate(areapath)
+ if(!istype(area))
+ return
+ if((area in program_cache) || (emagged && (area in emag_programs)))
+ load_program(area)
+ else if("safety" in href_list)
+ var/safe = text2num(href_list["safety"])
+ if(!program)
+ return
+ nerf(safe)
+ src.updateUsrDialog()
/obj/machinery/computer/holodeck/proc/nerf(active)
for(var/obj/item/I in spawned)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 3a0f90c67cf..66dffccb236 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -46,7 +46,7 @@
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/smes(null)
for(var/i in 1 to 5)
- component_parts += new /obj/item/weapon/stock_parts/cell/high/empty(null)
+ component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
component_parts += new /obj/item/stack/cable_coil(null, 5)
component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
RefreshParts()
diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm
index 524dfa341cb..3631f1cc5ce 100644
--- a/code/modules/projectiles/ammunition/ammo_casings.dm
+++ b/code/modules/projectiles/ammunition/ammo_casings.dm
@@ -3,6 +3,12 @@
caliber = "357"
projectile_type = /obj/item/projectile/bullet
+/obj/item/ammo_casing/a762
+ desc = "A 7.62 bullet casing."
+ icon_state = "762-casing"
+ caliber = "a762"
+ projectile_type = /obj/item/projectile/bullet
+
/obj/item/ammo_casing/a50
desc = "A .50AE bullet casing."
caliber = ".50"
@@ -142,6 +148,12 @@
icon_state = "mshell"
projectile_type = /obj/item/projectile/bullet/meteorshot
+/obj/item/ammo_casing/shotgun/breaching
+ name = "breaching shell"
+ desc = "An economic version of the meteorshot, utilizing similar technologies. Great for busting down doors."
+ icon_state = "mshell"
+ projectile_type = /obj/item/projectile/bullet/meteorshot/weak
+
/obj/item/ammo_casing/shotgun/pulseslug
name = "pulse slug"
desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index a5ff5364b5e..390339609e5 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -304,6 +304,11 @@ obj/item/ammo_box/magazine/tommygunm45
icon_state = "m12gt"
ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror
+/obj/item/ammo_box/magazine/m12g/breach
+ name = "shotgun magazine (12g breacher slugs)"
+ icon_state = "m12gbc"
+ ammo_type = /obj/item/projectile/bullet/meteorshot/weak
+
/obj/item/ammo_box/magazine/toy
name = "foam force META magazine"
ammo_type = /obj/item/ammo_casing/caseless/foam_dart
diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm
index 7d54685f070..a924bd5b328 100644
--- a/code/modules/projectiles/guns/projectile/saw.dm
+++ b/code/modules/projectiles/guns/projectile/saw.dm
@@ -1,12 +1,12 @@
/obj/item/weapon/gun/projectile/automatic/l6_saw
name = "\improper L6 SAW"
- desc = "A heavily modified 7.62 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation."
+ desc = "A heavily modified 5.56x45mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation."
icon_state = "l6closed100"
item_state = "l6closedmag"
w_class = 5
slot_flags = 0
origin_tech = "combat=5;materials=1;syndicate=2"
- mag_type = /obj/item/ammo_box/magazine/m762
+ mag_type = /obj/item/ammo_box/magazine/mm556x45
heavy_weapon = 1
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
var/cover_open = 0
@@ -27,6 +27,7 @@
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
icon_state = "l6[cover_open ? "open" : "closed"][magazine ? Ceiling(get_ammo(0)/12.5)*25 : "-empty"]"
+ item_state = "l6[cover_open ? "openmag" : "closedmag"]"
/obj/item/weapon/gun/projectile/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays
@@ -64,70 +65,77 @@
/obj/item/projectile/bullet/saw
- damage = 35
+ damage = 45
armour_penetration = 5
/obj/item/projectile/bullet/saw/bleeding
- damage = 15
+ damage = 20
armour_penetration = 0
/obj/item/projectile/bullet/saw/bleeding/on_hit(atom/target, blocked = 0, hit_zone)
if((blocked != 100) && istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/H = target
- H.drip(25)
+ H.drip(35)
/obj/item/projectile/bullet/saw/hollow
- damage = 45
- armour_penetration = 0
+ damage = 60
+ armour_penetration = -10
/obj/item/projectile/bullet/saw/ap
- damage = 30
- armour_penetration = 35
+ damage = 40
+ armour_penetration = 75
/obj/item/projectile/bullet/saw/incen
- damage = 5
+ damage = 7
armour_penetration = 0
+obj/item/projectile/bullet/saw/incen/Move()
+ ..()
+ var/turf/location = get_turf(src)
+ if(location)
+ PoolOrNew(/obj/effect/hotspot, location)
+ location.hotspot_expose(700, 50, 1)
+
/obj/item/projectile/bullet/saw/incen/on_hit(atom/target, blocked = 0)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
- M.adjust_fire_stacks(1)
+ M.adjust_fire_stacks(3)
M.IgniteMob()
//magazines//
-/obj/item/ammo_box/magazine/m762
- name = "box magazine (7.62mm)"
+/obj/item/ammo_box/magazine/mm556x45
+ name = "box magazine (5.56x45mm)"
icon_state = "a762-50"
origin_tech = "combat=2"
- ammo_type = /obj/item/ammo_casing/a762
- caliber = "a762"
+ ammo_type = /obj/item/ammo_casing/mm556x45
+ caliber = "mm55645"
max_ammo = 50
-/obj/item/ammo_box/magazine/m762/bleeding
- name = "box magazine (Bleeding 7.62mm)"
+/obj/item/ammo_box/magazine/mm556x45/bleeding
+ name = "box magazine (Bleeding 5.56x45mm)"
origin_tech = "combat=3"
- ammo_type = /obj/item/ammo_casing/a762/bleeding
+ ammo_type = /obj/item/ammo_casing/mm556x45/bleeding
-/obj/item/ammo_box/magazine/m762/hollow
- name = "box magazine (Hollow-Point 7.62mm)"
+/obj/item/ammo_box/magazine/mm556x45/hollow
+ name = "box magazine (Hollow-Point 5.56x45mm)"
origin_tech = "combat=3"
- ammo_type = /obj/item/ammo_casing/a762/hollow
+ ammo_type = /obj/item/ammo_casing/mm556x45/hollow
-/obj/item/ammo_box/magazine/m762/ap
- name = "box magazine (Armor Penetrating 7.62mm)"
+/obj/item/ammo_box/magazine/mm556x45/ap
+ name = "box magazine (Armor Penetrating 5.56x45mm)"
origin_tech = "combat=4"
- ammo_type = /obj/item/ammo_casing/a762/ap
+ ammo_type = /obj/item/ammo_casing/mm556x45/ap
-/obj/item/ammo_box/magazine/m762/incen
- name = "box magazine (Incendiary 7.62mm)"
+/obj/item/ammo_box/magazine/mm556x45/incen
+ name = "box magazine (Incendiary 5.56x45mm)"
origin_tech = "combat=4"
- ammo_type = /obj/item/ammo_casing/a762/incen
+ ammo_type = /obj/item/ammo_casing/mm556x45/incen
-/obj/item/ammo_box/magazine/m762/update_icon()
+/obj/item/ammo_box/magazine/mm556x45/update_icon()
..()
icon_state = "a762-[round(ammo_count(),10)]"
@@ -135,28 +143,27 @@
//casings//
-/obj/item/ammo_casing/a762
- desc = "A 7.62mm bullet casing."
+/obj/item/ammo_casing/mm556x45
+ desc = "A 556x45mm bullet casing."
icon_state = "762-casing"
- caliber = "a762"
+ caliber = "mm55645"
projectile_type = /obj/item/projectile/bullet/saw
-/obj/item/ammo_casing/a762/bleeding
- desc = "A 7.62mm bullet casing with specialized inner-casing, that when it makes contact with a target, release tiny shrapnel to induce internal bleeding."
+/obj/item/ammo_casing/mm556x45/bleeding
+ desc = "A 556x45mm bullet casing with specialized inner-casing, that when it makes contact with a target, release tiny shrapnel to induce internal bleeding."
icon_state = "762-casing"
- caliber = "a762"
projectile_type = /obj/item/projectile/bullet/saw/bleeding
-/obj/item/ammo_casing/a762/hollow
- desc = "A 7.62mm bullet casing designed to cause more damage to unarmored targets."
+/obj/item/ammo_casing/mm556x45/hollow
+ desc = "A 556x45mm bullet casing designed to cause more damage to unarmored targets."
projectile_type = /obj/item/projectile/bullet/saw/hollow
-/obj/item/ammo_casing/a762/ap
- desc = "A 7.62mm bullet casing designed with a hardened-tipped core to help penetrate armored targets."
+/obj/item/ammo_casing/mm556x45/ap
+ desc = "A 556x45mm bullet casing designed with a hardened-tipped core to help penetrate armored targets."
projectile_type = /obj/item/projectile/bullet/saw/ap
-/obj/item/ammo_casing/a762/incen
- desc = "A 7.62mm bullet casing designed with a chemical-filled capsule on the tip that when bursted, reacts with the atmosphere to produce a fireball, engulfing the target in flames. "
+/obj/item/ammo_casing/mm556x45/incen
+ desc = "A 556x45mm bullet casing designed with a chemical-filled capsule on the tip that when bursted, reacts with the atmosphere to produce a fireball, engulfing the target in flames. "
projectile_type = /obj/item/projectile/bullet/saw/incen
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index adc787c0679..083746274de 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -298,7 +298,7 @@
item_state = "bulldog"
w_class = 3
origin_tech = "combat=5;materials=4;syndicate=6"
- mag_type = /obj/item/ammo_box/magazine/m12g
+ mag_type = /obj/item/ammo_box/magazine/m12g/stun
fire_sound = 'sound/weapons/Gunshot.ogg'
can_suppress = 0
burst_size = 1
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 060fd1e7377..84c553c72ba 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -72,7 +72,7 @@
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
- M.adjust_fire_stacks(1)
+ M.adjust_fire_stacks(4)
M.IgniteMob()
@@ -101,6 +101,11 @@
stun = 8
hitsound = 'sound/effects/meteorimpact.ogg'
+/obj/item/projectile/bullet/meteorshot/weak
+ damage = 10
+ weaken = 4
+ stun = 4
+
/obj/item/projectile/bullet/meteorshot/on_hit(atom/target, blocked = 0)
. = ..()
if(istype(target, /atom/movable))
diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
index 73604676d6c..38dcc9bfd94 100644
--- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
@@ -2,6 +2,7 @@
/datum/reagent/blob
name = "Unknown"
description = "shouldn't exist and you should adminhelp immediately."
+ color = "#FFFFFF"
var/shortdesc = null //just damage and on_mob effects, doesn't include special, blob-tile only effects
var/blobbernaut_message = "slams" //blobbernaut attack verb
var/message = "The blob strikes you" //message sent to any mob hit by the blob
@@ -16,7 +17,7 @@
/datum/reagent/blob/proc/death_reaction(obj/effect/blob/B, cause) //when a blob dies, do this
return
-/datum/reagent/blob/proc/expand_reaction(obj/effect/blob/B, turf/T) //when the blob expands, do this
+/datum/reagent/blob/proc/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T) //when the blob expands, do this
return
//does brute and a little stamina damage
@@ -24,7 +25,7 @@
name = "Ripping Tendrils"
id = "ripping_tendrils"
description = "will do medium brute and stamina damage."
- color = "#890000"
+ color = "#991010"
blobbernaut_message = "rips"
message_living = ", and you feel your skin ripping and tearing off"
@@ -60,12 +61,12 @@
B.overmind.blob_mobs.Add(BS)
return ..()
-/datum/reagent/blob/sporing_pods/expand_reaction(obj/effect/blob/B, turf/T)
+/datum/reagent/blob/sporing_pods/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
if(prob(10))
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(T)
BS.overmind = B.overmind
BS.update_icons()
- B.overmind.blob_mobs.Add(BS)
+ newB.overmind.blob_mobs.Add(BS)
//does brute damage but can replicate when damaged and has a chance of expanding again
/datum/reagent/blob/replicating_foam
@@ -82,15 +83,15 @@
/datum/reagent/blob/replicating_foam/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
if(damage > 0 && original_health - damage > 0)
- var/obj/effect/blob/newB = B.expand()
+ var/obj/effect/blob/newB = B.expand(null, 0)
if(newB)
newB.health = original_health - damage
newB.check_health(cause)
newB.update_icon()
return ..()
-/datum/reagent/blob/replicating_foam/expand_reaction(obj/effect/blob/B, turf/T)
- B.expand() //do it again!
+/datum/reagent/blob/replicating_foam/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
+ newB.expand() //do it again!
//does low burn and a lot of stamina damage, reacts to stamina damage
/datum/reagent/blob/energized_fibers
@@ -98,7 +99,7 @@
id = "energized_fibers"
description = "will do low burn and high stamina damage, and react to stamina damage."
shortdesc = "will do low burn and high stamina damage."
- color = "#FFDC73"
+ color = "#EFD65A"
blobbernaut_message = "shocks"
message_living = ", and you feel a strong tingling sensation"
@@ -228,6 +229,29 @@
if(M)
M.adjustStaminaLoss(0.4*reac_volume)
+//does burn damage and EMPs, slightly fragile
+/datum/reagent/blob/electromagnetic_web
+ name = "Electromagnetic Web"
+ id = "electromagnetic_web"
+ description = "will do low burn damage and EMP targets, but is somewhat fragile."
+ color = "#83ECEC"
+ blobbernaut_message = "lashes"
+ message = "The blob lashes you"
+ message_living = ", and you hear a faint buzzing"
+
+/datum/reagent/blob/electromagnetic_web/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ reac_volume = ..()
+ M.emp_act(2)
+ if(M)
+ M.apply_damage(0.6*reac_volume, BURN)
+
+/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
+ return damage * 1.2 //a laser will do 24 damage, which will kill any recently-made normal blob
+
+/datum/reagent/blob/electromagnetic_web/death_reaction(obj/effect/blob/B, cause)
+ if(!isnull(cause))
+ empulse(B.loc, 2, 3) //less than screen range, so you can stand out of range to avoid it
+
//does brute damage, bonus damage for each nearby blob, and spreads damage out
/datum/reagent/blob/synchronous_mesh
name = "Synchronous Mesh"
@@ -260,9 +284,9 @@
for(var/obj/effect/blob/C in orange(1, B))
if(C.overmind && C.overmind.blob_reagent_datum == B.overmind.blob_reagent_datum && !istype(C, /obj/effect/blob/core)) //only hurt blobs that have the same overmind chemical and aren't cores
C.take_damage(damage/damagesplit, CLONE, B, 0)
- return damage/damagesplit
+ return damage / damagesplit
else
- return damage*1.25
+ return damage * 1.25
//does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged
/datum/reagent/blob/pressurized_slime
diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm
index df9b9e43fbf..2dc032d0a85 100644
--- a/code/modules/uplink/uplink_item.dm
+++ b/code/modules/uplink/uplink_item.dm
@@ -190,9 +190,9 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
/datum/uplink_item/dangerous/machinegun
name = "L6 Squad Automatic Weapon"
desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \
- This deadly weapon has a massive 50-round magazine of devastating 7.62x51mm ammunition."
+ This deadly weapon has a massive 50-round magazine of devastating 5.56x45mm ammunition."
item = /obj/item/weapon/gun/projectile/automatic/l6_saw
- cost = 23
+ cost = 18
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
@@ -394,14 +394,14 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
name = "12g Slug Drum"
desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \
Now 8 times less likely to shoot your pals."
+ cost = 3
item = /obj/item/ammo_box/magazine/m12g
-/datum/uplink_item/ammo/shotgun/slug
+/datum/uplink_item/ammo/shotgun/stun
name = "12 Stun Slug Drum"
desc = "An alternative 8-round stun slug magazine for use with the Bulldog shotgun. \
Saying that they're completely non-lethal would be lying."
item = /obj/item/ammo_box/magazine/m12g/stun
- cost = 3
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/shotgun/dragon
@@ -411,6 +411,13 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
item = /obj/item/ammo_box/magazine/m12g/dragon
include_modes = list(/datum/game_mode/nuclear)
+/datum/uplink_item/ammo/shotgun/breach
+ name = "12g Breaching Shells"
+ desc = "An economic variant of the CMC meteorshot slugs, not as effective for knocking \
+ down targets, but still great for blasting airlocks off their frames."
+ item = /obj/item/ammo_box/magazine/m12g/breach
+ include_modes = list(/datum/game_mode/nuclear)
+
/datum/uplink_item/ammo/shotgun/bag
name = "12g Ammo Duffelbag"
desc = "A duffelbag filled with enough 12g ammo to supply an entire team, at a discounted price."
@@ -454,34 +461,34 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/ammo/machinegun/basic
- name = "7.62x51mm Box Magazine"
- desc = "A 50-round magazine of 7.62x51mm ammunition for use with the L6 SAW. \
+ name = "5.56x45mm Box Magazine"
+ desc = "A 50-round magazine of 5.56x45mm ammunition for use with the L6 SAW. \
By the time you need to use this, you'll already be on a pile of corpses."
- item = /obj/item/ammo_box/magazine/m762
+ item = /obj/item/ammo_box/magazine/mm556x45
/datum/uplink_item/ammo/machinegun/bleeding
- name = "7.62x51mm (Bleeding) Box Magazine"
- desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; equipped with special properties \
+ name = "5.56x45mm (Bleeding) Box Magazine"
+ desc = "A 50-round magazine of 5.56x45mm ammunition for use in the L6 SAW; equipped with special properties \
to induce internal bleeding on targets."
- item = /obj/item/ammo_box/magazine/m762/bleeding
+ item = /obj/item/ammo_box/magazine/mm556x45/bleeding
/datum/uplink_item/ammo/machinegun/hollow
- name = "7.62x51mm (Hollow-Point) Box Magazine"
- desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \
+ name = "5.56x45mm (Hollow-Point) Box Magazine"
+ desc = "A 50-round magazine of 5.56x45mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \
with the unarmored masses of crew."
- item = /obj/item/ammo_box/magazine/m762/hollow
+ item = /obj/item/ammo_box/magazine/mm556x45/hollow
/datum/uplink_item/ammo/machinegun/ap
- name = "7.62x51mm (Armor Penetrating) Box Magazine"
- desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; equipped with special properties \
+ name = "5.56x45mm (Armor Penetrating) Box Magazine"
+ desc = "A 50-round magazine of 5.56x45mm ammunition for use in the L6 SAW; equipped with special properties \
to puncture even the most durable armor."
- item = /obj/item/ammo_box/magazine/m762/ap
+ item = /obj/item/ammo_box/magazine/mm556x45/ap
/datum/uplink_item/ammo/machinegun/incen
- name = "7.62x51mm (Incendiary) Box Magazine"
- desc = "A 50-round magazine of 7.62x51mm ammunition for use in the L6 SAW; tipped with a special flammable \
+ name = "5.56x45mm (Incendiary) Box Magazine"
+ desc = "A 50-round magazine of 5.56x45mm ammunition for use in the L6 SAW; tipped with a special flammable \
mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn."
- item = /obj/item/ammo_box/magazine/m762/incen
+ item = /obj/item/ammo_box/magazine/mm556x45/incen
/datum/uplink_item/ammo/sniper
cost = 4
diff --git a/html/changelogs/AutoChangeLog-pr-14911.yml b/html/changelogs/AutoChangeLog-pr-14911.yml
new file mode 100644
index 00000000000..4f71e735a88
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14911.yml
@@ -0,0 +1,9 @@
+author: MMMiracles
+delete-after: True
+changes:
+ - tweak: "Bulldog now starts with stun-slugs instead of its usual 60-brute slugs. Slugs now cost 3 TC instead of 2."
+ - tweak: "Most SAW ammo has been slightly buffed in damage so maybe it'll be worth buying now along with a slight cost decrease for the gun itself."
+ - tweak: "Incen shells for the shotgun now apply extra firestacks on hit so it actually sets people on fire instead of turning them into a light show."
+ - tweak: "Incen rounds for the SAW now leave a fire trail similar to the bulldog's dragonsbreath round."
+ - rscadd: "Nuke Ops now have the ability to purchase breaching shells, a weaker variant of the meteorslugs that can still push back people/airlocks/mechs/corgis."
+ - bugfix: "SAW should now use its in-hand sprites for an open-closed magazine"
diff --git a/html/changelogs/AutoChangeLog-pr-15176.yml b/html/changelogs/AutoChangeLog-pr-15176.yml
new file mode 100644
index 00000000000..8cee123d230
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-15176.yml
@@ -0,0 +1,12 @@
+author: Joan
+delete-after: True
+changes:
+ - experiment: "Blob expansion is faster near the expanding blob, but slower further away from it."
+ - tweak: "Blob spores produce a slightly larger smoke cloud when dying. Sporing Pods spores and blob zombies produce the current small cloud."
+ - rscdel: "Blobbernauts can no longer pull anything at all."
+ - tweak: "Blobbernauts health reduced to 200, but blobbernauts now take half brute damage."
+ - tweak: "Blobbernauts now take massive damage from fire."
+ - tweak: "Blobbernauts do approximately 3 more damage when attacking."
+ - wip: "Replicating Foam will expand more actively when damaged."
+ - rscadd: "Adds Electromagnetic Web, which is light blue, does burn damage and EMPs targets, and causes a small EMP when dying."
+ - rscadd: "Electromagnetic Web takes more damage; a normal blob that hasn't been near a node or the core for 6~ seconds can be oneshotted by a laser."
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index b3b91d6236e..3a57dbbcfd3 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ