diff --git a/_maps/virtual_domains/starfront_saloon.dmm b/_maps/virtual_domains/starfront_saloon.dmm
deleted file mode 100644
index 277382b6dbb..00000000000
--- a/_maps/virtual_domains/starfront_saloon.dmm
+++ /dev/null
@@ -1,1834 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"ae" = (
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"cK" = (
-/obj/effect/landmark/bitrunning/mob_segment,
-/turf/template_noop,
-/area/virtual_domain)
-"cU" = (
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"df" = (
-/obj/effect/spawner/random/vending/snackvend,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"do" = (
-/obj/effect/spawner/random/trash/garbage,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"eU" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"gh" = (
-/obj/effect/spawner/random/vending/colavend,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"hz" = (
-/obj/item/clothing/head/cowboy,
-/obj/item/clothing/head/cowboy,
-/obj/item/clothing/head/cowboy,
-/obj/structure/closet,
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"il" = (
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"it" = (
-/obj/modular_map_root/generic{
- key = "station_medium"
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"iJ" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/entertainment/plushie,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"iO" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"jt" = (
-/obj/item/gun/energy/marksman_revolver{
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/item/gun/energy/marksman_revolver{
- pixel_x = 4
- },
-/obj/item/gun/energy/marksman_revolver{
- pixel_x = -4;
- pixel_y = -4
- },
-/obj/structure/table,
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"ma" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/decoration/generic,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"mq" = (
-/obj/effect/baseturf_helper/virtual_domain,
-/turf/closed/indestructible/binary,
-/area/virtual_domain)
-"mu" = (
-/turf/closed/wall,
-/area/virtual_domain)
-"on" = (
-/obj/structure/table/greyscale,
-/obj/machinery/recharger{
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/machinery/recharger{
- pixel_x = -8;
- pixel_y = 4
- },
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"oR" = (
-/obj/effect/spawner/random/structure/chair_maintenance{
- dir = 8
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"po" = (
-/obj/effect/baseturf_helper/virtual_domain,
-/obj/modular_map_root/safehouse{
- key = "den"
- },
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"sX" = (
-/obj/effect/spawner/random/decoration/statue,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"uW" = (
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"ve" = (
-/obj/effect/spawner/random/trash/graffiti,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"wB" = (
-/obj/effect/spawner/random/engineering/tank,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"wK" = (
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"yF" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/food_or_drink/snack,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"zU" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/machinery/recharger{
- pixel_x = 8;
- pixel_y = 4
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Au" = (
-/obj/effect/spawner/random/trash/garbage,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"AF" = (
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Bi" = (
-/obj/effect/spawner/random/structure/chair_maintenance{
- dir = 4
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"BX" = (
-/obj/effect/spawner/random/trash/graffiti,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ey" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/decoration/ornament,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"EK" = (
-/obj/effect/spawner/random/structure/chair_maintenance{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Gz" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/effect/spawner/random/armory/shotgun,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"GY" = (
-/obj/effect/spawner/random/entertainment/arcade,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ib" = (
-/obj/effect/spawner/random/trash/bin,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Il" = (
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ix" = (
-/obj/structure/closet,
-/obj/effect/spawner/random/maintenance/three,
-/obj/effect/spawner/random/exotic/antag_gear,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"Ja" = (
-/turf/closed/indestructible/binary,
-/area/virtual_domain)
-"JA" = (
-/obj/effect/spawner/random/structure/crate,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"KD" = (
-/obj/effect/landmark/bitrunning/cache_spawn,
-/turf/template_noop,
-/area/virtual_domain)
-"KN" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/virtual_domain)
-"Lu" = (
-/obj/structure/table/greyscale,
-/obj/machinery/recharger{
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/machinery/recharger{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/machinery/light/directional/south,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"MG" = (
-/obj/effect/spawner/random/trash/graffiti,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"Oq" = (
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ox" = (
-/obj/structure/closet,
-/obj/effect/spawner/random/maintenance/five,
-/obj/effect/spawner/random/armory/laser_gun,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"OX" = (
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"OZ" = (
-/obj/effect/spawner/random/structure/billboard,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"PE" = (
-/turf/template_noop,
-/area/virtual_domain)
-"Qi" = (
-/obj/modular_map_root/generic{
- key = "station_small"
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"QM" = (
-/obj/modular_map_root/generic{
- key = "station_large"
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"QO" = (
-/obj/machinery/light/directional/east,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Rk" = (
-/obj/effect/spawner/random/trash/graffiti,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Te" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/engineering/toolbox,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Tn" = (
-/turf/open/space/basic,
-/area/virtual_domain)
-"TM" = (
-/obj/machinery/light/directional/south,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"VX" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Wd" = (
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Wp" = (
-/obj/effect/landmark/bitrunning/mob_segment,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-
-(1,1,1) = {"
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-mq
-"}
-(2,1,1) = {"
-Ja
-il
-il
-il
-il
-mu
-df
-il
-cU
-cU
-cU
-cU
-cU
-po
-il
-OX
-Ja
-"}
-(3,1,1) = {"
-Ja
-mu
-mu
-mu
-mu
-mu
-il
-il
-cU
-jt
-on
-hz
-cU
-cU
-il
-OX
-Ja
-"}
-(4,1,1) = {"
-Ja
-OX
-OX
-OX
-OX
-OX
-Qi
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(5,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-gh
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(6,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(7,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(8,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-il
-Ja
-"}
-(9,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-il
-il
-il
-il
-il
-il
-Ja
-"}
-(10,1,1) = {"
-Ja
-Ix
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-il
-il
-TM
-mu
-KN
-KN
-Ja
-"}
-(11,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(12,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(13,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Il
-KN
-Tn
-Tn
-Ja
-"}
-(14,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(15,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(16,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-VX
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(17,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(18,1,1) = {"
-Ja
-Au
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-sX
-il
-iO
-KN
-Tn
-Tn
-Ja
-"}
-(19,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Te
-mu
-Tn
-Tn
-Ja
-"}
-(20,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(21,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-AF
-KN
-Tn
-Tn
-Ja
-"}
-(22,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(23,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-Wp
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(24,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(25,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-VX
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(26,1,1) = {"
-Ja
-wB
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(27,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-iJ
-mu
-Tn
-Tn
-Ja
-"}
-(28,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-il
-uW
-il
-il
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(29,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-oR
-oR
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(30,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-Oq
-mu
-mu
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(31,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-Bi
-EK
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(32,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(33,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(34,1,1) = {"
-Ja
-wK
-ve
-OX
-OX
-OX
-VX
-il
-it
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(35,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-OZ
-il
-zU
-mu
-Tn
-Tn
-Ja
-"}
-(36,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(37,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-VX
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(38,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(39,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(40,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(41,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-uW
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(42,1,1) = {"
-Ja
-Ox
-OX
-OX
-OX
-OX
-il
-il
-it
-uW
-il
-Wp
-Gz
-KN
-Tn
-Tn
-Ja
-"}
-(43,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-uW
-il
-il
-Lu
-mu
-Tn
-Tn
-Ja
-"}
-(44,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-do
-il
-il
-il
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(45,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(46,1,1) = {"
-Ja
-PE
-KD
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-VX
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(47,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-KD
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(48,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(49,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(50,1,1) = {"
-Ja
-MG
-OX
-OX
-OX
-OX
-VX
-il
-il
-il
-QM
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(51,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-yF
-mu
-Tn
-Tn
-Ja
-"}
-(52,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(53,1,1) = {"
-Ja
-PE
-PE
-cK
-PE
-PE
-KD
-PE
-PE
-PE
-uW
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(54,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-uW
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(55,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(56,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(57,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-KD
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(58,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-GY
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(59,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(60,1,1) = {"
-Ja
-eU
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(61,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-Ey
-mu
-Tn
-Tn
-Ja
-"}
-(62,1,1) = {"
-Ja
-PE
-PE
-KD
-PE
-PE
-PE
-PE
-do
-il
-il
-VX
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(63,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(64,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-Wp
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(65,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-KD
-PE
-PE
-il
-il
-sX
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(66,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(67,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Rk
-il
-il
-uW
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(68,1,1) = {"
-Ja
-wB
-OX
-OX
-OX
-OX
-VX
-il
-il
-il
-QM
-uW
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(69,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-ma
-mu
-Tn
-Tn
-Ja
-"}
-(70,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(71,1,1) = {"
-Ja
-PE
-PE
-KD
-PE
-PE
-PE
-KD
-PE
-PE
-il
-uW
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(72,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(73,1,1) = {"
-Ja
-PE
-PE
-cK
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(74,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(75,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-KD
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(76,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(77,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-VX
-BX
-KN
-Tn
-Tn
-Ja
-"}
-(78,1,1) = {"
-Ja
-eU
-JA
-OX
-OX
-OX
-OX
-OX
-OX
-il
-QO
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(79,1,1) = {"
-Ja
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-Tn
-Tn
-Ja
-"}
-(80,1,1) = {"
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-"}
diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm
index a53fcada8f8..dda7d675d40 100644
--- a/_maps/virtual_domains/syndicate_assault.dmm
+++ b/_maps/virtual_domains/syndicate_assault.dmm
@@ -67,6 +67,7 @@
req_access = list("syndicate");
secure = 1
},
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
"cw" = (
@@ -149,6 +150,19 @@
/obj/structure/cable,
/turf/open/floor/mineral/plastitanium,
/area/virtual_domain/protected_space)
+"fe" = (
+/obj/structure/closet/syndicate{
+ anchored = 1;
+ desc = "A basic closet for all your villainous needs.";
+ locked = 1;
+ name = "Closet";
+ req_access = list("syndicate");
+ secure = 1
+ },
+/obj/item/ammo_box/c9mm,
+/obj/item/gun/ballistic/automatic/pistol,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/powered/virtual_domain)
"fB" = (
/obj/machinery/ore_silo,
/turf/open/floor/mineral/plastitanium,
@@ -285,6 +299,9 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/virtual_domain)
+"ky" = (
+/turf/closed/wall/r_wall/syndicate/nodiagonal,
+/area/ruin/space/has_grav/powered/virtual_domain)
"kI" = (
/obj/machinery/computer/atmos_alert{
dir = 8
@@ -471,13 +488,6 @@
},
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
-"sH" = (
-/obj/structure/displaycase{
- req_access = list("syndicate");
- start_showpiece_type = /obj/item/gun/ballistic/automatic/pistol/deagle/camo
- },
-/turf/open/floor/mineral/plastitanium/red,
-/area/ruin/space/has_grav/powered/virtual_domain)
"sL" = (
/obj/structure/chair/comfy,
/turf/open/floor/mineral/plastitanium,
@@ -691,6 +701,7 @@
/obj/item/crowbar/red,
/obj/item/ammo_box/magazine/m9mm_aps,
/obj/item/ammo_box/magazine/m9mm_aps,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/carpet/royalblack,
/area/ruin/space/has_grav/powered/virtual_domain)
"Cn" = (
@@ -914,6 +925,11 @@
/obj/structure/sink/directional/south,
/turf/open/floor/iron/dark,
/area/ruin/space/has_grav/powered/virtual_domain)
+"Ka" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/cup/glass/trophy/silver_cup,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/powered/virtual_domain)
"Kz" = (
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
@@ -943,6 +959,7 @@
/obj/item/crowbar/red,
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_box/magazine/m9mm,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/virtual_domain)
"Mm" = (
@@ -1064,6 +1081,7 @@
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_box/magazine/m9mm,
/obj/machinery/light/small/directional/north,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/virtual_domain)
"Sq" = (
@@ -2206,7 +2224,7 @@ qx
qx
qx
ru
-vp
+Ka
Jg
ru
bh
@@ -2264,7 +2282,7 @@ qx
qx
qx
ru
-sH
+Kz
Kz
yl
bh
@@ -2743,7 +2761,7 @@ ru
ru
ru
ru
-Vk
+ru
qx
qx
qx
@@ -3091,7 +3109,7 @@ uP
ru
hD
ru
-Ig
+ky
qx
qx
qx
@@ -3203,7 +3221,7 @@ tI
Kz
Kz
ct
-xJ
+fe
ru
qx
qx
diff --git a/code/datums/components/temporary_body.dm b/code/datums/components/temporary_body.dm
index 3da289a6d34..28a7000a495 100644
--- a/code/datums/components/temporary_body.dm
+++ b/code/datums/components/temporary_body.dm
@@ -10,17 +10,23 @@
var/datum/weakref/old_mind_ref
///The old body we will be put back into when parent is being deleted.
var/datum/weakref/old_body_ref
+ /// Returns the mind if the parent dies by any means
+ var/delete_on_death = FALSE
-/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body)
+/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body, delete_on_death = FALSE)
if(!isliving(parent) || !isliving(old_body))
return COMPONENT_INCOMPATIBLE
ADD_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src))
src.old_mind_ref = WEAKREF(old_mind)
src.old_body_ref = WEAKREF(old_body)
+ src.delete_on_death = delete_on_death
/datum/component/temporary_body/RegisterWithParent()
RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_parent_destroy))
+ if(delete_on_death)
+ RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_parent_destroy))
+
/datum/component/temporary_body/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_QDELETING)
diff --git a/code/modules/bitrunning/components/virtual_entity.dm b/code/modules/bitrunning/components/virtual_entity.dm
index 12e5305ba9a..db81f376a80 100644
--- a/code/modules/bitrunning/components/virtual_entity.dm
+++ b/code/modules/bitrunning/components/virtual_entity.dm
@@ -31,6 +31,8 @@
/datum/component/virtual_entity/proc/jailbreak_mobs()
SIGNAL_HANDLER
- to_chat(parent, span_big("You shiver for a moment, then suddenly feel a sense of clarity you haven't felt before. \
- You can go anywhere, do anything! You could leave this simulation right now if you wanted!"))
+ to_chat(parent, span_boldannounce("You shiver for a moment with a sense of clarity you haven't felt before."))
+ to_chat(parent, span_notice("You could go anywhere, do anything! You could leave this simulation right now if you wanted!"))
+ to_chat(parent, span_danger("But be warned, quantum entanglement will interfere with any previous lives."))
+ to_chat(parent, span_notice("You'll have just one chance to go nova, and there's no turning back."))
qdel(src)
diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm
index 4cc95f4f057..16190851f37 100644
--- a/code/modules/bitrunning/event.dm
+++ b/code/modules/bitrunning/event.dm
@@ -89,6 +89,10 @@
if(!unlucky_server.validate_mutation_candidates())
return WAITING_FOR_SOMETHING
- spawned_mobs = unlucky_server.setup_glitch(forced_role)
+ var/mob/spawned = unlucky_server.setup_glitch(forced_role)
+ if(isnull(spawned))
+ return WAITING_FOR_SOMETHING
+
+ spawned_mobs += spawned
return SUCCESSFUL_SPAWN
diff --git a/code/modules/bitrunning/objects/hololadder.dm b/code/modules/bitrunning/objects/hololadder.dm
index e592f31382d..3df41a403e7 100644
--- a/code/modules/bitrunning/objects/hololadder.dm
+++ b/code/modules/bitrunning/objects/hololadder.dm
@@ -8,11 +8,37 @@
obj_flags = BLOCK_Z_OUT_DOWN
/// Time req to disconnect properly
var/travel_time = 3 SECONDS
+ /// Uses this to teleport observers back to the origin server
+ var/datum/weakref/server_ref
-/obj/structure/hololadder/Initialize(mapload)
+
+/obj/structure/hololadder/Initialize(mapload, obj/machinery/quantum_server/origin)
. = ..()
RegisterSignal(loc, COMSIG_ATOM_ENTERED, PROC_REF(on_enter))
+ server_ref = WEAKREF(origin)
+ register_context()
+
+
+/obj/structure/hololadder/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+
+ context[SCREENTIP_CONTEXT_LMB] = "Disconnect"
+
+
+/obj/structure/hololadder/examine(mob/user)
+ . = ..()
+
+ if(isnull(server_ref.resolve()))
+ . += span_infoplain("It's not connected to anything.")
+ return
+
+ if(isobserver(user))
+ . += span_notice("Left click to view the server that this ladder is connected to.")
+ return
+
+ . += span_infoplain("This ladder is connected to a server. You can click on it or walk over it to disconnect.")
+
/obj/structure/hololadder/attack_hand(mob/user, list/modifiers)
. = ..()
@@ -24,19 +50,29 @@
disconnect(user)
+
+/obj/structure/hololadder/attack_ghost(mob/dead/observer/ghostie)
+ var/our_server = server_ref?.resolve()
+ if(isnull(our_server))
+ return ..()
+
+ ghostie.abstract_move(get_turf(our_server))
+
+
/// If there's a pilot ref- send the disconnect signal
/obj/structure/hololadder/proc/disconnect(mob/user)
if(isnull(user.mind))
return
if(!HAS_TRAIT(user, TRAIT_TEMPORARY_BODY))
- balloon_alert(user, "no connection detected.")
+ balloon_alert(user, "no connection detected")
return
balloon_alert(user, "disconnecting...")
if(do_after(user, travel_time, src))
SEND_SIGNAL(user, COMSIG_BITRUNNER_LADDER_SEVER)
+
/// Helper for times when you dont have hands (gondola??)
/obj/structure/hololadder/proc/on_enter(datum/source, atom/movable/arrived, turf/old_loc)
SIGNAL_HANDLER
diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm
index 98bc96231b3..1d4e905d6e1 100644
--- a/code/modules/bitrunning/objects/netpod.dm
+++ b/code/modules/bitrunning/objects/netpod.dm
@@ -52,17 +52,25 @@
. += span_infoplain("Netpods must be built within 4 tiles of a server.")
return
- . += span_infoplain("Drag yourself into the pod to engage the link.")
- . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.")
- . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.")
+ if(!isobserver(user))
+ . += span_infoplain("Drag yourself into the pod to engage the link.")
+ . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.")
+ . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.")
if(isnull(occupant))
- . += span_notice("It is currently unoccupied.")
+ . += span_infoplain("It's currently unoccupied.")
+ return
+
+ . += span_infoplain("It's currently occupied by [occupant].")
+
+ if(isobserver(user))
+ . += span_notice("As an observer, you can click this netpod to jump to its avatar.")
return
- . += span_notice("It is currently occupied by [occupant].")
. += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.")
+
+
/obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
@@ -74,7 +82,6 @@
context[SCREENTIP_CONTEXT_LMB] = "Pry Open"
return CONTEXTUAL_SCREENTIP_SET
- return CONTEXTUAL_SCREENTIP_SET
/obj/machinery/netpod/update_icon_state()
if(!is_operational)
diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm
index 113ed6b2126..8a8d2eed913 100644
--- a/code/modules/bitrunning/server/_parent.dm
+++ b/code/modules/bitrunning/server/_parent.dm
@@ -19,7 +19,7 @@
/// Prevents multiple user actions. Handled by loading domains and cooldowns
var/is_ready = TRUE
/// Chance multipled by threat to spawn a glitch
- var/glitch_chance = 0.05
+ var/glitch_chance = 0.2
/// Current plugged in users
var/list/datum/weakref/avatar_connection_refs = list()
/// Cached list of mutable mobs in zone for cybercops
@@ -37,11 +37,13 @@
/// Changes how much info is available on the domain
var/scanner_tier = 1
/// Length of time it takes for the server to cool down after resetting. Here to give runners downtime so their faces don't get stuck like that
- var/server_cooldown_time = 3 MINUTES
+ var/server_cooldown_time = 2 MINUTES
/// Applies bonuses to rewards etc
var/servo_bonus = 0
/// Determines the glitches available to spawn, builds with completion
var/threat = 0
+ /// Maximum rate at which a glitch can spawn
+ var/threat_prob_max = 15
/// The turfs we can place a hololadder on.
var/turf/exit_turfs = list()
/// Determines if we broadcast to entertainment monitors or not
@@ -76,15 +78,18 @@
. += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.")
if(capacitor_coefficient < 1)
- . += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
+ . += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
if(servo_bonus > 0.2)
- . += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.")
- . += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.")
+ . += span_infoplain("- Its manipulation potential is increasing rewards by [servo_bonus]x.")
+ . += span_infoplain("- Injury from unsafe ejection reduced [servo_bonus * 100]%.")
if(!is_ready)
. += span_notice("It is currently cooling down. Give it a few moments.")
+ if(isobserver(user) && (obj_flags & EMAGGED))
+ . += span_notice("Ominous warning lights are blinking red. This server has been tampered with.")
+
/obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card)
. = ..()
@@ -92,7 +97,8 @@
return
obj_flags |= EMAGGED
- glitch_chance = 0.09
+ glitch_chance *= 2
+ threat_prob_max *= 2
add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay"))
balloon_alert(user, "system jailbroken...")
@@ -116,11 +122,14 @@
/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params)
. = ..()
- if(istype(weapon, /obj/item/bitrunning_debug))
- obj_flags |= EMAGGED
- glitch_chance = 0.5
- capacitor_coefficient = 0.01
- points = 100
+
+ if(!istype(weapon, /obj/item/bitrunning_debug))
+ return
+
+ obj_flags |= EMAGGED
+ glitch_chance = 0.5
+ capacitor_coefficient = 0.1
+ points = 100
/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar)
. = ..()
diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm
index a55de5dbf9d..5bfa7813910 100644
--- a/code/modules/bitrunning/server/map_handling.dm
+++ b/code/modules/bitrunning/server/map_handling.dm
@@ -55,7 +55,8 @@
is_ready = TRUE
- if(prob(clamp((threat * glitch_chance), 1, 10)))
+ var/spawn_chance = clamp((threat * glitch_chance), 5, threat_prob_max)
+ if(prob(spawn_chance))
setup_glitch()
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE)
diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm
index 641d906cc59..e8dbd72228c 100644
--- a/code/modules/bitrunning/server/obj_generation.dm
+++ b/code/modules/bitrunning/server/obj_generation.dm
@@ -110,7 +110,7 @@
if(isnull(destination))
return
- var/obj/structure/hololadder/wayout = new(destination)
+ var/obj/structure/hololadder/wayout = new(destination, src)
if(isnull(wayout))
return
diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm
index 66a96d9971f..25a891c03b2 100644
--- a/code/modules/bitrunning/server/threats.dm
+++ b/code/modules/bitrunning/server/threats.dm
@@ -71,6 +71,8 @@
var/datum/antagonist/bitrunning_glitch/chosen_role = forced_role || get_antagonist_role()
var/role_name = initial(chosen_role.name)
var/mob/chosen_one = SSpolling.poll_ghosts_for_target(
+ question = "A temporary antagonist role is spawning in the virtual domain.\
+ \nYou will return to your previous body on conclusion.",
check_jobban = ROLE_GLITCH,
poll_time = 20 SECONDS,
checked_target = mutation_target,
@@ -92,26 +94,32 @@
return
var/role_name = initial(chosen_role.name)
- var/mob/living/antag_mob
+
+ var/mob/living/new_mob
switch(role_name)
if(ROLE_NETGUARDIAN)
- antag_mob = new /mob/living/basic/netguardian(mutation_target.loc)
+ new_mob = new /mob/living/basic/netguardian(mutation_target.loc)
else // any other humanoid mob
- antag_mob = new /mob/living/carbon/human(mutation_target.loc)
+ new_mob = new /mob/living/carbon/human(mutation_target.loc)
mutation_target.gib(DROP_ALL_REMAINS)
- antag_mob.key = ghost.key
- var/datum/mind/ghost_mind = antag_mob.mind
- ghost_mind.add_antag_datum(chosen_role)
- ghost_mind.special_role = ROLE_GLITCH
- ghost_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch))
+ var/datum/mind/ghost_mind = ghost.mind
+ new_mob.key = ghost.key
- playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE)
- message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.")
- antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME)
+ if(ghost_mind?.current)
+ new_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE)
- add_threats(antag_mob)
+ var/datum/mind/antag_mind = new_mob.mind
+ antag_mind.add_antag_datum(chosen_role)
+ antag_mind.special_role = ROLE_GLITCH
+ antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch))
+
+ playsound(new_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE)
+ message_admins("[ADMIN_LOOKUPFLW(new_mob)] has been made into virtual antagonist by an event.")
+ new_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME)
+
+ add_threats(new_mob)
/// Oh boy - transports the antag station side
/obj/machinery/quantum_server/proc/station_spawn(mob/living/antag, obj/machinery/byteforge/chosen_forge)
@@ -151,6 +159,10 @@
if(istype(antag_datum))
antag_datum.show_in_roundend = TRUE
+ var/datum/component/temp_body = antag.GetComponent(/datum/component/temporary_body)
+ if(temp_body)
+ qdel(temp_body)
+
do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/magic/ethereal_enter.ogg', asoundout = 'sound/magic/ethereal_exit.ogg', channel = TELEPORT_CHANNEL_QUANTUM)
/// Removes any invalid candidates from the list
diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm
index 4f8aab322ff..5fa889ac655 100644
--- a/code/modules/bitrunning/spawners.dm
+++ b/code/modules/bitrunning/spawners.dm
@@ -3,13 +3,19 @@
prompt_name = "a virtual domain debug entity"
flavour_text = "You probably shouldn't be seeing this, contact a coder!"
you_are_text = "You are NOT supposed to be here. How did you let this happen?"
+ important_text = "You must eliminate any bitrunners from the domain."
+ temp_body = TRUE
/obj/effect/mob_spawn/ghost_role/human/virtual_domain/Initialize(mapload)
. = ..()
notify_ghosts("The [name] has been created. The virtual world calls for aid!", src, "Virtual Insanity!")
/obj/effect/mob_spawn/ghost_role/human/virtual_domain/special(mob/living/spawned_mob, mob/mob_possessor)
- . = ..()
+ var/datum/mind/ghost_mind = mob_possessor.mind
+ if(ghost_mind?.current) // Preserves any previous bodies before making the switch
+ spawned_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE)
+
+ ..()
spawned_mob.mind.add_antag_datum(/datum/antagonist/domain_ghost_actor)
diff --git a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm
deleted file mode 100644
index eae9dabc49e..00000000000
--- a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/datum/lazy_template/virtual_domain/starfront_saloon
- name = "Starfront Saloon"
- cost = BITRUNNER_COST_MEDIUM
- desc = "Looks like you stepped onto the wrong street, partner. Hope you brought your gunslinging skills."
- difficulty = BITRUNNER_DIFFICULTY_HIGH
- help_text = "One of these rooms has the cache we're looking for. Find it and get out."
- is_modular = TRUE
- key = "starfront_saloon"
- map_name = "starfront_saloon"
- mob_modules = list(
- /datum/modular_mob_segment/syndicate_team,
- /datum/modular_mob_segment/syndicate_elite,
- )
- reward_points = BITRUNNER_REWARD_HIGH
diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm
index 38816b4c644..6d92d31e4da 100644
--- a/code/modules/mob_spawn/mob_spawn.dm
+++ b/code/modules/mob_spawn/mob_spawn.dm
@@ -140,17 +140,8 @@
/// Typepath indicating the kind of job datum this ghost role will have. PLEASE inherit this with a new job datum, it's not hard. jobs come with policy configs.
var/spawner_job_path = /datum/job/ghost_role
-
- // SKYRAT EDIT ADDITION
- /// Do we use a random appearance for this ghost role?
- var/random_appearance = TRUE
- /// Can we use our loadout for this role?
- var/loadout_enabled = FALSE
- /// Can we use our quirks for this role?
- var/quirks_enabled = FALSE
- /// Are we limited to a certain species type? LISTED TYPE
- var/restricted_species
- // SKYRAT EDIT END
+ /// Whether this offers a temporary body or not. Essentially, you'll be able to reenter your body after using this spawner.
+ var/temp_body = FALSE
/obj/effect/mob_spawn/ghost_role/Initialize(mapload)
. = ..()
@@ -176,17 +167,17 @@
var/user_ckey = user.ckey // Just in case shenanigans happen, we always want to remove it from the list.
LAZYADD(ckeys_trying_to_spawn, user_ckey)
- // SKYRAT EDIT ADDITION
+ // SKYRAT EDIT ADDITION START
if(restricted_species && !(user.client?.prefs?.read_preference(/datum/preference/choiced/species) in restricted_species))
var/incorrect_species = tgui_alert(user, "Current species preference incompatible, proceed with random appearance?", "Incompatible Species", list("Yes", "No"))
if(incorrect_species != "Yes")
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
- // SKYRAT EDIT END
+ // SKYRAT EDIT ADDITION END
if(prompt_ghost)
var/prompt = "Become [prompt_name]?"
- if(user.can_reenter_corpse && user.mind)
+ if(!temp_body && user.can_reenter_corpse && user.mind)
prompt += " (Warning, You can no longer be revived!)"
var/ghost_role = tgui_alert(usr, prompt, buttons = list("Yes", "No"), timeout = 10 SECONDS)
if(ghost_role != "Yes" || !loc || QDELETED(user))
@@ -206,12 +197,12 @@
to_chat(user, span_warning("You are banned from this role!"))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
- // SKYRAT EDIT ADDITION
+ // SKYRAT EDIT ADDITION START
if(is_banned_from(user.ckey, BAN_GHOST_ROLE_SPAWNER)) // Ghost role bans
to_chat(user, span_warning("Error, you are banned from playing ghost roles!"))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
- // SKYRAT EDIT END
+ // SKYRAT EDIT ADDITION END
if(!allow_spawn(user, silent = FALSE))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
@@ -240,7 +231,8 @@
user.log_message("became a [prompt_name].", LOG_GAME)
uses -= 1 // Remove a use before trying to spawn to prevent strangeness like the spawner trying to spawn more mobs than it should be able to
- user.mind = null // dissassociate mind, don't let it follow us to the next life
+ if(!temp_body)
+ user.mind = null // dissassociate mind, don't let it follow us to the next life
var/created = create(user)
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) // We do this AFTER the create() so that we're basically sure that the user won't be in their ghost body anymore, so they can't click on the spawner again.
diff --git a/interface/skin.dmf b/interface/skin.dmf
index d2ddb1e6ac0..3e11a95545c 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -71,11 +71,7 @@ window "mainwindow"
elem "split"
type = CHILD
pos = 0,0
-<<<<<<< HEAD
- size = 634x440
-=======
size = 640x440
->>>>>>> b02ff6e9463 (Fullscreen QoL (#84066))
anchor1 = 0,0
anchor2 = 100,100
saved-params = "splitter"
diff --git a/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm b/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
index c98f88f81d5..27b1a5eefde 100644
--- a/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
+++ b/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
@@ -2,6 +2,14 @@
/// set this to make the spawner use the outfit.name instead of its name var for things like cryo announcements and ghost records
/// modifying the actual name during the game will cause issues with the GLOB.mob_spawners associative list
var/use_outfit_name
+ /// Do we use a random appearance for this ghost role?
+ var/random_appearance = TRUE
+ /// Can we use our loadout for this role?
+ var/loadout_enabled = FALSE
+ /// Can we use our quirks for this role?
+ var/quirks_enabled = FALSE
+ /// Are we limited to a certain species type? LISTED TYPE
+ var/restricted_species
/obj/effect/mob_spawn/ghost_role/create(mob/mob_possessor, newname)
var/load_prefs = FALSE
diff --git a/strings/tips.txt b/strings/tips.txt
index 1f1b26b6116..782be800415 100644
--- a/strings/tips.txt
+++ b/strings/tips.txt
@@ -286,3 +286,6 @@ You'll quickly lose your interest in the game if you play to win and kill. If yo
Some areas of the station use simple nautical directions to indicate their respective locations, like Fore (Front of the ship), Aft (Back), Port (Left side), Starboard (Right), Quarter and Bow (Either sides of Aft and Fore, respectively). You can review these terms on the Notepad App of your PDA.
Modular computers are compatible with integrated circuits, but most of the program-dependent circuits require them to be open/backgrounded to work. To install circuits on stationary consoles, you need to toggle interaction with the frame with right-click first.
You don't need to destroy a Spacecoin machine to make your funds stop draining. Swiping your ID on it will stop the withdrawal.
+As a Bitrunner, upgrading your quantum server will increase rewards and reduce downtime.
+As a Bitrunner, your avatar has a domain info ability which will give you clues to help complete virtual domains.
+Bitrunning is a crime.
diff --git a/tgstation.dme b/tgstation.dme
index 802b4d1df43..00f5604a1f2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3631,7 +3631,6 @@
#include "code\modules\bitrunning\virtual_domain\domains\psyker_shuffle.dm"
#include "code\modules\bitrunning\virtual_domain\domains\psyker_zombies.dm"
#include "code\modules\bitrunning\virtual_domain\domains\stairs_and_cliffs.dm"
-#include "code\modules\bitrunning\virtual_domain\domains\starfront_saloon.dm"
#include "code\modules\bitrunning\virtual_domain\domains\syndicate_assault.dm"
#include "code\modules\bitrunning\virtual_domain\domains\test_only.dm"
#include "code\modules\bitrunning\virtual_domain\domains\vaporwave.dm"