Scenario - Environmental Testing Facility (#19611)

changes:
- rscadd: "Adds Environmental Testing Facility odyssey scenario. Big
map."
  - rscadd: "Removes green tint from the minimap program/reader."
  - rscadd: "Adds/reorganizes some generic outfits."
  - rscadd: "Adds some generic odyssey actor roles."
- rscadd: "Adds actor accesses system to odyssey scenarios, and a
self-service access terminal."
- rscadd: "Adds some warnings to odyssey actor teleporter, in case ID
access or headset are missing."
  - rscadd: "Adds some more random spawners."
  - rscadd: "Adds better sprites door helpers."
  - rscadd: "Adds access door helper."
  - rscadd: "Adds info box to odyssey actor panel about roles."



![image](https://github.com/user-attachments/assets/fc2c0316-e95b-49f8-ac8b-55d03ef47b18)

![image](https://github.com/user-attachments/assets/36a680e8-47bf-4a12-b0a4-7c83cad9e74e)

![image](https://github.com/user-attachments/assets/fca04220-5457-4fa0-9045-cbf9f3f7e013)

![image](https://github.com/user-attachments/assets/6c0c4af2-ae63-4824-bcbe-59519156d288)

![image](https://github.com/user-attachments/assets/a5022487-b2db-4b37-ad16-a9e287ea1695)

![image](https://github.com/user-attachments/assets/96eee079-5aa4-4606-8c7e-ca8f5c3444d4)

---------

Signed-off-by: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com>
Co-authored-by: DreamySkrell <>
Co-authored-by: AuroraBuildBot <action@github.com>
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
This commit is contained in:
DreamySkrell
2025-03-25 20:40:32 +00:00
committed by GitHub
co-authored by DreamySkrell <> AuroraBuildBot Fluffy
parent 952809a979
commit a24345a43b
47 changed files with 212790 additions and 186 deletions
@@ -4,12 +4,14 @@
uniform = list(
/obj/item/clothing/under/color/black,
/obj/item/clothing/under/color/grey,
/obj/item/clothing/under/color/purple,
/obj/item/clothing/under/color/brown,
/obj/item/clothing/under/color/darkblue,
/obj/item/clothing/under/color/darkred,
/obj/item/clothing/under/service_overalls,
/obj/item/clothing/under/overalls,
/obj/item/clothing/under/suit_jacket/charcoal,
/obj/random/colored_jumpsuit,
/obj/random/suit,
)
suit = list(
/obj/item/clothing/suit/storage/hooded/wintercoat,
@@ -0,0 +1,34 @@
/obj/outfit/admin/generic/business
name = "Generic Business Outfit"
uniform = list(
/obj/item/clothing/under/zhongshan,
/obj/item/clothing/under/suit_jacket/white,
/obj/item/clothing/under/suit_jacket/tan,
/obj/item/clothing/under/suit_jacket/red,
/obj/item/clothing/under/suit_jacket/really_black,
/obj/item/clothing/under/suit_jacket/navy,
/obj/item/clothing/under/suit_jacket/checkered,
/obj/item/clothing/under/suit_jacket/charcoal,
/obj/item/clothing/under/suit_jacket/burgundy,
/obj/item/clothing/under/suit_jacket,
/obj/item/clothing/under/sl_suit,
)
suit = null
shoes = list(
/obj/item/clothing/shoes/laceup,
/obj/item/clothing/shoes/laceup/brown,
)
back = /obj/item/storage/backpack/satchel/leather
backpack_contents = list(
/obj/item/storage/wallet/rich = 1,
/obj/item/pen/fountain/black = 1,
/obj/item/folder/white = 1,
)
species_shoes = list(
SPECIES_UNATHI = /obj/item/clothing/shoes/winter/toeless,
SPECIES_TAJARA = /obj/item/clothing/shoes/laceup/tajara,
SPECIES_TAJARA_MSAI = /obj/item/clothing/shoes/laceup/tajara,
SPECIES_TAJARA_ZHAN = /obj/item/clothing/shoes/laceup/tajara,
)
@@ -0,0 +1,79 @@
/obj/outfit/admin/generic/mercenary
name = "Clone Facility Mercenary"
uniform = list(
/obj/item/clothing/under/color/black,
/obj/item/clothing/under/color/brown,
/obj/item/clothing/under/color/grey,
/obj/item/clothing/under/overalls,
/obj/item/clothing/under/syndicate,
/obj/item/clothing/under/syndicate/tracksuit,
)
suit = list(
/obj/item/clothing/suit/armor/carrier/generic,
)
glasses = list(
/obj/item/clothing/glasses/sunglasses,
/obj/item/clothing/glasses/sunglasses/aviator,
/obj/item/clothing/glasses/sunglasses/big,
/obj/item/clothing/glasses/sunglasses/visor,
/obj/item/clothing/glasses/safety/goggles/tactical,
/obj/item/clothing/glasses/safety/goggles/tactical/generic,
)
mask = list(
/obj/item/clothing/mask/gas/tactical,
/obj/item/clothing/mask/gas/alt,
/obj/item/clothing/mask/balaclava,
/obj/item/clothing/mask/balaclava/grey,
)
shoes = list(
/obj/item/clothing/shoes/combat,
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/shoes/workboots,
/obj/item/clothing/shoes/workboots/dark,
)
gloves = list(
/obj/item/clothing/gloves/brown,
/obj/item/clothing/gloves/black_leather,
/obj/item/clothing/gloves/fingerless,
)
accessory = list(
/obj/item/clothing/accessory/storage/black_vest,
/obj/item/clothing/accessory/storage/brown_vest,
/obj/item/clothing/accessory/storage/pouches/black,
/obj/item/clothing/accessory/storage/pouches/brown,
)
accessory_contents = list(
/obj/item/handcuffs/ziptie = 1,
/obj/item/ammo_magazine/mc9mm = 2,
)
belt = list(
/obj/item/storage/belt/military,
)
belt_contents = list(
/obj/item/device/flash = 1,
/obj/item/handcuffs/ziptie = 1,
/obj/item/material/knife/tacknife = 1,
/obj/item/gun/projectile/pistol = 1,
/obj/item/ammo_magazine/mc9mm = 2,
)
back = list(
/obj/item/storage/backpack/duffel,
/obj/item/storage/backpack/satchel,
/obj/item/storage/backpack/messenger,
)
backpack_contents = list(
/obj/item/storage/box/survival = 1,
/obj/item/clothing/head/helmet/security/generic = 1,
/obj/item/storage/box/zipties = 1,
)
species_shoes = list(
SPECIES_UNATHI = /obj/item/clothing/shoes/jackboots/toeless,
SPECIES_TAJARA = /obj/item/clothing/shoes/jackboots/toeless,
SPECIES_TAJARA_MSAI = /obj/item/clothing/shoes/jackboots/toeless,
SPECIES_TAJARA_ZHAN = /obj/item/clothing/shoes/jackboots/toeless,
SPECIES_VAURCA_WORKER = /obj/item/clothing/shoes/jackboots/toeless,
SPECIES_VAURCA_WARRIOR = /obj/item/clothing/shoes/vaurca,
SPECIES_VAURCA_ATTENDANT = /obj/item/clothing/shoes/vaurca
)
@@ -0,0 +1,56 @@
/obj/outfit/admin/generic/mining
name = "Generic Mining Outfit"
uniform = list(
/obj/item/clothing/under/color/black,
/obj/item/clothing/under/color/brown,
/obj/item/clothing/under/color/lightbrown,
/obj/item/clothing/under/color/darkblue,
/obj/item/clothing/under/service_overalls,
/obj/item/clothing/under/overalls,
)
suit = list(
/obj/item/clothing/suit/storage/hooded/wintercoat,
/obj/item/clothing/suit/storage/hooded/wintercoat/hoodie/random,
/obj/item/clothing/suit/storage/toggle/leather_jacket/flight,
/obj/item/clothing/suit/storage/toggle/leather_jacket/military/tan,
/obj/item/clothing/suit/storage/toggle/highvis,
/obj/item/clothing/suit/storage/toggle/highvis,
/obj/item/clothing/suit/storage/toggle/highvis_alt,
/obj/item/clothing/suit/storage/toggle/track,
/obj/item/clothing/suit/storage/hazardvest,
/obj/item/clothing/suit/storage/hazardvest/green,
/obj/item/clothing/suit/storage/hazardvest/red,
/obj/item/clothing/suit/storage/hazardvest/white,
)
belt = list(
/obj/item/storage/belt/mining/full,
)
belt_contents = list(
/obj/item/gun/custom_ka/frame01/prebuilt=1,
/obj/item/device/flashlight/lantern=1,
)
head = list(
/obj/item/clothing/head/hardhat,
/obj/item/clothing/head/hardhat/orange,
/obj/item/clothing/head/hardhat/red,
/obj/item/clothing/head/hardhat/green,
)
glasses = null
gloves = list(
/obj/item/clothing/gloves/brown,
/obj/item/clothing/gloves/black_leather,
/obj/item/clothing/gloves/yellow,
)
shoes = list(
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/shoes/workboots,
/obj/item/clothing/shoes/workboots/dark,
)
species_gloves = list(
SPECIES_UNATHI = /obj/item/clothing/gloves/yellow/specialu,
SPECIES_TAJARA = /obj/item/clothing/gloves/yellow/specialt,
SPECIES_TAJARA_MSAI = /obj/item/clothing/gloves/yellow/specialt,
SPECIES_TAJARA_ZHAN = /obj/item/clothing/gloves/yellow/specialt,
)
@@ -11,10 +11,6 @@
/obj/random/suit,
)
suit = list(
/obj/item/clothing/suit/storage/hooded/wintercoat,
/obj/item/clothing/suit/storage/hooded/wintercoat/hoodie/random,
/obj/item/clothing/suit/storage/toggle/leather_jacket/flight/white,
/obj/item/clothing/suit/storage/toggle/leather_jacket/military/tan,
/obj/item/clothing/suit/storage/toggle/labcoat,
/obj/item/clothing/suit/storage/toggle/labcoat,
/obj/item/clothing/suit/storage/toggle/labcoat/accent,
@@ -28,6 +28,11 @@
/obj/item/clothing/glasses/sunglasses/big,
/obj/item/clothing/glasses/sunglasses/visor,
)
gloves = list(
/obj/item/clothing/gloves/brown,
/obj/item/clothing/gloves/black_leather,
/obj/item/clothing/gloves/fingerless,
)
shoes = list(
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/shoes/workboots,
+45 -1
View File
@@ -1,4 +1,7 @@
/singleton/role
// ------------------- base/parent type
ABSTRACT_TYPE(/singleton/role)
/// The role's name.
var/name = "Generic Goon"
/// The role's description. It should contain the information on what it's supposed to do.
@@ -6,3 +9,44 @@
/// The /obj/outfit this role equips you with.
var/outfit = /obj/outfit/admin/generic
// ------------------- generic subtypes
/singleton/role/generic_crew
name = "Generic Worker"
desc = "You are some basic crew or worker. You have just some clothes, a jacket, and a bag."
outfit = /obj/outfit/admin/generic
/singleton/role/generic_engineer
name = "Generic Engineer"
desc = "You are some engineer. You have engineer tools, perhaps a hardhat, or a reflective hazard vest."
outfit = /obj/outfit/admin/generic/engineer
/singleton/role/generic_research
name = "Generic Researcher"
desc = "You are some researcher. You have a labcoat, perhaps safety goggles."
outfit = /obj/outfit/admin/generic/science
/singleton/role/generic_medical
name = "Generic Medical Practitioner"
desc = "You are some medical practicioner, a physician, or paramedic. You have a first aid kit, and a full medical belt."
outfit = /obj/outfit/admin/generic/medical
/singleton/role/generic_security
name = "Generic Security Guard"
desc = "You are some security guard or officer. You have a full security belt, and perhaps a plate carrier."
outfit = /obj/outfit/admin/generic/security
/singleton/role/generic_miner
name = "Generic Miner"
desc = "You are some miner. You have mining tools, a KA, and a lantern."
outfit = /obj/outfit/admin/generic/mining
/singleton/role/generic_business
name = "Generic Businessperson"
desc = "You are some businessperson, dressed in a nice suit, with a wallet full of cash."
outfit = /obj/outfit/admin/generic/business
/singleton/role/generic_mercenary
name = "Generic Mercenary"
desc = "You are some mercenary, dressed all tacticool, with a plate carrier and helmet, 9mm pistol with a few mags, and zipties."
outfit = /obj/outfit/admin/generic/mercenary
+7
View File
@@ -44,12 +44,19 @@
/// The name of the frequency that will be used by the radios on the away site.
var/radio_frequency_name = "Sector"
/// A list of access datums that are available for actors to pick.
var/list/datum/access/actor_accesses = list()
/singleton/scenario/Initialize()
. = ..()
if(!ispath(scenario_announcements))
crash_with("Scenario [type] tried initializing without appropriate announcements!")
scenario_announcements = GET_SINGLETON(scenario_announcements)
if(actor_accesses && !islist(actor_accesses))
actor_accesses = list(actor_accesses)
/**
* This proc handles the creation and spawning of everything that the odyssey needs.
* This could be a map or landmarks or whatever.