Scatter depot loot to the solar winds. (#27954)

* Scatter depot loot to the solar winds.

* make zoo spawners guaranteed

* INFINITY also used for spawn_all_loot, whoops

* move abandoned sec shuttle spawner to locked crate

* Can't use spawn_all_loot and nested lists together

* Reduce pixel offset on mech transport spawn scatter

* set updatepaths script number

* incorporate changes from #27398 and remove old spawners

* some numbers tweaking

* pct -> %

* move briefcase from common to rare for ruins

* lower loot budget from 1800 -> 1700
This commit is contained in:
warriorstar-orion
2025-01-23 02:41:04 -05:00
committed by GitHub
parent 69b87f8378
commit 5b516c3166
53 changed files with 667 additions and 239 deletions
@@ -65,37 +65,9 @@
)
// Loot
/obj/effect/spawner/random/syndicate/loot
spawn_inside = /obj/structure/closet/secure_closet/depot
/obj/effect/spawner/random/syndicate/loot/common
name = "syndicate depot loot, common"
icon_state = "loot"
spawn_loot_chance = 50
// Loot schema: costumes, toys, useless gimmick items
loot = list(
/obj/item/clothing/mask/gas/syndicate,
/obj/item/clothing/shoes/magboots/syndie,
/obj/item/clothing/suit/jacket/bomber/syndicate,
/obj/item/clothing/suit/storage/iaa/blackjacket/armored,
/obj/item/clothing/under/syndicate/combat,
/obj/item/clothing/under/syndicate/sniper,
/obj/item/coin/antagtoken/syndicate,
/obj/item/deck/cards/syndicate,
/obj/item/lighter/zippo/gonzofist,
/obj/item/soap/syndie,
/obj/item/stamp/chameleon,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate,
/obj/item/storage/secure/briefcase/syndie,
/obj/item/storage/toolbox/syndicate,
/obj/item/suppressor,
/obj/item/toy/syndicateballoon,
)
/obj/effect/spawner/random/syndicate/loot/stetchkin
/obj/effect/spawner/random/syndicate/stetchkin
name = "syndicate depot loot, 20pct stetchkin"
icon_state = "stetchkin"
spawn_inside = null
spawn_loot_chance = 80
loot = list(
/obj/item/gun/projectile/automatic/pistol,
@@ -104,84 +76,6 @@
/obj/item/wrench,
)
/obj/effect/spawner/random/syndicate/loot/rare
name = "syndicate depot loot, rare"
icon_state = "doubleloot"
spawn_loot_chance = 50
// Basic stealth, utility and environmental gear.
loot = list(
/obj/item/ammo_box/magazine/m10mm,
/obj/item/clothing/gloves/color/black/thief,
/obj/item/clothing/shoes/chameleon/noslip,
/obj/item/clothing/under/syndicate/silicon_cham,
/obj/item/clothing/mask/chameleon/voice_change,
/obj/item/flash/cameraflash,
/obj/item/gun/projectile/automatic/toy/pistol/riot,
/obj/item/mod/control/pre_equipped/traitor,
/obj/item/mod/module/chameleon,
/obj/item/mod/module/holster/hidden,
/obj/item/mod/module/noslip,
/obj/item/mod/module/visor/night,
/obj/item/mod/module/plate_compression,
/obj/item/reagent_containers/hypospray/autoinjector/hyper_medipen,
/obj/item/reagent_containers/hypospray/autoinjector/nanocalcium,
/obj/item/stack/sheet/mineral/gold{amount = 20},
/obj/item/stack/sheet/mineral/plasma{amount = 20},
/obj/item/stack/sheet/mineral/silver{amount = 20},
/obj/item/stack/sheet/mineral/uranium{amount = 20},
/obj/item/storage/backpack/duffel/syndie/med/surgery,
/obj/item/storage/backpack/satchel_flat,
/obj/item/storage/belt/military,
/obj/item/storage/box/syndie_kit/camera_bug,
/obj/item/storage/box/syndie_kit/chameleon,
/obj/item/storage/box/syndie_kit/space,
)
/obj/effect/spawner/random/syndicate/loot/officer
name = "syndicate depot loot, officer"
spawn_loot_chance = 40
// Primarily utility items with occasional low damage weaponry.
loot = list(
/obj/item/borg/upgrade/syndicate,
/obj/item/clothing/glasses/hud/security/chameleon,
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/shoes/magboots/elite,
/obj/item/door_remote/omni/access_tuner,
/obj/item/encryptionkey/binary,
/obj/item/gun/projectile/automatic/c20r/toy/riot,
/obj/item/jammer,
/obj/item/mod/module/power_kick,
/obj/item/mod/module/stealth,
/obj/item/mod/module/visor/thermal,
/obj/item/pen/edagger,
/obj/item/pinpointer/advpinpointer,
/obj/item/stack/sheet/mineral/diamond{amount = 10},
/obj/item/storage/belt/sheath/snakesfang,
/obj/item/storage/box/syndidonkpockets,
/obj/item/storage/box/syndie_kit/stechkin,
/obj/item/storage/firstaid/tactical,
)
/obj/effect/spawner/random/syndicate/loot/armory
name = "syndicate depot loot, armory"
spawn_inside = /obj/structure/closet/secure_closet/depot/armory
// Combat orientated items that could give the player an advantage if an antag messes with them.
loot = list(
/obj/item/bio_chip_implanter/proto_adrenalin,
/obj/item/chameleon,
/obj/item/cqc_manual,
/obj/item/gun/medbeam,
/obj/item/gun/projectile/automatic/sniper_rifle/toy,
/obj/item/melee/energy/sword/saber,
/obj/item/mod/control/pre_equipped/traitor_elite,
/obj/item/organ/internal/cyberimp/arm/razorwire,
/obj/item/organ/internal/cyberimp/brain/sensory_enhancer,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants,
/obj/item/shield/energy,
/obj/item/storage/box/syndie_kit/teleporter,
/obj/item/weaponcrafting/gunkit/universal_gun_kit,
)
// Layout-affecting spawns
/obj/effect/spawner/random/syndicate/walldoor
@@ -4,10 +4,10 @@
icon_state = "loot"
/// How much this spawner will subtract from the available budget if it
/// spawns. A value of `INFINITY` (i.e., not setting the value on a subtype)
/// spawns. A value of `-1` (i.e., not setting the value on a subtype)
/// does not attempt to subtract from the budget. This is useful for
/// spawners which themselves spawn other spawners.
var/point_value = INFINITY
var/point_value = -1
/// Whether non-spawner items should be removed from the shared loot pool
/// after spawning.
var/unique_picks = FALSE
@@ -79,7 +79,7 @@
deduct_points = FALSE
// If we don't have a sane point value, don't deduct points
if(point_value == INFINITY)
if(point_value == -1)
deduct_points = FALSE
// If we deduct points, we need to check affordability
@@ -0,0 +1,340 @@
/datum/spawn_pool/spaceloot
id = "space_loot_spawn_pool"
available_points = 1700
/obj/effect/spawner/random/pool/spaceloot
icon = 'icons/effects/random_spawners.dmi'
icon_state = "giftbox"
spawn_pool_id = "space_loot_spawn_pool"
record_spawn = TRUE
/obj/effect/spawner/random/pool/spaceloot/record_item(type_path_to_make)
if(ispath(type_path_to_make, /obj/effect))
return
SSblackbox.record_feedback("tally", "space_loot_spawns", 1, "[type_path_to_make]")
/obj/effect/spawner/random/pool/spaceloot/dvorak_core_table
point_value = 100
guaranteed = TRUE
loot = list(
/obj/item/rcd/combat,
/obj/item/gun/medbeam,
/obj/item/gun/energy/wormhole_projector,
/obj/item/storage/box/syndie_kit/oops_all_extraction_flares,
)
/obj/effect/spawner/random/pool/spaceloot/dvorak_emp_loot
point_value = 35
guaranteed = TRUE
loot = list(
/obj/item/grenade/empgrenade = 8,
/obj/item/gun/energy/ionrifle/carbine = 1,
/obj/item/gun/energy/ionrifle = 1,
)
/obj/effect/spawner/random/pool/spaceloot/dvorak_displaycase
point_value = 100
guaranteed = TRUE
loot = list(/obj/structure/displaycase/dvoraks_treat)
/obj/effect/spawner/random/pool/spaceloot/syndicate/common
name = "syndicate depot loot, common"
icon_state = "loot"
point_value = 10
loot = list(
// Loot schema: costumes, toys, useless gimmick items
/obj/item/clothing/mask/gas/syndicate,
/obj/item/clothing/shoes/magboots/syndie,
/obj/item/clothing/suit/jacket/bomber/syndicate,
/obj/item/clothing/suit/storage/iaa/blackjacket/armored,
/obj/item/clothing/under/syndicate/combat,
/obj/item/clothing/under/syndicate/sniper,
/obj/item/coin/antagtoken/syndicate,
/obj/item/deck/cards/syndicate,
/obj/item/lighter/zippo/gonzofist,
/obj/item/soap/syndie,
/obj/item/stamp/chameleon,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate,
/obj/item/storage/toolbox/syndicate,
/obj/item/suppressor,
/obj/item/toy/syndicateballoon,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/common/depot
spawn_inside = /obj/structure/closet/secure_closet/depot
spawn_loot_chance = 40
loot = list(
// Loot schema: costumes, toys, useless gimmick items
/obj/item/clothing/mask/gas/syndicate,
/obj/item/clothing/shoes/magboots/syndie,
/obj/item/clothing/suit/jacket/bomber/syndicate,
/obj/item/clothing/suit/storage/iaa/blackjacket/armored,
/obj/item/clothing/under/syndicate/combat,
/obj/item/clothing/under/syndicate/sniper,
/obj/item/coin/antagtoken/syndicate,
/obj/item/deck/cards/syndicate,
/obj/item/lighter/zippo/gonzofist,
/obj/item/soap/syndie,
/obj/item/stamp/chameleon,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate,
/obj/item/storage/toolbox/syndicate,
/obj/item/suppressor,
/obj/item/toy/syndicateballoon,
// only in depot for common-tier
/obj/item/storage/secure/briefcase/syndie,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/stetchkin
name = "syndicate depot loot, 20% stetchkin"
icon_state = "stetchkin"
spawn_loot_chance = 80
point_value = 25
loot = list(/obj/item/gun/projectile/automatic/pistol)
/obj/effect/spawner/random/pool/spaceloot/syndicate/rare
name = "syndicate depot loot, rare"
icon_state = "doubleloot"
point_value = 45
// Basic stealth, utility and environmental gear.
loot = list(
/obj/item/ammo_box/magazine/m10mm,
/obj/item/clothing/gloves/color/black/thief,
/obj/item/clothing/shoes/chameleon/noslip,
/obj/item/clothing/under/syndicate/silicon_cham,
/obj/item/clothing/mask/chameleon/voice_change,
/obj/item/flash/cameraflash,
/obj/item/gun/projectile/automatic/toy/pistol/riot,
/obj/item/lighter/zippo/gonzofist,
/obj/item/mod/module/chameleon,
/obj/item/mod/module/holster/hidden,
/obj/item/mod/module/noslip,
/obj/item/mod/module/visor/night,
/obj/item/mod/module/plate_compression,
/obj/item/reagent_containers/hypospray/autoinjector/hyper_medipen,
/obj/item/reagent_containers/hypospray/autoinjector/nanocalcium,
/obj/item/stack/sheet/mineral/gold{amount = 20},
/obj/item/stack/sheet/mineral/plasma{amount = 20},
/obj/item/stack/sheet/mineral/silver{amount = 20},
/obj/item/stack/sheet/mineral/uranium{amount = 20},
/obj/item/stamp/chameleon,
/obj/item/storage/backpack/duffel/syndie/med/surgery,
/obj/item/storage/backpack/satchel_flat,
/obj/item/storage/belt/military,
/obj/item/storage/box/syndie_kit/camera_bug,
/obj/item/storage/box/syndie_kit/chameleon,
/obj/item/storage/box/syndie_kit/space,
// common -> rare-tier for ruins
/obj/item/storage/secure/briefcase/syndie,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/rare/depot
spawn_inside = /obj/structure/closet/secure_closet/depot
spawn_loot_chance = 40
loot = list(
/obj/item/ammo_box/magazine/m10mm,
/obj/item/clothing/gloves/color/black/thief,
/obj/item/clothing/shoes/chameleon/noslip,
/obj/item/clothing/under/syndicate/silicon_cham,
/obj/item/clothing/mask/chameleon/voice_change,
/obj/item/flash/cameraflash,
/obj/item/gun/projectile/automatic/toy/pistol/riot,
/obj/item/lighter/zippo/gonzofist,
/obj/item/mod/module/chameleon,
/obj/item/mod/module/holster/hidden,
/obj/item/mod/module/noslip,
/obj/item/mod/module/visor/night,
/obj/item/mod/module/plate_compression,
/obj/item/reagent_containers/hypospray/autoinjector/hyper_medipen,
/obj/item/reagent_containers/hypospray/autoinjector/nanocalcium,
/obj/item/stack/sheet/mineral/gold{amount = 20},
/obj/item/stack/sheet/mineral/plasma{amount = 20},
/obj/item/stack/sheet/mineral/silver{amount = 20},
/obj/item/stack/sheet/mineral/uranium{amount = 20},
/obj/item/stamp/chameleon,
/obj/item/storage/backpack/duffel/syndie/med/surgery,
/obj/item/storage/backpack/satchel_flat,
/obj/item/storage/belt/military,
/obj/item/storage/box/syndie_kit/camera_bug,
/obj/item/storage/box/syndie_kit/chameleon,
/obj/item/storage/box/syndie_kit/space,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/officer
name = "syndicate depot loot, officer"
point_value = 110
// Primarily utility items with occasional low damage weaponry, and a blood-red, because that's too good for rare-tier.
loot = list(
/obj/item/borg/upgrade/syndicate,
/obj/item/clothing/glasses/hud/security/chameleon,
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/shoes/magboots/elite,
/obj/item/door_remote/omni/access_tuner,
/obj/item/encryptionkey/binary,
/obj/item/jammer,
/obj/item/mod/module/power_kick,
/obj/item/mod/module/visor/thermal,
/obj/item/pen/edagger,
/obj/item/pinpointer/advpinpointer,
/obj/item/stack/sheet/mineral/diamond{amount = 10},
/obj/item/storage/belt/sheath/snakesfang,
/obj/item/storage/box/syndidonkpockets,
/obj/item/storage/box/syndie_kit/stechkin,
/obj/item/mod/control/pre_equipped/traitor,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/officer/depot
spawn_inside = /obj/structure/closet/secure_closet/depot
spawn_loot_chance = 40
loot = list(
/obj/item/borg/upgrade/syndicate,
/obj/item/clothing/glasses/hud/security/chameleon,
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/shoes/magboots/elite,
/obj/item/door_remote/omni/access_tuner,
/obj/item/encryptionkey/binary,
/obj/item/jammer,
/obj/item/mod/module/power_kick,
/obj/item/mod/module/visor/thermal,
/obj/item/pen/edagger,
/obj/item/pinpointer/advpinpointer,
/obj/item/stack/sheet/mineral/diamond{amount = 10},
/obj/item/storage/belt/sheath/snakesfang,
/obj/item/storage/box/syndidonkpockets,
/obj/item/storage/box/syndie_kit/stechkin,
/obj/item/mod/control/pre_equipped/traitor,
// only in depot for officer-tier
/obj/item/mod/module/stealth,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/armory
name = "syndicate depot loot, armory"
// Combat orientated items that could give the player an advantage if an antag messes with them.
point_value = 200
loot = list(
/obj/item/bio_chip_implanter/proto_adrenalin,
/obj/item/chameleon,
/obj/item/gun/medbeam,
/obj/item/gun/projectile/automatic/sniper_rifle/toy,
/obj/item/melee/energy/sword/saber,
/obj/item/mod/control/pre_equipped/traitor_elite,
/obj/item/organ/internal/cyberimp/arm/razorwire,
/obj/item/organ/internal/cyberimp/brain/sensory_enhancer,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants,
/obj/item/shield/energy,
/obj/item/weaponcrafting/gunkit/universal_gun_kit,
// officer -> armory tier for ruins
/obj/item/mod/module/stealth,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/armory/depot
guaranteed = TRUE
spawn_inside = /obj/structure/closet/secure_closet/depot/armory
loot = list(
/obj/item/bio_chip_implanter/proto_adrenalin,
/obj/item/chameleon,
/obj/item/gun/medbeam,
/obj/item/gun/projectile/automatic/sniper_rifle/toy,
/obj/item/melee/energy/sword/saber,
/obj/item/mod/control/pre_equipped/traitor_elite,
/obj/item/organ/internal/cyberimp/arm/razorwire,
/obj/item/organ/internal/cyberimp/brain/sensory_enhancer,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants,
/obj/item/shield/energy,
/obj/item/weaponcrafting/gunkit/universal_gun_kit,
// only in armory tier for depot
/obj/item/storage/box/syndie_kit/teleporter,
/obj/item/cqc_manual,
)
/obj/effect/spawner/random/pool/spaceloot/syndicate/mixed
loot = list(
/obj/effect/spawner/random/pool/spaceloot/syndicate/common = 30,
/obj/effect/spawner/random/pool/spaceloot/syndicate/rare = 20,
/obj/effect/spawner/random/pool/spaceloot/syndicate/officer = 5,
/obj/effect/spawner/random/pool/spaceloot/syndicate/armory = 1,
)
// Only two of these
/obj/effect/spawner/random/pool/spaceloot/zoo
unique_picks = TRUE
guaranteed = TRUE
point_value = 20
loot = list(
/obj/item/gun/energy/floragun,
/obj/item/gun/energy/temperature,
)
/obj/effect/spawner/random/pool/spaceloot/modsuit_syndie
point_value = 100
spawn_loot_chance = 50
loot = list(/mob/living/simple_animal/hostile/syndicate/ranged/space/autogib)
/obj/effect/spawner/random/pool/spaceloot/moonoutpost19
name = "moon outpost 19 loot spawner"
point_value = 30
guaranteed = TRUE
spawn_all_loot = TRUE
/obj/effect/spawner/random/pool/spaceloot/moonoutpost19/vault1
loot = list(/obj/item/paper/researchnotes)
/obj/effect/spawner/random/pool/spaceloot/moonoutpost19/vault2
loot = list(
/obj/item/storage/lockbox/experimental_weapon,
/obj/item/assembly/signaler/anomaly/random,
)
/obj/effect/spawner/random/pool/spaceloot/moonoutpost19/vault3
loot = list(
/obj/item/mecha_parts/core,
/obj/item/stock_parts/cell/infinite/abductor,
)
/obj/effect/spawner/random/pool/spaceloot/deepstorage/main
name = "warehouse main reward spawner"
guaranteed = TRUE
point_value = 100
loot = list(
/obj/item/storage/belt/champion/wrestling,
/obj/item/storage/box/weaver_kit,
/obj/item/gun/medbeam,
/obj/item/storage/lockbox/experimental_weapon,
)
/obj/effect/spawner/random/pool/spaceloot/mechtransport
name = "mech transport storage loot spawner"
guaranteed = TRUE
point_value = 20
spawn_all_loot = TRUE
spawn_random_offset = TRUE
spawn_random_offset_max_pixels = 8
/obj/effect/spawner/random/pool/spaceloot/mechtransport/storage1
loot = list(
/obj/item/mecha_parts/mecha_equipment/repair_droid,
/obj/item/mecha_parts/mecha_equipment/extinguisher,
/obj/item/mecha_modkit/voice/honk,
)
/obj/effect/spawner/random/pool/spaceloot/mechtransport/storage2
loot = list(
/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill,
/obj/item/mecha_parts/mecha_equipment/drill,
/obj/item/mecha_parts/mecha_equipment/drill,
)
/obj/effect/spawner/random/pool/spaceloot/mechtransport/storage3
loot = list(/obj/item/mecha_parts/mecha_equipment/medical/sleeper)
/obj/effect/spawner/random/pool/spaceloot/mechtransport/storage4
loot = list(/obj/item/mecha_parts/core)
@@ -55,5 +55,6 @@
qdel(spawner)
log_game("finished spawner [id] with [length(known_spawners)] remaining spawners and [available_points] points remaining.")
QDEL_LIST_CONTENTS(known_spawners)
@@ -70,9 +70,10 @@
var/list/spawn_locations = get_spawn_locations(spawn_scatter_radius)
var/spawn_loot_count = isnull(lootcount_override) ? src.spawn_loot_count : lootcount_override
var/atom/container
if(spawn_inside)
new spawn_inside(loc)
container = new spawn_inside(loc)
if(spawn_all_loot)
spawn_loot_count = INFINITY
@@ -127,6 +128,10 @@
spawned_loot.pixel_x = spawn_loot_split_pixel_offsets * (loot_spawned % pixel_divider) + (column * spawn_loot_split_pixel_offsets)
spawned_loot.pixel_y = spawn_loot_split_pixel_offsets * (loot_spawned % pixel_divider)
if(container)
spawned_loot.forceMove(container)
/**
* Makes the actual item related to our spawner. If `record_spawn` is `TRUE`,
* this is when the items spawned are recorded to blackbox (except for `/obj/effect`s).