From af2a3daf220100a9e60967e1fac3b1eafddd91e0 Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Fri, 6 Dec 2024 10:05:38 -0500 Subject: [PATCH] Migrate /obj/effect/spawner/lootdrop to /obj/effect/spawner/random. (#27445) * refactor: Migrate /obj/effect/spawner/lootdrop to /obj/effect/spawner/random. * set script PR number * fix broken updatepaths for three course meal * make filenames unique * goddamnit * redirect incorrect icon states * ugh * fix typepath fixes --- .../LavaRuins/lavaland_surface_pizzaparty.dmm | 6 +- .../LavaRuins/lavaland_surface_seed_vault.dmm | 2 +- .../RandomRuins/SpaceRuins/deepstorage.dmm | 8 +- .../RandomRuins/SpaceRuins/derelict4.dmm | 2 +- .../RandomRuins/SpaceRuins/derelict5.dmm | 6 +- .../RandomRuins/SpaceRuins/emptyshell.dmm | 2 +- .../SpaceRuins/telecomns_returns.dmm | 8 +- .../RandomRuins/SpaceRuins/wizardcrash.dmm | 2 +- _maps/map_files/generic/centcomm.dmm | 20 +- _maps/map_files/stations/boxstation.dmm | 20 +- _maps/map_files/templates/shelter_2.dmm | 2 +- .../game/objects/effects/spawners/lootdrop.dm | 596 ------------------ .../spawners/random/bluespace_tap_spawners.dm | 123 ++++ .../effects/spawners/random/food_spawners.dm | 37 ++ .../effects/spawners/random/loot_spawners.dm | 6 + .../traders/trader_department_spawners.dm | 222 +++++++ .../traders/trader_organization_spawners.dm | 322 ++++++++++ code/modules/awaymissions/loot.dm | 26 - .../mission_code/ruins/telecomns.dm | 12 +- .../mission_code/ruins/wizardcrash.dm | 30 +- code/modules/clothing/shoes/misc_shoes.dm | 2 +- code/modules/crafting/tailoring.dm | 2 +- code/modules/events/traders.dm | 40 +- .../ruins/lavalandruin_code/pizzaparty.dm | 22 +- .../ruins/lavalandruin_code/seed_vault.dm | 14 +- code/modules/station_goals/bluespace_tap.dm | 132 +--- icons/effects/random_spawners.dmi | Bin 25172 -> 30105 bytes paradise.dme | 6 +- .../Scripts/27445_lootspawn_migration.txt | 21 + 29 files changed, 842 insertions(+), 849 deletions(-) delete mode 100644 code/game/objects/effects/spawners/lootdrop.dm create mode 100644 code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm create mode 100644 code/game/objects/effects/spawners/random/loot_spawners.dm create mode 100644 code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm create mode 100644 code/game/objects/effects/spawners/random/traders/trader_organization_spawners.dm delete mode 100644 code/modules/awaymissions/loot.dm create mode 100644 tools/UpdatePaths/Scripts/27445_lootspawn_migration.txt diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 95a68100f27..38ab7a7b295 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -39,7 +39,7 @@ /area/ruin/powered/pizza_party) "k" = ( /obj/structure/table/wood, -/obj/effect/spawner/lootdrop/pizzaparty, +/obj/effect/spawner/random/pizzaparty, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/lavaland_air, /area/ruin/powered/pizza_party) @@ -48,7 +48,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/effect/spawner/lootdrop/pizzaparty, +/obj/effect/spawner/random/pizzaparty, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/wood/lavaland_air, @@ -111,7 +111,7 @@ /area/ruin/powered/pizza_party) "x" = ( /obj/structure/table/wood, -/obj/effect/spawner/lootdrop/pizzaparty, +/obj/effect/spawner/random/pizzaparty, /turf/simulated/floor/wood/lavaland_air, /area/ruin/powered/pizza_party) "y" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index 1ba79151f95..c36b17b3d8b 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -62,7 +62,7 @@ /area/ruin/powered/seedvault) "ed" = ( /obj/structure/closet/crate/freezer, -/obj/effect/spawner/lootdrop/seed_vault, +/obj/effect/spawner/random/seed_vault, /turf/simulated/floor/plasteel/freezer, /area/ruin/powered/seedvault) "eI" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index 595cf8fcc28..e05aeb06181 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -1277,7 +1277,7 @@ /area/ruin/space/deepstorage) "gq" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/random/bluespace_tap/cultural, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" @@ -2659,7 +2659,7 @@ /obj/item/salvage/ruin/soviet, /obj/structure/rack, /obj/item/stack/spacecash/c500, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/random/bluespace_tap/cultural, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -2669,7 +2669,7 @@ /obj/structure/rack, /obj/effect/turf_decal/delivery/hollow, /obj/item/stack/spacecash/c500, -/obj/effect/spawner/lootdrop/bluespace_tap/organic, +/obj/effect/spawner/random/bluespace_tap/organic, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -5468,7 +5468,7 @@ "IR" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/rack, -/obj/effect/spawner/lootdrop/bluespace_tap/organic, +/obj/effect/spawner/random/bluespace_tap/organic, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm index 4481ccfa867..0f1ee59e30d 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm @@ -36,7 +36,7 @@ /turf/simulated/floor/mineral/titanium/blue/airless, /area/ruin/space/unpowered) "k" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/loot/crate, /turf/simulated/floor/mineral/titanium/blue/airless, /area/ruin/space/unpowered) "l" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm index 91e23038a88..e37cc660864 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aN" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/loot/crate, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) @@ -65,7 +65,7 @@ /turf/simulated/floor/plating, /area/ruin/space/unpowered) "jz" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/loot/crate, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "kb" = ( @@ -124,7 +124,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "qF" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/loot/crate, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm b/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm index 4decd99b3e0..e3441f22c23 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/emptyshell.dmm @@ -13,7 +13,7 @@ /turf/simulated/floor/plating, /area/ruin/space/unpowered) "e" = ( -/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/random/loot/crate, /turf/simulated/floor/plating, /area/ruin/space/unpowered) "f" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm index 121d70c443a..06e079ad0a0 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm @@ -73,7 +73,7 @@ }, /area/ruin/space/telecomms/chamber) "bP" = ( -/obj/effect/spawner/lootdrop/telecomms_core_table, +/obj/effect/spawner/random/telecomms_core_table, /obj/machinery/ai_slipper, /obj/structure/table/glass/reinforced/plastitanium, /turf/simulated/floor/plasteel{ @@ -607,7 +607,7 @@ /area/space/nearstation/no_teleport) "mD" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/bluespace_tap/organic, +/obj/effect/spawner/random/bluespace_tap/organic, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "mH" = ( @@ -716,7 +716,7 @@ pixel_x = 32; pixel_y = 0 }, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/random/bluespace_tap/cultural, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "oe" = ( @@ -2495,7 +2495,7 @@ /area/ruin/space/telecomms/tele) "Qg" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/random/bluespace_tap/cultural, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "Qx" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index 2e638bbc1c3..a72b07851c3 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -479,7 +479,7 @@ /obj/structure/closet/crate{ opened = 1 }, -/obj/effect/spawner/lootdrop/wizardcrash, +/obj/effect/spawner/random/wizardcrash, /turf/simulated/floor/plating, /area/ruin/space/powered) "bP" = ( diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index 1bd3c98faf0..aec5e43085a 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -4388,7 +4388,7 @@ }, /area/syndicate_mothership) "oI" = ( -/obj/effect/spawner/lootdrop/trade_sol/civ, +/obj/effect/spawner/random/traders/civilian, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -4419,7 +4419,7 @@ }, /area/tdome/tdomeobserve) "oL" = ( -/obj/effect/spawner/lootdrop/trade_sol/minerals, +/obj/effect/spawner/random/traders/minerals, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -4471,7 +4471,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/effect/spawner/lootdrop/trade_sol/donksoft, +/obj/effect/spawner/random/traders/donksoft, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -5309,7 +5309,7 @@ /turf/simulated/wall/mineral/plastitanium, /area/shuttle/assault_pod) "rK" = ( -/obj/effect/spawner/lootdrop/trade_sol/sci, +/obj/effect/spawner/random/traders/science, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -5384,7 +5384,7 @@ /turf/simulated/floor/mineral/titanium, /area/shuttle/transport) "rY" = ( -/obj/effect/spawner/lootdrop/trade_sol/med, +/obj/effect/spawner/random/traders/medical, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -6142,7 +6142,7 @@ }, /area/centcom/evac) "uP" = ( -/obj/effect/spawner/lootdrop/trade_sol/sec, +/obj/effect/spawner/random/traders/security, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -6188,7 +6188,7 @@ /turf/simulated/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) "vb" = ( -/obj/effect/spawner/lootdrop/trade_sol/eng, +/obj/effect/spawner/random/traders/engineering, /obj/structure/closet, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -6485,16 +6485,16 @@ /turf/simulated/floor/carpet, /area/admin) "vY" = ( -/obj/effect/spawner/lootdrop/trade_sol/largeitem, +/obj/effect/spawner/random/traders/large_item, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) "vZ" = ( -/obj/effect/spawner/lootdrop/trade_sol/vehicle, +/obj/effect/spawner/random/traders/vehicle, /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) "wa" = ( /obj/machinery/light/spot, -/obj/effect/spawner/lootdrop/trade_sol/serv, +/obj/effect/spawner/random/traders/service, /obj/structure/closet, /obj/item/stack/tile/disco_light/thirty, /turf/simulated/floor/mineral/titanium, diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index 9a8c1939fe6..4f8965b600f 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -29129,10 +29129,6 @@ /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/command/teleporter) -"bXq" = ( -/obj/effect/mapping_helpers/turfs/rust/maybe, -/turf/simulated/wall/r_wall, -/area/station/maintenance/asmaint2) "bXB" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -51085,7 +51081,7 @@ /area/station/engineering/atmos) "eUk" = ( /obj/structure/closet/crate/freezer, -/obj/effect/spawner/lootdrop/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, /obj/effect/spawner/random/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal) @@ -61810,7 +61806,7 @@ /turf/simulated/wall/r_wall, /area/station/engineering/gravitygenerator) "kzB" = ( -/obj/effect/spawner/lootdrop/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, /obj/structure/closet/crate/freezer, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -69578,6 +69574,10 @@ icon_state = "whitepurple" }, /area/station/science/rnd) +"oyY" = ( +/obj/effect/mapping_helpers/turfs/rust/maybe, +/turf/simulated/wall/r_wall, +/area/station/maintenance/asmaint2) "ozk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -132455,7 +132455,7 @@ cuQ bGG cKQ jxu -bXq +oyY bGG bKl dgy @@ -132715,8 +132715,8 @@ bGG dCw bGG qZN -bXq -bXq +oyY +oyY pUR bGG qZN @@ -133226,7 +133226,7 @@ cuQ lpS cLc bGG -bXq +oyY bYk bKd oJZ diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index df2b11ba477..ee94a466930 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -176,7 +176,7 @@ pixel_x = -4; pixel_y = 1 }, -/obj/effect/spawner/lootdrop/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, /turf/simulated/floor/carpet/black, /area/survivalpod) "C" = ( diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm deleted file mode 100644 index 432c427c163..00000000000 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ /dev/null @@ -1,596 +0,0 @@ -/obj/effect/spawner/lootdrop - icon = 'icons/effects/spawner_icons.dmi' - icon_state = "questionmark" - var/lootcount = 1 //how many items will be spawned - var/lootdoubles = TRUE //if the same item can be spawned twice - var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) - -/obj/effect/spawner/lootdrop/Initialize(mapload) - . = ..() - while(lootcount) - var/lootspawn = pickweight(loot) - if(!lootdoubles) - loot.Remove(lootspawn) - if(lootspawn) - new lootspawn(get_turf(src)) - lootcount-- - qdel(src) - -/obj/effect/spawner/lootdrop/armory_contraband - name = "armory contraband gun spawner" - lootdoubles = FALSE - - loot = list( - /obj/item/gun/projectile/automatic/pistol = 8, - /obj/item/gun/projectile/shotgun/automatic/combat = 5, - /obj/item/gun/projectile/revolver/mateba, - /obj/item/gun/projectile/automatic/pistol/deagle - ) - -/// for ruins -/obj/effect/spawner/lootdrop/crate_spawner - name = "lootcrate spawner" - lootdoubles = FALSE - loot = list( - /obj/structure/closet/crate/secure/loot = 20, - "" = 80, - ) - - - -/obj/effect/spawner/lootdrop/trade_sol/ - name = "trader item spawner" - lootcount = 6 - -/obj/effect/spawner/lootdrop/trade_sol/civ - name = "1. civilian gear" - loot = list( - // General utility gear - /obj/item/clothing/gloves/combat = 100, - /obj/item/reagent_containers/spray/cleaner/advanced = 100, - /obj/item/soap = 50, - /obj/item/clothing/under/syndicate/combat = 50, - /obj/item/soap/syndie = 50, - /obj/item/clothing/under/costume/psyjump = 50, - /obj/item/immortality_talisman = 50, - /obj/item/clothing/mask/holo_cigar = 100, - /obj/item/storage/box/syndie_kit/chameleon = 50, //costumes! - /obj/item/storage/backpack/satchel_flat = 50, - /obj/item/book_of_babel = 50, - /obj/item/clothing/mask/whistle = 50 - ) - -/obj/effect/spawner/lootdrop/trade_sol/minerals - name = "2. minerals" - loot = list( - // Common stuff you get from mining which isn't already present on the station - // Note that plasma and derived hybrid materials are NOT included in this list because plasma is the trader's objective! - /obj/item/stack/sheet/mineral/silver = 50, - /obj/item/stack/sheet/mineral/gold = 50, - /obj/item/stack/sheet/mineral/uranium = 50, - /obj/item/stack/sheet/mineral/diamond = 50, - /obj/item/stack/sheet/mineral/titanium = 50, - /obj/item/stack/sheet/plasteel = 50, - - // Hybrid stuff you could in theory get from mining - /obj/item/stack/sheet/titaniumglass = 50, - - // Rare stuff you can't get from mining - /obj/item/stack/sheet/mineral/tranquillite = 50, - /obj/item/stack/sheet/mineral/bananium = 50, - /obj/item/stack/sheet/wood = 50, - /obj/item/stack/sheet/plastic = 50, - /obj/item/stack/sheet/mineral/sandstone = 50 - ) - -/obj/effect/spawner/lootdrop/trade_sol/minerals/Initialize(mapload) - while(lootcount) - var/lootspawn = pickweight(loot) - loot -= lootspawn //We do this as the minerals will merge, and if duplicates roll they add one to the stack, instead of doubling. - var/obj/item/stack/sheet/S = new lootspawn(get_turf(src)) - S.amount = 25 - lootcount-- - . = ..() - -/obj/effect/spawner/lootdrop/trade_sol/donksoft - name = "3. donksoft gear" - loot = list( - // Donksoft guns - /obj/item/gun/projectile/automatic/c20r/toy = 50, - /obj/item/gun/projectile/automatic/l6_saw/toy = 50, - /obj/item/gun/projectile/automatic/toy/pistol = 100, - /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50, - /obj/item/gun/projectile/shotgun/toy = 50, - /obj/item/gun/projectile/shotgun/toy/crossbow = 50, - /obj/item/gun/projectile/shotgun/toy/tommygun = 50, - /obj/item/gun/projectile/automatic/sniper_rifle/toy = 50 - ) - - -/obj/effect/spawner/lootdrop/trade_sol/sci - name = "4. science gear" - loot = list( - // Robotics - /obj/item/assembly/signaler/anomaly/random = 50, // anomaly core - /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray = 25, // mecha x-ray laser - /obj/item/mecha_parts/mecha_equipment/teleporter/precise = 25, // upgraded mecha teleporter - /obj/item/autosurgeon/organ = 50, - /obj/item/mod/construction/plating/research = 25, - - // Research - /obj/item/paper/researchnotes = 125, // papers that give random R&D levels - /obj/item/storage/box/telescience = 25, // Code green or blue. Probably not antags. People haven't touched it in ages. Let us see what happens. - - // Xenobio - /obj/item/slimepotion/sentience = 50, // Low-value, but we want to encourage getting more players back in the round. - /obj/item/slimepotion/transference = 50, - - // Might as well let AI be interested - /obj/item/surveillance_upgrade = 25 - ) - -/obj/effect/spawner/lootdrop/trade_sol/med - name = "5. medical gear" - loot = list( - // Medchem - /obj/item/storage/pill_bottle/random_meds/labelled = 100, // random medical and other chems - /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 50, - - // Surgery - /obj/item/organ/internal/heart/gland/ventcrawling = 50, - /obj/item/organ/internal/heart/gland/heals = 50, - - // Genetics Research (should really be under science, but I was stuck for items to put in medical) - /obj/item/dnainjector/regenerate = 50, // regeneration - /obj/item/dnainjector/nobreath = 50, - /obj/item/dnainjector/telemut = 50, - - // Medical in general - /obj/item/mod/construction/plating/rescue = 25, - /obj/item/gun/medbeam = 25, //Antags can see this to remove it if a threat, unlikely to happen with another midround - /obj/item/bodyanalyzer = 25, - /obj/item/circuitboard/sleeper/syndicate = 25 - ) - -/obj/effect/spawner/lootdrop/trade_sol/sec - name = "6. security gear" - loot = list( - // Melee - /obj/item/kitchen/knife/combat = 50, - /obj/item/fluff/desolate_baton_kit = 50, // permission granted by Desolate to use their fluff kit in this loot table - - // Utility - /obj/item/storage/belt/military/assault = 50, - /obj/item/clothing/mask/gas/sechailer/swat = 50, - /obj/item/clothing/glasses/thermal = 50, // see heat-source mobs through walls. Less powerful than already-available xray. - /obj/item/mod/construction/plating/safeguard = 25, - /obj/item/mod/module/power_kick = 50, - /obj/item/storage/box/syndie_kit/camera_bug = 25, //Camera viewing on the go, planting cameras with detective work? Could be interesting! - - // Ranged weapons - /obj/item/storage/box/enforcer_rubber = 50, //Lethal ammo can be printed at an autolathe, so no need for the lethal subtype - /obj/item/gun/projectile/shotgun/automatic/dual_tube = 100, // cycler shotgun, not normally available to crew - /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/eng - name = "7. eng gear" - lootcount = 8 //increased due to this pool being a bit more... niche? - loot = list( - /obj/item/storage/belt/utility/chief/full = 25, - /obj/item/rcd/combat = 25, - /obj/item/rpd/bluespace = 25, - /obj/item/tank/internals/emergency_oxygen/double = 25, - /obj/item/storage/backpack/holding = 25, - /obj/item/clothing/glasses/meson/night = 25, // NV mesons - /obj/item/clothing/glasses/material = 25, // shows objects, but not mobs, through walls - /obj/item/mod/construction/plating/advanced = 25, - /obj/item/mod/module/jetpack/advanced = 25, - /obj/item/slimepotion/oil_slick = 25, //Suggested by discord, moderately common but not as common as most rnd things - /obj/item/holosign_creator/atmos = 25 - ) - -/obj/effect/spawner/lootdrop/trade_sol/largeitem - name = "8. largeitem" - lootcount = 1 - loot = list( - /obj/machinery/disco = 20, - /obj/structure/spirit_board = 20, - /obj/mecha/combat/durand/old = 20, - /obj/machinery/snow_machine = 20, - /obj/machinery/cooker/cerealmaker = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/vehicle - name = "9. vehicle" - loot = list( - /obj/vehicle/motorcycle = 50, - /obj/vehicle/snowmobile = 50, - /obj/vehicle/snowmobile/blue = 50, - /obj/vehicle/space/speedbike/red = 50, - /obj/vehicle/space/speedbike = 50 - ) - -/obj/effect/spawner/lootdrop/trade_sol/vehicle/Initialize(mapload) - while(lootcount) - var/lootspawn = pickweight(loot) - var/obj/vehicle/V = new lootspawn(get_turf(src)) - if(V.key_type) - V.inserted_key = new V.key_type(V) - lootcount-- - . = ..() - -/obj/effect/spawner/lootdrop/trade_sol/serv - name = "10. service gear" - loot = list( - // Mining - /obj/item/pickaxe/drill/jackhammer = 100, - /obj/item/gun/energy/kinetic_accelerator/experimental = 100, - /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs = 100, - - // Botanist - /obj/item/storage/box/botany_labelled_seeds = 100, - - // Clown - /obj/item/grenade/clusterbuster/honk = 100, - /obj/item/bikehorn/golden = 100, - /obj/item/gun/throw/piecannon = 100, - - // Bartender - /obj/item/storage/box/bartender_rare_ingredients_kit = 100, - - // Chef - /obj/item/storage/box/chef_rare_ingredients_kit = 100, - /obj/item/mod/module/dispenser = 50, // Prints burgers. When you want to be space mcdonalds. - // It would be nice to also have items for other service jobs: Mime, Librarian, Chaplain, etc - - // Chaplain - /obj/structure/constructshell = 50 //Fuck it we ball what could go wrong - ) - -/obj/effect/spawner/lootdrop/trade_sol/federation_minor - name = "11. trans-solar federation small gear" - loot = list( - /obj/item/storage/box/enforcer_rubber = 50, - /obj/item/lighter/zippo/gonzofist = 50, - /obj/item/clothing/glasses/welding/superior = 50, - /obj/item/clothing/suit/armor/bulletproof = 50, - /obj/item/clothing/mask/gas/explorer/marines = 50, - /obj/item/clothing/gloves/combat = 50, - /obj/item/storage/belt/military/assault = 50, - /obj/item/clothing/under/solgov = 50, - /obj/item/mod/module/dispenser = 50, - /obj/item/flag/solgov = 30 - ) - -/obj/effect/spawner/lootdrop/trade_sol/federation_major - name = "12. trans-solar federation large gear" - lootcount = 3 - loot = list( - /obj/item/storage/box/deagle = 20, //One mag - /obj/item/gun/projectile/automatic/pistol/m1911 = 30, //Again, one mag. Don't lose it. - /obj/item/melee/baseball_bat/homerun = 50, - /obj/item/rcd/combat = 50, - /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 50, - /obj/item/storage/fancy/shell/buck = 30, //Only eight shots, make them count - /obj/item/mod/module/noslip = 40, - /obj/item/clothing/mask/holo_cigar = 50 - ) - -/obj/effect/spawner/lootdrop/trade_sol/cybersun_minor - name = "11. cybersun industries small gear" - loot = list( - /obj/item/storage/box/syndidonkpockets = 50, - /obj/item/clothing/suit/jacket/bomber/syndicate = 50, - /obj/item/storage/box/syndie_kit/space = 50, - /obj/item/clothing/glasses/meson/sunglasses = 50, - /obj/item/storage/pill_bottle/zoom = 50, - /obj/item/clothing/mask/gas/voice_modulator/chameleon = 50, - /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray = 30, - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine = 30, - /obj/item/flag/syndi = 30 - ) - -// Damn near all of this is illegal. Gives officers something to do on a shift quiet enough to spawn traders. -/obj/effect/spawner/lootdrop/trade_sol/cybersun_major - name = "12. cybersun industries large gear" - lootcount = 3 - loot = list( - /obj/item/shield/energy = 20, - /obj/item/gun/projectile/automatic/pistol = 50, - /obj/item/bio_chip_implanter/storage = 50, - /obj/item/melee/knuckleduster/syndie = 50, - /obj/item/clothing/glasses/thermal/eyepatch = 50, - /obj/item/toy/syndicateballoon = 60, - /obj/item/organ/internal/cyberimp/arm/razorwire = 30, - /obj/item/organ/internal/cyberimp/arm/shell_launcher = 30, - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/dual = 30, - /obj/item/clothing/mask/holo_cigar = 50, - /obj/mecha/combat/marauder/mauler/trader = 3 //Extremely rare, unloaded so crew need to arm it for it to have any use. Also most definitely needs one helluva permit. - ) - lootdoubles = FALSE //No double mechs. - -/obj/effect/spawner/lootdrop/trade_sol/ussp_minor - name = "11. USSP small gear" - lootcount = 8 //Mostly flavor items - loot = list( - /obj/item/clothing/under/new_soviet = 50, - /obj/item/clothing/suit/sovietcoat = 50, - /obj/item/clothing/head/ushanka = 50, - /obj/item/food/grown/potato = 50, - /obj/item/reagent_containers/drinks/bottle/vodka/badminka = 50, - /obj/item/clothing/head/sovietsidecap = 50, - /obj/item/flag/ussp = 30, - /obj/item/ammo_box/magazine/apsm10mm = 15, //Spare mags for APS pistol. Sometimes you don't get the APS, in which case, soviet logistics. - /obj/item/ammo_box/a762 = 15 - ) - -// Lots of things to write permits for. Gives officers something to do on a shift quiet enough to spawn traders. -/obj/effect/spawner/lootdrop/trade_sol/ussp_major - name = "12. USSP large gear" - lootcount = 2 //Lots of dangerous stuff here - reduced amount - loot = list( - /obj/item/gun/projectile/revolver/nagant = 50, - /obj/item/gun/projectile/automatic/pistol/aps = 30, - /obj/item/gun/projectile/shotgun/boltaction = 50, - /obj/item/clothing/suit/space/hardsuit/soviet = 40, - /obj/item/clothing/glasses/thermal/eyepatch = 50, - /obj/item/clothing/mask/holo_cigar = 10 - ) - -/obj/effect/spawner/lootdrop/trade_sol/glintscale_minor - name = "11. glint-scale small gear" - loot = list( - /obj/item/clothing/suit/armor/vest/combat = 50, - /obj/item/clothing/under/syndicate/combat = 50, - /obj/item/claymore/ceremonial = 50, - /obj/item/harpoon = 50, - /obj/item/nullrod/claymore/chainsaw_sword = 50, - /obj/item/whetstone = 50, - /obj/item/flag/species/unathi = 20, - /obj/item/clothing/suit/armor/riot/knight/templar = 40, - /obj/item/clothing/head/helmet/riot/knight/templar = 40, - /obj/item/clothing/suit/unathi/robe = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/glintscale_major - name = "12. glint-scale large gear" - lootcount = 3 - loot = list( - /obj/item/melee/energy/sword/pirate = 30, - /obj/item/storage/box/breacher = 30, - /obj/item/fireaxe = 50, - /obj/item/fireaxe/boneaxe = 50, - /obj/item/gun/energy/kinetic_accelerator/crossbow/large = 10 //Big ebow. - ) - -/obj/effect/spawner/lootdrop/trade_sol/steadfast_minor - name = "11. steadfast trading co. small gear" - lootcount = 8 //Since it's a lot of seeds, boosted amount - loot = list( - /obj/item/storage/box/botany_labelled_seeds = 50, - /obj/item/seeds/chili/ice = 20, - /obj/item/seeds/chili/ghost = 20, - /obj/item/seeds/cannabis/ultimate = 10, - /obj/item/seeds/cannabis/white = 20, - /obj/item/seeds/wheat/meat = 20, - /obj/item/seeds/glowshroom = 20, - /obj/item/seeds/glowshroom/glowcap = 20, - /obj/item/seeds/tobacco/space = 20, - /obj/item/storage/box/hydroponics_starter = 40, - /obj/item/mod/module/thermal_regulator = 20, - /obj/item/flag/species/vulp = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/steadfast_major - name = "12. steadfast trading co. large gear" - lootcount = 3 - loot = list( - /obj/item/mod/construction/plating/research = 30, - /obj/item/assembly/signaler/anomaly/random = 20, - /obj/item/gun/energy/gun = 50, - /obj/item/storage/fancy/shell/dragonsbreath = 30, - /obj/item/storage/box/turbine_kit = 20, - /obj/item/mod/module/firefighting_tank = 40, - /obj/item/mod/module/jetpack/advanced = 40 - ) - -/obj/effect/spawner/lootdrop/trade_sol/syntheticunion_minor - name = "11. synthetic union small gear" - lootcount = 8 //A lot of these are available on station, so the amount of items spawned here is increased - loot = list( - /obj/item/clothing/glasses/meson/sunglasses = 50, - /obj/item/clothing/glasses/thermal/monocle = 50, - /obj/item/organ/internal/cyberimp/arm/toolset = 50, - /obj/item/organ/internal/cyberimp/arm/surgery = 50, - /obj/item/organ/internal/cyberimp/arm/janitorial = 50, - /obj/item/organ/internal/cyberimp/brain/anti_stam = 50, - /obj/item/organ/internal/cyberimp/brain/anti_sleep = 50, - /obj/item/organ/internal/cyberimp/brain/clown_voice = 40, - /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 50, - /obj/item/organ/internal/cyberimp/chest/ipc_repair = 50, - /obj/item/organ/internal/cyberimp/chest/ipc_joints/magnetic_joints = 50, - /obj/item/organ/internal/cyberimp/chest/ipc_joints/sealed = 50, - /obj/item/autosurgeon/organ = 10, - /obj/item/flag/species/machine = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/syntheticunion_major - name = "12. synthetic union large gear" - lootcount = 4 - loot = list( - /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 20, - /obj/item/organ/internal/cyberimp/arm/esword = 10, - /obj/item/organ/internal/cyberimp/arm/flash = 50, - /obj/item/organ/internal/cyberimp/chest/nutriment/plus/hardened = 50, - /obj/item/organ/internal/cyberimp/arm/telebaton = 25, //Security'll love this one - /obj/item/organ/internal/cyberimp/arm/razorwire = 30, - /obj/item/organ/internal/cyberimp/arm/shell_launcher = 30, - /obj/item/organ/internal/cyberimp/brain/anti_drop/hardened = 20, - /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 30, - /obj/item/surveillance_upgrade = 35 - ) - -/obj/effect/spawner/lootdrop/trade_sol/skipjack_minor - name = "11. skipjack small gear" - loot = list( - /obj/item/clothing/glasses/meson/gar = 50, - /obj/item/clothing/glasses/thermal/eyepatch = 50, - /obj/item/melee/energy/sword/pirate = 50, - /obj/item/clothing/suit/hooded/vox_robes = 30, - /obj/item/clothing/under/vox/vox_casual = 30, - /obj/item/clothing/gloves/color/yellow/vox = 10, //Species limited - rare item - /obj/item/clothing/shoes/magboots/vox = 10, //Species limited - rare item - /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 50, - /obj/item/mod/module/jetpack/advanced = 50, - /obj/item/gun/energy/plasma_pistol = 50, - /obj/item/mod/control/pre_equipped/standard = 40, - /obj/item/flag/species/vox = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/skipjack_major //contains a variety of things - raider loot - name = "12. skipjack large gear" - lootcount = 3 - loot = list( - /obj/item/storage/box/vox_spacesuit = 20, - /obj/item/storage/box/syndie_kit/chameleon = 50, - /obj/item/organ/internal/cyberimp/arm/esword = 10, - /obj/item/gun/energy/spikethrower = 20, - /obj/item/organ/internal/cyberimp/arm/medibeam = 50, - /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 50, - /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 10, - /obj/item/organ/internal/cyberimp/arm/gun/laser = 10, - /obj/item/fireaxe = 10, - /obj/item/gun/projectile/revolver/nagant = 10, - /obj/item/bio_chip_implanter/storage = 10, - /obj/item/rcd/combat = 10 - ) - -/obj/effect/spawner/lootdrop/trade_sol/solarcentral_minor - name = "11. skrellian central authority small gear" //Medical and protection theme - shields, mods, meds, and love - loot = list( - /obj/item/mod/control/pre_equipped/rescue = 60, - /obj/item/pen/sleepy/love = 50, - /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 50, - /obj/item/reagent_containers/glass/bottle/love = 50, - /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent = 50, - /obj/item/reagent_containers/applicator/dual = 50, - /obj/item/reagent_containers/hypospray/autoinjector/nanocalcium = 30, - /obj/item/storage/firstaid/surgery = 40, - /obj/item/dnainjector/nobreath = 50, - /obj/item/dnainjector/regenerate = 50, - /obj/item/dnainjector/insulation = 50, - /obj/item/flag/species/skrell = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/solarcentral_major - name = "12. skrellian central authority large gear" - lootcount = 3 - loot = list( - /obj/item/mod/module/energy_shield = 40, - /obj/item/shield/energy = 40, - /obj/item/reagent_containers/applicator/dual/syndi = 50, //Same as the above but comes emagged - /obj/item/gun/medbeam = 30, - /obj/item/gun/syringe/syndicate = 50, - /obj/item/storage/box/skrell_suit/black = 30, - /obj/item/storage/box/skrell_suit/white = 30, - /obj/item/rod_of_asclepius = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/technocracy_minor - name = "11. technocracy small gear" - loot = list( - /obj/item/paper/researchnotes = 150, //More research from the smart ones - /obj/item/storage/box/beakers/bluespace = 50, - /obj/item/storage/box/stockparts/deluxe = 50, - /obj/item/clothing/glasses/thermal/monocle = 50, - /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 30, - /obj/item/organ/internal/cyberimp/arm/surgery = 40, - /obj/item/organ/internal/cyberimp/arm/advmop = 30, - /obj/item/organ/internal/cyberimp/brain/anti_stam = 50, - /obj/item/organ/internal/cyberimp/brain/anti_sleep = 50, - /obj/item/organ/internal/cyberimp/brain/anti_drop = 50, - /obj/item/autosurgeon/organ = 10, - /obj/item/flag/species/greys = 20 - ) - -/obj/effect/spawner/lootdrop/trade_sol/technocracy_major - name = "12. technocracy large gear" - lootcount = 3 - loot = list( - /obj/item/storage/box/syndie_kit/prescan = 30, - /obj/item/gun/energy/decloner = 50, - /obj/item/organ/internal/cyberimp/brain/anti_drop/hardened = 20, - /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 30, - /obj/item/assembly/signaler/anomaly/random = 50, - /obj/item/surveillance_upgrade = 35, - /obj/item/mod/module/storage/bluespace = 40 - ) - -/obj/effect/spawner/lootdrop/trade_sol/merchantguild_minor - name = "11. merchant guild small gear" - lootcount = 12 //Much larger selection due to it being almost all clothes. - loot = list( - /obj/item/flag/species/nian = 20, - /obj/item/clothing/under/suit/really_black = 50, - /obj/item/clothing/under/syndicate/combat = 50, - /obj/item/clothing/under/syndicate/sniper = 50, - /obj/item/clothing/under/new_soviet/sovietofficer = 50, - /obj/item/clothing/under/solgov/elite = 50, - /obj/item/clothing/under/solgov/command = 50, - /obj/item/clothing/under/retro/security = 50, - /obj/item/clothing/under/misc/gimmick_captain_suit = 50, - /obj/item/clothing/under/misc/durathread = 50, - /obj/item/clothing/under/psysuit = 50, - /obj/item/clothing/under/costume/cuban_suit = 50, - /obj/item/clothing/suit/armor/vest/jacket = 50, - /obj/item/clothing/head/collectable/petehat = 20, - /obj/item/clothing/head/collectable/tophat = 50, - /obj/item/clothing/head/collectable/police = 50, - /obj/item/clothing/head/collectable/kitty = 50, - /obj/item/clothing/under/costume/janimaid = 50, - /obj/item/clothing/under/costume/maid = 50, - /obj/item/storage/box/syndie_kit/chameleon = 60 - ) - -/obj/effect/spawner/lootdrop/trade_sol/merchantguild_major - name = "12. merchant guild large gear" - lootcount = 6 //Low-risk items, flavorful knick knacks - higher stock - loot = list( - /obj/item/clothing/suit/pimpcoat = 50, - /obj/item/dualsaber/toy = 50, - /obj/item/toy/sword = 50, - /obj/item/toy/plushie/carpplushie/dragon = 50, - /obj/item/toy/plushie/carpplushie/void = 50, - /obj/item/toy/plushie/ipcplushie = 30, - /obj/item/toy/plushie/nukeplushie = 30, - /obj/item/toy/plushie/nianplushie = 50, //*buzz - /obj/item/toy/windup_toolbox = 50, - /obj/item/toy/ai = 50, - /obj/item/clothing/mask/gas/voice_modulator/chameleon = 50, - /obj/item/storage/box/syndie_kit/chameleon = 50 - ) - -/obj/effect/spawner/lootdrop/three_course_meal - name = "three course meal spawner" - lootcount = 3 - lootdoubles = FALSE - var/soups = list( - /obj/item/food/soup/beetsoup, - /obj/item/food/soup/stew, - /obj/item/food/soup/hotchili, - /obj/item/food/soup/nettlesoup, - /obj/item/food/soup/meatballsoup) - var/salads = list( - /obj/item/food/salad/herb, - /obj/item/food/salad/valid, - /obj/item/food/salad/aesir) - var/mains = list( - /obj/item/food/enchiladas, - /obj/item/food/stewedsoymeat, - /obj/item/food/burger/bigbite, - /obj/item/food/burger/superbite) - -/obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload) - loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) - . = ..() diff --git a/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm b/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm new file mode 100644 index 00000000000..a2ca9fce872 --- /dev/null +++ b/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm @@ -0,0 +1,123 @@ +/obj/effect/spawner/random/bluespace_tap + name = "bluespace harvester reward spawner" + spawn_loot_count = 1 + +/obj/effect/spawner/random/bluespace_tap/hat + name = "exotic hat" + loot = list( + /obj/item/clothing/head/collectable/chef, //same weighing on all of them + /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/collectable/tophat, + /obj/item/clothing/head/collectable/captain, + /obj/item/clothing/head/collectable/beret, + /obj/item/clothing/head/collectable/welding, + /obj/item/clothing/head/collectable/flatcap, + /obj/item/clothing/head/collectable/pirate, + /obj/item/clothing/head/collectable/kitty, + /obj/item/clothing/head/crown/fancy, + /obj/item/clothing/head/collectable/rabbitears, + /obj/item/clothing/head/collectable/wizard, + /obj/item/clothing/head/collectable/hardhat, + /obj/item/clothing/head/collectable/hos, + /obj/item/clothing/head/collectable/thunderdome, + /obj/item/clothing/head/collectable/swat, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/police, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/xenom, + /obj/item/clothing/head/collectable/petehat + ) + + +/obj/effect/spawner/random/bluespace_tap/cultural + name = "cultural artifacts" + loot = list( + /obj/vehicle/space/speedbike/red = 10, + /obj/item/grenade/clusterbuster/honk = 10, + /obj/item/toy/katana = 10, + /obj/item/stack/tile/brass/fifty = 20, + /obj/item/stack/sheet/mineral/abductor/fifty = 20, + /obj/item/sord = 20, + /obj/item/toy/syndicateballoon = 15, + /obj/item/lighter/zippo/gonzofist = 5, + /obj/item/lighter/zippo/engraved = 5, + /obj/item/lighter/zippo/nt_rep = 5, + /obj/item/gun/projectile/automatic/c20r/toy = 1, + /obj/item/gun/projectile/automatic/l6_saw/toy = 1, + /obj/item/gun/projectile/automatic/toy/pistol = 2, + /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 1, + /obj/item/gun/projectile/shotgun/toy = 1, + /obj/item/gun/projectile/shotgun/toy/crossbow = 1, + /obj/item/gun/projectile/shotgun/toy/tommygun = 1, + /obj/item/gun/projectile/automatic/sniper_rifle/toy = 1, + /obj/item/dualsaber/toy = 5, + /obj/machinery/snow_machine = 10, + /obj/item/clothing/head/kitty = 5, + /obj/item/coin/antagtoken = 5, + /obj/item/toy/prizeball/figure = 15, + /obj/item/toy/prizeball/therapy = 10, + /obj/item/bedsheet/patriot = 2, + /obj/item/bedsheet/rainbow = 2, + /obj/item/bedsheet/captain = 2, + /obj/item/bedsheet/centcom = 1, //mythic rare rarity + /obj/item/bedsheet/syndie = 2, + /obj/item/bedsheet/cult = 2, + /obj/item/bedsheet/wiz = 2, + /obj/item/stack/sheet/mineral/tranquillite/fifty = 3, + /obj/item/clothing/gloves/combat = 5, + /obj/item/blank_tarot_card = 5, + /obj/item/tarot_card_pack = 5, + /obj/item/tarot_card_pack/jumbo = 3, + /obj/item/tarot_card_pack/mega = 2 + ) + +/obj/effect/spawner/random/bluespace_tap/organic + name = "organic objects" + loot = list( + /obj/item/seeds/random/labelled = 50, + /obj/item/guardiancreator/biological = 5, + /obj/item/organ/internal/vocal_cords/adamantine = 15, + /obj/item/storage/pill_bottle/random_meds/labelled = 25, + /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 15, + /obj/item/dnainjector/telemut = 5, + /obj/item/dnainjector/small_size = 5, + /obj/item/dnainjector/morph = 5, + /obj/item/dnainjector/regenerate = 5, + /mob/living/simple_animal/pet/dog/corgi/ = 5, + /mob/living/simple_animal/pet/cat = 5, + /mob/living/simple_animal/pet/dog/fox/ = 5, + /mob/living/simple_animal/pet/penguin/baby = 5, + /mob/living/simple_animal/pig = 5, + /obj/item/slimepotion/sentience = 5, + /obj/item/clothing/mask/cigarette/cigar/havana = 3, + /obj/item/stack/sheet/mineral/bananium/fifty = 2, //bananas are organic, clearly. + /obj/item/storage/box/monkeycubes = 5, + /obj/item/stack/tile/carpet/twenty = 10, + /obj/item/stack/tile/carpet/black/twenty = 10, + /obj/item/soap/deluxe = 5 + ) + +/obj/effect/spawner/random/bluespace_tap/food + name = "fancy food" + spawn_loot_count = 3 + loot = list( + /obj/item/food/wingfangchu, + /obj/item/food/hotdog, + /obj/item/food/sliceable/turkey, + /obj/item/food/plumphelmetbiscuit, + /obj/item/food/appletart, + /obj/item/food/sliceable/cheesecake, + /obj/item/food/sliceable/bananacake, + /obj/item/food/sliceable/chocolatecake, + /obj/item/food/soup/meatballsoup, + /obj/item/food/soup/mysterysoup, + /obj/item/food/soup/stew, + /obj/item/food/soup/hotchili, + /obj/item/food/burrito, + /obj/item/food/fishburger, + /obj/item/food/cubancarp, + /obj/item/food/fishandchips, + /obj/item/food/meatpie, + /obj/item/pizzabox/hawaiian, //it ONLY gives hawaiian. MUHAHAHA + /obj/item/food/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? + ) diff --git a/code/game/objects/effects/spawners/random/food_spawners.dm b/code/game/objects/effects/spawners/random/food_spawners.dm index 426ddfe372f..b53c148d96d 100644 --- a/code/game/objects/effects/spawners/random/food_spawners.dm +++ b/code/game/objects/effects/spawners/random/food_spawners.dm @@ -19,3 +19,40 @@ /obj/item/food/stroopwafel = 1, ) record_spawn = TRUE + +/obj/effect/spawner/random/food_or_drink + // TODO: Consolidate all the spawner icons once all the legacy random spawners have been migrated + icon = 'icons/effects/random_spawners.dmi' + +/obj/effect/spawner/random/food_or_drink/soup + name = "soup spawner" + icon_state = "soup" + loot_subtype_path = /obj/item/food/soup + +/obj/effect/spawner/random/food_or_drink/salad + name = "salad spawner" + icon_state = "soup" + loot_subtype_path = /obj/item/food/salad + +/obj/effect/spawner/random/food_or_drink/dinner + name = "dinner spawner" + icon_state = "soup" + loot = list( + /obj/item/food/burger/bigbite, + /obj/item/food/burger/fivealarm, + /obj/item/food/burger/superbite, + /obj/item/food/enchiladas, + /obj/item/food/philly_cheesesteak, + /obj/item/food/sandwich, + /obj/item/food/stewedsoymeat, + ) + +/obj/effect/spawner/random/food_or_drink/three_course_meal + name = "three course meal spawner" + icon_state = "soup" + spawn_all_loot = TRUE + loot = list( + /obj/effect/spawner/random/food_or_drink/soup, + /obj/effect/spawner/random/food_or_drink/salad, + /obj/effect/spawner/random/food_or_drink/dinner, + ) diff --git a/code/game/objects/effects/spawners/random/loot_spawners.dm b/code/game/objects/effects/spawners/random/loot_spawners.dm new file mode 100644 index 00000000000..fad11c2b2c6 --- /dev/null +++ b/code/game/objects/effects/spawners/random/loot_spawners.dm @@ -0,0 +1,6 @@ +/obj/effect/spawner/random/loot/crate + name = "lootcrate spawner" + icon = 'icons/effects/random_spawners.dmi' + icon_state = "crate_secure" + spawn_loot_chance = 20 + loot = list(/obj/structure/closet/crate/secure/loot) diff --git a/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm b/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm new file mode 100644 index 00000000000..9d1175f13dc --- /dev/null +++ b/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm @@ -0,0 +1,222 @@ +/obj/effect/spawner/random/traders + name = "trader item spawner" + icon = 'icons/effects/random_spawners.dmi' + icon_state = "loot" + spawn_loot_count = 6 + +/obj/effect/spawner/random/traders/civilian + name = "1. civilian gear" + icon_state = "toolbox" + loot = list( + // General utility gear + /obj/item/clothing/gloves/combat = 10, + /obj/item/clothing/mask/holo_cigar = 10, + /obj/item/reagent_containers/spray/cleaner/advanced = 10, + + /obj/item/book_of_babel = 5, + /obj/item/clothing/mask/whistle = 5, + /obj/item/clothing/under/costume/psyjump = 5, + /obj/item/clothing/under/syndicate/combat = 5, + /obj/item/immortality_talisman = 5, + /obj/item/soap = 5, + /obj/item/soap/syndie = 5, + /obj/item/storage/backpack/satchel_flat = 5, + /obj/item/storage/box/syndie_kit/chameleon = 5, //costumes! + ) + +/obj/effect/spawner/random/traders/minerals + name = "2. minerals" + icon_state = "metal" + loot = list( + + // Common stuff you get from mining which isn't already present on the + // station. Note that plasma and derived hybrid materials are NOT + // included in this list because plasma is the trader's objective! + + /obj/item/stack/sheet/mineral/silver = 5, + /obj/item/stack/sheet/mineral/gold = 5, + /obj/item/stack/sheet/mineral/uranium = 5, + /obj/item/stack/sheet/mineral/diamond = 5, + /obj/item/stack/sheet/mineral/titanium = 5, + /obj/item/stack/sheet/plasteel = 5, + + // Hybrid stuff you could in theory get from mining + /obj/item/stack/sheet/titaniumglass = 5, + + // Rare stuff you can't get from mining + /obj/item/stack/sheet/mineral/tranquillite = 5, + /obj/item/stack/sheet/mineral/bananium = 5, + /obj/item/stack/sheet/wood = 5, + /obj/item/stack/sheet/plastic = 5, + /obj/item/stack/sheet/mineral/sandstone = 5, + ) + +/obj/effect/spawner/random/traders/minerals/make_item(spawn_loc, type_path_to_make) + var/obj/item/stack/sheet/S = ..() + if(istype(S)) + S.amount = 25 + + return S + +/obj/effect/spawner/random/traders/donksoft + name = "3. donksoft gear" + icon_state = "stetchkin" + + loot = list( + /obj/item/gun/projectile/automatic/c20r/toy = 5, + /obj/item/gun/projectile/automatic/l6_saw/toy = 5, + /obj/item/gun/projectile/automatic/toy/pistol = 10, + /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 5, + /obj/item/gun/projectile/shotgun/toy = 5, + /obj/item/gun/projectile/shotgun/toy/crossbow = 5, + /obj/item/gun/projectile/shotgun/toy/tommygun = 5, + /obj/item/gun/projectile/automatic/sniper_rifle/toy = 5, + ) + +/obj/effect/spawner/random/traders/science + name = "4. science gear" + // TODO: I know I created an anomaly core random spawner icon but it disappeared in some merge or other + icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon_state = "anomaly_core" + loot = list( + // Robotics + /obj/item/assembly/signaler/anomaly/random = 50, // anomaly core + /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray = 25, // mecha x-ray laser + /obj/item/mecha_parts/mecha_equipment/teleporter/precise = 25, // upgraded mecha teleporter + /obj/item/autosurgeon/organ = 50, + /obj/item/mod/construction/plating/research = 25, + + // Research + /obj/item/paper/researchnotes = 125, // papers that give random R&D levels + /obj/item/storage/box/telescience = 25, // Code green or blue. Probably not antags. People haven't touched it in ages. Let us see what happens. + + // Xenobio + /obj/item/slimepotion/sentience = 50, // Low-value, but we want to encourage getting more players back in the round. + /obj/item/slimepotion/transference = 50, + + // Might as well let AI be interested + /obj/item/surveillance_upgrade = 25, + ) + +/obj/effect/spawner/random/traders/medical + name = "5. medical gear" + icon_state = "medkit" + loot = list( + // Medchem + /obj/item/storage/pill_bottle/random_meds/labelled = 100, // random medical and other chems + /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 50, + + // Surgery + /obj/item/organ/internal/heart/gland/ventcrawling = 50, + /obj/item/organ/internal/heart/gland/heals = 50, + + // Genetics Research (should really be under science, but I was stuck for items to put in medical) + /obj/item/dnainjector/regenerate = 50, // regeneration + /obj/item/dnainjector/nobreath = 50, + /obj/item/dnainjector/telemut = 50, + + // Medical in general + /obj/item/mod/construction/plating/rescue = 25, + /obj/item/gun/medbeam = 25, //Antags can see this to remove it if a threat, unlikely to happen with another midround + /obj/item/bodyanalyzer = 25, + /obj/item/circuitboard/sleeper/syndicate = 25, + ) + +/obj/effect/spawner/random/traders/security + name = "6. security gear" + icon_state = "riot_shield" + loot = list( + // Melee + /obj/item/kitchen/knife/combat = 50, + /obj/item/fluff/desolate_baton_kit = 50, // permission granted by Desolate to use their fluff kit in this loot table + + // Utility + /obj/item/storage/belt/military/assault = 50, + /obj/item/clothing/mask/gas/sechailer/swat = 50, + /obj/item/clothing/glasses/thermal = 50, // see heat-source mobs through walls. Less powerful than already-available xray. + /obj/item/mod/construction/plating/safeguard = 25, + /obj/item/mod/module/power_kick = 50, + /obj/item/storage/box/syndie_kit/camera_bug = 25, //Camera viewing on the go, planting cameras with detective work? Could be interesting! + + // Ranged weapons + /obj/item/storage/box/enforcer_rubber = 50, //Lethal ammo can be printed at an autolathe, so no need for the lethal subtype + /obj/item/gun/projectile/shotgun/automatic/dual_tube = 100, // cycler shotgun, not normally available to crew + /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 20 + ) + +/obj/effect/spawner/random/traders/engineering + name = "7. eng gear" + icon_state = "wrench" + spawn_loot_count = 8 //increased due to this pool being a bit more... niche? + loot = list( + /obj/item/clothing/glasses/material, // shows objects, but not mobs, through walls + /obj/item/clothing/glasses/meson/night, // NV mesons + /obj/item/holosign_creator/atmos, + /obj/item/mod/construction/plating/advanced, + /obj/item/mod/module/jetpack/advanced, + /obj/item/rcd/combat, + /obj/item/rpd/bluespace, + /obj/item/slimepotion/oil_slick, //Suggested by discord, moderately common but not as common as most rnd things + /obj/item/storage/backpack/holding, + /obj/item/storage/belt/utility/chief/full, + /obj/item/tank/internals/emergency_oxygen/double, + ) + +/obj/effect/spawner/random/traders/large_item + name = "8. large item" + icon_state = "durand_old" + spawn_loot_count = 1 + loot = list( + /obj/machinery/cooker/cerealmaker, + /obj/machinery/disco, + /obj/machinery/snow_machine, + /obj/mecha/combat/durand/old, + /obj/structure/spirit_board, + ) + +/obj/effect/spawner/random/traders/vehicle + name = "9. vehicle" + icon_state = "motorcycle" + loot = list( + /obj/vehicle/motorcycle, + /obj/vehicle/snowmobile, + /obj/vehicle/snowmobile/blue, + /obj/vehicle/space/speedbike/red, + /obj/vehicle/space/speedbike, + ) + +/obj/effect/spawner/random/traders/vehicle/make_item(spawn_loc, type_path_to_make) + var/obj/vehicle/V = ..() + if(istype(V) && V.key_type) + V.inserted_key = new V.key_type(V) + + return V + +/obj/effect/spawner/random/traders/service + name = "10. service gear" + + loot = list( + // Mining + /obj/item/pickaxe/drill/jackhammer = 10, + /obj/item/gun/energy/kinetic_accelerator/experimental = 10, + /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs = 10, + + // Botanist + /obj/item/storage/box/botany_labelled_seeds = 10, + + // Clown + /obj/item/grenade/clusterbuster/honk = 10, + /obj/item/bikehorn/golden = 10, + /obj/item/gun/throw/piecannon = 10, + + // Bartender + /obj/item/storage/box/bartender_rare_ingredients_kit = 10, + + // Chef + /obj/item/storage/box/chef_rare_ingredients_kit = 10, + /obj/item/mod/module/dispenser = 5, // Prints burgers. When you want to be space mcdonalds. + // It would be nice to also have items for other service jobs: Mime, Librarian, Chaplain, etc + + // Chaplain + /obj/structure/constructshell = 5, //Fuck it we ball what could go wrong + ) diff --git a/code/game/objects/effects/spawners/random/traders/trader_organization_spawners.dm b/code/game/objects/effects/spawners/random/traders/trader_organization_spawners.dm new file mode 100644 index 00000000000..5a0636829c4 --- /dev/null +++ b/code/game/objects/effects/spawners/random/traders/trader_organization_spawners.dm @@ -0,0 +1,322 @@ +/obj/effect/spawner/random/traders/federation_minor + name = "11. trans-solar federation small gear" + loot = list( + /obj/item/storage/box/enforcer_rubber = 5, + /obj/item/lighter/zippo/gonzofist = 5, + /obj/item/clothing/glasses/welding/superior = 5, + /obj/item/clothing/suit/armor/bulletproof = 5, + /obj/item/clothing/mask/gas/explorer/marines = 5, + /obj/item/clothing/gloves/combat = 5, + /obj/item/storage/belt/military/assault = 5, + /obj/item/clothing/under/solgov = 5, + /obj/item/mod/module/dispenser = 5, + /obj/item/flag/solgov = 3 + ) + +/obj/effect/spawner/random/traders/federation_major + name = "12. trans-solar federation large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/storage/box/deagle = 2, //One mag + /obj/item/gun/projectile/automatic/pistol/m1911 = 3, //Again, one mag. Don't lose it. + /obj/item/melee/baseball_bat/homerun = 5, + /obj/item/rcd/combat = 5, + /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 5, + /obj/item/storage/fancy/shell/buck = 3, //Only seven shots, make them count + /obj/item/mod/module/noslip = 4, + /obj/item/clothing/mask/holo_cigar = 5 + ) + +/obj/effect/spawner/random/traders/cybersun_minor + name = "11. cybersun industries small gear" + loot = list( + /obj/item/storage/box/syndidonkpockets = 5, + /obj/item/clothing/suit/jacket/bomber/syndicate = 5, + /obj/item/storage/box/syndie_kit/space = 5, + /obj/item/clothing/glasses/meson/sunglasses = 5, + /obj/item/storage/pill_bottle/zoom = 5, + /obj/item/clothing/mask/gas/voice_modulator/chameleon = 5, + /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray = 3, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine = 3, + /obj/item/flag/syndi = 3 + ) + +// Damn near all of this is illegal. Gives officers something to do on a shift quiet enough to spawn traders. +/obj/effect/spawner/random/traders/cybersun_major + name = "12. cybersun industries large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/shield/energy = 20, + /obj/item/gun/projectile/automatic/pistol = 50, + /obj/item/bio_chip_implanter/storage = 50, + /obj/item/melee/knuckleduster/syndie = 50, + /obj/item/clothing/glasses/thermal/eyepatch = 50, + /obj/item/toy/syndicateballoon = 60, + /obj/item/organ/internal/cyberimp/arm/razorwire = 30, + /obj/item/organ/internal/cyberimp/arm/shell_launcher = 30, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/dual = 30, + /obj/item/clothing/mask/holo_cigar = 50, + /obj/mecha/combat/marauder/mauler/trader = 3 //Extremely rare, unloaded so crew need to arm it for it to have any use. Also most definitely needs one helluva permit. + ) + spawn_loot_double = FALSE // No double mechs. + +/obj/effect/spawner/random/traders/ussp_minor + name = "11. USSP small gear" + spawn_loot_count = 8 //Mostly flavor items + loot = list( + /obj/item/clothing/under/new_soviet = 50, + /obj/item/clothing/suit/sovietcoat = 50, + /obj/item/clothing/head/ushanka = 50, + /obj/item/food/grown/potato = 50, + /obj/item/reagent_containers/drinks/bottle/vodka/badminka = 50, + /obj/item/clothing/head/sovietsidecap = 50, + /obj/item/flag/ussp = 30, + /obj/item/ammo_box/magazine/apsm10mm = 15, //Spare mags for APS pistol. Sometimes you don't get the APS, in which case, soviet logistics. + /obj/item/ammo_box/a762 = 15 + ) + +// Lots of things to write permits for. Gives officers something to do on a shift quiet enough to spawn traders. +/obj/effect/spawner/random/traders/ussp_major + name = "12. USSP large gear" + spawn_loot_count = 2 //Lots of dangerous stuff here - reduced amount + loot = list( + /obj/item/gun/projectile/revolver/nagant = 5, + /obj/item/gun/projectile/automatic/pistol/aps = 3, + /obj/item/gun/projectile/shotgun/boltaction = 5, + /obj/item/clothing/suit/space/hardsuit/soviet = 4, + /obj/item/clothing/glasses/thermal/eyepatch = 5, + /obj/item/clothing/mask/holo_cigar = 1 + ) + +/obj/effect/spawner/random/traders/glintscale_minor + name = "11. glint-scale small gear" + loot = list( + /obj/item/clothing/suit/armor/vest/combat = 50, + /obj/item/clothing/under/syndicate/combat = 50, + /obj/item/claymore/ceremonial = 50, + /obj/item/harpoon = 50, + /obj/item/nullrod/claymore/chainsaw_sword = 50, + /obj/item/whetstone = 50, + /obj/item/flag/species/unathi = 20, + /obj/item/clothing/suit/armor/riot/knight/templar = 40, + /obj/item/clothing/head/helmet/riot/knight/templar = 40, + /obj/item/clothing/suit/unathi/robe = 20 + ) + +/obj/effect/spawner/random/traders/glintscale_major + name = "12. glint-scale large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/melee/energy/sword/pirate = 30, + /obj/item/storage/box/breacher = 30, + /obj/item/fireaxe = 50, + /obj/item/fireaxe/boneaxe = 50, + /obj/item/gun/energy/kinetic_accelerator/crossbow/large = 10 //Big ebow. + ) + +/obj/effect/spawner/random/traders/steadfast_minor + name = "11. steadfast trading co. small gear" + spawn_loot_count = 8 //Since it's a lot of seeds, boosted amount + loot = list( + /obj/item/storage/box/botany_labelled_seeds = 50, + /obj/item/seeds/chili/ice = 20, + /obj/item/seeds/chili/ghost = 20, + /obj/item/seeds/cannabis/ultimate = 10, + /obj/item/seeds/cannabis/white = 20, + /obj/item/seeds/wheat/meat = 20, + /obj/item/seeds/glowshroom = 20, + /obj/item/seeds/glowshroom/glowcap = 20, + /obj/item/seeds/tobacco/space = 20, + /obj/item/storage/box/hydroponics_starter = 40, + /obj/item/mod/module/thermal_regulator = 20, + /obj/item/flag/species/vulp = 20 + ) + +/obj/effect/spawner/random/traders/steadfast_major + name = "12. steadfast trading co. large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/mod/construction/plating/research = 3, + /obj/item/assembly/signaler/anomaly/random = 2, + /obj/item/gun/energy/gun = 5, + /obj/item/storage/fancy/shell/dragonsbreath = 3, + /obj/item/storage/box/turbine_kit = 2, + /obj/item/mod/module/firefighting_tank = 4, + /obj/item/mod/module/jetpack/advanced = 4 + ) + +/obj/effect/spawner/random/traders/syntheticunion_minor + name = "11. synthetic union small gear" + spawn_loot_count = 8 //A lot of these are available on station, so the amount of items spawned here is increased + loot = list( + /obj/item/clothing/glasses/meson/sunglasses = 5, + /obj/item/clothing/glasses/thermal/monocle = 5, + /obj/item/organ/internal/cyberimp/arm/toolset = 5, + /obj/item/organ/internal/cyberimp/arm/surgery = 5, + /obj/item/organ/internal/cyberimp/arm/janitorial = 5, + /obj/item/organ/internal/cyberimp/brain/anti_stam = 5, + /obj/item/organ/internal/cyberimp/brain/anti_sleep = 5, + /obj/item/organ/internal/cyberimp/brain/clown_voice = 4, + /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 5, + /obj/item/organ/internal/cyberimp/chest/ipc_repair = 5, + /obj/item/organ/internal/cyberimp/chest/ipc_joints/magnetic_joints = 5, + /obj/item/organ/internal/cyberimp/chest/ipc_joints/sealed = 5, + /obj/item/autosurgeon/organ = 1, + /obj/item/flag/species/machine = 2 + ) + +/obj/effect/spawner/random/traders/syntheticunion_major + name = "12. synthetic union large gear" + spawn_loot_count = 4 + loot = list( + /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 20, + /obj/item/organ/internal/cyberimp/arm/esword = 10, + /obj/item/organ/internal/cyberimp/arm/flash = 50, + /obj/item/organ/internal/cyberimp/chest/nutriment/plus/hardened = 50, + /obj/item/organ/internal/cyberimp/arm/telebaton = 25, //Security'll love this one + /obj/item/organ/internal/cyberimp/arm/razorwire = 30, + /obj/item/organ/internal/cyberimp/arm/shell_launcher = 30, + /obj/item/organ/internal/cyberimp/brain/anti_drop/hardened = 20, + /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 30, + /obj/item/surveillance_upgrade = 35 + ) + +/obj/effect/spawner/random/traders/skipjack_minor + name = "11. skipjack small gear" + loot = list( + /obj/item/clothing/glasses/meson/gar = 50, + /obj/item/clothing/glasses/thermal/eyepatch = 50, + /obj/item/melee/energy/sword/pirate = 50, + /obj/item/clothing/suit/hooded/vox_robes = 30, + /obj/item/clothing/under/vox/vox_casual = 30, + /obj/item/clothing/gloves/color/yellow/vox = 10, //Species limited - rare item + /obj/item/clothing/shoes/magboots/vox = 10, //Species limited - rare item + /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 50, + /obj/item/mod/module/jetpack/advanced = 50, + /obj/item/gun/energy/plasma_pistol = 50, + /obj/item/mod/control/pre_equipped/standard = 40, + /obj/item/flag/species/vox = 20 + ) + +/obj/effect/spawner/random/traders/skipjack_major //contains a variety of things - raider loot + name = "12. skipjack large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/storage/box/vox_spacesuit = 2, + /obj/item/storage/box/syndie_kit/chameleon = 5, + /obj/item/organ/internal/cyberimp/arm/esword = 1, + /obj/item/gun/energy/spikethrower = 2, + /obj/item/organ/internal/cyberimp/arm/medibeam = 5, + /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 5, + /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 1, + /obj/item/organ/internal/cyberimp/arm/gun/laser = 1, + /obj/item/fireaxe = 1, + /obj/item/gun/projectile/revolver/nagant = 1, + /obj/item/bio_chip_implanter/storage = 1, + /obj/item/rcd/combat = 1 + ) + +/obj/effect/spawner/random/traders/solarcentral_minor + name = "11. skrellian central authority small gear" //Medical and protection theme - shields, mods, meds, and love + loot = list( + /obj/item/mod/control/pre_equipped/rescue = 6, + /obj/item/pen/sleepy/love = 5, + /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 5, + /obj/item/reagent_containers/glass/bottle/love = 5, + /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent = 5, + /obj/item/reagent_containers/applicator/dual = 5, + /obj/item/reagent_containers/hypospray/autoinjector/nanocalcium = 3, + /obj/item/storage/firstaid/surgery = 4, + /obj/item/dnainjector/nobreath = 5, + /obj/item/dnainjector/regenerate = 5, + /obj/item/dnainjector/insulation = 5, + /obj/item/flag/species/skrell = 2 + ) + +/obj/effect/spawner/random/traders/solarcentral_major + name = "12. skrellian central authority large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/mod/module/energy_shield = 4, + /obj/item/shield/energy = 4, + /obj/item/reagent_containers/applicator/dual/syndi = 5, //Same as the above but comes emagged + /obj/item/gun/medbeam = 3, + /obj/item/gun/syringe/syndicate = 5, + /obj/item/storage/box/skrell_suit/black = 3, + /obj/item/storage/box/skrell_suit/white = 3, + /obj/item/rod_of_asclepius = 2 + ) + +/obj/effect/spawner/random/traders/technocracy_minor + name = "11. technocracy small gear" + loot = list( + /obj/item/paper/researchnotes = 15, //More research from the smart ones + /obj/item/storage/box/beakers/bluespace = 5, + /obj/item/storage/box/stockparts/deluxe = 5, + /obj/item/clothing/glasses/thermal/monocle = 5, + /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 3, + /obj/item/organ/internal/cyberimp/arm/surgery = 4, + /obj/item/organ/internal/cyberimp/arm/advmop = 3, + /obj/item/organ/internal/cyberimp/brain/anti_stam = 5, + /obj/item/organ/internal/cyberimp/brain/anti_sleep = 5, + /obj/item/organ/internal/cyberimp/brain/anti_drop = 5, + /obj/item/autosurgeon/organ = 1, + /obj/item/flag/species/greys = 2 + ) + +/obj/effect/spawner/random/traders/technocracy_major + name = "12. technocracy large gear" + spawn_loot_count = 3 + loot = list( + /obj/item/storage/box/syndie_kit/prescan = 30, + /obj/item/gun/energy/decloner = 50, + /obj/item/organ/internal/cyberimp/brain/anti_drop/hardened = 20, + /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 30, + /obj/item/assembly/signaler/anomaly/random = 50, + /obj/item/surveillance_upgrade = 35, + /obj/item/mod/module/storage/bluespace = 40 + ) + +/obj/effect/spawner/random/traders/merchantguild_minor + name = "11. merchant guild small gear" + spawn_loot_count = 12 //Much larger selection due to it being almost all clothes. + loot = list( + /obj/item/flag/species/nian = 2, + /obj/item/clothing/under/suit/really_black = 5, + /obj/item/clothing/under/syndicate/combat = 5, + /obj/item/clothing/under/syndicate/sniper = 5, + /obj/item/clothing/under/new_soviet/sovietofficer = 5, + /obj/item/clothing/under/solgov/elite = 5, + /obj/item/clothing/under/solgov/command = 5, + /obj/item/clothing/under/retro/security = 5, + /obj/item/clothing/under/misc/gimmick_captain_suit = 5, + /obj/item/clothing/under/misc/durathread = 5, + /obj/item/clothing/under/psysuit = 5, + /obj/item/clothing/under/costume/cuban_suit = 5, + /obj/item/clothing/suit/armor/vest/jacket = 5, + /obj/item/clothing/head/collectable/petehat = 2, + /obj/item/clothing/head/collectable/tophat = 5, + /obj/item/clothing/head/collectable/police = 5, + /obj/item/clothing/head/collectable/kitty = 5, + /obj/item/clothing/under/costume/janimaid = 5, + /obj/item/clothing/under/costume/maid = 5, + /obj/item/storage/box/syndie_kit/chameleon = 6 + ) + +/obj/effect/spawner/random/traders/merchantguild_major + name = "12. merchant guild large gear" + spawn_loot_count = 6 //Low-risk items, flavorful knick knacks - higher stock + loot = list( + /obj/item/clothing/suit/pimpcoat = 5, + /obj/item/dualsaber/toy = 5, + /obj/item/toy/sword = 5, + /obj/item/toy/plushie/carpplushie/dragon = 5, + /obj/item/toy/plushie/carpplushie/void = 5, + /obj/item/toy/plushie/ipcplushie = 3, + /obj/item/toy/plushie/nukeplushie = 3, + /obj/item/toy/plushie/nianplushie = 5, //*buzz + /obj/item/toy/windup_toolbox = 5, + /obj/item/toy/ai = 5, + /obj/item/clothing/mask/gas/voice_modulator/chameleon = 5, + /obj/item/storage/box/syndie_kit/chameleon = 5 + ) diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm deleted file mode 100644 index e4ed7ac7a54..00000000000 --- a/code/modules/awaymissions/loot.dm +++ /dev/null @@ -1,26 +0,0 @@ -/obj/effect/spawner/away_lootdrop - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - var/lootcount = 1 //how many items will be spawned - var/lootdoubles = 0 //if the same item can be spawned twice - var/loot = "" //a list of possible items to spawn- a string of paths - -/obj/effect/spawner/away_lootdrop/Initialize(mapload) - ..() - var/list/things = params2list(loot) - - if(things && length(things)) - for(var/i = lootcount, i > 0, i--) - if(!length(things)) - return - - var/loot_spawn = pick(things) - var/loot_path = text2path(loot_spawn) - - if(!loot_path || !lootdoubles) - things.Remove(loot_spawn) - continue - - new loot_path(get_turf(src)) - - return INITIALIZE_HINT_QDEL diff --git a/code/modules/awaymissions/mission_code/ruins/telecomns.dm b/code/modules/awaymissions/mission_code/ruins/telecomns.dm index 2d24fe5e65f..d65ddd9c76a 100644 --- a/code/modules/awaymissions/mission_code/ruins/telecomns.dm +++ b/code/modules/awaymissions/mission_code/ruins/telecomns.dm @@ -410,14 +410,14 @@ GLOBAL_LIST_EMPTY(telecomms_trap_tank) explosion(loc, -1, -1, 2, 4, flame_range = 4) qdel(src) -/obj/effect/spawner/lootdrop/telecomms_core_table +/obj/effect/spawner/random/telecomms_core_table name = "telecomms core table spawner" - lootcount = 1 + spawn_loot_count = 1 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/item/rcd/combat, + /obj/item/gun/medbeam, + /obj/item/gun/energy/wormhole_projector, + /obj/item/storage/box/syndie_kit/oops_all_extraction_flares ) /obj/item/storage/box/syndie_kit/oops_all_extraction_flares diff --git a/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm b/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm index 62b288870a7..35b3a0cfb79 100644 --- a/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm +++ b/code/modules/awaymissions/mission_code/ruins/wizardcrash.dm @@ -13,18 +13,20 @@ /obj/item/spellbook/oneuse/emp/used used = TRUE //spawns used -/obj/effect/spawner/lootdrop/wizardcrash +/obj/effect/spawner/random/wizardcrash loot = list( - /obj/item/guardiancreator = 1, // jackpot. - /obj/item/spellbook/oneuse/knock = 1, // tresspassing charges incoming - /obj/item/gun/magic/wand/resurrection = 1, // medbay's best friend - /obj/item/tarot_generator = 1, // A little bit of everything, all of the time. - /obj/item/spellbook/oneuse/charge = 15, // and now for less useful stuff to dilute the good loot chances - /obj/item/spellbook/oneuse/summonitem = 20, - /obj/item/spellbook/oneuse/forcewall = 10, - /obj/item/tarot_card_pack = 10, - /obj/item/tarot_card_pack/jumbo = 6, - /obj/item/tarot_card_pack/mega = 4, - /obj/item/book/granter/spell/summon_cheese = 10, // hungry wizard stuff - /obj/item/reagent_containers/drinks/everfull = 10 // Cheese and wine - ) + /obj/item/spellbook/oneuse/summonitem = 20, + /obj/item/spellbook/oneuse/charge = 15, // and now for less useful stuff to dilute the good loot chances + /obj/item/book/granter/spell/summon_cheese = 10, // hungry wizard stuff + /obj/item/reagent_containers/drinks/everfull = 10, // Cheese and wine + /obj/item/spellbook/oneuse/forcewall = 10, + /obj/item/tarot_card_pack = 10, + + /obj/item/tarot_card_pack/jumbo = 6, + /obj/item/tarot_card_pack/mega = 4, + + /obj/item/guardiancreator = 1, // jackpot. + /obj/item/spellbook/oneuse/knock = 1, // tresspassing charges incoming + /obj/item/gun/magic/wand/resurrection = 1, // medbay's best friend + /obj/item/tarot_generator = 1, // A little bit of everything, all of the time. + ) diff --git a/code/modules/clothing/shoes/misc_shoes.dm b/code/modules/clothing/shoes/misc_shoes.dm index e0a1ac06e51..b5b8d0cadba 100644 --- a/code/modules/clothing/shoes/misc_shoes.dm +++ b/code/modules/clothing/shoes/misc_shoes.dm @@ -423,7 +423,7 @@ desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants." icon_state = "lizardboots_blue" -/obj/effect/spawner/lootdrop/lizardboots +/obj/effect/spawner/random/lizardboots name = "random lizard boot quality" desc = "Which ever gets picked, the lizard race loses." icon = 'icons/obj/clothing/shoes.dmi' diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm index 68ca54d5838..435f5196d55 100644 --- a/code/modules/crafting/tailoring.dm +++ b/code/modules/crafting/tailoring.dm @@ -593,7 +593,7 @@ /datum/crafting_recipe/lizardboots name = "Lizard Skin Boots" - result = list(/obj/effect/spawner/lootdrop/lizardboots) + result = list(/obj/effect/spawner/random/lizardboots) time = 6 SECONDS reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1, /obj/item/stack/sheet/leather = 1) category = CAT_CLOTHING diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 684772392d1..8cb3977d030 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -144,8 +144,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "Kayani Station" trader_species = /mob/living/carbon/human trader_outfit = /datum/outfit/admin/trader/sol - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/federation_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/federation_major + trader_minor_special = /obj/effect/spawner/random/traders/federation_minor + trader_major_special = /obj/effect/spawner/random/traders/federation_major /datum/traders/cyber trader_type = "Cybersun Industries" @@ -153,8 +153,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "an undercover robotics factory" trader_species = /mob/living/carbon/human trader_outfit = /datum/outfit/admin/trader/cyber - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/cybersun_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/cybersun_major + trader_minor_special = /obj/effect/spawner/random/traders/cybersun_minor + trader_major_special = /obj/effect/spawner/random/traders/cybersun_major /datum/traders/commie trader_type = "USSP" @@ -162,8 +162,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "Belastrav Station" trader_species = /mob/living/carbon/human trader_outfit = /datum/outfit/admin/trader/commie - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/ussp_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/ussp_major + trader_minor_special = /obj/effect/spawner/random/traders/ussp_minor + trader_major_special = /obj/effect/spawner/random/traders/ussp_major /datum/traders/unathi trader_type = "Glint Scales" @@ -171,8 +171,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "a Glint-Scale outpost" trader_species = /mob/living/carbon/human/unathi trader_outfit = /datum/outfit/admin/trader/unathi - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/glintscale_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/glintscale_major + trader_minor_special = /obj/effect/spawner/random/traders/glintscale_minor + trader_major_special = /obj/effect/spawner/random/traders/glintscale_major /datum/traders/vulp trader_type = "Steadfast Trading Co." @@ -180,8 +180,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "the MV Steadfast Platinum" trader_species = /mob/living/carbon/human/vulpkanin trader_outfit = /datum/outfit/admin/trader/vulp - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/steadfast_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/steadfast_major + trader_minor_special = /obj/effect/spawner/random/traders/steadfast_minor + trader_major_special = /obj/effect/spawner/random/traders/steadfast_major /datum/traders/ipc trader_type = "Synthetic Union" @@ -189,8 +189,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "Cadraenov Station" trader_species = /mob/living/carbon/human/machine trader_outfit = /datum/outfit/admin/trader/ipc - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/syntheticunion_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/syntheticunion_major + trader_minor_special = /obj/effect/spawner/random/traders/syntheticunion_minor + trader_major_special = /obj/effect/spawner/random/traders/syntheticunion_major /datum/traders/vox trader_type = "Skipjack" @@ -198,8 +198,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "a trading skipjack" trader_species = /mob/living/carbon/human/vox trader_outfit = /datum/outfit/admin/trader/vox - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/skipjack_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/skipjack_major + trader_minor_special = /obj/effect/spawner/random/traders/skipjack_minor + trader_major_special = /obj/effect/spawner/random/traders/skipjack_major /datum/traders/skrell trader_type = "Skrellian Central Authority" @@ -207,8 +207,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "Crown Station" trader_species = /mob/living/carbon/human/skrell trader_outfit = /datum/outfit/admin/trader/skrell - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/solarcentral_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/solarcentral_major + trader_minor_special = /obj/effect/spawner/random/traders/solarcentral_minor + trader_major_special = /obj/effect/spawner/random/traders/solarcentral_major /datum/traders/grey trader_type = "Technocracy" @@ -216,8 +216,8 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "Orbital Commerce Outpost 58" trader_species = /mob/living/carbon/human/grey trader_outfit = /datum/outfit/admin/trader/grey - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/technocracy_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/technocracy_major + trader_minor_special = /obj/effect/spawner/random/traders/technocracy_minor + trader_major_special = /obj/effect/spawner/random/traders/technocracy_major /datum/traders/nian trader_type = "Merchant Guild" @@ -225,5 +225,5 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) dock_site = "Guild Subsidiary Station 'Gilded Comet'" trader_species = /mob/living/carbon/human/moth trader_outfit = /datum/outfit/admin/trader/nian - trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/merchantguild_minor - trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/merchantguild_major + trader_minor_special = /obj/effect/spawner/random/traders/merchantguild_minor + trader_major_special = /obj/effect/spawner/random/traders/merchantguild_major diff --git a/code/modules/ruins/lavalandruin_code/pizzaparty.dm b/code/modules/ruins/lavalandruin_code/pizzaparty.dm index d4fcc5957b5..824cca61d5a 100644 --- a/code/modules/ruins/lavalandruin_code/pizzaparty.dm +++ b/code/modules/ruins/lavalandruin_code/pizzaparty.dm @@ -1,13 +1,17 @@ -/obj/effect/spawner/lootdrop/pizzaparty +/obj/effect/spawner/random/pizzaparty name = "pizza bomb spawner" - loot = list(/obj/item/pizzabox/margherita = 2, - /obj/item/pizzabox/meat = 2, - /obj/item/pizzabox/mushroom = 1, - /obj/item/pizzabox/pepperoni = 2, - /obj/item/pizzabox/garlic = 1, - /obj/item/pizzabox/firecracker = 1, - /obj/item/pizzabox/pizza_bomb = 1) - lootdoubles = FALSE + icon = 'icons/effects/random_spawners.dmi' + icon_state = "pizzabox" + loot = list( + /obj/item/pizzabox/margherita = 2, + /obj/item/pizzabox/meat = 2, + /obj/item/pizzabox/pepperoni = 2, + /obj/item/pizzabox/mushroom = 1, + /obj/item/pizzabox/garlic = 1, + /obj/item/pizzabox/firecracker = 1, + /obj/item/pizzabox/pizza_bomb = 1 + ) + spawn_loot_double = TRUE /obj/structure/reagent_dispensers/water_cooler/pizzaparty name = "punch cooler" diff --git a/code/modules/ruins/lavalandruin_code/seed_vault.dm b/code/modules/ruins/lavalandruin_code/seed_vault.dm index bbedf920162..af0e83e81f7 100644 --- a/code/modules/ruins/lavalandruin_code/seed_vault.dm +++ b/code/modules/ruins/lavalandruin_code/seed_vault.dm @@ -1,12 +1,12 @@ -/obj/effect/spawner/lootdrop/seed_vault +/obj/effect/spawner/random/seed_vault name = "seed vault seeds" - lootcount = 1 - loot = list(/obj/item/food/grown/mushroom/glowshroom/glowcap = 10, - /obj/item/seeds/cherry/bomb = 10, - /obj/item/seeds/berry/glow = 10, - /obj/item/seeds/sunflower/moonflower = 8 - ) + loot = list( + /obj/item/food/grown/mushroom/glowshroom/glowcap = 10, + /obj/item/seeds/cherry/bomb = 10, + /obj/item/seeds/berry/glow = 10, + /obj/item/seeds/sunflower/moonflower = 8, + ) /obj/effect/mob_spawn/human/alive/seed_vault name = "preserved terrarium" diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 5e189a58087..65cd03fe5aa 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -50,130 +50,6 @@ /obj/item/stock_parts/capacitor/quadratic = 5,//Probably okay, right? /obj/item/stack/ore/bluespace_crystal = 5) -/obj/effect/spawner/lootdrop/bluespace_tap - name = "bluespace harvester reward spawner" - lootcount = 1 - -/obj/effect/spawner/lootdrop/bluespace_tap/hat - name = "exotic hat" - loot = list( - /obj/item/clothing/head/collectable/chef, //same weighing on all of them - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/crown/fancy, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/hos, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat - ) - - -/obj/effect/spawner/lootdrop/bluespace_tap/cultural - name = "cultural artifacts" - loot = list( - /obj/vehicle/space/speedbike/red = 10, - /obj/item/grenade/clusterbuster/honk = 10, - /obj/item/toy/katana = 10, - /obj/item/stack/tile/brass/fifty = 20, - /obj/item/stack/sheet/mineral/abductor/fifty = 20, - /obj/item/sord = 20, - /obj/item/toy/syndicateballoon = 15, - /obj/item/lighter/zippo/gonzofist = 5, - /obj/item/lighter/zippo/engraved = 5, - /obj/item/lighter/zippo/nt_rep = 5, - /obj/item/gun/projectile/automatic/c20r/toy = 1, - /obj/item/gun/projectile/automatic/l6_saw/toy = 1, - /obj/item/gun/projectile/automatic/toy/pistol = 2, - /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 1, - /obj/item/gun/projectile/shotgun/toy = 1, - /obj/item/gun/projectile/shotgun/toy/crossbow = 1, - /obj/item/gun/projectile/shotgun/toy/tommygun = 1, - /obj/item/gun/projectile/automatic/sniper_rifle/toy = 1, - /obj/item/dualsaber/toy = 5, - /obj/machinery/snow_machine = 10, - /obj/item/clothing/head/kitty = 5, - /obj/item/coin/antagtoken = 5, - /obj/item/toy/prizeball/figure = 15, - /obj/item/toy/prizeball/therapy = 10, - /obj/item/bedsheet/patriot = 2, - /obj/item/bedsheet/rainbow = 2, - /obj/item/bedsheet/captain = 2, - /obj/item/bedsheet/centcom = 1, //mythic rare rarity - /obj/item/bedsheet/syndie = 2, - /obj/item/bedsheet/cult = 2, - /obj/item/bedsheet/wiz = 2, - /obj/item/stack/sheet/mineral/tranquillite/fifty = 3, - /obj/item/clothing/gloves/combat = 5, - /obj/item/blank_tarot_card = 5, - /obj/item/tarot_card_pack = 5, - /obj/item/tarot_card_pack/jumbo = 3, - /obj/item/tarot_card_pack/mega = 2 - ) - -/obj/effect/spawner/lootdrop/bluespace_tap/organic - name = "organic objects" - loot = list( - /obj/item/seeds/random/labelled = 50, - /obj/item/guardiancreator/biological = 5, - /obj/item/organ/internal/vocal_cords/adamantine = 15, - /obj/item/storage/pill_bottle/random_meds/labelled = 25, - /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 15, - /obj/item/dnainjector/telemut = 5, - /obj/item/dnainjector/small_size = 5, - /obj/item/dnainjector/morph = 5, - /obj/item/dnainjector/regenerate = 5, - /mob/living/simple_animal/pet/dog/corgi/ = 5, - /mob/living/simple_animal/pet/cat = 5, - /mob/living/simple_animal/pet/dog/fox/ = 5, - /mob/living/simple_animal/pet/penguin/baby = 5, - /mob/living/simple_animal/pig = 5, - /obj/item/slimepotion/sentience = 5, - /obj/item/clothing/mask/cigarette/cigar/havana = 3, - /obj/item/stack/sheet/mineral/bananium/fifty = 2, //bananas are organic, clearly. - /obj/item/storage/box/monkeycubes = 5, - /obj/item/stack/tile/carpet/twenty = 10, - /obj/item/stack/tile/carpet/black/twenty = 10, - /obj/item/soap/deluxe = 5 - ) - -/obj/effect/spawner/lootdrop/bluespace_tap/food - name = "fancy food" - lootcount = 3 - loot = list( - /obj/item/food/wingfangchu, - /obj/item/food/hotdog, - /obj/item/food/sliceable/turkey, - /obj/item/food/plumphelmetbiscuit, - /obj/item/food/appletart, - /obj/item/food/sliceable/cheesecake, - /obj/item/food/sliceable/bananacake, - /obj/item/food/sliceable/chocolatecake, - /obj/item/food/soup/meatballsoup, - /obj/item/food/soup/mysterysoup, - /obj/item/food/soup/stew, - /obj/item/food/soup/hotchili, - /obj/item/food/burrito, - /obj/item/food/fishburger, - /obj/item/food/cubancarp, - /obj/item/food/fishandchips, - /obj/item/food/meatpie, - /obj/item/pizzabox/hawaiian, //it ONLY gives hawaiian. MUHAHAHA - /obj/item/food/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? - ) - /// Points generated per cycle for each Watt of power consumption #define POINTS_PER_W 4e-6 /// Amount of points generated per cycle per 50KW for the first 500KW @@ -203,10 +79,10 @@ /// list of possible products var/static/product_list = list( - new /datum/data/bluespace_tap_product("Unknown Exotic Hat", /obj/effect/spawner/lootdrop/bluespace_tap/hat, 5000), - new /datum/data/bluespace_tap_product("Unknown Snack", /obj/effect/spawner/lootdrop/bluespace_tap/food, 6000), - new /datum/data/bluespace_tap_product("Unknown Cultural Artifact", /obj/effect/spawner/lootdrop/bluespace_tap/cultural, 15000), - new /datum/data/bluespace_tap_product("Unknown Biological Artifact", /obj/effect/spawner/lootdrop/bluespace_tap/organic, 20000) + new /datum/data/bluespace_tap_product("Unknown Exotic Hat", /obj/effect/spawner/random/bluespace_tap/hat, 5000), + new /datum/data/bluespace_tap_product("Unknown Snack", /obj/effect/spawner/random/bluespace_tap/food, 6000), + new /datum/data/bluespace_tap_product("Unknown Cultural Artifact", /obj/effect/spawner/random/bluespace_tap/cultural, 15000), + new /datum/data/bluespace_tap_product("Unknown Biological Artifact", /obj/effect/spawner/random/bluespace_tap/organic, 20000) ) /// The amount of power being used for mining at the moment (Watts) diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index 22c9c0dae1e094bf38ed005ddc2eca10e959b636..48a0327119ca2fe9c3bc526994bee07b10c91c45 100644 GIT binary patch literal 30105 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%0DOBr`eyAl)tv%^@K0ZDr8ob-3 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 M07*qoM6N<$g0n`bOaK4? literal 25172 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%0Dl03?s~yk~9Xoc+ zl^>`f%F4>J^wlJtznOl1yUuTqJ!*7GqyhYv==Oe-Ib&NB!S7;%T-17k82B(HTCXe% z(M)iU1tA`>Mz)i~CipE(kQ<#eo^U>-kQ<00k$cE6<>Xi47e82LcwJ;)#<=Vtx3kM6x0U3##3R~u zaINz%b9r1YY<%R=d3#zD{4Slj8BAa%Z($7fY!LQy?QM8~AKc(SNjkqh_NZMX#^RhT z_qBewTwSYGuZf@TEtjY@uh6jtv+2z&4pI{z z+u$1Gc90zR{3LFetfc;i9dLs+#^eoK2KR%txIMOy!(z1ab=j8Fj9MQ ztP5er;;u$NXqa^|%dmdHTG&})o#aZfRA7(y3jTxaoCXm6$D5ys7(c?5vCX==-krL{ zJn~p*i+__`X8KdlzN{%Z&W6%rvMxGvia9T+ua#hSkQ*a_IVDO{C^a>efddEf@rG}0 zGmBdCFSYvl4KgJE(idUs10Dl~mi(9skXVI*A^9I(uL1sohH?y@ z1d9IS&3Z*o+e?0L^m+GCkM!t;g@tW$uQ4%78k^Ij@2M!x^s4hOE#tr^H>p1^rD))OxezzlfDchKO>KQ;v84LvL?|LCbIS>j&N-4{Q5P?95l+sWr1Asaq zL^Zl#3s5ViEO0m+wYIiHblZVKh#J5lrK}M`)JrMr0Xb=CrwKr16R)}o#17zA3GWN! z01zR~xc$xF?WwA#gH9O*wgU#J7eZ7BAu6Pl0<}n|vy?JI2+>ta*&PT6%7hU4TF0oD zQU(hlI!h_5gb0kg1sa;=R?+`+urFE?kB2Y@%R|wG$2muPDlvThXAw;28-$H~C zLP}Yw+Yowx58yIjn3OV92vG-oDWxoTI2@Lu17{C*3GP~8BCx)ZOO5~r1GN&i31lY_ zm3li=_{Rv99nfnZ9R_L zUkD+Bw0dMn_BtU%fe<2BN_h;Zv4h_SO>9U=NX01m5{d-wlJ5%qa)3lnIkqDq(?RWc z1gNjC4-`U#Xd9qZ1GQF4Ss&~BX&4emgomk`1srOX8?^+*varHs_7P?2VyAElIs zfdC=IPP2;Sg*Nz*{((Su3C9e{F4P*UVqpWifJ%wjXBzL8bufT83X)RB3n9XQ zqxJRm$AKy--WkQHJRKCCcz-}p}6hd^7QYJ_#>x2+lK(3TB8^{tu zgaF628q`#(HG|)zD%IM69j=+euG(~f|EHt^Nyg6b%W!3ElKns4{_Aghs5$egb>3t@Euaha3Hq6 zzP>SLU++x?@}biQ;u--&IN(k7Y0QxB*#WmIFjg~KLJ&}DdknbIY1OpETzmBLR5ju zjxMD-^Ugq&Hm(hWd4P|Rz{lvv zVIWp&ua7@!rarIM#zeKULq%$z3}6GZq2eTIuun4q-~4;N3Fy!g%9LWsRm%ELm4V?v07 z+7nc+JxyU!%AQinC=(O-ued0Kyt`1J(?JZf1(#2-J$04)C{EBiO78Y3ZJ1 zfLby(sdMaZ{U*bcI^+HgN-?mH06rwY;RSL4I2?}p`uh4Zbgm95ka5}G}&h8pp)(eGQe+EYYg!F$`9W;b~h)E4Z#>48kML*bk@3kl?FyX z9j0(hga4p5l1~Fhc8-ha-C+N55$Ba0J&`Ab=p?0d2q8*<3hhnmrQ531GsLCZn{+Gi zsz2AewIFa|L;Y_p2wXTSuJ*u3Moz#pamAFGXhM8_mq`(*%c`n3-gSsQ!PT{&WYX0M~+?2q2aX!2y1p?yC#FF;fC?c*Bv9e%|LBQ= z$gZ8^yr@-KQp(*xjS!-Tlrjo6xmKZ7p5s8Z5JG5aeIu|P`=nS3LMto`RXGED5F^z%yzs3hV7664Dj1WfRbZF5GsAufROoYF$K_`Wu*{epB^PDq?BPoh;yZs1G@H17~rk{lA|Ze zgb?w1B*{e06%=SmUJ3|pa32KO!DU2$7+^Lug%puU1=D8doiC&qt36JAjC4QGbpX7wD}LY6Ze>1TWHU7wZw= z3*ZW^Zgns~dtd;qqTFrv*mz?EL$Z6zPj8m`h7Dj>r@WaPdX<*YQnE}N!9_xdU=%}j z)6(~V9u;D}^)IE|q9?t6CWPprnVptLk9%g2?H4VxdD1JaP8pt=Jqs$!3=(zH_5{e5JChYJdzO#1DE-pboXtE8R!`#w1g;Ny0|xsL&W~Xh-Qa$or*~M(PD4i@rG!&hXLK zN~ODpn?N1q>;7^3{u=^$B~aNB4A)M*KxQ?_t`7M@%Yn&$xM^%BNvz4B|n_T3|dDAT%skOo{d zYWZXkYEmm$OZPA#M3j{Bs1PDg>)Ev$@SC-?&)4czXBswYed+LlCaE2uRi{urg4H(S zM(tQ2-`-WA#?%#)H)oo+{SG~kVEi^d-WbBgG-^FSpjL&_fp4UgnHu!Qx`5qUommfj zsk1zkpk{N6g%A~}WLaT)(Y&z&s}R^KrCcthT&+hHsokGLwO!#2{IMqCVE#@pd4oc= zUC(xgb?*QZa-T}xeur`a`-qL zj!G%zektW{A;cza=vD(kden&2qe88o=`EI0R-3#@#~cnvrp^{ophue+AWX*xd2>`juJL!NaEk%!mE zS2(m1@=|Kx9sw%s39NL!&??|GDP^Lz3p$||#g7KgkWxl#&rh+|@$GF?ODT(`ltog? zBSMH>K#h;*QtLyfHw@q309SwvS0C4enw<$;ql&c7CHxW?-!USzLk92#ZokYr4Q~4) z`NmW%Aw<0fW1TnGtj-Zsq}3Op_4^7v3UonvVH`Snlk`mFBKQsggn>4i3 zIADxP-Kj!Nf^E~Dnpog`RHUf6#QYbixc~Q2ODX}r(UG9We`B3P-_7Sq?83(%?Z~GQlV2UCg@SYNTpJt zSBKTw7$Fb{nl!Xil{Zzyrou#_W|a-8U8kAkd|-|7fAfF5?KAH;j&-C*KehD#r}1cV TxY~2Y00000NkvXXu0mjfY^GU1 diff --git a/paradise.dme b/paradise.dme index 705d466b263..f3b5cc42f6e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1033,15 +1033,16 @@ #include "code\game\objects\effects\spawners\detgun_spawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\grouped_spawner.dm" -#include "code\game\objects\effects\spawners\lootdrop.dm" #include "code\game\objects\effects\spawners\mess_spawners.dm" #include "code\game\objects\effects\spawners\random_barrier.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" #include "code\game\objects\effects\spawners\windowspawner.dm" +#include "code\game\objects\effects\spawners\random\bluespace_tap_spawners.dm" #include "code\game\objects\effects\spawners\random\decal_spawners.dm" #include "code\game\objects\effects\spawners\random\engineering_spawners.dm" #include "code\game\objects\effects\spawners\random\food_spawners.dm" #include "code\game\objects\effects\spawners\random\furniture_spawners.dm" +#include "code\game\objects\effects\spawners\random\loot_spawners.dm" #include "code\game\objects\effects\spawners\random\maint_loot_spawners.dm" #include "code\game\objects\effects\spawners\random\misc_spawners.dm" #include "code\game\objects\effects\spawners\random\random_spawner.dm" @@ -1049,6 +1050,8 @@ #include "code\game\objects\effects\spawners\random\pool\pool_spawner.dm" #include "code\game\objects\effects\spawners\random\pool\spawn_pool.dm" #include "code\game\objects\effects\spawners\random\pool\spawn_pool_manager.dm" +#include "code\game\objects\effects\spawners\random\traders\trader_department_spawners.dm" +#include "code\game\objects\effects\spawners\random\traders\trader_organization_spawners.dm" #include "code\game\objects\effects\temporary_visuals\clockcult.dm" #include "code\game\objects\effects\temporary_visuals\cult_visuals.dm" #include "code\game\objects\effects\temporary_visuals\explosion_temp_visuals.dm" @@ -1656,7 +1659,6 @@ #include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm" #include "code\modules\atmospherics\machinery\portable\portable_pump.dm" #include "code\modules\atmospherics\machinery\portable\scrubber.dm" -#include "code\modules\awaymissions\loot.dm" #include "code\modules\awaymissions\mob_spawn.dm" #include "code\modules\awaymissions\zlevel_helpers.dm" #include "code\modules\awaymissions\maploader\dmm_suite.dm" diff --git a/tools/UpdatePaths/Scripts/27445_lootspawn_migration.txt b/tools/UpdatePaths/Scripts/27445_lootspawn_migration.txt new file mode 100644 index 00000000000..9e77b3befbb --- /dev/null +++ b/tools/UpdatePaths/Scripts/27445_lootspawn_migration.txt @@ -0,0 +1,21 @@ +/obj/effect/spawner/lootdrop/crate_spawner : /obj/effect/spawner/random/loot/crate +/obj/effect/spawner/lootdrop/three_course_meal : /obj/effect/spawner/random/food_or_drink/three_course_meal + +/obj/effect/spawner/lootdrop/trade_sol/civ : /obj/effect/spawner/random/traders/civilian +/obj/effect/spawner/lootdrop/trade_sol/minerals : /obj/effect/spawner/random/traders/minerals +/obj/effect/spawner/lootdrop/trade_sol/donksoft : /obj/effect/spawner/random/traders/donksoft +/obj/effect/spawner/lootdrop/trade_sol/sci : /obj/effect/spawner/random/traders/science +/obj/effect/spawner/lootdrop/trade_sol/med : /obj/effect/spawner/random/traders/medical +/obj/effect/spawner/lootdrop/trade_sol/sec : /obj/effect/spawner/random/traders/security +/obj/effect/spawner/lootdrop/trade_sol/eng : /obj/effect/spawner/random/traders/engineering +/obj/effect/spawner/lootdrop/trade_sol/largeitem : /obj/effect/spawner/random/traders/large_item +/obj/effect/spawner/lootdrop/trade_sol/vehicle : /obj/effect/spawner/random/traders/vehicle +/obj/effect/spawner/lootdrop/trade_sol/serv : /obj/effect/spawner/random/traders/service + +/obj/effect/spawner/lootdrop/bluespace_tap/@SUBTYPES : /obj/effect/spawner/random/bluespace_tap/@SUBTYPES +/obj/effect/spawner/lootdrop/trade_sol/@SUBTYPES : /obj/effect/spawner/random/traders/@SUBTYPES + +/obj/effect/spawner/lootdrop/telecomms_core_table : /obj/effect/spawner/random/telecomms_core_table +/obj/effect/spawner/lootdrop/wizardcrash : /obj/effect/spawner/random/wizardcrash +/obj/effect/spawner/lootdrop/pizzaparty : /obj/effect/spawner/random/pizzaparty +/obj/effect/spawner/lootdrop/seed_vault : /obj/effect/spawner/random/seed_vault