diff --git a/code/modules/bitrunning/bitrunoutfits.dm b/code/modules/bitrunning/bitrunoutfits.dm
new file mode 100644
index 00000000000000..6deb10503aa075
--- /dev/null
+++ b/code/modules/bitrunning/bitrunoutfits.dm
@@ -0,0 +1,29 @@
+/datum/outfit/bitrunning/
+ name = "bitrunning monitor"
+ uniform = /obj/item/clothing/under/rank/cargo/bitrunner
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ belt = /obj/item/bitrunning_host_monitor
+ id = /obj/item/card/id/advanced
+
+/datum/outfit/bitrunning/cop
+ name = "alcoholic cop"
+ neck = /obj/item/clothing/neck/tie/horrible
+ uniform = /obj/item/clothing/under/rank/security/detective/disco
+ shoes = /obj/item/clothing/shoes/discoshoes
+ suit = /obj/item/clothing/suit/discoblazer
+ id = /obj/item/card/id/advanced
+
+/datum/outfit/bitrunning/kim
+ name = "Kimball"
+ glasses = /obj/item/clothing/glasses/regular/kim
+ uniform = /obj/item/clothing/under/rank/security/detective/kim
+ shoes = /obj/item/clothing/shoes/kim
+ suit = /obj/item/clothing/suit/kimjacket
+ id = /obj/item/card/id/advanced
+
+/datum/outfit/bitrunning/mail
+ name = "Mailman"
+ head = /obj/item/clothing/head/costume/mailman
+ uniform = /obj/item/clothing/under/misc/mailman
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ id = /obj/item/card/id/advanced
diff --git a/code/modules/bitrunning/netpod/ui.dm b/code/modules/bitrunning/netpod/ui.dm
index 93719fe64ebef7..9c7c466ca13313 100644
--- a/code/modules/bitrunning/netpod/ui.dm
+++ b/code/modules/bitrunning/netpod/ui.dm
@@ -21,6 +21,7 @@
if(!length(cached_outfits))
cached_outfits += make_outfit_collection("Jobs", subtypesof(/datum/outfit/job))
+ cached_outfits += make_outfit_collection("Addon", subtypesof(/datum/outfit/bitrunning))
data["collections"] = cached_outfits
diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt
index 15d6b0ac718711..3188b2705648ef 100644
--- a/config/awaymissionconfig.txt
+++ b/config/awaymissionconfig.txt
@@ -15,3 +15,4 @@
#_maps/RandomZLevels/research.dmm
#_maps/RandomZLevels/SnowCabin.dmm
#_maps/RandomZLevels/museum.dmm
+#_maps/RandomZLevels/blackmesa.dmm
diff --git a/modular_nova/modules/events/code/event_spawner.dm b/modular_nova/modules/events/code/event_spawner.dm
index d60fec8c583901..e8f14abfd703db 100644
--- a/modular_nova/modules/events/code/event_spawner.dm
+++ b/modular_nova/modules/events/code/event_spawner.dm
@@ -13,7 +13,7 @@
var/flavor_text = ""
var/list/additional_equipment
var/disappear_after_spawn
-
+ var/infinite = TRUE
var/used = FALSE
/obj/character_event_spawner/attack_ghost(mob/user)
@@ -78,9 +78,10 @@
if(!user || !user.client)
return
message_admins("[ADMIN_LOOKUPFLW(user)] spawned as a [job_name] by using a spawner.")
- used = TRUE
- icon_state = "cryopod-open"
- name = "opened cryogenic sleeper"
+ if(!infinite)
+ used = TRUE
+ icon_state = "cryopod-open"
+ name = "opened cryogenic sleeper"
//Spawn and copify prefs
var/mob/living/carbon/human/H = new(src)
user.client.prefs.safe_transfer_prefs_to(H)
diff --git a/modular_nova/modules/events/code/event_spawner_menu.dm b/modular_nova/modules/events/code/event_spawner_menu.dm
index 6cfaf9619e694a..41d2571cbb1910 100644
--- a/modular_nova/modules/events/code/event_spawner_menu.dm
+++ b/modular_nova/modules/events/code/event_spawner_menu.dm
@@ -12,7 +12,7 @@
var/list/additional_equipment = list()
var/disappear_after_spawn = FALSE
var/prompt_players = FALSE
-
+ var/infinite = FALSE
var/show_outfit_equipment = FALSE
/datum/event_spawner_instance/New(_id, template_id)
@@ -35,6 +35,7 @@
CES.gets_loadout = gets_loadout
CES.headset_override = headset_override
CES.flavor_text = flavor_text
+ CES.infinite = infinite
CES.disappear_after_spawn = disappear_after_spawn
CES.name = "[job_name] cryogenic sleeper"
if(prompt_players)
@@ -58,6 +59,7 @@
blocks["gender_whitelist"] = gender_whitelist.Copy()
blocks["ckey_whitelist"] = ckey_whitelist.Copy()
blocks["disappear_after_spawn"] = disappear_after_spawn
+ blocks["infinite"] = infinite
blocks["prompt_players"] = prompt_players
return json_encode(blocks)
@@ -77,6 +79,7 @@
species_whitelist = blocks["species_whitelist"]
gender_whitelist = blocks["gender_whitelist"]
ckey_whitelist = blocks["ckey_whitelist"]
+ infinite = blocks["infinite"]
disappear_after_spawn = blocks["disappear_after_spawn"]
prompt_players = blocks["prompt_players"]
@@ -206,6 +209,7 @@
dat += "[ckey]"
dat += " <- Add"
dat += "
If no ckeys are in the list, then any ckey can join as this role."
+ dat += "
Spawner can spawn infinite peoples: [ESI.infinite ? "Yes" : "No"]"
dat += "
Spawner disappears after spawn: [ESI.disappear_after_spawn ? "Yes" : "No"]"
dat += "
Prompt players when spawner created: [ESI.prompt_players ? "Yes" : "No"] This will only prompt ckeys which can access the spawner."
dat += "