diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm
index e9ab0f0813f..724fd13145a 100644
--- a/_maps/map_files/MetaStation/z2.dmm
+++ b/_maps/map_files/MetaStation/z2.dmm
@@ -882,6 +882,26 @@
"qX" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding)
"qY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"qZ" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding)
+"ra" = (/turf/unsimulated/wall/vault,/area/abductor_ship)
+"rb" = (/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rc" = (/obj/effect/landmark/abductor/console,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rd" = (/obj/effect/landmark/abductor/console{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"re" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel,/obj/item/weapon/surgicaldrill,/obj/item/weapon/paper/abductor,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rf" = (/obj/effect/landmark/abductor/scientist,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rg" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rh" = (/obj/effect/landmark/abductor/agent,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"ri" = (/obj/structure/optable,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rj" = (/obj/machinery/abductor/gland_dispenser,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rk" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rl" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rm" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/surgical_drapes,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rn" = (/obj/machinery/computer/security{name = "Human Observation Console"},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"ro" = (/obj/effect/landmark/abductor/console{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rp" = (/obj/effect/landmark/abductor/console{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rq" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rr" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rs" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"rt" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag
@@ -1097,21 +1117,21 @@ abababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararbrcrbraraabrararbrdrbraraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarerbrbrbrbraabrarerbrbrbrbraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrargrfrirhrjraabrargrkrirlrjraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarmrbrbrbrbraabrarmrbrbrbrbraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararbrnrbraraabrararbrnrbraraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararbrorbraraabrararbrprbraraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarerbrbrbrbraabrarerbrbrbrbraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrargrqrirrrjraabrargrsrirtrjraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrarmrbrbrbrbraabrarmrbrbrbrbraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararbrnrbraraabrararbrnrbraraabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrararararaabababrararararaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
@@ -1140,3 +1160,4 @@ abababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
"}
+
diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm
index 2fe61ad1702..d8852568482 100644
--- a/_maps/map_files/generic/z2.dmm
+++ b/_maps/map_files/generic/z2.dmm
@@ -834,7 +834,27 @@
"qb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"qc" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding)
"qd" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/space/transit/horizontal,/area/space)
-
+"qe" = (/turf/unsimulated/wall/vault,/area/abductor_ship)
+"qf" = (/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qg" = (/obj/effect/landmark/abductor/console,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qh" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel,/obj/item/weapon/surgicaldrill,/obj/item/weapon/paper/abductor,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qi" = (/obj/effect/landmark/abductor/scientist,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qj" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qk" = (/obj/effect/landmark/abductor/agent,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"ql" = (/obj/structure/optable,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qm" = (/obj/machinery/abductor/gland_dispenser,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qn" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/surgical_drapes,/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qo" = (/obj/machinery/computer/security{name = "Human Observation Console"},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qp" = (/obj/effect/landmark/abductor/console{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qq" = (/obj/effect/landmark/abductor/console{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qr" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qs" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qt" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qu" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qv" = (/obj/effect/landmark/abductor/console{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qw" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+"qx" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/unsimulated/floor/bluegrid,/area/abductor_ship)
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajamanananaoap
@@ -1058,21 +1078,21 @@ abababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqfqgqfqeqeabqeqeqfqvqfqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqhqfqfqfqfqeabqeqhqfqfqfqfqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqjqiqlqkqmqeabqeqjqwqlqxqmqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqnqfqfqfqfqeabqeqnqfqfqfqfqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqfqoqfqeqeabqeqeqfqoqfqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqfqpqfqeqeabqeqeqfqqqfqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqhqfqfqfqfqeabqeqhqfqfqfqfqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqjqrqlqsqmqeabqeqjqtqlquqmqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqnqfqfqfqfqeabqeqnqfqfqfqfqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqfqoqfqeqeabqeqeqfqoqfqeqeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqeqeqeqeqeabababqeqeqeqeqeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index 8f17fbaed20..cbb48c707c5 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -41,3 +41,4 @@
#define BE_MONKEY 2048
#define BE_GANG 4096
#define BE_SHADOWLING 8192
+#define BE_ABDUCTOR 16384
diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm
index 062be18c68d..fb04d0dd356 100644
--- a/code/_globalvars/configuration.dm
+++ b/code/_globalvars/configuration.dm
@@ -46,5 +46,6 @@ var/list/be_special_flags = list(
"Blob" = BE_BLOB,
"Ninja" = BE_NINJA,
"Monkey" = BE_MONKEY,
- "Gang" = BE_GANG
+ "Gang" = BE_GANG,
+ "Abductor" = BE_ABDUCTOR
)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 8b31f3a7c74..ec38e7265bb 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -92,6 +92,7 @@
var/traitor_scaling_coeff = 6 //how much does the amount of players get divided by to determine traitors
var/changeling_scaling_coeff = 6 //how much does the amount of players get divided by to determine changelings
var/security_scaling_coeff = 8 //how much does the amount of players get divided by to determine open security officer positions
+ var/abductor_scaling_coeff = 15 //how many players per abductor team
var/traitor_objectives_amount = 2
var/protect_roles_from_antagonist = 0 //If security and such can be traitor/cult/other
@@ -421,6 +422,8 @@
config.changeling_scaling_coeff = text2num(value)
if("security_scaling_coeff")
config.security_scaling_coeff = text2num(value)
+ if("abductor_scaling_coeff")
+ config.abductor_scaling_coeff = text2num(value)
if("traitor_objectives_amount")
config.traitor_objectives_amount = text2num(value)
if("probability")
diff --git a/code/datums/helper_datums/icon_snapshot.dm b/code/datums/helper_datums/icon_snapshot.dm
new file mode 100644
index 00000000000..22b402be446
--- /dev/null
+++ b/code/datums/helper_datums/icon_snapshot.dm
@@ -0,0 +1,15 @@
+/datum/icon_snapshot
+ var/name
+ var/icon
+ var/icon_state
+ var/list/overlays
+
+/datum/icon_snapshot/proc/makeImg()
+ if(!icon || !icon_state)
+ return
+ var/obj/temp = new
+ temp.icon = icon
+ temp.icon_state = icon_state
+ temp.overlays = overlays.Copy()
+ var/icon/tempicon = getFlatIcon(temp) // TODO Actually write something less heavy-handed for this
+ return tempicon
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index d9b12400f19..de1f395efb4 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -245,9 +245,12 @@ proc/process_ghost_teleport_locs()
requires_power = 0
has_gravity = 1
-
-
-
+//Abductors
+/area/abductor_ship
+ name = "\improper Abductor Ship"
+ icon_state = "yellow"
+ requires_power = 0
+ has_gravity = 1
//PRISON
diff --git a/code/game/gamemodes/abduction/abduction.dm b/code/game/gamemodes/abduction/abduction.dm
new file mode 100644
index 00000000000..c934556f2b9
--- /dev/null
+++ b/code/game/gamemodes/abduction/abduction.dm
@@ -0,0 +1,342 @@
+/datum/game_mode
+ var/list/datum/mind/abductors = list()
+
+/datum/game_mode/abduction
+ name = "Abduction"
+ config_tag = "abduction"
+ antag_flag = BE_ABDUCTOR
+ pre_setup_before_jobs = 1
+ recommended_enemies = 2
+ required_players = 15
+ var/max_teams = 4
+ var/teams = 1
+ var/list/datum/mind/scientists = list()
+ var/list/datum/mind/agents = list()
+ var/list/datum/objective/team_objectives = list()
+ var/list/team_names = list()
+
+/datum/game_mode/abduction/announce()
+ world << "The current game mode is - Abduction!"
+
+/datum/game_mode/abduction/pre_setup()
+ var/teams = max(1, min(max_teams,round(num_players()/config.abductor_scaling_coeff)))
+ var/possible_teams = max(1,round(antag_candidates.len / 2))
+ teams = min(teams,possible_teams)
+
+ abductors.len = 2*teams
+ scientists.len = teams
+ agents.len = teams
+ team_objectives.len = teams
+ team_names.len = teams
+
+ for(var/i=1,i<=teams,i++)
+ if(!make_abductor_team(i))
+ return 0
+
+ return 1
+
+/datum/game_mode/abduction/proc/make_abductor_team(var/team_number)
+ //Team Name
+ team_names[team_number] = "Mothership [pick(possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names
+ //Team Objective
+ var/datum/objective/experiment/team_objective = new
+ team_objective.team = team_number
+ team_objectives[team_number] = team_objective
+ //Team Members
+ if(antag_candidates.len >=2)
+ var/datum/mind/scientist = pick(antag_candidates)
+ antag_candidates -= scientist
+ var/datum/mind/agent = pick(antag_candidates)
+ antag_candidates -= agent
+
+ scientist.assigned_role = "MODE"
+ scientist.special_role = "Abductor"
+ log_game("[scientist.key] (ckey) has been selected as an abductor team [team_number] scientist.")
+
+ agent.assigned_role = "MODE"
+ agent.special_role = "Abductor"
+ log_game("[agent.key] (ckey) has been selected as an abductor team [team_number] agent.")
+
+ abductors += agent
+ abductors += scientist
+ scientists[team_number] = scientist
+ agents[team_number] = agent
+ return 1
+ return 0
+
+/datum/game_mode/abduction/post_setup()
+ //Spawn Team
+ var/list/obj/effect/landmark/abductor/agent_landmarks = new
+ var/list/obj/effect/landmark/abductor/scientist_landmarks = new
+ agent_landmarks.len = max_teams
+ scientist_landmarks.len = max_teams
+ for(var/obj/effect/landmark/abductor/A in landmarks_list)
+ if(istype(A,/obj/effect/landmark/abductor/agent))
+ agent_landmarks[text2num(A.team)] = A
+ else if(istype(A,/obj/effect/landmark/abductor/scientist))
+ scientist_landmarks[text2num(A.team)] = A
+
+ var/datum/mind/agent
+ var/obj/effect/landmark/L
+ var/datum/mind/scientist
+ var/team_name
+ var/mob/living/carbon/human/H
+ var/datum/species/abductor/S
+ for(var/team_number=1,team_number<=teams,team_number++)
+ team_name = team_names[team_number]
+ agent = agents[team_number]
+ H = agent.current
+ L = agent_landmarks[team_number]
+ H.loc = L.loc
+ H.dna.species = new /datum/species/abductor()
+ S = H.dna.species
+ S.agent = 1
+ S.team = team_number
+ H.real_name = team_name + " Agent"
+ equip_common(H,team_number)
+ equip_agent(H,team_number)
+ greet_agent(agent,team_number)
+ H.regenerate_icons()
+
+ scientist = scientists[team_number]
+ H = scientist.current
+ L = scientist_landmarks[team_number]
+ H.loc = L.loc
+ H.dna.species = new /datum/species/abductor()
+ S = H.dna.species
+ S.scientist = 1
+ S.team = team_number
+ H.real_name = team_name + " Scientist"
+ equip_common(H,team_number)
+ equip_scientist(H,team_number)
+ greet_scientist(scientist,team_number)
+ H.regenerate_icons()
+ return ..()
+
+//Used for create antag buttons
+/datum/game_mode/abduction/proc/post_setup_team(var/team_number)
+ var/list/obj/effect/landmark/abductor/agent_landmarks = new
+ var/list/obj/effect/landmark/abductor/scientist_landmarks = new
+ agent_landmarks.len = max_teams
+ scientist_landmarks.len = max_teams
+ for(var/obj/effect/landmark/abductor/A in landmarks_list)
+ if(istype(A,/obj/effect/landmark/abductor/agent))
+ agent_landmarks[text2num(A.team)] = A
+ else if(istype(A,/obj/effect/landmark/abductor/scientist))
+ scientist_landmarks[text2num(A.team)] = A
+
+ var/datum/mind/agent
+ var/obj/effect/landmark/L
+ var/datum/mind/scientist
+ var/team_name
+ var/mob/living/carbon/human/H
+ var/datum/species/abductor/S
+
+ team_name = team_names[team_number]
+ agent = agents[team_number]
+ H = agent.current
+ L = agent_landmarks[team_number]
+ H.loc = L.loc
+ H.dna.species = new /datum/species/abductor()
+ S = H.dna.species
+ S.agent = 1
+ S.team = team_number
+ H.real_name = team_name + " Agent"
+ equip_common(H,team_number)
+ equip_agent(H,team_number)
+ greet_agent(agent,team_number)
+ H.regenerate_icons()
+
+ scientist = scientists[team_number]
+ H = scientist.current
+ L = scientist_landmarks[team_number]
+ H.loc = L.loc
+ H.dna.species = new /datum/species/abductor()
+ S = H.dna.species
+ S.scientist = 1
+ S.team = team_number
+ H.real_name = team_name + " Scientist"
+ equip_common(H,team_number)
+ equip_scientist(H,team_number)
+ greet_scientist(scientist,team_number)
+ H.regenerate_icons()
+
+
+/datum/game_mode/abduction/proc/greet_agent(var/datum/mind/abductor,var/team_number)
+ abductor.objectives += team_objectives[team_number]
+ var/team_name = team_names[team_number]
+
+ abductor.current << "You are an Abductor Agent of [team_name]!"
+ abductor.current << "With the help of your teammate kidnap and experiment on station members!"
+ abductor.current << "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve."
+
+ var/obj_count = 1
+ for(var/datum/objective/objective in abductor.objectives)
+ abductor.current << "Objective #[obj_count]: [objective.explanation_text]"
+ obj_count++
+ return
+
+/datum/game_mode/abduction/proc/greet_scientist(var/datum/mind/abductor,var/team_number)
+ abductor.objectives += team_objectives[team_number]
+ var/team_name = team_names[team_number]
+
+ abductor.current << "You are an Abductor Scientist of [team_name]!"
+ abductor.current << "With the help of your teammate kidnap and experiment on station members!"
+ abductor.current << "Use your tool and ship consoles to support the agent and retrieve human specimens."
+
+ var/obj_count = 1
+ for(var/datum/objective/objective in abductor.objectives)
+ abductor.current << "Objective #[obj_count]: [objective.explanation_text]"
+ obj_count++
+ return
+
+/datum/game_mode/abduction/proc/equip_common(var/mob/living/carbon/human/agent,var/team_number)
+ var/radio_freq = SYND_FREQ
+
+ var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(agent)
+ R.set_frequency(radio_freq)
+ agent.equip_to_slot_or_del(R, slot_ears)
+ agent.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(agent), slot_shoes)
+ agent.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(agent), slot_w_uniform) //they're greys gettit
+ agent.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(agent), slot_back)
+
+/datum/game_mode/abduction/proc/get_team_console(var/team)
+ var/obj/machinery/abductor/console/console
+ for(var/obj/machinery/abductor/console/c in machines)
+ if(c.team == team)
+ console = c
+ break
+ return console
+
+/datum/game_mode/abduction/proc/equip_agent(var/mob/living/carbon/human/agent,var/team_number)
+ var/obj/machinery/abductor/console/console = get_team_console(team_number)
+ var/obj/item/clothing/suit/armor/abductor/vest/V = new /obj/item/clothing/suit/armor/abductor/vest(agent)
+ if(console!=null)
+ console.vest = V
+ V.flags |= NODROP
+ agent.equip_to_slot_or_del(V, slot_wear_suit)
+ agent.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(agent), slot_in_backpack)
+ agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_belt)
+ agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack)
+ agent.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(agent), slot_in_backpack)
+
+
+/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number)
+ var/obj/machinery/abductor/console/console = get_team_console(team_number)
+ var/obj/item/device/abductor/gizmo/G = new /obj/item/device/abductor/gizmo(scientist)
+ if(console!=null)
+ console.gizmo = G
+ G.console = console
+ scientist.equip_to_slot_or_del(G, slot_in_backpack)
+
+ var/obj/item/weapon/implant/abductor/beamplant = new /obj/item/weapon/implant/abductor(scientist)
+ beamplant.imp_in = scientist
+ beamplant.implanted = 1
+ beamplant.implanted(scientist)
+ beamplant.home = console.pad
+
+
+/datum/game_mode/abduction/check_finished()
+ var/all_dead = 1
+ for(var/team_number=1,team_number<=teams,team_number++)
+ var/datum/mind/smind = scientists[team_number]
+ if(smind.current)
+ var/mob/living/M = smind.current
+ if(M.stat != DEAD)
+ all_dead = 0
+ var/obj/machinery/abductor/console/con = get_team_console(team_number)
+ var/datum/objective/objective = team_objectives[team_number]
+ if (con.experiment.points > objective.target_amount)
+ return 1
+ if(all_dead)
+ return 1
+ return ..()
+
+/datum/game_mode/abduction/declare_completion()
+ for(var/team_number=1,team_number<=teams,team_number++)
+ var/obj/machinery/abductor/console/console = get_team_console(team_number)
+ var/datum/objective/objective = team_objectives[team_number]
+ var/team_name = team_names[team_number]
+ var/datum/mind/amind = agents[team_number]
+ var/datum/mind/smind = scientists[team_number]
+ var/mob/living/carbon/human/agent = amind.current
+ var/mob/living/carbon/human/scientist = smind.current
+ if (console.experiment.points > objective.target_amount)
+ world << "[team_name] team fullfilled its mission! "
+ world << "Team Members : [agent.name]([agent.ckey]),[scientist.name]([scientist.ckey])"
+ else
+ world << "[team_name] team failed its mission! "
+ world << "Team Members : [agent.name]([agent.ckey]),[scientist.name]([scientist.ckey])"
+ ..()
+ return 1
+
+
+/datum/game_mode/proc/auto_declare_completion_abduction()
+ if(abductors.len)
+ world << "Abductors:"
+ for(var/datum/mind/M in abductors)
+ world << "Abductor [M.current ? M.current.name : "Abductor"]([M.key])"
+ return
+
+//Landmarks
+// TODO: Split into seperate landmarks for prettier ships
+/obj/effect/landmark/abductor
+ var/team = 1
+/obj/effect/landmark/abductor/console/New()
+ var/obj/machinery/abductor/console/c = new /obj/machinery/abductor/console(src.loc)
+ var/pad_loc = get_step(c,EAST)
+ var/obj/machinery/abductor/pad/p = new /obj/machinery/abductor/pad(pad_loc)
+ var/experiment_loc = get_step(c,WEST)
+ var/obj/machinery/abductor/experiment/e = new /obj/machinery/abductor/experiment(experiment_loc)
+ c.team = team
+ c.pad = p
+ c.experiment = e
+ e.console = c
+ qdel(src)
+
+/obj/effect/landmark/abductor/agent
+/obj/effect/landmark/abductor/scientist
+
+
+// OBJECTIVES
+datum/objective/experiment
+ dangerrating = 10
+ target_amount = 6
+ var/team
+
+datum/objective/experiment/New()
+ explanation_text = "Experiment on [target_amount] humans"
+
+datum/objective/experiment/check_completion()
+ return 0
+
+datum/objective/abductee
+ dangerrating = 5
+ completed = 1
+
+datum/objective/abductee/steal
+ explanation_text = "Steal all"
+
+datum/objective/abductee/steal/New()
+ var/target = pick(list("Pets","Lights","Monkeys","Fruits","Shoes","Soap Bars"))
+ explanation_text+=" [target]"
+
+datum/objective/abductee/capture
+ explanation_text = "Capture"
+
+datum/objective/abductee/capture/New()
+ var/list/jobs = SSjob.occupations
+ for(var/datum/job/J in jobs)
+ if(J.current_positions < 1)
+ jobs -= J
+ if(jobs.len > 0)
+ var/datum/job/target = pick(jobs)
+ explanation_text += " \a [target.title]."
+ else
+ explanation_text += " someone."
+
+datum/objective/abductee/shuttle
+ explanation_text = "You must escape the station! Get the shuttle called!"
+
+datum/objective/abductee/noclone
+ explanation_text = "Don't allow anyone to be cloned."
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/abduction_gear.dm b/code/game/gamemodes/abduction/abduction_gear.dm
new file mode 100644
index 00000000000..761c670d5ed
--- /dev/null
+++ b/code/game/gamemodes/abduction/abduction_gear.dm
@@ -0,0 +1,295 @@
+#define VEST_STEALTH 1
+#define VEST_COMBAT 2
+#define GIZMO_SCAN 1
+#define GIZMO_MARK 2
+
+//AGENT VEST
+/obj/item/clothing/suit/armor/abductor/vest
+ name = "Agent Vest"
+ desc = "Vest outfitted with alien stealth technology."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "vest_stealth"
+ item_state = "armor"
+ blood_overlay_type = "armor"
+ armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15)
+ action_button_name = "Activate"
+ action_button_is_hands_free = 1
+ var/mode = VEST_STEALTH
+ var/stealth_active = 0
+ var/combat_cooldown = 10
+ var/datum/icon_snapshot/disguise
+ var/stealth_armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15)
+ var/combat_armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 50, rad = 50)
+
+/obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode()
+ switch(mode)
+ if(VEST_STEALTH)
+ mode = VEST_COMBAT
+ DeactivateStealth()
+ armor = combat_armor
+ icon_state = "vest_combat"
+ return
+ if(VEST_COMBAT)// TO STEALTH
+ mode = VEST_STEALTH
+ armor = stealth_armor
+ icon_state = "vest_stealth"
+ return
+
+/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(var/datum/icon_snapshot/entry)
+ disguise = entry
+
+/obj/item/clothing/suit/armor/abductor/vest/proc/ActivateStealth()
+ if(disguise == null)
+ return
+ stealth_active = 1
+ if(istype(src.loc, /mob/living/carbon/human))
+ var/mob/living/carbon/human/M = src.loc
+ spawn(0)
+ anim(M.loc,M,'icons/mob/mob.dmi',,"cloak",,M.dir)
+
+ M.name_override = disguise.name
+ M.icon = disguise.icon
+ M.icon_state = disguise.icon_state
+ M.overlays = disguise.overlays
+ M.update_inv_r_hand()
+ M.update_inv_l_hand()
+ return
+
+/obj/item/clothing/suit/armor/abductor/vest/proc/DeactivateStealth()
+ if(!stealth_active)
+ return
+ stealth_active = 0
+ if(istype(src.loc, /mob/living/carbon/human))
+ var/mob/living/carbon/human/M = src.loc
+ spawn(0)
+ anim(M.loc,M,'icons/mob/mob.dmi',,"uncloak",,M.dir)
+ M.name_override = null
+ M.overlays.Cut()
+ M.regenerate_icons()
+ return
+
+/obj/item/clothing/suit/armor/abductor/vest/IsShield()
+ DeactivateStealth()
+ return 0
+/obj/item/clothing/suit/armor/abductor/vest/IsReflect()
+ DeactivateStealth()
+ return 0
+
+/obj/item/clothing/suit/armor/abductor/vest/ui_action_click()
+ switch(mode)
+ if(VEST_COMBAT)
+ Adrenaline()
+ if(VEST_STEALTH)
+ if(stealth_active)
+ DeactivateStealth()
+ else
+ ActivateStealth()
+
+/obj/item/clothing/suit/armor/abductor/vest/proc/Adrenaline()
+ if(istype(src.loc, /mob/living/carbon/human))
+ if(combat_cooldown != initial(combat_cooldown))
+ src.loc << "Combat injection is still recharging."
+ var/mob/living/carbon/human/M = src.loc
+ M.stat = 0
+ M.SetParalysis(0)
+ M.SetStunned(0)
+ M.SetWeakened(0)
+ M.lying = 0
+ M.update_canmove()
+ M.adjustStaminaLoss(-75)
+ combat_cooldown = 0
+ SSobj.processing |= src
+
+/obj/item/clothing/suit/armor/abductor/vest/process()
+ combat_cooldown++
+ if(combat_cooldown==initial(combat_cooldown))
+ SSobj.processing.Remove(src)
+
+/obj/item/device/abductor/proc/AbductorCheck(var/user)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.dna.species.id != "abductor")
+ user << "You can't figure how this works."
+ return 0
+ return 1
+ return 0
+
+/obj/item/device/abductor/proc/ScientistCheck(var/user)
+ var/mob/living/carbon/human/H = user
+ var/datum/species/abductor/S = H.dna.species
+ return S.scientist
+
+/obj/item/device/abductor/gizmo
+ name = "Science Tool"
+ desc = "Alien science is 90% dissections 10% probings."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "gizmo_scan"
+ item_state = "pen"
+ var/mode = GIZMO_SCAN
+ var/mob/living/marked
+ var/prepared = 0
+ var/obj/machinery/abductor/console/console
+
+/obj/item/device/abductor/gizmo/attack_self(mob/user)
+ if(!AbductorCheck(user))
+ return
+ if(!ScientistCheck(user))
+ user << "You're not trained to use this"
+ return
+ if(mode == GIZMO_SCAN)
+ mode = GIZMO_MARK
+ icon_state = "gizmo_mark"
+ else
+ mode = GIZMO_SCAN
+ icon_state = "gizmo_scan"
+ user << "You switch the device to [mode==GIZMO_SCAN? "SCAN": "MARK"] MODE"
+
+/obj/item/device/abductor/gizmo/attack(mob/living/M, mob/user)
+ if(!AbductorCheck(user))
+ return
+ if(!ScientistCheck(user))
+ user << "You're not trained to use this"
+ return
+ switch(mode)
+ if(GIZMO_SCAN)
+ scan(M, user)
+ if(GIZMO_MARK)
+ if(marked == M && !prepared)
+ prepare(M,user)
+ mark(M, user)
+
+
+/obj/item/device/abductor/gizmo/afterattack(var/atom/target, var/mob/living/user, flag, params)
+ if(flag)
+ return
+ if(!AbductorCheck(user))
+ return
+ if(!ScientistCheck(user))
+ user << "You're not trained to use this"
+ return
+ switch(mode)
+ if(GIZMO_SCAN)
+ scan(target, user)
+ if(GIZMO_MARK)
+ mark(target, user)
+
+/obj/item/device/abductor/gizmo/proc/scan(var/atom/target, var/mob/living/user)
+ if(istype(target,/mob/living/carbon/human))
+ if(console!=null)
+ console.AddSnapshot(target)
+ user << "You scan and add the being to the database"
+
+/obj/item/device/abductor/gizmo/proc/mark(var/atom/target, var/mob/living/user)
+ if(marked != target)
+ prepared = 0
+ else
+ user << "This specimen is already marked."
+ if(istype(target,/mob/living/carbon/human))
+ marked = target
+ user << "You mark the target for future retrieval."
+
+/obj/item/device/abductor/gizmo/proc/prepare(var/atom/target, var/mob/living/user)
+ user << "You start preparing the specimen for transport "
+ if(do_after(user, 100))
+ prepared = 1
+ user << "You finish preparing the specimen for transport "
+
+
+/obj/item/device/abductor/silencer
+ name = "Abductor Silencer"
+ desc = "Device used to break communication equipment"
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "silencer"
+ item_state = "pen"
+
+/obj/item/device/abductor/silencer/attack(mob/living/M, mob/user)
+ if(!AbductorCheck(user))
+ return
+ radio_off(M, user)
+
+/obj/item/device/abductor/silencer/afterattack(var/atom/target, var/mob/living/user, flag, params)
+ if(flag)
+ return
+ if(!AbductorCheck(user))
+ return
+ radio_off(target, user)
+
+/obj/item/device/abductor/silencer/proc/radio_off(var/atom/target, var/mob/living/user)
+ if( !(user in (viewers(7,target))) )
+ return
+
+ var/turf/targloc = get_turf(target)
+
+ var/mob/living/carbon/human/M
+ for(M in view(2,targloc))
+ user << "You silence [M.name] radio devices."
+ radio_off_mob(M)
+
+/obj/item/device/abductor/silencer/proc/radio_off_mob(var/mob/living/carbon/human/M)
+ var/list/all_items = M.GetAllContents()
+
+ for(var/obj/I in all_items)
+ if(istype(I,/obj/item/device/radio/))
+ var/obj/item/device/radio/r = I
+ r.listening = 0
+ if(!istype(I,/obj/item/device/radio/headset))
+ r.broadcasting = 0 //goddamned headset hacks
+
+
+/obj/item/weapon/implant/abductor
+ name = "Emergency Beam"
+ desc = "Gets you back on the ship."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "implant"
+ activated = 1
+ var/obj/machinery/abductor/pad/home
+ var/cooldown = 30
+
+/obj/item/weapon/implant/abductor/activate()
+ if(cooldown == initial(cooldown))
+ home.Retrieve(imp_in,1)
+ cooldown = 0
+ SSobj.processing |= src
+ else
+ imp_in << "The emergency beam is still recharging!"
+ return
+
+/obj/item/weapon/implant/abductor/process()
+ if(cooldown < initial(cooldown))
+ cooldown++
+ if(cooldown == initial(cooldown))
+ SSobj.processing.Remove(src)
+
+
+/obj/item/device/firing_pin/alien
+ name = "alien-looking pin"
+ desc = "Only non-humans can use this pin"
+ fail_message = "Human DNA detected! Authorization revoked!"
+
+/obj/item/device/firing_pin/alien/pin_auth(mob/living/user)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.dna.species.id == "human") //stealth lizard buff go
+ return 0
+ return 1
+
+/obj/item/weapon/gun/energy/decloner/alien
+ ammo_type = list(/obj/item/ammo_casing/energy/declone)
+ pin = /obj/item/device/firing_pin/alien
+
+/obj/item/weapon/paper/abductor
+ name = "Dissection Guide"
+ info = {""Dissection for Dummies
+
+1.Acquire fresh specimen.
+2.Put the specimen on operating table
+3.Apply surgical drapes preparing for dissection
+4.Apply scalpel to specimen torso
+5.Stop the bleeders and retract skin
+6.Cut out organs you find with a scalpel
+7.Use your hands to remove the remaining organs
+8.Insert replacement gland (Retrieve one from gland storage)
+9.Put the specimen in the experiment machinery
+8.Choose one of the machine options and follow displayed instructions
+
+Congratulations! You are now trained for xenobiology research!""}
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/abduction_machinery.dm b/code/game/gamemodes/abduction/abduction_machinery.dm
new file mode 100644
index 00000000000..2a03326d690
--- /dev/null
+++ b/code/game/gamemodes/abduction/abduction_machinery.dm
@@ -0,0 +1,479 @@
+/obj/machinery/abductor/console
+ name = "Abductor console"
+ desc = "Ship command center."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "console"
+ density = 1
+ anchored = 1.0
+ var/team = 0
+ var/obj/item/device/abductor/gizmo/gizmo
+ var/obj/item/clothing/suit/armor/abductor/vest/vest
+ var/obj/machinery/abductor/experiment/experiment
+ var/obj/machinery/abductor/pad/pad
+ var/list/datum/icon_snapshot/disguises = list()
+
+/obj/machinery/abductor/console/attack_hand(var/mob/user as mob)
+ if(..())
+ return
+ if(!IsAbductor(user))
+ return
+ user.set_machine(src)
+ var/dat = ""
+ dat += "
| "
+ dat += " | "
+ dat += "Probe " + dat += "Dissect " + dat += "Analyze " + dat += " |
| Abductors | ||
| [M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""] | " + dat += "PM | " + dat += "Show Objective |
| Abductor not found! |
| Blob |