Horizon maint access rights and contents variety (#22262)

Two major changes to Horizon maints:
1. Updated maint door access to actually be consistent across the ship.
That is to say, you should have access to the maints behind your own
department, you should be able to make meaningful use out of them (no
random useless dead ends), but you shouldn't automatically get free
access to the entirety of the ship maints due to lack of hatch access
control. This was a non-issue until the Horizon expansion that greatly
increased maint interconnectivity. Now, everyone has consistent maint
access, and free access remains for Code Blue (or manually Command
disabling access controls).

2. Maint loot should be more interesting. Static contraband spawns were
reduced but a large number of new spawners were added that should make
loot, contraband, tools, trash, etc., spawn in more varied places. This
should make maint travel involve more Happy Surprises rather than
strictly being a rote process of 'lets see what spawned in XYZ room this
time).

Miscellaneous other bugfixes and spawn tweaks based on my observation;
on repeatedly re-loading the Horizon, the numbers chosen seemed to
repeatedly give me the most satisfying results. See file changes.
This commit is contained in:
Batrachophreno
2026-04-21 14:19:40 +00:00
committed by GitHub
parent c128191726
commit 98d00638ce
7 changed files with 1357 additions and 676 deletions
+15 -9
View File
@@ -52,15 +52,21 @@
/obj/item/reagent_containers/glass/beaker/vial/random/toxin
random_reagent_list = list(
list(/singleton/reagent/drugs/mindbreaker = 10, /singleton/reagent/drugs/mms = 20) = 3,
list(/singleton/reagent/mercury = 15) = 3,
list(/singleton/reagent/toxin/carpotoxin = 15) = 2,
list(/singleton/reagent/drugs/impedrezene = 15) = 2,
list(/singleton/reagent/toxin/dextrotoxin = 10) = 1,
list(/singleton/reagent/toxin/spectrocybin = 15) = 1,
list(/singleton/reagent/drugs/joy = 10, /singleton/reagent/water = 20) = 1,
list(/singleton/reagent/toxin/berserk = 10) = 1,
list(/singleton/reagent/ammonia = 15) = 3)
list(
/singleton/reagent/drugs/mindbreaker = 10,
/singleton/reagent/drugs/mms = 20
) = 3,
list(/singleton/reagent/mercury = 15) = 3,
list(/singleton/reagent/toxin/carpotoxin = 15) = 2,
list(/singleton/reagent/drugs/impedrezene = 15) = 2,
list(/singleton/reagent/toxin/dextrotoxin = 10) = 1,
list(/singleton/reagent/toxin/spectrocybin = 15) = 1,
list(
/singleton/reagent/drugs/joy = 10,
/singleton/reagent/water = 20
) = 1,
list(/singleton/reagent/toxin/berserk = 10) = 1,
list(/singleton/reagent/ammonia = 15) = 3)
/obj/item/reagent_containers/glass/beaker/vial/random/Initialize()
. = ..()
@@ -647,7 +647,14 @@
desc = "It has a large ketchup smear on it."
color = COLOR_YELLOW_GRAY
illustration = "condiment"
starts_with = list(/obj/item/reagent_containers/food/condiment = 6)
starts_with = list(
/obj/item/reagent_containers/food/condiment/ketchup = 1,
/obj/item/reagent_containers/food/condiment/barbecue = 1,
/obj/item/reagent_containers/food/condiment/soysauce = 1,
/obj/item/reagent_containers/food/condiment/mayonnaise = 1,
/obj/item/reagent_containers/food/condiment/hot_sauce = 1,
/obj/item/reagent_containers/food/condiment/ntella = 1
)
/obj/item/storage/box/cups
name = "box of paper cups"
+19 -8
View File
@@ -336,34 +336,34 @@
/obj/item/reagent_containers/hypospray/autoinjector/krokjuice = 2,
/obj/item/reagent_containers/hypospray/autoinjector/impedrezene = 0.4,
/obj/item/reagent_containers/hypospray/autoinjector/night_juice = 1,
/obj/item/reagent_containers/hypospray/autoinjector/snowflake = 1,
/obj/item/reagent_containers/hypospray/autoinjector/snowflake = 2,
/obj/item/storage/box/syndie_kit/syringe_gun = 0.5,
/obj/item/reagent_containers/syringe/drugs = 1,
/obj/item/reagent_containers/syringe/raskara_dust = 1,
/obj/item/reagent_containers/syringe/raskara_dust = 0.5,
/obj/item/reagent_containers/syringe/heroin = 1,
/obj/item/reagent_containers/inhaler/raskara_dust = 2,
/obj/item/reagent_containers/inhaler/raskara_dust = 1,
/obj/item/reagent_containers/inhaler/space_drugs = 2,
/obj/item/storage/box/tactical/smokes = 0.7,
/obj/item/grenade/napalm = 0.4,
/obj/item/storage/box/tactical/flashbangs = 0.05,
/obj/random/grenade = 0.4,
/obj/item/reagent_containers/glass/beaker/vial/random/toxin = 1,
/obj/item/material/knife/butterfly = 2,
/obj/item/material/butterflyblade = 3,
/obj/item/material/butterflyhandle = 3,
/obj/item/material/wirerod = 3,
/obj/item/material/wirerod = 2,
/obj/item/melee/baton/cattleprod = 1,
/obj/item/melee/baton/stunrod = 0.05,
/obj/item/material/knife/tacknife = 1,
/obj/item/material/knife/bayonet = 2,
/obj/item/material/kitchen/utensil/knife/boot = 2,
/obj/item/storage/secure/briefcase/money = 1,
/obj/item/gun/projectile/pistol = 0.2,
/obj/item/gun/projectile/revolver/derringer = 0.4,
/obj/item/gun/projectile/shotgun/improvised/sawn = 0.3,
/obj/random/contraband/pillbottle = 1,
/obj/item/material/knife/butterfly/switchblade = 1,
/obj/item/clothing/mask/gas/voice = 1,
/obj/item/clothing/gloves/brassknuckles = 2,
/obj/item/reagent_containers/inhaler/xuxigas = 1,
/obj/item/toy/balloon/syndicate = 4
/obj/item/toy/balloon/syndicate = 3
)
/obj/random/contraband/pill
@@ -651,3 +651,14 @@
/obj/item/stack/barricade/wood/random = 0.5,
/obj/item/stack/barricade/plasteel/random = 0.25
)
/obj/random/grenade
name = "random grenade"
desc = "This is a random grenade."
icon_state = "syrup"
problist = list(
/obj/item/grenade/frag = 5,
/obj/item/grenade/stinger = 4,
/obj/item/grenade/napalm = 2,
/obj/item/grenade/empgrenade = 2
)
+20 -12
View File
@@ -566,20 +566,22 @@
name = "random maintenance junk or loot"
desc = "Spawns any of: junk, loot, trash, trash pile, locker with junk or loot, (or other things)."
icon_state = "maint_junk_loot"
spawn_nothing_percentage = 25
spawn_nothing_percentage = 45
has_postspawn = TRUE
problist = list(
// spawn just one thing:
/obj/random/junk = 3,
/obj/random/junk = 2,
/obj/random/dirt_75 = 1,
/obj/random/loot = 1,
/obj/structure/trash_pile = 1,
/obj/random/tool = 0.2,
/obj/random/tech_supply = 0.1,
/obj/structure/girder = 0.1,
/obj/random/canister/empty = 0.1,
/obj/random/canister/filled = 0.05,
/obj/structure/closet/crate/loot = 0.01,
/obj/random/loot = 1.2,
/obj/structure/trash_pile = 1.1,
/obj/random/tool = 0.5,
/obj/random/tech_supply = 0.2,
/obj/structure/girder = 0.2,
/obj/random/canister/empty = 0.2,
/obj/structure/reagent_dispensers/fueltank = 0.1,
/obj/random/canister/filled/restricted = 0.1,
/obj/structure/closet/crate/loot = 0.05,
/obj/random/contraband = 0.2,
// spawn a container and maybe fill it with more junk:
/obj/structure/table/rack = 1,
@@ -590,10 +592,11 @@
)
var/list/more_junk_problist = list(
/obj/random/junk = 2,
/obj/random/loot = 1,
/obj/random/junk = 1,
/obj/random/loot = 1.2,
/obj/random/tech_supply = 0.2,
/obj/random/tool = 0.2,
/obj/random/contraband = 0.2,
)
/obj/random/maintenance_junk_or_loot/post_spawn(var/obj/spawned)
@@ -607,6 +610,11 @@
for(var/i in 1 to i_max)
var/obj/more_junk = pickweight(more_junk_problist)
new more_junk(spawned.loc)
else if(prob(10) && !spawned.density)
var/i_max = rand(1, 2)
for(var/i in 1 to i_max)
var/obj/more_junk = pickweight(more_junk_problist)
new more_junk(spawned.loc)
/obj/random/yarn
name = "random yarn"
+47 -24
View File
@@ -266,47 +266,70 @@
/obj/random/canister/filled = 0.4,
)
/// Used on the Horizon, or anywhere else you don't want people to find extremely rare/valuable gases like Phoron or Helium-3.
/obj/random/canister/restricted
name = "random canister (restricted)"
icon_state = "canister"
spawn_nothing_percentage = 20
problist = list(
/obj/random/canister/empty = 0.6,
/obj/random/canister/filled/restricted = 0.4,
)
/obj/random/canister/empty
name = "random empty canister"
// In descending order of probability
problist = list(
// common:
/obj/machinery/portable_atmospherics/canister/empty/air = 2,
/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide = 2,
/obj/machinery/portable_atmospherics/canister/empty/oxygen = 2,
/obj/machinery/portable_atmospherics/canister/empty = 1,
/obj/machinery/portable_atmospherics/canister/empty/air = 1,
/obj/machinery/portable_atmospherics/canister/empty/air = 1,
/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/empty/hydrogen = 1,
/obj/machinery/portable_atmospherics/canister/empty/nitrogen = 1,
/obj/machinery/portable_atmospherics/canister/empty/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/empty/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/empty/nitrogen = 1.5,
/obj/machinery/portable_atmospherics/canister/empty/hydrogen = 1.25,
/obj/machinery/portable_atmospherics/canister/empty/sleeping_agent = 1,
// rare:
/obj/machinery/portable_atmospherics/canister/empty/heliumfuel = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/helium = 0.5,
/obj/machinery/portable_atmospherics/canister/empty/chlorine = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/helium = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/nitrogen_dioxide = 0.1,
/obj/machinery/portable_atmospherics/canister/empty/heliumfuel = 0.05,
/obj/machinery/portable_atmospherics/canister/empty/phoron = 0.1,
)
/obj/random/canister/filled
name = "random filled canister"
// In descending order of probability
problist = list(
// common:
/obj/machinery/portable_atmospherics/canister/air = 1,
/obj/machinery/portable_atmospherics/canister/air = 1,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide = 1,
/obj/machinery/portable_atmospherics/canister/hydrogen = 1,
/obj/machinery/portable_atmospherics/canister/nitrogen = 1,
/obj/machinery/portable_atmospherics/canister/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/oxygen = 1,
/obj/machinery/portable_atmospherics/canister/air = 2,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide = 2,
/obj/machinery/portable_atmospherics/canister/oxygen = 2,
/obj/machinery/portable_atmospherics/canister/nitrogen = 1.5,
/obj/machinery/portable_atmospherics/canister/hydrogen = 1.25,
/obj/machinery/portable_atmospherics/canister/sleeping_agent = 1,
// rare:
/obj/machinery/portable_atmospherics/canister/heliumfuel = 0.1,
/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled = 0.75,
/obj/machinery/portable_atmospherics/canister/helium = 0.5,
/obj/machinery/portable_atmospherics/canister/chlorine = 0.1,
/obj/machinery/portable_atmospherics/canister/helium = 0.1,
/obj/machinery/portable_atmospherics/canister/nitrogen_dioxide = 0.1,
/obj/machinery/portable_atmospherics/canister/heliumfuel = 0.05,
/obj/machinery/portable_atmospherics/canister/phoron_scarce = 0.1,
/obj/machinery/portable_atmospherics/canister/phoron = 0.01,
)
/// Used on the Horizon, or anywhere else you don't want people to find extremely rare/valuable gases like Phoron or Helium-3.
/obj/random/canister/filled/restricted
name = "random filled canister (restricted)"
// In descending order of probability
problist = list(
/obj/machinery/portable_atmospherics/canister/air = 2,
/obj/machinery/portable_atmospherics/canister/carbon_dioxide = 2,
/obj/machinery/portable_atmospherics/canister/oxygen = 2,
/obj/machinery/portable_atmospherics/canister/nitrogen = 1.5,
/obj/machinery/portable_atmospherics/canister/hydrogen = 1.25,
/obj/machinery/portable_atmospherics/canister/sleeping_agent = 1,
/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled = 0.75,
/obj/machinery/portable_atmospherics/canister/helium = 0.5,
/obj/machinery/portable_atmospherics/canister/chlorine = 0.1,
/obj/machinery/portable_atmospherics/canister/nitrogen_dioxide = 0.1,
/obj/machinery/portable_atmospherics/canister/heliumfuel = 0.05,
/obj/machinery/portable_atmospherics/canister/phoron_scarce = 0.1,
// extra rare:
/obj/machinery/portable_atmospherics/canister/phoron = 0.01,
)