From 6025175bff4fb43af68be8f64d02a54c5bba10f3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 8 Dec 2023 11:11:22 +0100 Subject: [PATCH] [MIRROR] Abductor Ship Bitrunner Domain [MDB IGNORE] (#25492) * Abductor Ship Bitrunner Domain (#80106) ## About The Pull Request Adds in a new Bitrunner domain called Abductor Ship which is an assault-type domain themed as an abductor mothership. It adds in a new Abductor simplemob, gives them enemy AI almost identical to the Syndicate Assault mobs and then sets them up in a new modular Domain map fit with a custom Safehouse and multiple enemy types. The domain is the same reward and difficulty level as the Syndicate Assault mission and can be easily compared to it, while also being fresh and having a cool themed map to run around in and blast aliens. I don't know, I think it's cool... ## Why It's Good For The Game Fun alien destruction, more Bitrunner content. Can you really go wrong with that? It seems like bitrunning becomes dry when you've exhausted all your domain options and have gotten used to them. ## Changelog :cl: add: Added new modular Assault-Type domain "Abductor Ship" add: Added new simple mob abductor agents team /:cl: * Abductor Ship Bitrunner Domain --------- Co-authored-by: IsaacExists <125638858+IsaacExists@users.noreply.github.com> --- _maps/safehouses/abductor.dmm | 94 + _maps/virtual_domains/abductor_ship.dmm | 2230 +++++++++++++++++ code/modules/bitrunning/outfits.dm | 5 + .../virtual_domain/domains/abductor_ship.dm | 15 + .../virtual_domain/modular_mob_segment.dm | 6 + .../mob/living/basic/trooper/abductor.dm | 42 + strings/modular_maps/safehouse.toml | 3 + tgstation.dme | 2 + 8 files changed, 2397 insertions(+) create mode 100644 _maps/safehouses/abductor.dmm create mode 100644 _maps/virtual_domains/abductor_ship.dmm create mode 100644 code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm create mode 100644 code/modules/mob/living/basic/trooper/abductor.dm diff --git a/_maps/safehouses/abductor.dmm b/_maps/safehouses/abductor.dmm new file mode 100644 index 00000000000..f18b1b6978d --- /dev/null +++ b/_maps/safehouses/abductor.dmm @@ -0,0 +1,94 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/abductor, +/area/virtual_domain/safehouse) +"b" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"d" = ( +/obj/modular_map_connector, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"n" = ( +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"o" = ( +/obj/effect/landmark/bitrunning/cache_goal_turf, +/turf/open/floor/plating/abductor2, +/area/virtual_domain/safehouse) +"t" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/turf/open/floor/plating/abductor2, +/area/virtual_domain/safehouse) +"u" = ( +/obj/machinery/abductor/console, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"v" = ( +/obj/machinery/door/airlock/abductor, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) +"E" = ( +/obj/machinery/abductor/pad{ + desc = "A funky looking disc, built into the floor." + }, +/turf/open/floor/plating/abductor, +/area/virtual_domain/safehouse) + +(1,1,1) = {" +n +a +a +a +a +d +"} +(2,1,1) = {" +a +E +t +t +b +a +"} +(3,1,1) = {" +a +n +n +n +n +a +"} +(4,1,1) = {" +v +n +n +n +n +v +"} +(5,1,1) = {" +a +n +n +n +n +a +"} +(6,1,1) = {" +a +u +o +o +n +a +"} +(7,1,1) = {" +n +a +a +a +a +n +"} diff --git a/_maps/virtual_domains/abductor_ship.dmm b/_maps/virtual_domains/abductor_ship.dmm new file mode 100644 index 00000000000..ebb4a042bb9 --- /dev/null +++ b/_maps/virtual_domains/abductor_ship.dmm @@ -0,0 +1,2230 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bK" = ( +/turf/closed/wall/mineral/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"cp" = ( +/obj/structure/table/abductor, +/obj/item/food/soylentgreen{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"cr" = ( +/obj/item/flashlight/lantern{ + pixel_x = 4; + pixel_y = -8; + light_on = 1 + }, +/obj/item/flashlight/lantern{ + pixel_x = -9; + pixel_y = 8; + light_on = 1 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"dM" = ( +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular, +/turf/template_noop, +/area/virtual_domain/safehouse) +"fk" = ( +/obj/effect/mob_spawn/corpse/human/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"ge" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"gF" = ( +/obj/machinery/abductor/pad{ + desc = "A funky looking disc, built into the floor." + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"gO" = ( +/obj/structure/table/abductor, +/obj/item/poster/random_abductor{ + pixel_x = 9; + pixel_y = 3 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"ih" = ( +/obj/structure/table/abductor, +/obj/item/storage/belt/military/abductor{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/storage/belt/military/abductor{ + pixel_x = -5; + pixel_y = -1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"kl" = ( +/obj/structure/table_frame/abductor, +/obj/item/organ/internal/lungs{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/shard/plastitanium{ + pixel_x = -8; + pixel_y = 1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"kt" = ( +/obj/structure/table/abductor, +/obj/item/multitool/abductor{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/item/screwdriver/abductor{ + pixel_y = 8; + pixel_x = -1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"kN" = ( +/obj/machinery/fat_sucker, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"lC" = ( +/obj/structure/table/abductor, +/obj/item/clothing/head/helmet/abductor{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/abductor/silencer{ + pixel_x = 6; + pixel_y = -4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"lN" = ( +/turf/open/floor/holofloor/hyperspace, +/area/ruin/space/has_grav/powered/virtual_domain) +"lR" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"lW" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"mR" = ( +/obj/machinery/abductor/pad, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"nT" = ( +/obj/structure/table/abductor, +/obj/item/food/soylentgreen{ + pixel_x = 4; + pixel_y = -1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"oL" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"pL" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/space/basic, +/area/ruin/space/has_grav/powered/virtual_domain) +"pT" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"rw" = ( +/obj/structure/table/abductor, +/obj/item/toy/plush/abductor/agent{ + pixel_x = 10; + pixel_y = 8 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"rY" = ( +/obj/modular_map_root/safehouse{ + key = "abductor" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"sv" = ( +/obj/structure/table/abductor, +/obj/item/crowbar/abductor, +/obj/item/stock_parts/cell/infinite/abductor{ + pixel_x = 5; + pixel_y = -3 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"to" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 9; + pixel_y = 7 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"uk" = ( +/obj/structure/table/abductor, +/obj/item/wrench/abductor{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/wirecutters/abductor{ + pixel_x = -3; + pixel_y = 4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"uw" = ( +/obj/structure/bed/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"ux" = ( +/obj/machinery/door/airlock/abductor{ + name = "Command Center"; + locked = 1 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"uD" = ( +/obj/machinery/computer/camera_advanced/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"vY" = ( +/obj/machinery/door/airlock/abductor{ + name = "Repair Bay" + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"vZ" = ( +/obj/machinery/abductor/gland_dispenser, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"xB" = ( +/turf/closed/indestructible/opsglass, +/area/ruin/space/has_grav/powered/virtual_domain) +"xM" = ( +/obj/effect/decal/cleanable/molten_object{ + pixel_x = -6; + pixel_y = -7 + }, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"yt" = ( +/obj/effect/decal/cleanable/blood/xtracks, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"zX" = ( +/obj/machinery/abductor/experiment, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"AG" = ( +/obj/item/shell/server, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Fy" = ( +/obj/effect/decal/cleanable/molten_object/large{ + pixel_x = -5; + pixel_y = 14 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"GX" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"IC" = ( +/obj/structure/table/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"JC" = ( +/obj/item/organ/external/tail/cat, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"JR" = ( +/obj/machinery/door/airlock/abductor{ + name = "Experimentation Lab" + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"JU" = ( +/obj/structure/closet/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"KK" = ( +/obj/structure/bed/abductor, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"KX" = ( +/turf/closed/indestructible/binary, +/area/space) +"Lz" = ( +/obj/structure/table/abductor, +/obj/item/melee/baton/abductor{ + desc = "Even aliens can see the use of a good old-fashioned beating stick."; + pixel_x = 6; + pixel_y = -5 + }, +/obj/item/gun/energy/shrink_ray{ + pixel_x = -5; + pixel_y = 7 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Mr" = ( +/obj/machinery/chem_dispenser/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"MC" = ( +/obj/item/kirbyplants/photosynthetic, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ne" = ( +/obj/machinery/abductor/console, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"NW" = ( +/obj/structure/server, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"PB" = ( +/obj/item/organ/external/antennae, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Qp" = ( +/turf/template_noop, +/area/space) +"QC" = ( +/obj/structure/chair/comfy/teal{ + dir = 8 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Rd" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Rg" = ( +/obj/structure/table/abductor, +/obj/item/ammo_box/magazine/smgm45, +/obj/item/ammo_box/magazine/smgm45{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/gun/ballistic/automatic/c20r/unrestricted{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"RI" = ( +/obj/machinery/door/airlock/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Sd" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Ub" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Uf" = ( +/obj/item/flashlight/seclite{ + pixel_x = 9; + pixel_y = -11 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/clothing/suit/armor/vest/alt{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Us" = ( +/obj/structure/table/abductor, +/obj/item/abductor/mind_device{ + desc = "Just holding this makes your head ache."; + pixel_x = 3 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"UX" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Vl" = ( +/obj/machinery/harvester, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"VE" = ( +/obj/structure/table/abductor, +/obj/item/storage/box/alienhandcuffs, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"VY" = ( +/obj/effect/mob_spawn/corpse/human/abductor{ + pixel_x = 9; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"We" = ( +/obj/structure/table/abductor, +/obj/item/dualsaber/green{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/gun/ballistic/automatic/c20r/unrestricted{ + pixel_x = 8; + pixel_y = -6 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Wk" = ( +/obj/structure/table/abductor, +/obj/item/weldingtool/abductor, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"WS" = ( +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"XU" = ( +/obj/effect/decal/cleanable/xenoblood/xgibs/body, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"Yq" = ( +/obj/effect/decal/cleanable/xenoblood/xsplatter, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) +"YV" = ( +/turf/closed/indestructible/alien, +/area/ruin/space/has_grav/powered/virtual_domain) +"ZM" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/plating/abductor, +/area/ruin/space/has_grav/powered/virtual_domain) + +(1,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(2,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(3,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(4,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(5,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(6,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(7,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +kN +lW +uw +IC +IC +uw +lW +kN +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(8,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(9,1,1) = {" +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +oL +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(10,1,1) = {" +Qp +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(11,1,1) = {" +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +MC +YV +YV +YV +WS +WS +YV +YV +YV +MC +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +"} +(12,1,1) = {" +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +lW +WS +WS +YV +YV +YV +bK +YV +WS +WS +YV +YV +YV +YV +YV +WS +WS +lW +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +"} +(13,1,1) = {" +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +YV +YV +bK +bK +YV +YV +WS +WS +YV +YV +YV +YV +YV +YV +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +"} +(14,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +YV +YV +JU +yt +VY +YV +MC +WS +WS +MC +YV +ih +Yq +JU +YV +YV +UX +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +"} +(15,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +UX +WS +WS +YV +YV +Wk +WS +WS +WS +YV +WS +WS +WS +WS +YV +rw +WS +WS +WS +YV +YV +Vl +WS +MC +YV +bK +YV +YV +KX +KX +Qp +Qp +"} +(16,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +YV +YV +uk +WS +oL +YV +YV +WS +WS +WS +WS +WS +WS +YV +YV +WS +WS +JU +YV +YV +YV +YV +YV +YV +bK +YV +YV +KX +Qp +Qp +"} +(17,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +YV +JU +WS +WS +WS +vY +WS +WS +WS +WS +WS +WS +WS +WS +RI +WS +WS +XU +gO +YV +YV +YV +AG +YV +YV +bK +YV +KX +Qp +Qp +"} +(18,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +MC +Vl +YV +UX +WS +MC +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +JU +fk +lC +YV +YV +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(19,1,1) = {" +KX +lN +lN +lN +pL +YV +YV +YV +YV +YV +YV +YV +YV +MC +WS +WS +ge +ge +ge +ge +ge +rY +WS +WS +MC +YV +YV +YV +YV +YV +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(20,1,1) = {" +KX +lN +lN +pL +pL +uD +ZM +ZM +WS +Rd +MC +WS +WS +WS +WS +WS +ge +ge +ge +ge +ge +ge +WS +WS +WS +WS +WS +WS +YV +YV +xB +xB +xB +YV +bK +YV +KX +Qp +Qp +"} +(21,1,1) = {" +KX +lN +lN +pL +Ne +WS +WS +WS +WS +ux +WS +WS +WS +WS +WS +WS +ge +ge +Uf +cr +ge +ge +WS +WS +WS +WS +WS +WS +WS +YV +WS +WS +WS +YV +bK +YV +KX +Qp +Qp +"} +(22,1,1) = {" +KX +lN +lN +pL +Lz +WS +WS +WS +WS +Rd +WS +WS +WS +WS +WS +WS +ge +ge +We +Rg +ge +ge +WS +WS +WS +oL +WS +WS +WS +RI +WS +oL +WS +YV +bK +YV +KX +Qp +Qp +"} +(23,1,1) = {" +KX +lN +lN +pL +Ne +WS +WS +WS +WS +ux +WS +WS +WS +WS +WS +WS +ge +ge +ge +ge +ge +ge +WS +WS +WS +WS +WS +WS +WS +YV +WS +WS +WS +YV +bK +YV +KX +Qp +Qp +"} +(24,1,1) = {" +KX +lN +lN +pL +pL +uD +Ub +Ub +WS +Rd +MC +WS +WS +WS +WS +WS +ge +ge +ge +ge +dM +ge +WS +WS +WS +WS +WS +WS +YV +YV +xB +xB +xB +YV +bK +YV +KX +Qp +Qp +"} +(25,1,1) = {" +KX +lN +lN +lN +pL +YV +YV +YV +YV +YV +YV +YV +YV +MC +WS +WS +ge +ge +ge +ge +ge +lR +WS +WS +MC +YV +YV +YV +YV +bK +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(26,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +MC +uw +YV +Mr +JC +uw +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +MC +xM +cp +YV +bK +NW +WS +NW +YV +bK +YV +KX +Qp +Qp +"} +(27,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +UX +WS +YV +uw +WS +WS +pT +JR +WS +WS +WS +WS +WS +WS +WS +WS +RI +WS +WS +WS +Us +YV +bK +bK +AG +YV +YV +bK +YV +KX +Qp +Qp +"} +(28,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +YV +YV +mR +WS +WS +YV +YV +WS +WS +WS +WS +WS +WS +YV +YV +Fy +WS +IC +YV +YV +YV +YV +YV +YV +bK +YV +YV +KX +Qp +Qp +"} +(29,1,1) = {" +KX +lN +lN +lN +YV +bK +YV +WS +WS +WS +YV +YV +kl +PB +WS +KK +YV +WS +WS +WS +WS +YV +VE +to +oL +QC +YV +YV +UX +WS +MC +YV +bK +YV +YV +KX +KX +Qp +Qp +"} +(30,1,1) = {" +KX +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +YV +YV +uw +MC +vZ +YV +MC +WS +WS +WS +YV +nT +WS +MC +YV +YV +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +"} +(31,1,1) = {" +KX +lN +lN +lN +lN +YV +YV +YV +YV +gF +WS +WS +YV +YV +YV +YV +YV +YV +WS +WS +YV +YV +YV +YV +YV +YV +WS +WS +gF +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +"} +(32,1,1) = {" +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +lW +oL +WS +YV +YV +YV +bK +YV +WS +WS +YV +bK +YV +YV +YV +WS +WS +lW +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +"} +(33,1,1) = {" +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +MC +YV +YV +YV +WS +WS +YV +YV +YV +MC +WS +WS +oL +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +"} +(34,1,1) = {" +Qp +Qp +KX +KX +lN +lN +lN +lN +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(35,1,1) = {" +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +YV +YV +YV +YV +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +WS +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(36,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +zX +WS +GX +WS +WS +WS +WS +GX +WS +zX +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(37,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +Sd +sv +Sd +WS +WS +Sd +kt +Sd +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(38,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +YV +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(39,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(40,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(41,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(42,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(43,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} +(44,1,1) = {" +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +Qp +"} diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm index 4b3e54f329a..41a65b228ff 100644 --- a/code/modules/bitrunning/outfits.dm +++ b/code/modules/bitrunning/outfits.dm @@ -14,3 +14,8 @@ . = ..() user.psykerize() +/datum/outfit/bitductor + name = "Bitrunning Abductor" + uniform = /obj/item/clothing/under/abductor + gloves = /obj/item/clothing/gloves/fingerless + shoes = /obj/item/clothing/shoes/jackboots diff --git a/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm b/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm new file mode 100644 index 00000000000..6475a20a0c7 --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm @@ -0,0 +1,15 @@ +/datum/lazy_template/virtual_domain/abductor_ship + name = "Abductor Ship" + cost = BITRUNNER_COST_MEDIUM + desc = "Board an abductor ship and take their goodies." + difficulty = BITRUNNER_DIFFICULTY_MEDIUM + extra_loot = list(/obj/item/toy/plush/abductor/agent = 1) + help_text = "An abductor mothership unknowingly entered a hostile environment. \ + They are currently preparing to escape the area with their gear and loot including \ + the crate. Be careful, they are known for their advanced weaponry." + is_modular = TRUE + key = "abductor_ship" + map_name = "abductor_ship" + mob_modules = list(/datum/modular_mob_segment/abductor_agents) + reward_points = BITRUNNER_REWARD_MEDIUM + forced_outfit = /datum/outfit/bitductor diff --git a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm index b845eee564d..ab691274bc5 100644 --- a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm +++ b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm @@ -72,6 +72,12 @@ /mob/living/basic/trooper/syndicate/melee, ) +/datum/modular_mob_segment/abductor_agents + mobs = list( + /mob/living/basic/trooper/abductor/melee, + /mob/living/basic/trooper/abductor/ranged, + ) + /datum/modular_mob_segment/syndicate_elite mobs = list( /mob/living/basic/trooper/syndicate/melee/sword/space/stormtrooper, diff --git a/code/modules/mob/living/basic/trooper/abductor.dm b/code/modules/mob/living/basic/trooper/abductor.dm new file mode 100644 index 00000000000..7f5ed6fff9b --- /dev/null +++ b/code/modules/mob/living/basic/trooper/abductor.dm @@ -0,0 +1,42 @@ +/// Abductor troopers +/mob/living/basic/trooper/abductor + name = "Abductor Agent" + desc = "Mezaflorp?" + speed = 1.1 + faction = list(ROLE_SYNDICATE) + loot = list(/obj/effect/mob_spawn/corpse/human/abductor) + mob_spawner = /obj/effect/mob_spawn/corpse/human/abductor + +/mob/living/basic/trooper/abductor/melee + melee_damage_lower = 15 + melee_damage_upper = 15 + loot = list(/obj/effect/gibspawner/human) + attack_verb_continuous = "beats" + attack_verb_simple = "beat" + attack_sound = 'sound/weapons/egloves.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + r_hand = /obj/item/melee/baton/abductor + var/projectile_deflect_chance = 0 + +/mob/living/basic/trooper/abductor/ranged + loot = list(/obj/effect/gibspawner/human) + ai_controller = /datum/ai_controller/basic_controller/trooper/ranged + r_hand = /obj/item/gun/energy/alien + /// Type of bullet we use + var/casingtype = /obj/item/ammo_casing/energy/lasergun + /// Sound to play when firing weapon + var/projectilesound = 'sound/weapons/laser2.ogg' + /// number of burst shots + var/burst_shots = 1 + /// Time between taking shots + var/ranged_cooldown = 5 SECONDS + +/mob/living/basic/trooper/abductor/ranged/Initialize(mapload) + . = ..() + AddComponent(\ + /datum/component/ranged_attacks,\ + casing_type = casingtype,\ + projectile_sound = projectilesound,\ + cooldown_time = ranged_cooldown,\ + burst_shots = burst_shots,\ + ) diff --git a/strings/modular_maps/safehouse.toml b/strings/modular_maps/safehouse.toml index 98feaa323e3..90faf735140 100644 --- a/strings/modular_maps/safehouse.toml +++ b/strings/modular_maps/safehouse.toml @@ -1,5 +1,8 @@ directory = "_maps/safehouses/" +[rooms.abductor] +modules = ["abductor.dmm"] + [rooms.bathroom] modules = ["bathroom.dmm"] diff --git a/tgstation.dme b/tgstation.dme index 433c2e967a9..9d5a4454fc3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3483,6 +3483,7 @@ #include "code\modules\bitrunning\util\virtual_mob.dm" #include "code\modules\bitrunning\virtual_domain\modular_mob_segment.dm" #include "code\modules\bitrunning\virtual_domain\virtual_domain.dm" +#include "code\modules\bitrunning\virtual_domain\domains\abductor_ship.dm" #include "code\modules\bitrunning\virtual_domain\domains\ash_drake.dm" #include "code\modules\bitrunning\virtual_domain\domains\beach_bar.dm" #include "code\modules\bitrunning\virtual_domain\domains\blood_drunk_miner.dm" @@ -4809,6 +4810,7 @@ #include "code\modules\mob\living\basic\trader\trader_ai.dm" #include "code\modules\mob\living\basic\trader\trader_data.dm" #include "code\modules\mob\living\basic\trader\trader_items.dm" +#include "code\modules\mob\living\basic\trooper\abductor.dm" #include "code\modules\mob\living\basic\trooper\nanotrasen.dm" #include "code\modules\mob\living\basic\trooper\pirate.dm" #include "code\modules\mob\living\basic\trooper\russian.dm"