diff --git a/code/__DEFINES/~doppler_defines/traits/declarations.dm b/code/__DEFINES/~doppler_defines/traits/declarations.dm
index 391336f06072b..8ee2c0d8e7f75 100644
--- a/code/__DEFINES/~doppler_defines/traits/declarations.dm
+++ b/code/__DEFINES/~doppler_defines/traits/declarations.dm
@@ -1,3 +1,2 @@
-/// The trait that determines if someone has the system shock quirk.
-#define TRAIT_SYSTEM_SHOCK "trait_system_shock"
-
+/// The trait that determines if someone has the system shock quirk.
+#define TRAIT_SYSTEM_SHOCK "trait_system_shock"
diff --git a/modular_doppler/epic_loot/code/_basetype.dm b/modular_doppler/epic_loot/code/_basetype.dm
new file mode 100644
index 0000000000000..48a1a91349a38
--- /dev/null
+++ b/modular_doppler/epic_loot/code/_basetype.dm
@@ -0,0 +1,83 @@
+/obj/structure/maintenance_loot_structure
+ name = "abandoned crate"
+ icon = 'modular_doppler/epic_loot/icons/loot_structures.dmi'
+ density = TRUE
+ anchored = TRUE
+ layer = BELOW_OBJ_LAYER
+ obj_flags = CAN_BE_HIT
+ pass_flags_self = LETPASSTHROW|LETPASSCLICKS
+ max_integrity = 200
+
+ /// What storage datum we use
+ var/storage_datum_to_use = /datum/storage/maintenance_loot_structure
+ /// Weighted list of the loot that can spawn in this
+ var/list/loot_weighted_list = list(
+ /obj/effect/spawner/random/maintenance = 1,
+ )
+ /// This one is going to be weird, a string of dice to use when rolling number of contents
+ var/loot_spawn_dice_string = "2d4+1"
+
+/obj/structure/maintenance_loot_structure/Initialize(mapload)
+ . = ..()
+ create_storage(storage_type = storage_datum_to_use)
+ make_contents()
+
+/obj/structure/maintenance_loot_structure/examine(mob/user)
+ . = ..()
+ . += span_engradio("It might have other things you're looking for if you look again later?")
+ return .
+
+// Since it doesn't want to play nice for whatever reason
+/obj/structure/maintenance_loot_structure/attack_hand(mob/living/user)
+ if(!user.can_perform_action(src, NEED_HANDS))
+ return ..()
+ atom_storage.open_storage(user)
+ return TRUE
+
+/// Fills random contents into this structure's inventory, starting a loop to respawn loot if the container is empty later
+/obj/structure/maintenance_loot_structure/proc/make_contents()
+ var/refill_check_time = rand(15 MINUTES, 30 MINUTES)
+ spawn_loot()
+ addtimer(CALLBACK(src, PROC_REF(make_contents)), refill_check_time)
+
+/// Spawns a random amount of loot into the structure, random numbers based on the amount of storage slots inside it
+/obj/structure/maintenance_loot_structure/proc/spawn_loot()
+ if(length(contents))
+ for(var/obj/thing in contents)
+ qdel(thing)
+ var/random_loot_amount = roll(loot_spawn_dice_string)
+ for(var/loot_spawn in 1 to random_loot_amount)
+ var/obj/new_loot = pick_weight(loot_weighted_list)
+ new new_loot(src)
+ Shake(2, 2, 1 SECONDS)
+
+/datum/storage/maintenance_loot_structure
+ max_slots = 9
+ max_specific_storage = WEIGHT_CLASS_GIGANTIC
+ max_total_storage = WEIGHT_CLASS_BULKY * 6
+ numerical_stacking = FALSE
+ rustle_sound = FALSE
+ screen_max_columns = 3
+ /// What sound this makes when people open it's storage
+ var/opening_sound = 'modular_doppler/epic_loot/sound/plastic.mp3'
+
+/datum/storage/maintenance_loot_structure/open_storage(mob/to_show)
+ . = ..()
+ if(!.)
+ return
+ playsound(parent, opening_sound, 50, TRUE)
+
+// Loot items basetype, for convenience
+/obj/item/epic_loot
+ name = "epic loot!!!!!"
+ desc = "Unknown purpose, unknown maker, unknown value. The only thing I know for real: There will be loot."
+ icon = 'modular_doppler/epic_loot/icons/epic_loot.dmi'
+ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+ inhand_icon_state = "binoculars"
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/epic_loot/examine(mob/user)
+ . = ..()
+ . += span_engradio("You should probably sell or recycle this.")
+ return .
diff --git a/modular_doppler/epic_loot/code/loot_items/components.dm b/modular_doppler/epic_loot/code/loot_items/components.dm
new file mode 100644
index 0000000000000..116507d6923e8
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_items/components.dm
@@ -0,0 +1,214 @@
+/datum/export/epic_loot_components
+ cost = PAYCHECK_COMMAND
+ unit_name = "low value salvage"
+ export_types = list(
+ /obj/item/epic_loot/grenade_fuze,
+ /obj/item/epic_loot/nail_box,
+ /obj/item/epic_loot/cold_weld,
+ /obj/item/epic_loot/signal_amp,
+ /obj/item/epic_loot/fuel_conditioner,
+ )
+
+/datum/export/epic_loot_components_super
+ cost = PAYCHECK_COMMAND * 2
+ unit_name = "salvage"
+ export_types = list(
+ /obj/item/epic_loot/water_filter,
+ /obj/item/epic_loot/thermometer,
+ /obj/item/epic_loot/current_converter,
+ /obj/item/epic_loot/electric_motor,
+ )
+
+/datum/export/epic_loot_components_super_super
+ cost = PAYCHECK_COMMAND * 3
+ unit_name = "high value salvage"
+ export_types = list(
+ /obj/item/epic_loot/thermal_camera,
+ /obj/item/epic_loot/shuttle_gyro,
+ /obj/item/epic_loot/phased_array,
+ /obj/item/epic_loot/shuttle_battery,
+ )
+
+// Grenade fuze, an old design from an old time past. You can still make a pretty good grenade with it though
+/obj/item/epic_loot/grenade_fuze
+ name = "grenade fuze"
+ desc = "Just the fuze of a grenade, missing the explosive and arguably most important half of the grenade."
+ icon_state = "fuze"
+ inhand_icon_state = "pen"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// The filter part of a water filter machine, though these machines are insanely rare due to modern synthesis technology
+/obj/item/epic_loot/water_filter
+ name = "water filter cartridge"
+ desc = "A blue polymer tube filled with filter medium for use in an industrial water filtration unit."
+ icon_state = "water_filter"
+ inhand_icon_state = "miniFE"
+ drop_sound = 'sound/items/handling/tools/weldingtool_drop.ogg'
+ pickup_sound = 'sound/items/handling/tools/weldingtool_pickup.ogg'
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// Analog thermometer, how to tell temperature before gas analyzers were cool
+/obj/item/epic_loot/thermometer
+ name = "analog thermometer"
+ desc = "An outdated, and likely broken, analog thermometer."
+ icon_state = "thermometer"
+ inhand_icon_state = "razor"
+ drop_sound = 'sound/items/handling/tools/multitool_drop.ogg'
+ pickup_sound = 'sound/items/handling/tools/multitool_pickup.ogg'
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// A box of nails, impossible tech on a space station
+/obj/item/epic_loot/nail_box
+ name = "box of nails"
+ desc = "A pristine box of nails, a method of keeping things together that we... can't really use here, in a space station."
+ icon_state = "nails"
+ inhand_icon_state = "rubberducky"
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT,
+ /datum/material/cardboard = SHEET_MATERIAL_AMOUNT,
+ )
+
+// Used for joining together plastics, ideally.
+/obj/item/epic_loot/cold_weld
+ name = "tube of cold weld"
+ desc = "A tube of cold weld, used to join together plastics, usually for repair."
+ icon_state = "cold_weld"
+ inhand_icon_state = "razor"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// An electronic motor
+/obj/item/epic_loot/electric_motor
+ name = "electric motor"
+ desc = "An electrically driven motor for industrial applications."
+ icon_state = "motor"
+ inhand_icon_state = "miniFE"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg'
+ pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT,
+ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// Current converters, these change one rating of current into another in a mostly safe manner
+/obj/item/epic_loot/current_converter
+ name = "current converter"
+ desc = "A device for regulating electric current that passes through it."
+ icon_state = "current_converter"
+ inhand_icon_state = "miniFE"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/tools/weldingtool_drop.ogg'
+ pickup_sound = 'sound/items/handling/tools/weldingtool_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = SHEET_MATERIAL_AMOUNT,
+ )
+
+// Signal amplifiers, used to take a faint signal and return it stronger than before
+/obj/item/epic_loot/signal_amp
+ name = "signal amplifier"
+ desc = "A device for taking weakened input signals and strengthening them for use or listening."
+ icon_state = "signal_amp"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// Thermal camera modules
+/obj/item/epic_loot/thermal_camera
+ name = "thermal camera module"
+ desc = "An infrared sensing device used for the production of thermal camera systems."
+ icon_state = "thermal"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT,
+ /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+// Shuttle gyroscopes, AKA how a shuttle realizes which way it's pointing
+/obj/item/epic_loot/shuttle_gyro
+ name = "shuttle gyroscope"
+ desc = "A bulky device used by shuttles and other space faring vessels to find the direction they are facing."
+ icon_state = "shuttle_gyro"
+ inhand_icon_state = "miniFE"
+ w_class = WEIGHT_CLASS_BULKY
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 3,
+ /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT * 4,
+ /datum/material/gold = SHEET_MATERIAL_AMOUNT * 4
+ )
+
+/obj/item/epic_loot/shuttle_gyro/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
+
+// Phased array elements, combine a bunch together to get god's strongest radar, or whatever else you can think of
+/obj/item/epic_loot/phased_array
+ name = "phased array element"
+ desc = "An element of a larger phased array. These combine together to produce sensing and scanning devices used on most common space-faring vessels."
+ icon_state = "phased_array"
+ inhand_icon_state = "blankplaque"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT,
+ /datum/material/gold = SHEET_MATERIAL_AMOUNT,
+ )
+
+// Shuttle batteries, used to power electronics while the engines are off
+/obj/item/epic_loot/shuttle_battery
+ name = "shuttle battery"
+ desc = "A massive shuttle-grade battery, used to keep the electronics of space-faring vessel powered while the main engines are de-activated."
+ icon_state = "ship_battery"
+ inhand_icon_state = "blankplaque"
+ w_class = WEIGHT_CLASS_BULKY
+ drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg'
+ pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 10,
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT * 4,
+ /datum/material/gold = SHEET_MATERIAL_AMOUNT * 4,
+ )
+
+/obj/item/epic_loot/shuttle_battery/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, require_twohands = TRUE)
+
+// Industrial fuel conditioner, used to keep most fuel-burning machines within regulations for waste emissions
+/obj/item/epic_loot/fuel_conditioner
+ name = "fuel conditioner"
+ desc = "A plastic container of fuel conditioner for industrial size plasma generators. \
+ Any generator that would need this is either much too large or much too old to be seen around here."
+ icon_state = "fuel_conditioner"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg'
+ pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg'
diff --git a/modular_doppler/epic_loot/code/loot_items/electronics.dm b/modular_doppler/epic_loot/code/loot_items/electronics.dm
new file mode 100644
index 0000000000000..5719a1ed842e6
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_items/electronics.dm
@@ -0,0 +1,143 @@
+/datum/export/epic_loot_electronics
+ cost = PAYCHECK_COMMAND
+ unit_name = "electronic salvage"
+ export_types = list(
+ /obj/item/epic_loot/device_fan,
+ /obj/item/epic_loot/display_broken,
+ /obj/item/epic_loot/civilian_circuit,
+ /obj/item/epic_loot/processor,
+ /obj/item/epic_loot/disk_drive,
+ )
+
+/datum/export/epic_loot_electronics_super
+ cost = PAYCHECK_COMMAND * 2
+ unit_name = "high value electronic salvage"
+ export_types = list(
+ /obj/item/epic_loot/display,
+ /obj/item/epic_loot/graphics,
+ /obj/item/epic_loot/military_circuit,
+ /obj/item/epic_loot/power_supply,
+ )
+
+// Computer fans
+/obj/item/epic_loot/device_fan
+ name = "device fan"
+ desc = "An electronics cooling fan, used to keep computers and the like at reasonable temperatures while working."
+ icon_state = "device_fan"
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 9,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT,
+ )
+
+// A display of some sort, this one probably still works
+/obj/item/epic_loot/display
+ name = "display"
+ desc = "An electronic display, used in any number of machines to display information to users."
+ icon_state = "display"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT,
+ )
+
+// A display of some sort, this one for sure does not work
+/obj/item/epic_loot/display_broken
+ name = "broken display"
+ desc = "An electronic display, used in any number of machines to display information to users. This one is broken."
+ icon_state = "display_broken"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT,
+ )
+
+// Martian made very high quality no scam 质量非常高
+/obj/item/epic_loot/graphics
+ name = "graphics processor"
+ desc = "A large processor card for the handling of computer generated graphics."
+ icon_state = "graphics"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// A military general-use circuit board
+/obj/item/epic_loot/military_circuit
+ name = "military-grade circuit board"
+ desc = "A small circuit board commonly seen used by military-grade electronics."
+ icon_state = "circuit_military"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 6,
+ /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// A civilian general-use circuit board
+/obj/item/epic_loot/civilian_circuit
+ name = "general-purpose circuit board"
+ desc = "A small circuit board commonly seen used by general-purpose electronics."
+ icon_state = "civilian_circuit"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 6,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// A computer processor unit
+/obj/item/epic_loot/processor
+ name = "processor core"
+ desc = "The processing core of a computer, the small chip responsible for all of the inner workings of most devices."
+ icon_state = "processor"
+ inhand_icon_state = "razor"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 3,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT,
+ )
+
+// A computer power supply
+/obj/item/epic_loot/power_supply
+ name = "computer power supply"
+ desc = "A computer power supply, used to provide regulated electric power to other components of a computer."
+ icon_state = "psu"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// A drive for reading data from data disks in computers
+/obj/item/epic_loot/disk_drive
+ name = "hard-disk reader"
+ desc = "A device for reading and writing data to hard-disks, one of the most common data storage media on the frontier."
+ icon_state = "disk_drive"
+ w_class = WEIGHT_CLASS_NORMAL
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
+ )
diff --git a/modular_doppler/epic_loot/code/loot_items/medical.dm b/modular_doppler/epic_loot/code/loot_items/medical.dm
new file mode 100644
index 0000000000000..d645cc4160f0a
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_items/medical.dm
@@ -0,0 +1,46 @@
+/datum/export/epic_loot_super_med_tools
+ cost = PAYCHECK_COMMAND * 5
+ unit_name = "high value medical salvage"
+ export_types = list(
+ /obj/item/epic_loot/vein_finder,
+ /obj/item/epic_loot/eye_scope,
+ )
+
+// Vein finder, uses strong LED lights to reveal veins in someone's body. Perhaps the name "LEDX" rings a bell
+/obj/item/epic_loot/vein_finder
+ name = "medical vein locator"
+ desc = "A small device with a number of high intensity lights on one side. Used by medical professionals to locate veins in someone's body."
+ icon_state = "vein_finder"
+ inhand_icon_state = "headset"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+/obj/item/epic_loot/vein_finder/afterattack(atom/target, mob/user, proximity_flag)
+ . = ..()
+ if(!proximity_flag)
+ return
+ if(!ishuman(target))
+ return
+ user.visible_message(
+ "[user] determines that [target] does, in fact, have veins.",
+ "You determine that [target] does, in fact, have veins."
+ )
+ new /obj/effect/temp_visual/medical_holosign(get_turf(target), user)
+
+// Eyescope, a now rare device that was used to check the eyes of patients before the universal health scanner became common
+/obj/item/epic_loot/eye_scope
+ name = "medical eye-scope"
+ desc = "An outdated device used to examine a patient's eyes. Rare now due to the outbreak of the universal health scanner."
+ icon_state = "eyescope"
+ inhand_icon_state = "zippo"
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2,
+ )
diff --git a/modular_doppler/epic_loot/code/loot_items/valuables.dm b/modular_doppler/epic_loot/code/loot_items/valuables.dm
new file mode 100644
index 0000000000000..fb209e9a6485e
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_items/valuables.dm
@@ -0,0 +1,159 @@
+/datum/export/epic_loot_valuables
+ cost = PAYCHECK_COMMAND * 3
+ unit_name = "recovered valuables"
+ export_types = list(
+ /obj/item/epic_loot/press_pass,
+ /obj/item/epic_loot/hdd,
+ /obj/item/epic_loot/slim_diary,
+ /obj/item/epic_loot/plasma_explosive,
+ /obj/item/epic_loot/silver_chainlet,
+ )
+
+/datum/export/epic_loot_valuables_super
+ cost = PAYCHECK_COMMAND * 4
+ unit_name = "recovered high valuables"
+ export_types = list(
+ /obj/item/epic_loot/ssd,
+ /obj/item/epic_loot/military_flash,
+ /obj/item/epic_loot/diary,
+ /obj/item/epic_loot/corpo_folder,
+ /obj/item/epic_loot/intel_folder,
+ /obj/item/epic_loot/gold_chainlet,
+ )
+
+// An old press pass, perhaps of an unlucky soul who was reporting on the incident that made this place abandoned in the first place
+/obj/item/epic_loot/press_pass
+ name = "expired visitor pass"
+ desc = "An old lanyard with an expired visitor pass stuck to it. Most of the text has worn off, you can't tell who it was for or who it was issued by."
+ icon_state = "press_pass"
+ drop_sound = 'sound/items/handling/disk_drop.ogg'
+ pickup_sound = 'sound/items/handling/disk_pickup.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ )
+
+// A computer SSD
+/obj/item/epic_loot/ssd
+ name = "solid-state drive"
+ desc = "A solid-state drive for computers, may even contain some still-valuable information on it!"
+ icon_state = "ssd"
+ inhand_icon_state = "razor"
+ drop_sound = 'sound/items/handling/disk_drop.ogg'
+ pickup_sound = 'sound/items/handling/disk_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// A computer hard drive
+/obj/item/epic_loot/hdd
+ name = "hard drive"
+ desc = "A hard drive for computers, may even contain some still-valuable information on it!"
+ icon_state = "hard_disk"
+ inhand_icon_state = "razor"
+ drop_sound = 'sound/items/handling/disk_drop.ogg'
+ pickup_sound = 'sound/items/handling/disk_pickup.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// Military-grade flash drives, made for use specifically with military computers
+/obj/item/epic_loot/military_flash
+ name = "military flash drive"
+ desc = "A military-grade flash drive for use in matching military-grade computer systems. Might even contain some still-valuable information on it!"
+ icon_state = "military_flash"
+ inhand_icon_state = "razor"
+ drop_sound = 'sound/items/handling/disk_drop.ogg'
+ pickup_sound = 'sound/items/handling/disk_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
+ )
+
+// Someone's personal diary, or bootleg captain's log, whatever
+/obj/item/epic_loot/diary
+ name = "sealed diary"
+ desc = "An old, apparently well-kept diary with unknown information inside. May hold important data on the location it was found in."
+ icon_state = "diary"
+ drop_sound = 'sound/items/handling/book_drop.ogg'
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ )
+
+// A slimmer version of the regular diary
+/obj/item/epic_loot/slim_diary
+ name = "sealed slim diary"
+ desc = "An old, apparently well-kept diary with unknown information inside. May hold important data on the location it was found in."
+ icon_state = "slim_diary"
+ drop_sound = 'sound/items/handling/book_drop.ogg'
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ )
+
+// Straight up, a brick of plasma-cringe explosive, keep away from fire
+/obj/item/epic_loot/plasma_explosive
+ name = "brick of plasma-based explosive"
+ desc = "A really quite dangerous brick of a plasma-based explosive. Usually, a demolition charge or something of the sort, but, it's still a bomb."
+ icon_state = "plasma_explosive"
+ drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg'
+ pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(
+ /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 3,
+ )
+
+/obj/item/epic_loot/plasma_explosive/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/explodable, 0, 1, 3, 5, 5)
+
+// A folder from some corporation with likely valuable data inside
+/obj/item/epic_loot/corpo_folder
+ name = "corporate data folder"
+ desc = "A blue folder with no label of who it's from. What is labeled, however, is the series of marks of confidential or trade secret information inside."
+ icon_state = "nt_folders"
+ drop_sound = 'sound/items/handling/book_drop.ogg'
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ )
+
+// Brown unlabeled folder of doom, may contain government secrets
+/obj/item/epic_loot/intel_folder
+ name = "intelligence folder"
+ desc = "A an unmarked, unassuming folder for documents. What is labeled, however, is the series of marks of confidential or trade secret information inside."
+ icon_state = "documents"
+ drop_sound = 'sound/items/handling/book_drop.ogg'
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(
+ /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8,
+ )
+
+// A small chainlet made of silver
+/obj/item/epic_loot/silver_chainlet
+ name = "silver chainlet"
+ desc = "A small chainlet for decorating clothing or other items, made from silver."
+ icon_state = "silver_chain"
+ drop_sound = 'sound/items/handling/disk_drop.ogg'
+ pickup_sound = 'sound/items/handling/disk_pickup.ogg'
+ custom_materials = list(
+ /datum/material/silver = SHEET_MATERIAL_AMOUNT,
+ )
+
+// A small chainlet made of gold
+/obj/item/epic_loot/gold_chainlet
+ name = "gold chainlet"
+ desc = "A small chainlet for decorating clothing or other items, made from gold."
+ icon_state = "gold_chain"
+ drop_sound = 'sound/items/handling/disk_drop.ogg'
+ pickup_sound = 'sound/items/handling/disk_pickup.ogg'
+ custom_materials = list(
+ /datum/material/gold = SHEET_MATERIAL_AMOUNT,
+ )
diff --git a/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm b/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm
new file mode 100644
index 0000000000000..d9d5f0f21e060
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm
@@ -0,0 +1,34 @@
+/datum/storage/maintenance_loot_structure/ammo_box
+ max_slots = 6
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 6
+ screen_max_columns = 3
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3'
+
+/obj/structure/maintenance_loot_structure/ammo_box
+ name = "small shipping crate"
+ desc = "A small reinforced box used for shipping small items in."
+ icon_state = "ammo_box"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/ammo_box
+ loot_spawn_dice_string = "1d10-4"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ /obj/effect/spawner/random/epic_loot/random_provisions = 1,
+ /obj/effect/spawner/random/epic_loot/random_other_military_loot = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/ammo_box/super_evil
+ icon_state = "cache"
+
+/obj/structure/maintenance_loot_structure/ammo_box/random
+ icon_state = "ammo_box_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "ammo_box",
+ "cache",
+ )
+
+/obj/structure/maintenance_loot_structure/ammo_box/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm b/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm
new file mode 100644
index 0000000000000..b53491ae61b63
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm
@@ -0,0 +1,36 @@
+/datum/storage/maintenance_loot_structure/computer
+ max_slots = 4
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 4
+ screen_max_columns = 2
+ opening_sound = 'modular_doppler/epic_loot/sound/plastic.mp3'
+
+/obj/structure/maintenance_loot_structure/computer_tower
+ name = "computer tower"
+ desc = "A compact computer unit, missing it's monitor. May still contain valuable components inside."
+ icon_state = "alienware"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/computer
+ loot_spawn_dice_string = "1d7-3"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_computer_parts = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/computer_tower/white
+ icon_state = "alienware_honeycrisp"
+
+/obj/structure/maintenance_loot_structure/computer_tower/eighties
+ icon_state = "alienware_tan_man"
+
+/obj/structure/maintenance_loot_structure/computer_tower/random
+ icon_state = "alienware_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "alienware",
+ "alienware_honeycrisp",
+ "alienware_tan_man",
+ )
+
+/obj/structure/maintenance_loot_structure/computer_tower/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/files.dm b/modular_doppler/epic_loot/code/loot_structures/files.dm
new file mode 100644
index 0000000000000..5a0557ffcdd6f
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/files.dm
@@ -0,0 +1,32 @@
+/datum/storage/maintenance_loot_structure/file_cabinet
+ max_slots = 6
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 6
+ screen_max_columns = 2
+ opening_sound = 'modular_doppler/epic_loot/sound/cabinet.mp3'
+
+/obj/structure/maintenance_loot_structure/file_cabinet
+ name = "filing cabinet"
+ desc = "A large filing cabinet, it even comes with terrible sounding unlubricated rails!"
+ icon_state = "files"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/file_cabinet
+ loot_spawn_dice_string = "1d10-4"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_documents = 9,
+ )
+
+/obj/structure/maintenance_loot_structure/file_cabinet/white
+ icon_state = "files_clean"
+
+/obj/structure/maintenance_loot_structure/file_cabinet/random
+ icon_state = "files_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "files",
+ "files_clean",
+ )
+
+/obj/structure/maintenance_loot_structure/file_cabinet/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm
new file mode 100644
index 0000000000000..df773672fec76
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm
@@ -0,0 +1,34 @@
+/datum/storage/maintenance_loot_structure/grenade_box
+ max_slots = 4
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 4
+ screen_max_columns = 2
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_2.mp3'
+
+/obj/structure/maintenance_loot_structure/grenade_box
+ name = "small shipping crate"
+ desc = "A reinforced shipping crate for the transport of small items."
+ icon_state = "grenade_box"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/grenade_box
+ loot_spawn_dice_string = "1d6-2"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ /obj/effect/spawner/random/epic_loot/random_provisions = 1,
+ /obj/effect/spawner/random/epic_loot/random_other_military_loot = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/grenade_box/evil
+ icon_state = "grenade_box_evil"
+
+/obj/structure/maintenance_loot_structure/grenade_box/random
+ icon_state = "grenade_box_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "grenade_box",
+ "grenade_box_evil",
+ )
+
+/obj/structure/maintenance_loot_structure/grenade_box/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/gun_case.dm b/modular_doppler/epic_loot/code/loot_structures/gun_case.dm
new file mode 100644
index 0000000000000..fa7d384e057bd
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/gun_case.dm
@@ -0,0 +1,34 @@
+/datum/storage/maintenance_loot_structure/gun_box
+ max_slots = 4
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 4
+ screen_max_columns = 4
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3'
+
+/obj/structure/maintenance_loot_structure/gun_box
+ name = "shipping crate"
+ desc = "A reinforced shipping crate foor the transport of larger items."
+ icon_state = "guncrate"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/gun_box
+ loot_spawn_dice_string = "1d7-3"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ /obj/effect/spawner/random/epic_loot/random_provisions = 1,
+ /obj/effect/spawner/random/epic_loot/random_other_military_loot = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/gun_box/evil
+ icon_state = "guncrate_dark"
+
+/obj/structure/maintenance_loot_structure/gun_box/random
+ icon_state = "guncrate_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "guncrate",
+ "guncrate_dark",
+ )
+
+/obj/structure/maintenance_loot_structure/gun_box/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/large_crate.dm b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm
new file mode 100644
index 0000000000000..1164a42b17a7f
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm
@@ -0,0 +1,63 @@
+/datum/storage/maintenance_loot_structure/large_crate
+ max_slots = 16
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 16
+ screen_max_columns = 4
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3'
+
+/obj/structure/maintenance_loot_structure/large_crate
+ name = "provision transport crate"
+ desc = "A large crate for transporting equally large amounts of food supplies around."
+ icon_state = "foodcrate"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/large_crate
+ loot_spawn_dice_string = "4d5-4"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_provisions = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/large_crate/medical
+ name = "medical transport crate"
+ desc = "A large crate for transporting equally large amounts of medical supplies around."
+ icon_state = "medcrate"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/medical_everything = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/large_crate/medical/airdrop
+ icon_state = "supplydrop"
+
+/obj/structure/maintenance_loot_structure/large_crate/engineering
+ name = "engineering transport crate"
+ desc = "A large crate for transporting equally large amounts of tools and components around."
+ icon_state = "toolcrate"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/large_crate/engineering/airdrop
+ icon_state = "supplydrop_yellow"
+
+/obj/structure/maintenance_loot_structure/large_crate/military
+ name = "reinforced transport crate"
+ desc = "A large crate for transporting equally large amounts of militar."
+ icon_state = "supplydrop_green"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ /obj/effect/spawner/random/epic_loot/random_provisions = 1,
+ /obj/effect/spawner/random/epic_loot/random_other_military_loot = 1,
+ /obj/effect/spawner/random/epic_loot/medical_everything = 1,
+ )
+
+/obj/effect/spawner/random/epic_loot/random_supply_crate
+ name = "random supply crate spawner"
+ desc = "Automagically transforms into a random supply crate, hopefully filled with goodies."
+ icon = 'modular_doppler/epic_loot/icons/loot_structures.dmi'
+ icon_state = "crate_random"
+ loot = list(
+ /obj/structure/maintenance_loot_structure/large_crate,
+ /obj/structure/maintenance_loot_structure/large_crate/medical,
+ /obj/structure/maintenance_loot_structure/large_crate/medical/airdrop,
+ /obj/structure/maintenance_loot_structure/large_crate/engineering,
+ /obj/structure/maintenance_loot_structure/large_crate/engineering/airdrop,
+ /obj/structure/maintenance_loot_structure/large_crate/military,
+ )
diff --git a/modular_doppler/epic_loot/code/loot_structures/medbox.dm b/modular_doppler/epic_loot/code/loot_structures/medbox.dm
new file mode 100644
index 0000000000000..40ffab841a33d
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/medbox.dm
@@ -0,0 +1,36 @@
+/datum/storage/maintenance_loot_structure/medical_box
+ max_slots = 6
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 6
+ screen_max_columns = 3
+ opening_sound = 'modular_doppler/epic_loot/sound/plastic.mp3'
+
+/obj/structure/maintenance_loot_structure/medbox
+ name = "emergency medical box"
+ desc = "A large, atmos-sealed plastic container for holding emergency medical supplies."
+ icon_state = "medbox"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/medical_box
+ loot_spawn_dice_string = "1d8-2"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/medical_everything = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/medbox/bleu
+ icon_state = "medbox_blue"
+
+/obj/structure/maintenance_loot_structure/medbox/red
+ icon_state = "medbox_red"
+
+/obj/structure/maintenance_loot_structure/medbox/random
+ icon_state = "medbox_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "medbox",
+ "medbox_blue",
+ "medbox_red",
+ )
+
+/obj/structure/maintenance_loot_structure/medbox/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/military_case.dm b/modular_doppler/epic_loot/code/loot_structures/military_case.dm
new file mode 100644
index 0000000000000..0b26b90cf3e74
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/military_case.dm
@@ -0,0 +1,38 @@
+/datum/storage/maintenance_loot_structure/military_case
+ max_slots = 8
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 8
+ screen_max_columns = 4
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3'
+
+/obj/structure/maintenance_loot_structure/military_case
+ name = "large shipping crate"
+ desc = "A reinforced shipping crate for the transport of larger items."
+ icon_state = "military_crate"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/military_case
+ loot_spawn_dice_string = "1d10-2"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ /obj/effect/spawner/random/epic_loot/random_provisions = 1,
+ /obj/effect/spawner/random/epic_loot/random_other_military_loot = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/military_case/evil
+ icon_state = "guncrate_dark"
+
+/obj/structure/maintenance_loot_structure/military_case/super_evil
+ icon_state = "larpbox"
+
+/obj/structure/maintenance_loot_structure/military_case/random
+ icon_state = "military_crate_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "military_crate",
+ "military_crate_dark",
+ "larpbox",
+ )
+
+/obj/structure/maintenance_loot_structure/military_case/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/register.dm b/modular_doppler/epic_loot/code/loot_structures/register.dm
new file mode 100644
index 0000000000000..0013d6d7761a3
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/register.dm
@@ -0,0 +1,42 @@
+/datum/storage/maintenance_loot_structure/register
+ max_slots = 2
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 2
+ screen_max_columns = 2
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_2.mp3'
+
+/obj/structure/maintenance_loot_structure/register
+ name = "credits register"
+ desc = "A compact computing unit to handle transfers of credits between accounts. May still contain currency left behind!"
+ icon_state = "register_small"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/register
+ loot_spawn_dice_string = "1d3-1"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/entertainment/coin = 1,
+ /obj/effect/spawner/random/entertainment/money_small = 2,
+ /obj/effect/spawner/random/entertainment/money = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/register/white
+ icon_state = "register_small_clean"
+
+/obj/structure/maintenance_loot_structure/register/big
+ icon_state = "register_big"
+
+/obj/structure/maintenance_loot_structure/register/big_white
+ icon_state = "register_big_clean"
+
+/obj/structure/maintenance_loot_structure/register/random
+ icon_state = "register_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "register_small",
+ "register_small_clean",
+ "register_big",
+ "register_big_clean",
+ )
+
+/obj/structure/maintenance_loot_structure/register/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/safe.dm b/modular_doppler/epic_loot/code/loot_structures/safe.dm
new file mode 100644
index 0000000000000..2b5342e028805
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/safe.dm
@@ -0,0 +1,32 @@
+/datum/storage/maintenance_loot_structure/desk_safe
+ max_slots = 2
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 2
+ screen_max_columns = 1
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3'
+
+/obj/structure/maintenance_loot_structure/desk_safe
+ name = "compact safe"
+ desc = "A not-so-secure safe meant to fit around or under desks."
+ icon_state = "safe"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/desk_safe
+ loot_spawn_dice_string = "1d3-1"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_strongbox_loot = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/desk_safe/bleu
+ icon_state = "safe_blue"
+
+/obj/structure/maintenance_loot_structure/desk_safe/random
+ icon_state = "safe_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "safe",
+ "safe_blue",
+ )
+
+/obj/structure/maintenance_loot_structure/desk_safe/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/toolbox.dm b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm
new file mode 100644
index 0000000000000..43e2babff2852
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm
@@ -0,0 +1,38 @@
+/datum/storage/maintenance_loot_structure/toolbox
+ max_slots = 6
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 6
+ screen_max_columns = 3
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_1.mp3'
+
+/obj/structure/maintenance_loot_structure/toolbox
+ name = "heavy toolbox"
+ desc = "An industrial grade toolbox, for when you need to carry a LOT of things to a job. \
+ It's previous owner has smartly attached this one pretty firmly to whatever surface it's on, \
+ to prevent theft."
+ icon_state = "toolbox"
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/toolbox
+ loot_spawn_dice_string = "1d8-2"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/random_engineering = 1,
+ )
+
+/obj/structure/maintenance_loot_structure/toolbox/yellow
+ icon_state = "toolbox_yellow"
+
+/obj/structure/maintenance_loot_structure/toolbox/red
+ icon_state = "toolbox_red"
+
+/obj/structure/maintenance_loot_structure/toolbox/random
+ icon_state = "toolbox_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "toolbox",
+ "toolbox_yellow",
+ "toolbox_red",
+ )
+
+/obj/structure/maintenance_loot_structure/toolbox/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm b/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm
new file mode 100644
index 0000000000000..3b3bfd24b0802
--- /dev/null
+++ b/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm
@@ -0,0 +1,67 @@
+/datum/storage/maintenance_loot_structure/jacket
+ max_slots = 2
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 4
+ screen_max_columns = 2
+ opening_sound = 'sound/items/handling/cloth_pickup.ogg'
+
+/obj/structure/maintenance_loot_structure/wall_jacket
+ name = "hanging jacket"
+ desc = "Someone's old, now abandoned jacket. Maybe there's still stuff in the pockets?"
+ icon_state = "jacket_green"
+ density = FALSE
+ storage_datum_to_use = /datum/storage/maintenance_loot_structure/jacket
+ loot_spawn_dice_string = "1d3-1"
+ loot_weighted_list = list(
+ /obj/effect/spawner/random/epic_loot/pocket_sized_items = 1,
+ )
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/Initialize(mapload)
+ . = ..()
+ find_and_hang_on_wall()
+
+/obj/structure/maintenance_loot_structure/wall_jacket/yellow
+ icon_state = "jacket_yellow"
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket/yellow, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/blue
+ icon_state = "jacket_blue"
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket/blue, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/police
+ icon_state = "jacket_police"
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket/police, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/black
+ icon_state = "jacket_black"
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket/black, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/military
+ icon_state = "jacket_military"
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket/military, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/random
+ icon_state = "jacket_random"
+ /// The different icon states we can swap to when initializing
+ var/list/random_icon_states = list(
+ "jacket_green",
+ "jacket_yellow",
+ "jacket_blue",
+ "jacket_police",
+ "jacket_black",
+ "jacket_military",
+ )
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket/random, 28)
+
+/obj/structure/maintenance_loot_structure/wall_jacket/random/Initialize(mapload)
+ . = ..()
+ icon_state = pick(random_icon_states)
+ update_appearance()
diff --git a/modular_doppler/epic_loot/code/random_spawners_real.dm b/modular_doppler/epic_loot/code/random_spawners_real.dm
new file mode 100644
index 0000000000000..eab701f4a1391
--- /dev/null
+++ b/modular_doppler/epic_loot/code/random_spawners_real.dm
@@ -0,0 +1,690 @@
+/obj/effect/spawner/random/epic_loot
+ name = "extraction loot spawner"
+ desc = "Gods please let there be nobody extract camping."
+ icon = 'modular_doppler/epic_loot/icons/epic_loot.dmi'
+ icon_state = null
+
+// Jacket pocket contents
+
+// Actual pocket items spawner
+
+/obj/effect/spawner/random/epic_loot/pocket_sized_items
+ name = "random pocket sized items"
+ icon_state = "random_pocket_valuable"
+ loot = list(
+ /obj/effect/spawner/random/epic_loot/pocket_valuable = 1,
+ /obj/effect/spawner/random/epic_loot/pocket_medical = 1,
+ /obj/effect/spawner/random/epic_loot/pocket_da_money = 1,
+ )
+
+// Chainlet, good or not good, call it
+
+/obj/effect/spawner/random/epic_loot/pocket_valuable
+ name = "random pocket valuable"
+ icon_state = "random_chain"
+ loot = list(
+ /obj/item/epic_loot/silver_chainlet = 3,
+ /obj/item/epic_loot/press_pass = 2,
+ /obj/item/epic_loot/military_flash = 2,
+ /obj/item/epic_loot/slim_diary = 2,
+ /obj/item/epic_loot/gold_chainlet = 1,
+ )
+
+// Pocket meds
+
+/obj/effect/spawner/random/epic_loot/pocket_medical
+ name = "random pocket medical item"
+ icon_state = "random_med_stack"
+ loot = list(
+ /obj/item/storage/pill_bottle/iron = 2,
+ /obj/item/storage/pill_bottle/painkiller = 2,
+ /obj/item/storage/pill_bottle/ondansetron = 1,
+ /obj/item/stack/medical/bandage = 2,
+ /obj/item/stack/medical/bandage/makeshift = 2,
+ /obj/item/stack/medical/aloe = 2,
+ /obj/item/stack/medical/ointment/red_sun = 1,
+ /obj/item/stack/medical/bruise_pack = 1,
+ /obj/item/stack/medical/gauze/sterilized = 1,
+ )
+
+// Pocket da money
+
+/obj/effect/spawner/random/epic_loot/pocket_da_money
+ name = "random pocket money"
+ icon_state = "random_pocket_valuable"
+ loot = list(
+ /obj/effect/spawner/random/entertainment/money_small = 2,
+ /obj/effect/spawner/random/entertainment/money = 1,
+ /obj/effect/spawner/random/entertainment/cigarette_pack = 1,
+ /obj/effect/spawner/random/entertainment/cigarette = 2,
+ /obj/effect/spawner/random/entertainment/wallet_lighter = 2,
+ )
+
+// Medical related spawners
+
+// The medical everything spawner
+
+/obj/effect/spawner/random/epic_loot/medical_everything
+ name = "random medical anything"
+ icon_state = "random_med_stack"
+ loot = list(
+ /obj/effect/spawner/random/epic_loot/medical_stack_item = 2,
+ /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 1,
+ /obj/effect/spawner/random/epic_loot/chemical = 1,
+ /obj/effect/spawner/random/epic_loot/medical_tools = 2,
+ /obj/effect/spawner/random/epic_loot/medkit = 1,
+ /obj/effect/spawner/random/epic_loot/medpens = 2,
+ /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1,
+ )
+
+// Basic healing items
+
+/obj/effect/spawner/random/epic_loot/medical_stack_item
+ name = "random medical item"
+ icon_state = "random_med_stack"
+ loot = list(
+ /obj/item/stack/medical/bruise_pack = 3,
+ /obj/item/stack/medical/gauze = 3,
+ /obj/item/stack/medical/gauze/sterilized = 2,
+ /obj/item/stack/medical/suture/emergency = 3,
+ /obj/item/stack/medical/suture/coagulant = 2,
+ /obj/item/stack/medical/suture/bloody = 1,
+ /obj/item/stack/medical/ointment = 3,
+ /obj/item/stack/medical/ointment/red_sun = 2,
+ /obj/item/stack/medical/mesh = 2,
+ /obj/item/stack/medical/aloe = 2,
+ /obj/item/stack/medical/bone_gel/one = 2,
+ /obj/item/stack/medical/bone_gel = 1,
+ /obj/item/stack/medical/bandage/makeshift = 3,
+ /obj/item/stack/medical/bandage = 2,
+ /obj/item/stack/sticky_tape/surgical = 2,
+ /obj/item/reagent_containers/blood/random = 1,
+ /obj/item/stack/medical/wound_recovery/robofoam = 2,
+ // Pill bottles
+ /obj/item/storage/pill_bottle/iron = 2,
+ /obj/item/storage/pill_bottle/potassiodide = 2,
+ /obj/item/storage/pill_bottle/painkiller = 2,
+ /obj/item/storage/pill_bottle/probital = 2,
+ /obj/item/storage/pill_bottle/happinesspsych = 1,
+ /obj/item/storage/pill_bottle/lsdpsych = 1,
+ /obj/item/storage/pill_bottle/mannitol = 2,
+ /obj/item/storage/pill_bottle/multiver = 2,
+ /obj/item/storage/pill_bottle/mutadone = 1,
+ /obj/item/storage/pill_bottle/neurine = 1,
+ /obj/item/storage/pill_bottle/ondansetron = 1,
+ /obj/item/storage/pill_bottle/psicodine = 1,
+ /obj/item/storage/pill_bottle/sansufentanyl = 1,
+ )
+
+// More advanced healing items
+
+/obj/effect/spawner/random/epic_loot/medical_stack_item_advanced
+ name = "random advanced medical item"
+ icon_state = "random_med_stack_adv"
+ loot = list(
+ /obj/item/stack/medical/gauze/sterilized = 2,
+ /obj/item/stack/medical/suture = 3,
+ /obj/item/stack/medical/suture/coagulant = 3,
+ /obj/item/stack/medical/suture/bloody = 2,
+ /obj/item/stack/medical/suture/medicated = 1,
+ /obj/item/stack/medical/ointment/red_sun = 3,
+ /obj/item/stack/medical/mesh = 3,
+ /obj/item/stack/medical/mesh/bloody = 2,
+ /obj/item/stack/medical/mesh/advanced = 1,
+ /obj/item/stack/medical/aloe = 2,
+ /obj/item/stack/medical/bone_gel = 2,
+ /obj/item/stack/medical/bandage = 2,
+ /obj/item/stack/sticky_tape/surgical = 2,
+ /obj/item/stack/medical/poultice = 1,
+ /obj/item/stack/medical/wound_recovery = 1,
+ /obj/item/stack/medical/wound_recovery/rapid_coagulant = 1,
+ /obj/item/reagent_containers/blood/random = 2,
+ /obj/item/stack/medical/wound_recovery/robofoam = 3,
+ /obj/item/stack/medical/wound_recovery/robofoam_super = 2,
+ // Medigels
+ /obj/item/reagent_containers/medigel/libital = 2,
+ /obj/item/reagent_containers/medigel/aiuri = 2,
+ /obj/item/reagent_containers/medigel/sterilizine = 2,
+ /obj/item/reagent_containers/medigel/synthflesh = 1,
+ // Pill bottles
+ /obj/item/storage/pill_bottle/iron = 2,
+ /obj/item/storage/pill_bottle/potassiodide = 2,
+ /obj/item/storage/pill_bottle/painkiller = 2,
+ /obj/item/storage/pill_bottle/probital = 2,
+ /obj/item/storage/pill_bottle/happinesspsych = 1,
+ /obj/item/storage/pill_bottle/lsdpsych = 1,
+ /obj/item/storage/pill_bottle/mannitol = 2,
+ /obj/item/storage/pill_bottle/multiver = 2,
+ /obj/item/storage/pill_bottle/mutadone = 1,
+ /obj/item/storage/pill_bottle/neurine = 1,
+ /obj/item/storage/pill_bottle/ondansetron = 1,
+ /obj/item/storage/pill_bottle/psicodine = 1,
+ /obj/item/storage/pill_bottle/sansufentanyl = 1,
+ )
+
+// Chems and whatnot
+
+/obj/effect/spawner/random/epic_loot/chemical
+ name = "random chemical"
+ icon_state = "random_med_stack_adv"
+ loot = list(
+ // Chemjaks
+ /obj/item/reagent_containers/cup/bottle/epinephrine = 1,
+ /obj/item/reagent_containers/cup/bottle/morphine = 2,
+ /obj/item/reagent_containers/cup/bottle/mannitol = 1,
+ /obj/item/reagent_containers/cup/bottle/multiver = 2,
+ /obj/item/reagent_containers/cup/bottle/ammoniated_mercury = 2,
+ /obj/item/reagent_containers/cup/bottle/syriniver = 2,
+ /obj/item/reagent_containers/cup/bottle/synaptizine = 2,
+ /obj/item/reagent_containers/cup/bottle/fentanyl = 2,
+ /obj/item/reagent_containers/cup/bottle/formaldehyde = 1,
+ /obj/item/reagent_containers/cup/bottle/diphenhydramine = 1,
+ /obj/item/reagent_containers/cup/bottle/potass_iodide = 2,
+ /obj/item/reagent_containers/cup/bottle/salglu_solution = 3,
+ /obj/item/reagent_containers/cup/bottle/atropine = 2,
+ /obj/item/reagent_containers/cup/bottle/capsaicin = 2,
+ /obj/item/reagent_containers/cup/bottle/fentanyl = 1,
+ /obj/item/reagent_containers/cup/bottle/leadacetate = 1,
+ /obj/item/reagent_containers/cup/bottle/thermite = 1,
+ /obj/item/reagent_containers/cup/bottle/ethanol = 2,
+ /obj/item/reagent_containers/syringe = 2,
+ // Medigels
+ /obj/item/reagent_containers/medigel/libital = 2,
+ /obj/item/reagent_containers/medigel/aiuri = 2,
+ /obj/item/reagent_containers/medigel/sterilizine = 2,
+ /obj/item/reagent_containers/medigel/synthflesh = 1,
+ )
+
+// Medical tools spawner
+
+/obj/effect/spawner/random/epic_loot/medical_tools
+ name = "random medical tools"
+ icon_state = "random_med_tools"
+ loot = list(
+ /obj/item/bonesetter = 2,
+ /obj/item/cautery = 2,
+ /obj/item/cautery/cruel = 1,
+ /obj/item/clothing/neck/stethoscope = 2,
+ /obj/item/flashlight/pen = 2,
+ /obj/item/flashlight/pen/paramedic = 2,
+ /obj/item/healthanalyzer = 1,
+ /obj/item/healthanalyzer/simple = 2,
+ /obj/item/healthanalyzer/simple/disease = 2,
+ /obj/item/hemostat = 2,
+ /obj/item/storage/box/bandages = 1,
+ /obj/item/bodybag = 2,
+ /obj/item/blood_filter = 2,
+ /obj/item/circular_saw = 2,
+ /obj/item/clothing/gloves/latex/nitrile = 2,
+ /obj/item/clothing/mask/surgical = 2,
+ /obj/item/retractor = 2,
+ /obj/item/scalpel = 2,
+ /obj/item/shears = 1,
+ /obj/item/surgical_drapes = 2,
+ /obj/item/surgicaldrill = 2,
+ /obj/item/epic_loot/vein_finder = 1,
+ /obj/item/epic_loot/eye_scope = 1,
+ /obj/item/reagent_containers/dropper = 2,
+ /obj/item/reagent_containers/cup/beaker = 2,
+ /obj/item/reagent_containers/cup/beaker/large = 1,
+ /obj/item/reagent_containers/cup/bottle = 2,
+ /obj/item/reagent_containers/cup/tube = 2,
+ /obj/item/reagent_containers/syringe = 2,
+ /obj/item/defibrillator = 1,
+ /obj/item/defibrillator/loaded = 1,
+ /obj/item/emergency_bed = 2,
+ /obj/item/storage/epic_loot_medical_case = 1,
+ )
+
+// Random medkits
+
+/obj/effect/spawner/random/epic_loot/medkit
+ name = "random medkit"
+ icon_state = "random_medkit"
+ loot = list(
+ /obj/item/storage/medkit/civil_defense/stocked = 2,
+ /obj/item/storage/medkit/civil_defense/comfort/stocked = 2,
+ /obj/item/storage/medkit/frontier/stocked = 2,
+ /obj/item/storage/medkit/combat_surgeon/stocked = 2,
+ /obj/item/storage/medkit/robotic_repair/stocked = 2,
+ /obj/item/storage/medkit/robotic_repair/preemo/stocked = 1,
+ /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked = 1,
+ /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked = 1,
+ /obj/item/storage/epic_loot_medpen_case = 2,
+ )
+
+// Random medpens for healing yourself
+
+/obj/effect/spawner/random/epic_loot/medpens
+ name = "random autoinjectors"
+ icon_state = "random_medpen_spawner"
+ loot = list(
+ /obj/item/reagent_containers/hypospray/medipen/deforest/occuisate = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/meridine = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine = 1,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/psifinil = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/halobinin = 2,
+ )
+
+// Random medpens for fighting other people
+
+/obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled
+ name = "random combat autoinjectors"
+ icon_state = "random_medpen_advanced"
+ loot = list(
+ /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine = 3,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/twitch = 1,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye = 1,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/aranepaine = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin = 2,
+ /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol = 2,
+ )
+
+// Tool and supply spawners
+
+/obj/effect/spawner/random/epic_loot/random_engineering
+ name = "random engineering thing"
+ icon_state = "random_component"
+ loot = list(
+ /obj/effect/spawner/random/epic_loot/random_components = 1,
+ /obj/effect/spawner/random/epic_loot/random_computer_parts = 1,
+ /obj/effect/spawner/random/epic_loot/random_tools = 1,
+ /obj/effect/spawner/random/epic_loot/random_construction = 1,
+ )
+
+// Sellable components
+
+/obj/effect/spawner/random/epic_loot/random_components
+ name = "random components"
+ icon_state = "random_component"
+ loot = list(
+ /obj/item/epic_loot/water_filter = 2,
+ /obj/item/epic_loot/thermometer = 2,
+ /obj/item/epic_loot/nail_box = 2,
+ /obj/item/epic_loot/cold_weld = 2,
+ /obj/item/epic_loot/electric_motor = 1,
+ /obj/item/epic_loot/current_converter = 1,
+ /obj/item/epic_loot/signal_amp = 1,
+ /obj/item/epic_loot/thermal_camera = 1,
+ /obj/item/epic_loot/shuttle_gyro = 1,
+ /obj/item/epic_loot/phased_array = 1,
+ /obj/item/epic_loot/shuttle_battery = 1,
+ /obj/item/epic_loot/fuel_conditioner = 2,
+ /obj/item/epic_loot/display = 1,
+ /obj/item/epic_loot/display_broken = 2,
+ /obj/item/epic_loot/civilian_circuit = 2,
+ )
+
+// Random computer parts
+
+/obj/effect/spawner/random/epic_loot/random_computer_parts
+ name = "random computer parts"
+ icon_state = "random_electronic_part"
+ loot = list(
+ /obj/item/epic_loot/signal_amp = 2,
+ /obj/item/epic_loot/device_fan = 2,
+ /obj/item/epic_loot/graphics = 1,
+ /obj/item/epic_loot/military_circuit = 1,
+ /obj/item/epic_loot/civilian_circuit = 2,
+ /obj/item/epic_loot/processor = 2,
+ /obj/item/epic_loot/power_supply = 2,
+ /obj/item/epic_loot/disk_drive = 2,
+ /obj/item/epic_loot/ssd = 1,
+ /obj/item/epic_loot/hdd = 1,
+ /obj/item/epic_loot/military_flash = 1,
+ )
+
+// Random tools
+
+/obj/effect/spawner/random/epic_loot/random_tools
+ name = "random tools and supplies"
+ icon_state = "random_tool"
+ loot = list(
+ // Wrench
+ /obj/item/wrench = 3,
+ /obj/item/wrench/bolter = 2,
+ /obj/item/wrench/caravan = 1,
+ /obj/item/wrench/combat = 1,
+ // Screwdriver
+ /obj/item/screwdriver = 3,
+ /obj/item/screwdriver/omni_drill = 2,
+ /obj/item/screwdriver/caravan = 1,
+ // Crowbar
+ /obj/item/crowbar = 3,
+ /obj/item/crowbar/large/doorforcer = 2,
+ /obj/item/crowbar/red/caravan = 1,
+ /obj/item/fireaxe/metal_h2_axe = 1,
+ // Wirecutters
+ /obj/item/wirecutters = 3,
+ /obj/item/wirecutters/caravan = 1,
+ // Welder
+ /obj/item/weldingtool = 3,
+ /obj/item/weldingtool/largetank = 3,
+ /obj/item/weldingtool/arc_welder = 2,
+ /obj/item/weldingtool/experimental = 1,
+ // Multitool
+ /obj/item/multitool = 2,
+ /obj/item/multitool/ai_detect = 1,
+ // Rapid whatever tools
+ /obj/item/pipe_dispenser = 1,
+ /obj/item/construction/rcd = 1,
+ /obj/item/construction/rtd = 1,
+ // Misc tools and related items
+ /obj/item/stack/cable_coil = 3,
+ /obj/item/flashlight = 2,
+ /obj/item/flashlight/flare = 3,
+ /obj/item/grenade/chem_grenade/metalfoam = 2,
+ /obj/item/geiger_counter = 2,
+ /obj/item/analyzer = 2,
+ // Various methods of insulation
+ /obj/item/clothing/gloves/color/yellow = 2,
+ /obj/item/clothing/gloves/chief_engineer = 1,
+ /obj/item/clothing/gloves/atmos = 1,
+ // Misc utility clothing
+ /obj/item/clothing/gloves/tinkerer = 1,
+ /obj/item/clothing/head/utility/welding = 2,
+ /obj/item/clothing/head/utility/hardhat/welding = 1,
+ /obj/item/clothing/glasses/meson = 3,
+ /obj/item/clothing/glasses/meson/engine = 2,
+ /obj/item/storage/belt/utility = 2,
+ /obj/item/clothing/shoes/magboots = 2,
+ // Tapes
+ /obj/item/stack/sticky_tape = 2,
+ /obj/item/stack/sticky_tape/super = 1,
+ // Cells
+ /obj/item/stock_parts/power_store/cell/upgraded = 1,
+ /obj/item/stock_parts/power_store/cell/crap = 2,
+ /obj/item/stock_parts/power_store/battery/upgraded = 1,
+ /obj/item/stock_parts/power_store/battery/crap = 2,
+ // Masks
+ /obj/item/clothing/mask/gas = 3,
+ /obj/item/clothing/mask/gas/welding = 2,
+ /obj/item/clothing/mask/gas/atmos/frontier_colonist = 2,
+ // Air tanks
+ /obj/item/tank/internals/nitrogen/belt = 1,
+ /obj/item/tank/internals/emergency_oxygen/engi = 2,
+ /obj/item/tank/internals/emergency_oxygen/double = 1,
+ // stuff
+ /obj/item/storage/epic_loot_cooler = 1,
+ /obj/item/storage/epic_loot_money_case = 1,
+ // Robofoam is a tool, right?
+ /obj/item/stack/medical/wound_recovery/robofoam = 2,
+ /obj/item/stack/medical/wound_recovery/robofoam_super = 1,
+ )
+
+// Random construction stuff
+
+/obj/effect/spawner/random/epic_loot/random_construction
+ name = "random constructions"
+ icon_state = "random_tool"
+ loot = list(
+ // Sheets
+ /obj/item/stack/sheet/iron/twenty = 2,
+ /obj/item/stack/sheet/iron/ten = 3,
+ /obj/item/stack/sheet/glass/fifty = 1,
+ /obj/item/stack/sheet/plastic/five = 3,
+ /obj/item/stack/sheet/plastic_wall_panel/ten = 2,
+ /obj/item/stack/rods/twentyfive = 2,
+ /obj/item/stack/sheet/tinumium/three = 2,
+ /obj/item/stack/sheet/mineral/silver = 2,
+ /obj/item/stack/sheet/mineral/gold = 2,
+ /obj/item/stack/sheet/mineral/plasma/five = 2,
+ // Flatpack machines
+ /obj/item/flatpacked_machine = 1,
+ /obj/item/flatpacked_machine/airlock_kit = 2,
+ /obj/item/flatpacked_machine/airlock_kit_manual = 2,
+ /obj/item/flatpacked_machine/arc_furnace = 1,
+ /obj/item/flatpacked_machine/co2_cracker = 2,
+ /obj/item/flatpacked_machine/frontier_griddle = 1,
+ /obj/item/flatpacked_machine/frontier_range = 1,
+ /obj/item/flatpacked_machine/fuel_generator = 1,
+ /obj/item/flatpacked_machine/gps_beacon = 2,
+ /obj/item/flatpacked_machine/hydro_synth = 1,
+ /obj/item/flatpacked_machine/large_station_battery = 1,
+ /obj/item/flatpacked_machine/macrowave = 1,
+ /obj/item/flatpacked_machine/ore_silo = 1,
+ /obj/item/flatpacked_machine/ore_thumper = 1,
+ /obj/item/flatpacked_machine/organics_printer = 2,
+ /obj/item/flatpacked_machine/organics_ration_printer = 2,
+ /obj/item/flatpacked_machine/recycler = 2,
+ /obj/item/flatpacked_machine/rtg = 2,
+ /obj/item/flatpacked_machine/shutter_kit = 1,
+ /obj/item/flatpacked_machine/solar = 2,
+ /obj/item/flatpacked_machine/solar_tracker = 1,
+ /obj/item/flatpacked_machine/station_battery = 1,
+ /obj/item/flatpacked_machine/stirling_generator = 1,
+ /obj/item/flatpacked_machine/sustenance_machine = 2,
+ /obj/item/flatpacked_machine/thermomachine = 1,
+ /obj/item/flatpacked_machine/water_synth = 2,
+ /obj/item/flatpacked_machine/wind_turbine = 2,
+ /obj/item/folded_navigation_gigabeacon = 1,
+ /obj/item/wallframe/cell_charger_multi = 2,
+ /obj/item/wallframe/frontier_medstation = 1,
+ /obj/item/wallframe/wall_heater = 2,
+ /obj/item/wallframe/digital_clock = 1,
+ // Other things
+ /obj/item/door_seal = 2,
+ )
+
+// Things from a safe
+
+// Documents and whatnot
+
+/obj/effect/spawner/random/epic_loot/random_documents
+ name = "random documents"
+ icon_state = "random_documents"
+ loot = list(
+ /obj/item/folder/white = 2,
+ /obj/item/folder/red = 2,
+ /obj/item/folder/blue = 2,
+ /obj/item/folder/ancient_paperwork = 2,
+ /obj/item/epic_loot/intel_folder = 2,
+ /obj/item/epic_loot/corpo_folder = 2,
+ /obj/item/epic_loot/slim_diary = 2,
+ /obj/item/epic_loot/diary = 2,
+ /obj/item/computer_disk/maintenance = 2,
+ /obj/item/computer_disk/black_market = 1,
+ /obj/item/computer_disk/virus = 1,
+ /obj/item/clipboard = 2,
+ /obj/item/pen/fountain/captain = 1,
+ /obj/item/pen/fountain = 2,
+ /obj/item/pen/screwdriver = 1,
+ /obj/item/pen/red = 2,
+ /obj/item/pen/blue = 2,
+ /obj/item/pen/fourcolor = 2,
+ /obj/item/pen/survival = 1,
+ /obj/item/storage/epic_loot_docs_case = 1,
+ /obj/item/book/granter/crafting_recipe/dusting/smoothbore_disabler_prime = 1,
+ /obj/item/book/granter/crafting_recipe/dusting/laser_musket_prime = 1,
+ /obj/item/book/granter/crafting_recipe/dusting/pipegun_prime = 1,
+ /obj/item/book/granter/crafting_recipe/death_sandwich = 1,
+ /obj/item/book/granter/crafting_recipe/trash_cannon = 1,
+ /obj/item/book/granter/crafting_recipe/donk_secret_recipe = 1,
+ )
+
+// Stuff that comes in strongboxes specifically
+
+/obj/effect/spawner/random/epic_loot/random_strongbox_loot
+ name = "random strongbox loot"
+ icon_state = "random_strongbox_loot"
+ loot = list(
+ /obj/item/epic_loot/ssd = 1,
+ /obj/item/epic_loot/hdd = 1,
+ /obj/effect/spawner/random/epic_loot/pocket_valuable = 2,
+ /obj/effect/spawner/random/epic_loot/random_documents = 2,
+ )
+
+// Unsorted yeah
+
+// "Military" loot
+
+/obj/effect/spawner/random/epic_loot/random_other_military_loot
+ name = "random military loot"
+ desc = "Automagically transforms into some kind of misc. military loot item."
+ icon_state = "random_loot_military"
+ loot = list(
+ /obj/item/clothing/mask/gas/sechailer = 3,
+ /obj/item/clothing/mask/gas = 2,
+ /obj/item/clothing/mask/gas/atmos/frontier_colonist = 2,
+ /obj/item/folder/ancient_paperwork = 2,
+ /obj/item/epic_loot/intel_folder = 3,
+ /obj/item/epic_loot/slim_diary = 3,
+ /obj/item/epic_loot/ssd = 2,
+ /obj/item/epic_loot/hdd = 2,
+ /obj/item/epic_loot/military_flash = 2,
+ /obj/item/computer_disk/maintenance = 2,
+ /obj/item/computer_disk/black_market = 1,
+ /obj/item/epic_loot/plasma_explosive = 1,
+ /obj/item/epic_loot/grenade_fuze = 3,
+ /obj/item/epic_loot/signal_amp = 3,
+ /obj/item/epic_loot/thermal_camera = 2,
+ /obj/item/epic_loot/shuttle_gyro = 2,
+ /obj/item/epic_loot/phased_array = 2,
+ /obj/item/epic_loot/shuttle_battery = 2,
+ /obj/item/epic_loot/military_circuit = 3,
+ /obj/item/storage/epic_loot_medpen_case = 2,
+ /obj/item/storage/epic_loot_docs_case = 2,
+ /obj/item/storage/epic_loot_org_pouch = 2,
+ )
+
+// Random food for transport
+/obj/effect/spawner/random/epic_loot/random_provisions
+ name = "random provisions"
+ icon_state = "random_food"
+ loot = list(
+ /obj/item/food/sustenance_bar = 3,
+ /obj/item/food/sustenance_bar/cheese = 2,
+ /obj/item/food/sustenance_bar/mint = 2,
+ /obj/item/food/sustenance_bar/neapolitan = 2,
+ /obj/item/food/vendor_snacks/mothmallow = 1,
+ /obj/item/food/vendor_snacks/moth_bag = 3,
+ /obj/item/food/vendor_snacks/moth_bag/cheesecake = 2,
+ /obj/item/food/vendor_snacks/moth_bag/cheesecake/honey = 2,
+ /obj/item/food/vendor_snacks/moth_bag/fuel_jack = 3,
+ /obj/item/food/vendor_tray_meal/side/cornbread = 2,
+ /obj/item/food/vendor_tray_meal/side/moffin = 2,
+ /obj/item/food/vendor_tray_meal/side/roasted_seeds = 2,
+ /obj/item/food/brain_pate = 2,
+ /obj/item/food/branrequests = 3,
+ /obj/item/food/breadslice/corn = 2,
+ /obj/item/food/breadslice/reispan = 2,
+ /obj/item/food/breadslice/plain = 2,
+ /obj/item/food/breadslice/root = 2,
+ /obj/item/food/butter = 3,
+ /obj/item/food/candy = 3,
+ /obj/item/food/canned/beans = 3,
+ /obj/item/food/canned/peaches = 3,
+ /obj/item/food/canned/tomatoes = 3,
+ /obj/item/food/canned/chap = 3,
+ /obj/item/food/canned/desert_snails = 2,
+ /obj/item/food/canned/envirochow = 1,
+ /obj/item/food/canned/jellyfish = 2,
+ /obj/item/food/canned/larvae = 2,
+ /obj/item/food/canned/pine_nuts = 2,
+ /obj/item/food/canned/squid_ink = 1,
+ /obj/item/food/cheese/firm_cheese_slice = 2,
+ /obj/item/food/cheese/firm_cheese = 1,
+ /obj/item/food/chocolatebar = 2,
+ /obj/item/food/cnds/random = 3,
+ /obj/item/food/colonial_course/pljeskavica = 1,
+ /obj/item/food/colonial_course/nachos = 1,
+ /obj/item/food/colonial_course/blins = 1,
+ /obj/item/food/cornchips/random = 2,
+ /obj/item/food/peanuts/random = 2,
+ /obj/item/food/ready_donk = 1,
+ /obj/item/food/ready_donk/donkhiladas = 1,
+ /obj/item/food/ready_donk/donkrange_chicken = 1,
+ /obj/item/food/ready_donk/mac_n_cheese = 1,
+ /obj/item/food/ready_donk/nachos_grandes = 1,
+ /obj/item/food/ready_donk/country_chicken = 1,
+ /obj/item/food/ready_donk/salisbury_steak = 1,
+ /obj/item/food/semki = 3,
+ /obj/item/food/spacers_sidekick = 2,
+ /obj/item/food/sticko/random = 3,
+ // Ingredients
+ /obj/item/reagent_containers/cup/glass/bottle/juice/limejuice = 2,
+ /obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice = 2,
+ /obj/item/reagent_containers/cup/glass/bottle/juice/pineapplejuice = 2,
+ /obj/item/reagent_containers/condiment/milk = 1,
+ /obj/item/reagent_containers/condiment/sugar/small_ration = 2,
+ /obj/item/reagent_containers/condiment/flour/small_ration = 2,
+ /obj/item/reagent_containers/condiment/small_ration_korta_flour = 2,
+ /obj/item/reagent_containers/condiment/cherryjelly = 1,
+ /obj/item/reagent_containers/condiment/rice/small_ration = 2,
+ /obj/item/reagent_containers/condiment/soymilk/small_ration = 2,
+ /obj/item/reagent_containers/condiment/cornmeal = 1,
+ /obj/item/reagent_containers/condiment/grounding_solution = 1,
+ /obj/item/reagent_containers/condiment/bbqsauce = 2,
+ /obj/item/reagent_containers/condiment/chocolate = 1,
+ /obj/item/reagent_containers/condiment/coconut_milk = 2,
+ /obj/item/reagent_containers/condiment/curry_powder = 2,
+ /obj/item/reagent_containers/condiment/dashi_concentrate = 1,
+ /obj/item/reagent_containers/condiment/donksauce = 1,
+ /obj/item/reagent_containers/condiment/vegetable_oil = 2,
+ /obj/item/reagent_containers/condiment/worcestershire = 1,
+ /obj/item/reagent_containers/condiment/enzyme = 1,
+ /obj/item/reagent_containers/condiment/honey = 1,
+ /obj/item/reagent_containers/condiment/hotsauce = 1,
+ /obj/item/reagent_containers/condiment/ketchup = 1,
+ /obj/item/reagent_containers/condiment/mayonnaise = 1,
+ /obj/item/reagent_containers/condiment/peanut_butter = 1,
+ /obj/item/reagent_containers/condiment/protein = 1,
+ /obj/item/reagent_containers/condiment/red_bay = 2,
+ /obj/item/reagent_containers/condiment/vinegar = 1,
+ /obj/item/reagent_containers/condiment/coldsauce = 1,
+ /obj/item/storage/box/spaceman_ration/meats = 1,
+ /obj/item/storage/box/spaceman_ration/meats/lizard = 1,
+ /obj/item/storage/box/spaceman_ration/meats/fish = 1,
+ /obj/item/storage/box/spaceman_ration/plants = 2,
+ /obj/item/storage/box/spaceman_ration/plants/alternate = 2,
+ /obj/item/storage/box/spaceman_ration/plants/lizard = 2,
+ /obj/item/storage/box/spaceman_ration/plants/mothic = 2,
+ /obj/item/storage/box/papersack/ration_bread_slice = 1,
+ /obj/item/storage/box/colonial_rations = 1,
+ // Da cooler
+ /obj/item/storage/epic_loot_cooler = 2,
+ )
+
+// Da money
+
+/obj/effect/spawner/random/entertainment/money/one
+ spawn_loot_count = 1
+
+/obj/effect/spawner/random/entertainment/money_small/one
+ spawn_loot_count = 1
+
+// Maint structure spawner
+
+/obj/effect/spawner/random/epic_loot/random_maint_loot_structure
+ name = "random maintenance loot structure"
+ desc = "Automagically transforms into a random loot structure that spawns in maint."
+ icon = 'modular_doppler/epic_loot/icons/loot_structures.dmi'
+ icon_state = "random_maint_structure"
+ loot = list(
+ /obj/structure/maintenance_loot_structure/ammo_box/random,
+ /obj/structure/maintenance_loot_structure/computer_tower/random,
+ /obj/structure/maintenance_loot_structure/file_cabinet/random,
+ /obj/structure/maintenance_loot_structure/grenade_box/random,
+ /obj/structure/maintenance_loot_structure/gun_box/random,
+ /obj/effect/spawner/random/epic_loot/random_supply_crate,
+ /obj/structure/maintenance_loot_structure/medbox/random,
+ /obj/structure/maintenance_loot_structure/military_case/random,
+ /obj/structure/maintenance_loot_structure/register/random,
+ /obj/structure/maintenance_loot_structure/desk_safe/random,
+ /obj/structure/maintenance_loot_structure/toolbox/random,
+ /obj/structure/maintenance_loot_structure/wall_jacket/random,
+ )
diff --git a/modular_doppler/epic_loot/code/storage_containers/containers.dm b/modular_doppler/epic_loot/code/storage_containers/containers.dm
new file mode 100644
index 0000000000000..682315b83a58b
--- /dev/null
+++ b/modular_doppler/epic_loot/code/storage_containers/containers.dm
@@ -0,0 +1,232 @@
+/obj/item/storage/epic_loot_medpen_case
+ name = "autoinjector case"
+ desc = "A semi-rigid case for holding a large number of autoinjectors inside of."
+ icon = 'modular_doppler/epic_loot/icons/storage_items.dmi'
+ icon_state = "pencase"
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
+ pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
+ drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ storage_type = /datum/storage/maintenance_loot_structure/epic_loot_medpen_case
+ slot_flags = ITEM_SLOT_POCKETS
+ w_class = WEIGHT_CLASS_BULKY
+
+/datum/storage/maintenance_loot_structure/epic_loot_medpen_case
+ max_slots = 6
+ max_specific_storage = WEIGHT_CLASS_SMALL
+ max_total_storage = WEIGHT_CLASS_SMALL * 6
+ numerical_stacking = TRUE
+ opening_sound = 'sound/items/zip/un_zip.ogg'
+
+/datum/storage/maintenance_loot_structure/epic_loot_medpen_case/New()
+ . = ..()
+
+ can_hold = typecacheof(list(
+ /obj/item/dnainjector,
+ /obj/item/hypospray,
+ /obj/item/implant,
+ /obj/item/implantcase,
+ /obj/item/implanter,
+ /obj/item/lazarus_injector,
+ /obj/item/reagent_containers/hypospray,
+ /obj/item/reagent_containers/medigel,
+ /obj/item/reagent_containers/pill,
+ /obj/item/storage/pill_bottle,
+ ))
+
+/obj/item/storage/epic_loot_docs_case
+ name = "documents case"
+ desc = "A large pouch conveniently shaped to hold all of the valueable paperwork in the galaxy."
+ icon = 'modular_doppler/epic_loot/icons/storage_items.dmi'
+ icon_state = "documents"
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
+ pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
+ drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ storage_type = /datum/storage/maintenance_loot_structure/epic_loot_docs_case
+ slot_flags = ITEM_SLOT_POCKETS
+ w_class = WEIGHT_CLASS_BULKY
+
+/datum/storage/maintenance_loot_structure/epic_loot_docs_case
+ max_slots = 4
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 4
+ screen_max_columns = 2
+ numerical_stacking = TRUE
+ opening_sound = 'sound/items/handling/cloth_pickup.ogg'
+
+/datum/storage/maintenance_loot_structure/epic_loot_docs_case/New()
+ . = ..()
+
+ can_hold = typecacheof(list(
+ /obj/item/folder,
+ /obj/item/epic_loot/intel_folder,
+ /obj/item/epic_loot/corpo_folder,
+ /obj/item/epic_loot/slim_diary,
+ /obj/item/epic_loot/diary,
+ /obj/item/computer_disk,
+ /obj/item/paper,
+ /obj/item/photo,
+ /obj/item/documents,
+ /obj/item/paperwork,
+ /obj/item/clipboard,
+ ))
+
+/obj/item/storage/epic_loot_org_pouch
+ name = "organizational pouch"
+ desc = "A pouch with every possible type of pocket and organizer stuck into it, to hold all of the small stuff you could think of."
+ icon = 'modular_doppler/epic_loot/icons/storage_items.dmi'
+ icon_state = "sick"
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
+ pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
+ drop_sound = 'sound/items/handling/cloth_drop.ogg'
+ storage_type = /datum/storage/maintenance_loot_structure/epic_loot_org_pouch
+ slot_flags = ITEM_SLOT_POCKETS
+ w_class = WEIGHT_CLASS_BULKY
+
+/datum/storage/maintenance_loot_structure/epic_loot_org_pouch
+ max_slots = 4
+ max_specific_storage = WEIGHT_CLASS_SMALL
+ max_total_storage = WEIGHT_CLASS_SMALL * 4
+ screen_max_columns = 2
+ numerical_stacking = TRUE
+ opening_sound = 'sound/items/zip/un_zip.ogg'
+
+/obj/item/storage/epic_loot_cooler
+ name = "compact cooler"
+ desc = "A wonder in food storage technology, it's a blue bag that you can put food in."
+ icon = 'modular_doppler/epic_loot/icons/storage_items.dmi'
+ icon_state = "cooler"
+ lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
+ inhand_icon_state = "toolbox_blue"
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ storage_type = /datum/storage/maintenance_loot_structure/epic_loot_cooler
+ w_class = WEIGHT_CLASS_BULKY
+
+/datum/storage/maintenance_loot_structure/epic_loot_cooler
+ max_slots = 12
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 12
+ screen_max_columns = 4
+ numerical_stacking = FALSE
+ opening_sound = 'sound/items/zip/un_zip.ogg'
+
+/datum/storage/maintenance_loot_structure/epic_loot_cooler/New()
+ . = ..()
+
+ can_hold = typecacheof(list(
+ /obj/item/food,
+ /obj/item/reagent_containers/condiment,
+ /obj/item/reagent_containers/cup,
+ ))
+
+/obj/item/storage/epic_loot_money_case
+ name = "money case"
+ desc = "A heavy duty case for the transportation of (bribe) money."
+ icon = 'modular_doppler/epic_loot/icons/storage_items.dmi'
+ icon_state = "money_case"
+ lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
+ inhand_icon_state = "lockbox"
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ storage_type = /datum/storage/maintenance_loot_structure/epic_loot_the_money
+ w_class = WEIGHT_CLASS_BULKY
+
+/datum/storage/maintenance_loot_structure/epic_loot_the_money
+ max_slots = 6
+ max_specific_storage = WEIGHT_CLASS_NORMAL
+ max_total_storage = WEIGHT_CLASS_NORMAL * 6
+ screen_max_columns = 2
+ numerical_stacking = FALSE
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_1.mp3'
+
+/datum/storage/maintenance_loot_structure/epic_loot_the_money/New()
+ . = ..()
+
+ can_hold = typecacheof(list(
+ /obj/item/stack/spacecash,
+ /obj/item/coin,
+ ))
+
+/obj/item/storage/epic_loot_medical_case
+ name = "medical case"
+ desc = "A heavy duty case for the transportation of medical supplies."
+ icon = 'modular_doppler/epic_loot/icons/storage_items.dmi'
+ icon_state = "medical"
+ lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
+ inhand_icon_state = "bitrunning"
+ drop_sound = 'sound/items/handling/ammobox_drop.ogg'
+ pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
+ storage_type = /datum/storage/maintenance_loot_structure/epic_loot_medkit
+ w_class = WEIGHT_CLASS_BULKY
+
+/datum/storage/maintenance_loot_structure/epic_loot_medkit
+ max_slots = 21
+ max_specific_storage = WEIGHT_CLASS_BULKY
+ max_total_storage = WEIGHT_CLASS_BULKY * 21
+ screen_max_columns = 7
+ numerical_stacking = FALSE
+ opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_1.mp3'
+
+/datum/storage/maintenance_loot_structure/epic_loot_medkit/New()
+ . = ..()
+
+ can_hold = typecacheof(list(
+ /obj/item/blood_filter,
+ /obj/item/bonesetter,
+ /obj/item/cautery,
+ /obj/item/circular_saw,
+ /obj/item/clothing/glasses,
+ /obj/item/clothing/gloves,
+ /obj/item/clothing/neck/stethoscope,
+ /obj/item/clothing/mask/breath,
+ /obj/item/clothing/mask/muzzle,
+ /obj/item/clothing/mask/surgical,
+ /obj/item/clothing/suit/toggle/labcoat/hospitalgown,
+ /obj/item/construction/plumbing,
+ /obj/item/dnainjector,
+ /obj/item/extinguisher/mini,
+ /obj/item/flashlight/pen,
+ /obj/item/geiger_counter,
+ /obj/item/gun/syringe/syndicate,
+ /obj/item/healthanalyzer,
+ /obj/item/hemostat,
+ /obj/item/holosign_creator/medical,
+ /obj/item/hypospray,
+ /obj/item/implant,
+ /obj/item/implantcase,
+ /obj/item/implanter,
+ /obj/item/lazarus_injector,
+ /obj/item/lighter,
+ /obj/item/pinpointer/crew,
+ /obj/item/plunger,
+ /obj/item/radio,
+ /obj/item/reagent_containers/blood,
+ /obj/item/reagent_containers/dropper,
+ /obj/item/reagent_containers/cup/beaker,
+ /obj/item/reagent_containers/cup/bottle,
+ /obj/item/reagent_containers/cup/tube,
+ /obj/item/reagent_containers/hypospray,
+ /obj/item/reagent_containers/medigel,
+ /obj/item/reagent_containers/pill,
+ /obj/item/reagent_containers/spray,
+ /obj/item/reagent_containers/syringe,
+ /obj/item/retractor,
+ /obj/item/scalpel,
+ /obj/item/shears,
+ /obj/item/stack/medical,
+ /obj/item/stack/sticky_tape,
+ /obj/item/stamp,
+ /obj/item/sensor_device,
+ /obj/item/storage/fancy/cigarettes,
+ /obj/item/storage/pill_bottle,
+ /obj/item/surgical_drapes,
+ /obj/item/surgicaldrill,
+ /obj/item/tank/internals/emergency_oxygen,
+ /obj/item/wrench/medical,
+ /obj/item/emergency_bed,
+ /obj/item/storage/box/bandages,
+ /obj/item/bodybag,
+ ))
diff --git a/modular_doppler/epic_loot/code/where_they_spawn.dm b/modular_doppler/epic_loot/code/where_they_spawn.dm
new file mode 100644
index 0000000000000..2d981ae7598d3
--- /dev/null
+++ b/modular_doppler/epic_loot/code/where_they_spawn.dm
@@ -0,0 +1,42 @@
+/obj/effect/spawner/random/trash/box
+ loot = list(
+ /obj/structure/closet/cardboard = 9,
+ /obj/structure/closet/cardboard/metal = 1,
+ /obj/effect/spawner/random/epic_loot/random_maint_loot_structure = 3,
+ )
+
+/obj/effect/spawner/random/structure/crate
+ loot = list(
+ /obj/effect/spawner/random/epic_loot/random_maint_loot_structure = 1000,
+ /obj/effect/spawner/random/structure/crate_loot = 744,
+ /obj/structure/closet/crate/trashcart/filled = 75,
+ /obj/effect/spawner/random/trash/moisture_trap = 50,
+ /obj/effect/spawner/random/trash/hobo_squat = 30,
+ /obj/structure/closet/mini_fridge = 35,
+ /obj/effect/spawner/random/trash/mess = 30,
+ /obj/item/kirbyplants/fern = 20,
+ /obj/structure/closet/crate/decorations = 15,
+ /obj/effect/decal/remains/human/smokey/maintenance = 7,
+ /obj/structure/destructible/cult/pants_altar = 1,
+ )
+
+/obj/effect/spawner/random/structure/crate_loot
+ loot = list(
+ /obj/effect/spawner/random/epic_loot/random_maint_loot_structure = 30,
+ /obj/effect/spawner/random/structure/closet_empty/crate/with_loot = 15,
+ /obj/effect/spawner/random/structure/closet_empty/crate = 4,
+ /obj/structure/closet/crate/secure/loot = 1,
+ )
+
+/obj/effect/spawner/random/structure/closet_maintenance
+ loot = list(
+ /obj/effect/spawner/random/epic_loot/random_maint_loot_structure = 15,
+ /obj/effect/spawner/random/structure/closet_empty = 10,
+ /obj/structure/closet/emcloset = 2,
+ /obj/structure/closet/firecloset = 2,
+ /obj/structure/closet/toolcloset = 2,
+ /obj/structure/closet/l3closet = 1,
+ /obj/structure/closet/radiation = 1,
+ /obj/structure/closet/bombcloset = 1,
+ /obj/structure/closet/mini_fridge/grimy = 1,
+ )
diff --git a/modular_doppler/epic_loot/icons/epic_loot.dmi b/modular_doppler/epic_loot/icons/epic_loot.dmi
new file mode 100644
index 0000000000000..e05a53aefdea6
Binary files /dev/null and b/modular_doppler/epic_loot/icons/epic_loot.dmi differ
diff --git a/modular_doppler/epic_loot/icons/loot_structures.dmi b/modular_doppler/epic_loot/icons/loot_structures.dmi
new file mode 100644
index 0000000000000..213c69849cfef
Binary files /dev/null and b/modular_doppler/epic_loot/icons/loot_structures.dmi differ
diff --git a/modular_doppler/epic_loot/icons/storage_items.dmi b/modular_doppler/epic_loot/icons/storage_items.dmi
new file mode 100644
index 0000000000000..04e6db41d6708
Binary files /dev/null and b/modular_doppler/epic_loot/icons/storage_items.dmi differ
diff --git a/modular_doppler/epic_loot/sound/attributions.txt b/modular_doppler/epic_loot/sound/attributions.txt
new file mode 100644
index 0000000000000..6aee04bdec393
--- /dev/null
+++ b/modular_doppler/epic_loot/sound/attributions.txt
@@ -0,0 +1 @@
+The sounds in this folder are all from https://pixabay.com/users/38928062/ as of the time of writing this comment
diff --git a/modular_doppler/epic_loot/sound/cabinet.mp3 b/modular_doppler/epic_loot/sound/cabinet.mp3
new file mode 100644
index 0000000000000..b2380969d783d
Binary files /dev/null and b/modular_doppler/epic_loot/sound/cabinet.mp3 differ
diff --git a/modular_doppler/epic_loot/sound/plastic.mp3 b/modular_doppler/epic_loot/sound/plastic.mp3
new file mode 100644
index 0000000000000..469ff97a2fdde
Binary files /dev/null and b/modular_doppler/epic_loot/sound/plastic.mp3 differ
diff --git a/modular_doppler/epic_loot/sound/wood_crate_1.mp3 b/modular_doppler/epic_loot/sound/wood_crate_1.mp3
new file mode 100644
index 0000000000000..3fdf354ae0b07
Binary files /dev/null and b/modular_doppler/epic_loot/sound/wood_crate_1.mp3 differ
diff --git a/modular_doppler/epic_loot/sound/wood_crate_2.mp3 b/modular_doppler/epic_loot/sound/wood_crate_2.mp3
new file mode 100644
index 0000000000000..01fa391d6cccc
Binary files /dev/null and b/modular_doppler/epic_loot/sound/wood_crate_2.mp3 differ
diff --git a/modular_doppler/epic_loot/sound/wood_crate_3.mp3 b/modular_doppler/epic_loot/sound/wood_crate_3.mp3
new file mode 100644
index 0000000000000..aa3d9954f8266
Binary files /dev/null and b/modular_doppler/epic_loot/sound/wood_crate_3.mp3 differ
diff --git a/modular_doppler/objects_and_structures/code/structure.dm b/modular_doppler/objects_and_structures/code/structure.dm
deleted file mode 100644
index 8ebda2b81ed2f..0000000000000
--- a/modular_doppler/objects_and_structures/code/structure.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/effect/spawner/random/structure/crate
- name = "crate spawner"
- icon_state = "crate_secure"
- loot = list(
- /obj/effect/spawner/random/structure/crate_loot = 495,
- /obj/structure/trash_pile = 250,
- /obj/structure/closet/crate/trashcart/filled = 75,
- /obj/effect/spawner/random/trash/moisture_trap = 50,
- /obj/effect/spawner/random/trash/hobo_squat = 30,
- /obj/structure/closet/mini_fridge = 35,
- /obj/effect/spawner/random/trash/mess = 30,
- /obj/item/kirbyplants/fern = 20,
- /obj/structure/closet/crate/decorations = 15,
- /obj/effect/decal/remains/human/smokey/maintenance = 7,
- /obj/structure/destructible/cult/pants_altar = 1,
- )
diff --git a/modular_doppler/objects_and_structures/code/trash_pile.dm b/modular_doppler/objects_and_structures/code/trash_pile.dm
deleted file mode 100644
index 8e38a9bc46796..0000000000000
--- a/modular_doppler/objects_and_structures/code/trash_pile.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-/obj/structure/trash_pile
- name = "trash pile"
- desc = "A heap of garbage, but maybe there's something interesting inside?"
- icon = 'modular_doppler/objects_and_structures/icons/trash_piles.dmi'
- icon_state = "randompile"
- density = TRUE
- anchored = TRUE
- layer = TABLE_LAYER
- obj_flags = CAN_BE_HIT
- pass_flags = LETPASSTHROW
-
- max_integrity = 50
-
- var/hide_person_time = 30
- var/hide_item_time = 15
-
- var/list/searchedby = list()// Characters that have searched this trashpile, with values of searched time.
-
-/obj/structure/trash_pile/Initialize(mapload)
- . = ..()
- icon_state = pick(
- "pile1",
- "pile2",
- "pilechair",
- "piletable",
- "pilevending",
- "brtrashpile",
- "microwavepile",
- "rackpile",
- "boxfort",
- "trashbag",
- "brokecomp",
- )
-
-/obj/structure/trash_pile/proc/do_search(mob/user)
- if(contents.len) // There's something hidden
- var/atom/hidden_atom = contents[contents.len] // Get the most recent hidden thing
- if(istype(hidden_atom, /mob/living))
- var/mob/living/hidden_mob = hidden_atom
- balloon_alert(user, "someone is inside!")
- eject_mob(hidden_mob)
- else if (istype(hidden_atom, /obj/item))
- var/obj/item/hidden_item = hidden_atom
- balloon_alert(user, "found something!")
- hidden_item.forceMove(src.loc)
- else
- // You already searched this one bruh
- if(user.ckey in searchedby)
- balloon_alert(user, "already searched!")
- // You found an item!
- else
- produce_alpha_item()
- balloon_alert(user, "found something!")
- searchedby += user.ckey
-
-/obj/structure/trash_pile/attack_hand(mob/user)
- // Human mob
- if(ishuman(user))
- var/mob/living/carbon/human/human_user = user
- human_user.visible_message("[user] searches through \the [src].", span_notice("You search through \the [src]."))
- // Do the searching
- if(do_after(user, rand(4 SECONDS, 6 SECONDS), target = src))
- if(src.loc) // Let's check if the pile still exists
- do_search(user)
- else
- return ..()
-
-// Random lists
-/obj/structure/trash_pile/proc/produce_alpha_item()
- var/lootspawn = pick_weight(GLOB.maintenance_loot)
- while(islist(lootspawn))
- lootspawn = pick_weight(lootspawn)
- var/obj/item/hidden_item = new lootspawn(get_turf(src))
- return hidden_item
-
-/obj/structure/trash_pile/mouse_drop_receive(atom/dropping, mob/user, params)
- if(user == dropping && iscarbon(dropping))
- var/mob/living/dropped_mob = dropping
- if(dropped_mob.mobility_flags & MOBILITY_MOVE)
- dive_in_pile(user)
- return
-
-/obj/structure/trash_pile/proc/eject_mob(mob/living/hidden_mob)
- hidden_mob.forceMove(src.loc)
- playsound(hidden_mob.loc, 'sound/machines/chime.ogg', 50, FALSE, -5)
- hidden_mob.do_alert_animation(hidden_mob)
-
-/obj/structure/trash_pile/proc/do_dive(mob/user)
- if(contents.len)
- for(var/mob/hidden_mob in contents)
- balloon_alert(user, "already someone inside!")
- eject_mob(hidden_mob)
- return FALSE
- return TRUE
-
-/obj/structure/trash_pile/proc/dive_in_pile(mob/user)
- user.visible_message(span_warning("[user] starts diving into [src]."), \
- span_notice("You start diving into [src]..."))
- var/adjusted_dive_time = hide_person_time
- if(HAS_TRAIT(user, TRAIT_RESTRAINED)) // hiding takes twice as long when restrained.
- adjusted_dive_time *= 2
-
- if(do_after(user, adjusted_dive_time, user))
- if(src.loc) // Checking if structure has been destroyed
- if(do_dive(user))
- user.forceMove(src)
-
-/obj/structure/trash_pile/proc/can_hide_item(obj/item/hidden_item)
- if(contents.len > 10)
- return FALSE
- return TRUE
-
-/obj/structure/trash_pile/attackby(obj/item/hidden_item, mob/living/user, params)
- if(!user.combat_mode)
- if(can_hide_item(hidden_item))
- balloon_alert(user, "hiding item...")
- if(do_after(user, hide_item_time, user))
- if(src.loc)
- if(user.transferItemToLoc(hidden_item, src))
- balloon_alert(user, "item hidden")
- else
- balloon_alert(user, "it's stuck to your hand!")
- else
- balloon_alert(user, "it's full!")
- return
-
- . = ..()
-
-/obj/structure/trash_pile/Destroy()
- for(var/atom/movable/pile_contents in src)
- pile_contents.forceMove(src.loc)
- return ..()
-
-/obj/structure/trash_pile/container_resist_act(mob/user)
- user.forceMove(src.loc)
-
-/obj/structure/trash_pile/relaymove(mob/user)
- container_resist_act(user)
diff --git a/tgstation.dme b/tgstation.dme
index e19b6041b1bcd..a6a8905e39b7c 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6653,6 +6653,26 @@
#include "modular_doppler\emotes\code\overlay_emotes\overlay_emotes.dm"
#include "modular_doppler\enterprise_resource_planning\code\breasts.dm"
#include "modular_doppler\enterprise_resource_planning\code\erp_prefs.dm"
+#include "modular_doppler\epic_loot\code\_basetype.dm"
+#include "modular_doppler\epic_loot\code\random_spawners_real.dm"
+#include "modular_doppler\epic_loot\code\where_they_spawn.dm"
+#include "modular_doppler\epic_loot\code\loot_items\components.dm"
+#include "modular_doppler\epic_loot\code\loot_items\electronics.dm"
+#include "modular_doppler\epic_loot\code\loot_items\medical.dm"
+#include "modular_doppler\epic_loot\code\loot_items\valuables.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\ammo_box.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\computer_tower.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\files.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\grenade_box.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\gun_case.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\large_crate.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\medbox.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\military_case.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\register.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\safe.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\toolbox.dm"
+#include "modular_doppler\epic_loot\code\loot_structures\wall_jackets.dm"
+#include "modular_doppler\epic_loot\code\storage_containers\containers.dm"
#include "modular_doppler\examinemore\code\examine_more.dm"
#include "modular_doppler\face_mouse_preferences\code\face_mouse_pref.dm"
#include "modular_doppler\flavortext_and_records\code\defines.dm"
@@ -7142,9 +7162,7 @@
#include "modular_doppler\objects_and_structures\code\icemoon_tiles.dm"
#include "modular_doppler\objects_and_structures\code\mannequin.dm"
#include "modular_doppler\objects_and_structures\code\sauna_oven.dm"
-#include "modular_doppler\objects_and_structures\code\structure.dm"
#include "modular_doppler\objects_and_structures\code\towel_bins.dm"
-#include "modular_doppler\objects_and_structures\code\trash_pile.dm"
#include "modular_doppler\objects_and_structures\code\watercloset.dm"
#include "modular_doppler\pixel_shift\living.dm"
#include "modular_doppler\pixel_shift\living_movement.dm"