From 79bcb6e162b694d004c0af91c822793110f75e6d Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Fri, 29 Nov 2024 20:30:09 -0600 Subject: [PATCH 1/9] yeah? --- modular_doppler/epic_loot/code/_basetype.dm | 84 ++ .../epic_loot/code/loot_items/components.dm | 342 ++++++++ .../epic_loot/code/loot_items/electronics.dm | 204 +++++ .../epic_loot/code/loot_items/keycards.dm | 76 ++ .../epic_loot/code/loot_items/medical.dm | 60 ++ .../epic_loot/code/loot_items/valuables.dm | 237 ++++++ .../code/loot_structures/ammo_box.dm | 32 + .../code/loot_structures/computer_tower.dm | 36 + .../epic_loot/code/loot_structures/files.dm | 33 + .../code/loot_structures/grenade_box.dm | 32 + .../code/loot_structures/gun_case.dm | 34 + .../code/loot_structures/large_crate.dm | 80 ++ .../epic_loot/code/loot_structures/medbox.dm | 62 ++ .../code/loot_structures/military_case.dm | 47 ++ .../code/loot_structures/register.dm | 42 + .../epic_loot/code/loot_structures/safe.dm | 34 + .../epic_loot/code/loot_structures/toolbox.dm | 39 + .../code/loot_structures/wall_jackets.dm | 73 ++ .../epic_loot/code/mystery_box_additions.dm | 39 + .../epic_loot/code/random_spawners.dm | 769 ++++++++++++++++++ .../code/random_spawners_deathmatch.dm | 358 ++++++++ .../code/storage_containers/containers.dm | 325 ++++++++ modular_doppler/epic_loot/icons/epic_loot.dmi | Bin 0 -> 16364 bytes .../epic_loot/icons/loot_structures.dmi | Bin 0 -> 13171 bytes .../epic_loot/icons/storage_items.dmi | Bin 0 -> 4048 bytes .../epic_loot/sound/attributions.txt | 1 + modular_doppler/epic_loot/sound/cabinet.mp3 | Bin 0 -> 56832 bytes modular_doppler/epic_loot/sound/plastic.mp3 | Bin 0 -> 21504 bytes .../epic_loot/sound/wood_crate_1.mp3 | Bin 0 -> 12288 bytes .../epic_loot/sound/wood_crate_2.mp3 | Bin 0 -> 21504 bytes .../epic_loot/sound/wood_crate_3.mp3 | Bin 0 -> 26112 bytes tgstation.dme | 4 + 32 files changed, 3043 insertions(+) create mode 100644 modular_doppler/epic_loot/code/_basetype.dm create mode 100644 modular_doppler/epic_loot/code/loot_items/components.dm create mode 100644 modular_doppler/epic_loot/code/loot_items/electronics.dm create mode 100644 modular_doppler/epic_loot/code/loot_items/keycards.dm create mode 100644 modular_doppler/epic_loot/code/loot_items/medical.dm create mode 100644 modular_doppler/epic_loot/code/loot_items/valuables.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/ammo_box.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/computer_tower.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/files.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/grenade_box.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/gun_case.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/large_crate.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/medbox.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/military_case.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/register.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/safe.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/toolbox.dm create mode 100644 modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm create mode 100644 modular_doppler/epic_loot/code/mystery_box_additions.dm create mode 100644 modular_doppler/epic_loot/code/random_spawners.dm create mode 100644 modular_doppler/epic_loot/code/random_spawners_deathmatch.dm create mode 100644 modular_doppler/epic_loot/code/storage_containers/containers.dm create mode 100644 modular_doppler/epic_loot/icons/epic_loot.dmi create mode 100644 modular_doppler/epic_loot/icons/loot_structures.dmi create mode 100644 modular_doppler/epic_loot/icons/storage_items.dmi create mode 100644 modular_doppler/epic_loot/sound/attributions.txt create mode 100644 modular_doppler/epic_loot/sound/cabinet.mp3 create mode 100644 modular_doppler/epic_loot/sound/plastic.mp3 create mode 100644 modular_doppler/epic_loot/sound/wood_crate_1.mp3 create mode 100644 modular_doppler/epic_loot/sound/wood_crate_2.mp3 create mode 100644 modular_doppler/epic_loot/sound/wood_crate_3.mp3 diff --git a/modular_doppler/epic_loot/code/_basetype.dm b/modular_doppler/epic_loot/code/_basetype.dm new file mode 100644 index 0000000000000..060e9167fa4d6 --- /dev/null +++ b/modular_doppler/epic_loot/code/_basetype.dm @@ -0,0 +1,84 @@ +/obj/structure/maintenance_loot_structure + name = "abandoned crate" + icon = 'modular_lethal_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 at a later time?") + 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(7 MINUTES, 15 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_lethal_doppler/epic_loot/sound/containers/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_lethal_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 can probably sell this for some good money if you have no other use for it.") + . += span_engradio("Examine this closer to see what it can be used for.") + 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..a1485daa9ab43 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_items/components.dm @@ -0,0 +1,342 @@ +/datum/export/epic_loot_components + cost = PAYCHECK_COMMAND + unit_name = "components" + 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, + /obj/item/epic_loot/aramid, + /obj/item/epic_loot/cordura, + /obj/item/epic_loot/ripstop, + ) + +/datum/export/epic_loot_components_super + cost = PAYCHECK_COMMAND * 2 + unit_name = "valuable components" + 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, + /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 = "The fuze of an older grenade type that used to see common use around known space." + icon_state = "fuze" + inhand_icon_state = "pen" + drop_sound = 'sound/items/handling/component_drop.ogg' + pickup_sound = 'sound/items/handling/component_pickup.ogg' + +/obj/item/epic_loot/grenade_fuze/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 plasma explosive can be traded for 2 offensive impact grenades.") + . += span_notice("- 1 of these + 1 plasma explosive + 1 box of nails can be traded for 1 frag grenade.") + . += span_notice("- 1 of these + 1 water filter cartridge can be traded for 2 improvised explosives.") + + return . + + +// 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' + +/obj/item/epic_loot/water_filter/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 suppressor.") + . += span_notice("- 1 of these + 1 grenade fuze can be traded for 2 improvised explosives.") + + return . + +// Analog thermometer, how to tell temperature before gas analyzers were cool +/obj/item/epic_loot/thermometer + name = "analog thermometer" + desc = "A highly 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' + +/obj/item/epic_loot/thermometer/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 2 flashbangs.") + . += span_notice("- 1 of these + 1 box of nails can be traded for 2 stingbangs.") + + return . + +// 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 happens to be insanely rare in space." + 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 = SMALL_MATERIAL_AMOUNT*5,\ + /datum/material/cardboard = SHEET_MATERIAL_AMOUNT,) + +/obj/item/epic_loot/nail_box/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 analog thermometer can be traded for 2 stingbangs.") + . += span_notice("- 1 of these + 1 plasma explosive + 1 grenade fuze can be traded for 1 frag grenades.") + + return . + +// 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' + +/obj/item/epic_loot/cold_weld/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these + 1 thermal camera module + 1 signal amplifier can be traded for 1 motion detector.") + + return . + +// 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 = SMALL_MATERIAL_AMOUNT*8, \ + /datum/material/iron = SMALL_MATERIAL_AMOUNT*2, \ + /datum/material/silver = SMALL_MATERIAL_AMOUNT*1,) + +/obj/item/epic_loot/electric_motor/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 type II 'Kastrol' helmet.") + + return . + +// 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,) + +/obj/item/epic_loot/current_converter/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these + 1 signal amplifier can be traded for 1 pair of night vision goggles.") + + return . + +// 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' + +/obj/item/epic_loot/signal_amp/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these + 1 current converter can be traded for 1 pair of night vision goggles.") + . += span_notice("- 1 of these + 1 thermal camera module + 1 tube of cold weld can be traded for 1 motion detector") + + return . + +// 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' + +/obj/item/epic_loot/thermal_camera/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these + 1 signal amplifier + 1 tube of cold weld can be traded for 1 motion detector.") + + return . + +// 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) + +/obj/item/epic_loot/shuttle_gyro/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 implanted armblade.") + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 type II 'Muur' vest.") + + return . + +// 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,) + +/obj/item/epic_loot/phased_array/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 bowman headset.") + + return . + +// 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) + +/obj/item/epic_loot/shuttle_battery/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 energy sword.") + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 type II 'Muur' helmet.") + + return . + +// 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 polymer canister of advanced fuel conditioner, used to keep fuel burning vehicles and machines burning relatively clean." + 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' + +/obj/item/epic_loot/fuel_conditioner/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 frontier headset.") + + return . + +// Bullet and stab resistant fabric, use lots to make something stop bullets a bit better +/obj/item/epic_loot/aramid + name = "high-resistance fabric" + desc = "A yellow weaved fabric that has exceptional resistance to piercing and slashing, as well as a number of other common damage sources." + icon_state = "aramid" + w_class = WEIGHT_CLASS_NORMAL + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + +/obj/item/epic_loot/aramid/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 type I 'Kami' vest.") + . += span_notice("- 1 of these + 1 appendix can be traded for 1 type II 'Koranda' vest.") + + return . + +// You know they make your pouches and such out of this stuff? +/obj/item/epic_loot/cordura + name = "polymer weave fabric" + desc = "Common high-strength fabric used in the production of a large amount of equipment." + icon_state = "cordura" + w_class = WEIGHT_CLASS_NORMAL + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + +/obj/item/epic_loot/cordura/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these + 1 tear-resistant fabric can be traded for 1 type II 'Touvou' vest.") + + return . + +// It's like the one above but for different stuff +/obj/item/epic_loot/ripstop + name = "tear-resistant fabric" + desc = "A reinforced fabric made to be highly resistant to tearing, and to have a limited ability to repair itself." + icon_state = "ripstop" + w_class = WEIGHT_CLASS_NORMAL + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + +/obj/item/epic_loot/ripstop/examine_more(mob/user) + . = ..() + + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these + 1 polymer weave fabric can be traded for 1 type II 'Touvou' vest.") + + return . 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..6e48c9fc44e86 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_items/electronics.dm @@ -0,0 +1,204 @@ +/datum/export/epic_loot_electronics + cost = PAYCHECK_COMMAND + unit_name = "electronic components" + 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 = "valuable electronic components" + 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,) + +/obj/item/epic_loot/device_fan/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 zomushi pistol.") + . += span_notice("Equipment Trade Station:") + . += span_notice("- 3 of these can be traded for 1 telescopic shield.") + + return . + +// 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,) + +/obj/item/epic_loot/display/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 fukiya rifle.") + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 operative holster") + + return . + +// 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,) + +/obj/item/epic_loot/display_broken/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 2 of these can be traded for 1 seiba submachinegun.") + + return . + +// You think nvidia still makes this shit? Nah son we got the konjin preemo stuff here +/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,) + +/obj/item/epic_loot/graphics/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 sindano submachinegun.") + + return . + +// 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,) + +/obj/item/epic_loot/military_circuit/examine_more(mob/user) + . = ..() + + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 pocket medical kit.") + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 general-purpose circuit board can be traded for 1 renoster shotgun.") + + return . + +// 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,) + +/obj/item/epic_loot/civilian_circuit/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 military-grade circuit board can be traded for 1 renoster shotgun.") + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 pocket first aid kit.") + + return . + +// 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,) + +/obj/item/epic_loot/processor/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 1 sakhno-xhihao rifle.") + . += span_notice("Medical Trade Station:") + . += span_notice("- 3 of these can be traded for 1 premium robotic repair spray.") + + return . + +// 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' + +/obj/item/epic_loot/power_supply/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 2 of these can be traded for 1 fancy sabre.") + . += span_notice("- 1 of these + 1 hard disk reader can be traded for 1 bogseo submachinegun.") + + return . + +// 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' + +/obj/item/epic_loot/disk_drive/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 computer power supply can be traded for 1 bogseo submachinegun.") + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 combat stimulant hypospray.") + + return . diff --git a/modular_doppler/epic_loot/code/loot_items/keycards.dm b/modular_doppler/epic_loot/code/loot_items/keycards.dm new file mode 100644 index 0000000000000..57348041f1b25 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_items/keycards.dm @@ -0,0 +1,76 @@ +/datum/export/epic_loot_lost_keycards + cost = PAYCHECK_COMMAND * 2 + unit_name = "lost keycards" + export_types = list( + /obj/item/keycard/epic_loot/green, + /obj/item/keycard/epic_loot/teal, + /obj/item/keycard/epic_loot/blue, + /obj/item/keycard/epic_loot/ourple, + /obj/item/keycard/epic_loot/red, + /obj/item/keycard/epic_loot/orange, + /obj/item/keycard/epic_loot/yellow, + /obj/item/keycard/epic_loot/black, + ) + +/obj/item/keycard/epic_loot + name = "broken keycard" + desc = "You shouldn't have this." + icon = 'modular_lethal_doppler/epic_loot/icons/epic_loot.dmi' + icon_state = "keycard_basetype" + color = "#ffffff" + puzzle_id = "黄昏の" + drop_sound = 'sound/items/handling/disk_drop.ogg' + pickup_sound = 'sound/items/handling/disk_pickup.ogg' + +/obj/item/keycard/epic_loot/examine(mob/user) + . = ..() + . += span_engradio("You can probably sell this for some good money if you have no other use for it.") + return . + +/obj/item/keycard/epic_loot/green + name = "green keycard" + desc = "A standard keycard with a green trim." + icon_state = "keycard_green" + puzzle_id = "epic_loot_green" + +/obj/item/keycard/epic_loot/teal + name = "teal keycard" + desc = "A standard keycard with a teal trim." + icon_state = "keycard_teal" + puzzle_id = "epic_loot_teal" + +/obj/item/keycard/epic_loot/blue + name = "blue keycard" + desc = "A standard keycard with a blue trim." + icon_state = "keycard_blue" + puzzle_id = "epic_loot_blue" + +/obj/item/keycard/epic_loot/ourple + name = "purple keycard" + desc = "A standard keycard with a purple trim." + icon_state = "keycard_ourple" + puzzle_id = "epic_loot_purple" + +/obj/item/keycard/epic_loot/red + name = "red keycard" + desc = "A standard keycard with a red trim." + icon_state = "keycard_red" + puzzle_id = "epic_loot_red" + +/obj/item/keycard/epic_loot/orange + name = "orange keycard" + desc = "A standard keycard with an orange trim." + icon_state = "keycard_orange" + puzzle_id = "epic_loot_orange" + +/obj/item/keycard/epic_loot/yellow + name = "yellow keycard" + desc = "A standard keycard with a yellow trim." + icon_state = "keycard_yellow" + puzzle_id = "epic_loot_yellow" + +/obj/item/keycard/epic_loot/black + name = "black keycard" + desc = "A standard keycard with a black trim." + icon_state = "keycard_evil" + puzzle_id = "epic_loot_black" 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..5b32d4dc276ed --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_items/medical.dm @@ -0,0 +1,60 @@ +/datum/export/epic_loot_super_med_tools + cost = PAYCHECK_COMMAND * 5 + unit_name = "ancient medical tools" + 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) + +/obj/item/epic_loot/vein_finder/examine_more(mob/user) + . = ..() + + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 satchel medical kit.") + . += span_notice("- 1 of these + 1 medical eye-scope can be traded for 1 advanced satchel medical kit.") + + return . + +// 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,) + +/obj/item/epic_loot/eye_scope/examine_more(mob/user) + . = ..() + + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 first responder surgical kit.") + . += span_notice("- 1 of these + 1 medican vein locator can be traded for 1 advanced satchel medical kit.") + + return . 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..c014c262fd68c --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_items/valuables.dm @@ -0,0 +1,237 @@ +/datum/export/epic_loot_valuables + cost = PAYCHECK_COMMAND * 3 + unit_name = "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 = "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 press pass" + desc = "An old lanyard with an expired press 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 + +/obj/item/epic_loot/press_pass/examine_more(mob/user) + . = ..() + + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 frontier first aid kit.") + . += span_notice("- 1 of these can be traded for 1 premium robotic repair kit.") + . += span_notice("- 1 of these can be traded for 1 'Sector 9 Special' autoinjector.") + + return . + +// 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,) + +/obj/item/epic_loot/ssd/examine_more(mob/user) + . = ..() + + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 pair of binoculars.") + . += span_notice("- 1 of these can be traded for 1 assault belt.") + + return . + +// 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,) + +/obj/item/epic_loot/hdd/examine_more(mob/user) + . = ..() + + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 assault pack.") + + return . + +// 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' + +/obj/item/epic_loot/military_flash/examine_more(mob/user) + . = ..() + + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 tag case.") + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 autoinjector pouch.") + + return . + +// 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 + +/obj/item/epic_loot/diary/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 2 of these can be traded for 1 rengo precision rifle.") + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 keycard holder.") + + return . + +// 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' + +/obj/item/epic_loot/slim_diary/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these can be traded for 2 smoke grenades.") + . += span_notice("Armor Trade Station:") + . += span_notice("- 1 of these can be traded for 1 pair of sunglasses.") + + return . + +// 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/plastic = SHEET_MATERIAL_AMOUNT * 3, // for the. container? + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 5) // the part that explodes + +/obj/item/epic_loot/plasma_explosive/Initialize(mapload) + . = ..() + AddComponent(/datum/component/explodable, 0, 1, 3, 5, 5) + +/obj/item/epic_loot/plasma_explosive/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 grenade fuze can be traded for 2 offensive impact grenades.") + . += span_notice("- 1 of these + 1 grenade fuze + 1 box of nails can be traded for 2 defensive impact grenades") + + return . + +// 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 + +/obj/item/epic_loot/corpo_folder/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 intelligence folder can be traded for 1 fire axe.") + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 organizational pouch.") + + return . + +// 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 + +/obj/item/epic_loot/intel_folder/examine_more(mob/user) + . = ..() + + . += span_notice("Weapons Trade Station:") + . += span_notice("- 1 of these + 1 corporate data folder can be traded for 1 fire axe.") + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these can be traded for 1 security belt.") + + return . + +// 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) + +/obj/item/epic_loot/silver_chainlet/examine_more(mob/user) + . = ..() + + . += span_notice("Medical Trade Station:") + . += span_notice("- 1 of these can be traded for 1 civil defense medical kit.") + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these + 1 gold chainlet can be traded for 1 documents pouch.") + + return . + +// 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) + +/obj/item/epic_loot/gold_chainlet/examine_more(mob/user) + . = ..() + + . += span_notice("Equipment Trade Station:") + . += span_notice("- 1 of these + 1 silver chainlet can be traded for 1 documents pouch.") + . += span_notice("- 1 of these can be traded for 1 ammo pouch.") + + return . 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..49d8a8d8891a9 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm @@ -0,0 +1,32 @@ +/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_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + +/obj/structure/maintenance_loot_structure/ammo_box + name = "ammunition box" + desc = "A military-grade lockbox for secure storage of ammunition." + 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_ammunition = 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..01b94f55552c5 --- /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_lethal_doppler/epic_loot/sound/containers/plastic.mp3' + +/obj/structure/maintenance_loot_structure/computer_tower + name = "computer tower" + desc = "A relatively 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..76d4f5680e311 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/files.dm @@ -0,0 +1,33 @@ +/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_lethal_doppler/epic_loot/sound/containers/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/effect/spawner/random/epic_loot/random_keycard = 1, + ) + +/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..7761b098b9b8d --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm @@ -0,0 +1,32 @@ +/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_lethal_doppler/epic_loot/sound/containers/wood_crate_2.mp3' + +/obj/structure/maintenance_loot_structure/grenade_box + name = "grenade box" + desc = "A military-grade grenade box for secure storage of explosives." + 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_grenade_or_explosive = 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..61be7b6e1824f --- /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_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + +/obj/structure/maintenance_loot_structure/gun_box + name = "large gun case" + desc = "A military-grade gun case for secure storage of firearms." + 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_ammunition = 8, + /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, + /obj/effect/spawner/random/epic_loot/random_serious_arms = 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..c4d9a226c2566 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm @@ -0,0 +1,80 @@ +/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_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + +/obj/structure/maintenance_loot_structure/large_crate + name = "ration supply box" + 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 supply box" + 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_stack_item = 3, + /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 1, + /obj/effect/spawner/random/epic_loot/medical_tools = 3, + /obj/effect/spawner/random/epic_loot/medpens = 2, + /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1, + ) + +/obj/structure/maintenance_loot_structure/large_crate/medical/airdrop + icon_state = "supplydrop" + +/obj/structure/maintenance_loot_structure/large_crate/engineering + name = "engineering supply box" + 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_tools = 1, + /obj/effect/spawner/random/epic_loot/random_components = 1, + /obj/effect/spawner/random/epic_loot/random_computer_parts = 1, + ) + +/obj/structure/maintenance_loot_structure/large_crate/engineering/airdrop + icon_state = "supplydrop_yellow" + +/obj/structure/maintenance_loot_structure/large_crate/military + name = "military supply box" + 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_other_military_loot = 8, + /obj/effect/spawner/random/epic_loot/random_ammunition = 6, + /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, + /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, + ) + +/obj/structure/maintenance_loot_structure/large_crate/military/rare_loot + name = "military supply box" + 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_other_military_loot/rare_loot = 8, + /obj/effect/spawner/random/epic_loot/random_ammunition = 6, + /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, + /obj/effect/spawner/random/epic_loot/random_serious_arms = 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_lethal_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..201c24ffbf53f --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/medbox.dm @@ -0,0 +1,62 @@ +/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_lethal_doppler/epic_loot/sound/containers/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_stack_item = 2, + /obj/effect/spawner/random/epic_loot/medical_tools = 2, + /obj/effect/spawner/random/epic_loot/medpens = 1, + ) + +/obj/structure/maintenance_loot_structure/medbox/advanced_loot + loot_weighted_list = list( + /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 2, + /obj/effect/spawner/random/epic_loot/medical_tools = 2, + /obj/effect/spawner/random/epic_loot/medpens = 2, + /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1, + ) + loot_spawn_dice_string = "1d6" + +/obj/structure/maintenance_loot_structure/medbox/bleu + icon_state = "medbox_blue" + +/obj/structure/maintenance_loot_structure/medbox/advanced_loot/bleu + icon_state = "medbox_blue" + +/obj/structure/maintenance_loot_structure/medbox/red + icon_state = "medbox_red" + +/obj/structure/maintenance_loot_structure/medbox/advanced_loot/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() + +/obj/structure/maintenance_loot_structure/medbox/random/advanced_loot + loot_weighted_list = list( + /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 2, + /obj/effect/spawner/random/epic_loot/medical_tools = 2, + /obj/effect/spawner/random/epic_loot/medpens = 2, + /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1, + ) + loot_spawn_dice_string = "1d6" 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..6d96aebba1fc0 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/military_case.dm @@ -0,0 +1,47 @@ +/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_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + +/obj/structure/maintenance_loot_structure/military_case + name = "military storage box" + desc = "A military-grade storage chest for general use." + 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_other_military_loot = 8, + /obj/effect/spawner/random/epic_loot/random_ammunition = 6, + /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, + /obj/effect/spawner/random/epic_loot/random_serious_arms = 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() + +/obj/structure/maintenance_loot_structure/military_case/random/rare_loot + loot_weighted_list = list( + /obj/effect/spawner/random/epic_loot/random_other_military_loot/rare_loot = 8, + /obj/effect/spawner/random/epic_loot/random_ammunition = 6, + /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, + /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, + ) 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..ba6d51b7fbb34 --- /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_lethal_doppler/epic_loot/sound/containers/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..f21fa265a2407 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/safe.dm @@ -0,0 +1,34 @@ +/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_lethal_doppler/epic_loot/sound/containers/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 = 2, + /obj/effect/spawner/random/entertainment/money_small = 1, + /obj/effect/spawner/random/entertainment/money = 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..7e4a8d623dd65 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm @@ -0,0 +1,39 @@ +/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_lethal_doppler/epic_loot/sound/containers/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_tools = 2, + /obj/effect/spawner/random/epic_loot/random_components = 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..4573d8583d0d6 --- /dev/null +++ b/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm @@ -0,0 +1,73 @@ +/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 = "1d4-2" + loot_weighted_list = list( + /obj/effect/spawner/random/entertainment/money_small = 2, + /obj/effect/spawner/random/entertainment/money = 2, + /obj/effect/spawner/random/entertainment/cigarette_pack = 1, + /obj/effect/spawner/random/entertainment/cigarette = 1, + /obj/effect/spawner/random/entertainment/wallet_lighter = 2, + /obj/effect/spawner/random/epic_loot/pocket_sized_valuables = 2, + /obj/effect/spawner/random/epic_loot/random_keycard = 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/mystery_box_additions.dm b/modular_doppler/epic_loot/code/mystery_box_additions.dm new file mode 100644 index 0000000000000..672a14dcf8f38 --- /dev/null +++ b/modular_doppler/epic_loot/code/mystery_box_additions.dm @@ -0,0 +1,39 @@ +GLOBAL_LIST_INIT(lethal_deathmatch_guns, list( + /obj/effect/spawner/random/epic_loot/deathmatch_silly_arms, + /obj/effect/spawner/random/epic_loot/deathmatch_silly_arms_blue, + /obj/effect/spawner/random/epic_loot/deathmatch_serious_arms, + /obj/effect/spawner/random/epic_loot/deathmatch_serious_arms_blue, + /obj/effect/spawner/random/epic_loot/deathmatch_grenade_or_explosive, +)) + +GLOBAL_LIST_INIT(lethal_funny_mystery_box_items, list( + /obj/effect/spawner/random/epic_loot/deathmatch_armor, + /obj/effect/spawner/random/epic_loot/deathmatch_medkit, + /obj/effect/spawner/random/epic_loot/deathmatch_funny, +)) + +/obj/structure/mystery_box/guns/generate_valid_types() + valid_types = GLOB.lethal_deathmatch_guns + +/obj/structure/mystery_box/tdome/generate_valid_types() + valid_types = GLOB.lethal_deathmatch_guns + GLOB.lethal_funny_mystery_box_items + +/obj/structure/mystery_box/grant_weapon(mob/living/user) + new presented_item.selected_path(src) + for(var/obj/item/iterated_item in contents) + if(!isitem(iterated_item)) + continue + user.put_in_hands(iterated_item) + + if(isgun(iterated_item)) // handle pins + possibly extra ammo + var/obj/item/gun/instantiated_gun = iterated_item + instantiated_gun.unlock() + if(grant_extra_mag && istype(instantiated_gun, /obj/item/gun/ballistic)) + var/obj/item/gun/ballistic/instantiated_ballistic = instantiated_gun + if(!instantiated_ballistic.internal_magazine) + var/obj/item/ammo_box/magazine/extra_mag = new instantiated_ballistic.spawn_magazine_type(loc) + user.put_in_hands(extra_mag) + + user.visible_message(span_notice("[user] takes [iterated_item] from [src]."), span_notice("You take [iterated_item] from [src]."), vision_distance = COMBAT_MESSAGE_RANGE) + playsound(src, grant_sound, 70, FALSE, channel = current_sound_channel, falloff_exponent = 10) + close_box() diff --git a/modular_doppler/epic_loot/code/random_spawners.dm b/modular_doppler/epic_loot/code/random_spawners.dm new file mode 100644 index 0000000000000..75f555c8e7194 --- /dev/null +++ b/modular_doppler/epic_loot/code/random_spawners.dm @@ -0,0 +1,769 @@ +/obj/effect/spawner/random/epic_loot + name = "extraction loot spawner" + desc = "Gods please let there be nobody extract camping." + icon = 'modular_lethal_doppler/epic_loot/icons/epic_loot.dmi' + icon_state = null + +/obj/effect/spawner/random/epic_loot/chainlet + name = "random chainlet spawner" + desc = "Automagically transforms into a random chainlet made of valuable metals." + icon_state = "random_chain" + loot = list( + /obj/item/epic_loot/silver_chainlet = 2, + /obj/item/epic_loot/gold_chainlet = 1, + ) + +/obj/effect/spawner/random/epic_loot/pocket_sized_valuables + name = "random pocket sized valuables spawner" + desc = "Automagically transforms into a random valuable that would reasonably be in someone's coat pocket." + icon_state = "random_pocket_valuable" + loot = list( + /obj/effect/spawner/random/epic_loot/chainlet = 2, + /obj/item/epic_loot/press_pass = 2, + /obj/item/epic_loot/military_flash = 2, + /obj/item/epic_loot/slim_diary = 2, + /obj/effect/spawner/random/epic_loot/random_keycard = 1, + ) + +/obj/effect/spawner/random/epic_loot/medical_stack_item + name = "random medical item spawner" + desc = "Automagically transforms into a random medical stack item." + icon_state = "random_med_stack" + loot = list( + /obj/item/stack/medical/bruise_pack = 4, + /obj/item/stack/medical/gauze = 4, + /obj/item/stack/medical/gauze/sterilized = 3, + /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 = 4, + /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, + // Chemjaks + /obj/item/reagent_containers/cup/bottle/epinephrine = 2, + /obj/item/reagent_containers/cup/bottle/morphine = 1, + /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 = 1, + /obj/item/reagent_containers/cup/bottle/synaptizine = 1, + /obj/item/reagent_containers/cup/bottle/fentanyl = 1, + /obj/item/reagent_containers/cup/bottle/formaldehyde = 2, + /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 = 2, + /obj/item/reagent_containers/cup/bottle/atropine = 1, + /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, + // 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/effect/spawner/random/epic_loot/medical_stack_item_advanced + name = "random advanced medical item spawner" + desc = "Automagically transforms into a random advanced medical stack item." + icon_state = "random_med_stack_adv" + loot = list( + /obj/item/stack/medical/bruise_pack = 3, + /obj/item/stack/medical/gauze = 2, + /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 = 2, + /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, + // 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/syringe = 3, + // 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, + // Medkits + /obj/effect/spawner/random/epic_loot/medkit = 1, + ) + +/obj/effect/spawner/random/epic_loot/medical_tools + name = "random medical tools spawner" + desc = "Automagically transforms into a random medical tools of various sorts." + 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/hypospray/mkii = 2, + /obj/item/hypospray/mkii/deluxe = 1, + /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, + /obj/effect/spawner/random/epic_loot/medkit = 2, + ) + +/obj/effect/spawner/random/epic_loot/medkit + name = "random medkit spawner" + desc = "Automagically transforms into a random medkit of some sort." + icon_state = "random_medkit" + loot = list( + /obj/item/storage/medkit/civil_defense/stocked = 4, + /obj/item/storage/medkit/civil_defense/comfort/stocked = 4, + /obj/item/storage/medkit/frontier/stocked = 3, + /obj/item/storage/medkit/combat_surgeon/stocked = 3, + /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked = 2, + /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked = 2, + /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked/super = 1, + ) + +/obj/effect/spawner/random/epic_loot/medpens + name = "random autoinjectors spawner" + desc = "Automagically transforms into random autoinjectors of various types." + 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, + ) + +/obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled + name = "random combat autoinjectors spawner" + desc = "Automagically transforms into a random combat focused autoinjector." + 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, + ) + +/obj/effect/spawner/random/epic_loot/random_components + name = "random components spawner" + desc = "Automagically transforms into 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/aramid = 2, + /obj/item/epic_loot/cordura = 2, + /obj/item/epic_loot/ripstop = 2, + /obj/item/epic_loot/display = 1, + /obj/item/epic_loot/display_broken = 2, + /obj/item/epic_loot/civilian_circuit = 2, + ) + +/obj/effect/spawner/random/epic_loot/random_tools + name = "random tools spawner" + desc = "Automagically transforms into a tool of some sort." + 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, + // 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 = 2, + /obj/item/stock_parts/power_store/cell/crap = 3, + // Masks + /obj/item/clothing/mask/gas/sechailer = 2, + /obj/item/clothing/mask/gas = 3, + /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, + ) + +/obj/effect/spawner/random/epic_loot/random_computer_parts + name = "random computer parts spawner" + desc = "Automagically transforms into a part from a computer of some sort." + 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, + ) + +/obj/effect/spawner/random/epic_loot/random_documents + name = "random documents spawner" + desc = "Automagically transforms into some form of documents, valuable or not." + icon_state = "random_documents" + loot = list( + /obj/item/folder/white = 2, + /obj/item/folder/blue = 2, + /obj/item/folder/ancient_paperwork = 2, + /obj/item/epic_loot/intel_folder = 1, + /obj/item/epic_loot/corpo_folder = 1, + /obj/item/epic_loot/slim_diary = 1, + /obj/item/epic_loot/diary = 1, + /obj/item/computer_disk/maintenance = 2, + ) + +/obj/effect/spawner/random/epic_loot/random_strongbox_loot + name = "random strongbox loot spawner" + desc = "Automagically transforms into some kind of item that would be kept in a safe." + icon_state = "random_strongbox_loot" + loot = list( + /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/epic_loot/ssd = 1, + /obj/item/epic_loot/hdd = 1, + /obj/item/epic_loot/military_flash = 1, + /obj/effect/spawner/random/epic_loot/chainlet = 2, + /obj/item/computer_disk/maintenance = 2, + /obj/effect/spawner/random/epic_loot/random_keycard = 1, + ) + + +/obj/effect/spawner/random/epic_loot/random_grenade_or_explosive + name = "random grenade or explosive spawner" + desc = "Automagically transforms into some kind of explosive or grenade." + icon_state = "random_bomb" + loot = list( + /obj/item/grenade/syndieminibomb/concussion/impact = 2, + /obj/item/grenade/frag/impact = 2, + /obj/item/grenade/antigravity = 1, + /obj/item/grenade/barrier = 3, + /obj/item/grenade/c4 = 1, + /obj/item/grenade/firecracker = 2, + /obj/item/grenade/flashbang = 3, + /obj/item/grenade/frag = 2, + /obj/item/grenade/mirage = 3, + /obj/item/grenade/smokebomb = 3, + /obj/item/grenade/stingbang = 2, + /obj/item/grenade/iedcasing/spawned = 2, + /obj/item/grenade/syndieminibomb/concussion = 1, + /obj/item/grenade/clusterbuster/smoke = 1, + /obj/item/grenade/chem_grenade/teargas = 2, + /obj/item/epic_loot/plasma_explosive = 2, + /obj/item/epic_loot/grenade_fuze = 3, + /obj/item/storage/epic_loot_grenade_case = 2, + /obj/item/grenade/spawnergrenade/manhacks = 1, + ) + +/obj/effect/spawner/random/epic_loot/random_ammunition + name = "random ammunition spawner" + desc = "Automagically transforms into some kind of ammo for a weapon." + icon_state = "random_ammo" + loot = list( + // Ammo boxes + // .35 + /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled/tracer = 2, + /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled/superfrag = 2, + /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled/sabot = 2, + // .40 + /obj/item/ammo_box/magazine/ammo_stack/c40_sol/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/c40_sol/prefilled/hardcore = 2, + /obj/item/ammo_box/magazine/ammo_stack/c40_sol/prefilled/tracer = 2, + // .585 + /obj/item/ammo_box/magazine/ammo_stack/c585_trappiste/prefilled = 1, + /obj/item/ammo_box/magazine/ammo_stack/c585_trappiste/prefilled/hollowpoint = 1, + // .980 + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/aphe = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/thermobaric = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/shrapnel = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/ecm = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/flechette = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/phosphor = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/sabot = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/beacon = 1, + /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/smoke = 1, + // .310 + /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled = 1, + /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/tracer = 2, + /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/piercing = 2, + /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/kedown = 1, + // .27-54 + /obj/item/ammo_box/magazine/ammo_stack/c27_54cesarzowa/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/c27_54cesarzowa/prefilled/tracer = 2, + /obj/item/ammo_box/magazine/ammo_stack/c27_54cesarzowa/prefilled/ultrakill = 2, + // 12mm silenced + /obj/item/ammo_box/magazine/ammo_stack/c12chinmoku/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/c12chinmoku/prefilled/special = 1, + /obj/item/ammo_box/magazine/ammo_stack/c12chinmoku/prefilled/tracer = 2, + // 8mm mars + /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled/shockwave = 1, + /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled/piercing = 1, + // 6 gauge + /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled/longshot = 1, + /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled/slug = 2, + /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled/flash = 1, + // Magazines + /obj/item/ammo_box/magazine/c35sol_pistol = 2, + /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 1, + /obj/item/ammo_box/magazine/c40sol_rifle = 2, + /obj/item/ammo_box/magazine/c40sol_rifle/standard = 1, + /obj/item/ammo_box/magazine/c585trappiste_pistol = 2, + /obj/item/ammo_box/magazine/c980_grenade = 1, + /obj/item/ammo_box/magazine/c980_grenade/drum = 1, + /obj/item/ammo_box/magazine/lanca = 2, + /obj/item/ammo_box/magazine/miecz = 2, + /obj/item/ammo_box/magazine/recharge/plasma_battery = 2, + /obj/item/ammo_box/magazine/c12chinmoku = 2, + /obj/item/ammo_box/magazine/c12chinmoku/standard = 1, + /obj/item/ammo_box/magazine/c12nomi = 2, + /obj/item/ammo_box/magazine/c8marsian = 2, + /obj/item/ammo_box/magazine/karim = 1, + // Shotgun shells + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled = 2, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/flechette = 2, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/shrapnel = 2, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/ecm = 2, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/slug = 2, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/ap_slug = 2, + // Ammo boxes + /obj/item/storage/toolbox/ammobox/epic_loot = 2, + /obj/item/storage/toolbox/ammobox/epic_loot/magazine_box = 2, + ) + +/obj/effect/spawner/random/epic_loot/random_silly_arms + name = "random silly arms spawner" + desc = "Automagically transforms into a not-so-serious firearm." + icon_state = "random_common_gun" + loot = list( + /obj/item/gun/ballistic/automatic/pistol/sol = 3, + /obj/item/gun/ballistic/automatic/pistol/sol/evil = 3, + /obj/item/gun/ballistic/automatic/pistol/trappiste = 2, + /obj/item/gun/ballistic/revolver/sol = 3, + /obj/item/gun/ballistic/revolver/takbok = 2, + /obj/item/gun/ballistic/automatic/sol_smg = 2, + /obj/item/gun/energy/e_gun/mini = 2, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 2, + /obj/item/gun/ballistic/revolver/shotgun_revolver = 2, + /obj/item/gun/ballistic/automatic/miecz = 1, + /obj/item/gun/ballistic/automatic/seiba_smg = 2, + /obj/item/gun/ballistic/automatic/pistol/weevil = 2, + /obj/item/gun/energy/marksman_revolver = 1, + ) + +/obj/effect/spawner/random/epic_loot/random_serious_arms + name = "random serious arms spawner" + desc = "Automagically transforms into a super serious firearm." + icon_state = "random_rare_gun" + loot = list( + /obj/item/gun/ballistic/automatic/sol_rifle = 2, + /obj/item/gun/ballistic/automatic/sol_rifle/evil = 1, + /obj/item/gun/ballistic/automatic/sol_rifle/machinegun = 1, + /obj/item/gun/ballistic/automatic/sol_grenade_launcher = 2, + /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil = 1, + /obj/item/gun/ballistic/automatic/xhihao_smg = 2, + /obj/effect/spawner/random/sakhno = 3, + /obj/item/gun/ballistic/shotgun/riot/sol = 3, + /obj/item/gun/ballistic/shotgun/riot/sol/evil = 2, + /obj/item/gun/ballistic/rifle/osako = 2, + /obj/item/gun/ballistic/rifle/osako/scoped = 2, + /obj/item/gun/ballistic/automatic/karim = 1, + /obj/item/gun/energy/laser = 3, + /obj/item/gun/energy/laser/hellgun = 2, + /obj/item/gun/energy/tesla_cannon = 2, + /obj/item/gun/energy/e_gun = 2, + /obj/item/gun/ballistic/automatic/lanca = 1, + /obj/item/gun/ballistic/automatic/suppressed_rifle = 2, + /obj/item/gun/ballistic/automatic/suppressed_rifle/marksman = 2, + /obj/item/gun/ballistic/marsian_super_rifle = 3, + /obj/item/gun/ballistic/shotgun/ramu = 1, + ) + +/obj/effect/spawner/random/epic_loot/random_other_military_loot + name = "random military loot spawner" + 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/clothing/head/helmet/sf_peacekeeper = 3, + /obj/item/clothing/head/helmet/sf_peacekeeper/debranded = 3, + /obj/item/clothing/head/helmet/lethal_kulon_helmet = 1, + /obj/item/clothing/suit/armor/lethal_paper = 4, + /obj/item/clothing/suit/armor/sf_peacekeeper = 3, + /obj/item/clothing/suit/armor/sf_peacekeeper/debranded = 3, + /obj/item/clothing/suit/armor/lethal_koranda = 3, + /obj/item/clothing/suit/armor/lethal_kora_kulon = 1, + /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/aramid = 2, + /obj/item/epic_loot/cordura = 2, + /obj/item/epic_loot/ripstop = 2, + /obj/item/epic_loot/military_circuit = 3, + /obj/effect/spawner/random/epic_loot/medkit = 2, + /obj/effect/spawner/random/epic_loot/random_keycard = 1, + /obj/item/storage/toolbox/ammobox/epic_loot = 1, + /obj/item/storage/toolbox/ammobox/epic_loot/magazine_box = 1, + /obj/item/storage/epic_loot_grenade_case = 1, + ) + +/obj/effect/spawner/random/epic_loot/random_other_military_loot/rare_loot + name = "random rare military loot spawner" + 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/clothing/head/helmet/sf_peacekeeper = 3, + /obj/item/clothing/head/helmet/sf_peacekeeper/debranded = 3, + /obj/item/clothing/head/helmet/lethal_kulon_helmet = 2, + /obj/item/clothing/head/helmet/lethal_kulon_helmet/spawns_with_shield = 1, + /obj/item/clothing/head/helmet/sf_sacrificial = 1, + /obj/item/clothing/head/helmet/sf_sacrificial/spawns_with_shield = 1, + /obj/item/clothing/head/helmet/lethal_larp_helmet = 1, + /obj/item/clothing/suit/armor/lethal_paper = 4, + /obj/item/clothing/suit/armor/sf_peacekeeper = 3, + /obj/item/clothing/suit/armor/sf_peacekeeper/debranded = 3, + /obj/item/clothing/suit/armor/lethal_koranda = 3, + /obj/item/clothing/suit/armor/lethal_kora_kulon = 2, + /obj/item/clothing/suit/armor/lethal_kora_kulon/full_set = 1, + /obj/item/clothing/suit/armor/sf_sacrificial = 1, + /obj/item/clothing/suit/armor/lethal_slick = 1, + /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/aramid = 2, + /obj/item/epic_loot/cordura = 2, + /obj/item/epic_loot/ripstop = 2, + /obj/item/epic_loot/military_circuit = 3, + /obj/effect/spawner/random/epic_loot/medkit = 2, + /obj/effect/spawner/random/epic_loot/random_keycard = 1, + /obj/item/storage/toolbox/ammobox/epic_loot = 1, + /obj/item/storage/toolbox/ammobox/epic_loot/magazine_box = 1, + /obj/item/storage/epic_loot_grenade_case = 1, + ) + +/obj/effect/spawner/random/epic_loot/random_provisions + name = "random provisions spawner" + desc = "Automagically transforms into some kind of potentially edible meal." + 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/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/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/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, + ) + +/obj/effect/spawner/random/entertainment/money/one + spawn_loot_count = 1 + +/obj/effect/spawner/random/entertainment/money_small/one + spawn_loot_count = 1 + +/obj/effect/spawner/random/epic_loot/random_keycard + name = "random keycard spawner" + desc = "Automagically transforms into a random colored keycard." + icon_state = "keycard_random" + loot = list( + /obj/item/keycard/epic_loot/green = 2, + /obj/item/keycard/epic_loot/teal = 2, + /obj/item/keycard/epic_loot/blue = 2, + /obj/item/keycard/epic_loot/ourple = 2, + /obj/item/keycard/epic_loot/red = 2, + /obj/item/keycard/epic_loot/orange = 2, + /obj/item/keycard/epic_loot/yellow = 2, + /obj/item/keycard/epic_loot/black = 1, + ) + +/obj/effect/spawner/random/epic_loot/random_maint_loot_structure + name = "random maintenance loot structure spawner" + desc = "Automagically transforms into a random loot structure that spawns in maint." + icon = 'modular_lethal_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/medbox/random/advanced_loot, + /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, + ) + +// Overriding the tg and nova crate spawner to add epic loot to them +/obj/effect/spawner/random/structure/crate + loot = list( + /obj/effect/spawner/random/structure/crate_loot = 200, + /obj/effect/spawner/random/epic_loot/random_maint_loot_structure = 500, + /obj/structure/closet/crate/trashcart/filled = 50, + /obj/effect/spawner/random/trash/moisture_trap = 50, + /obj/effect/spawner/random/trash/hobo_squat = 20, + /obj/structure/closet/mini_fridge = 15, + /obj/effect/spawner/random/trash/mess = 10, + /obj/structure/closet/crate/decorations = 15, + ) + +// Trash piles suck a lot +/obj/structure/trash_pile/Initialize(mapload) + . = ..() + new /obj/effect/spawner/random/epic_loot/random_maint_loot_structure(get_turf(src)) + qdel(src) diff --git a/modular_doppler/epic_loot/code/random_spawners_deathmatch.dm b/modular_doppler/epic_loot/code/random_spawners_deathmatch.dm new file mode 100644 index 0000000000000..64bba31f3df30 --- /dev/null +++ b/modular_doppler/epic_loot/code/random_spawners_deathmatch.dm @@ -0,0 +1,358 @@ +/obj/effect/spawner/random/epic_loot/deathmatch_armor + name = "deathmatch armor spawner" + desc = "Automagically transforms into a set of armor." + icon_state = "armor_random" + loot = list( + /obj/effect/spawner/random/lethalstation_armor_set = 1, + /obj/effect/spawner/random/lethalstation_armor_set/peacekeeper = 1, + /obj/effect/spawner/random/lethalstation_armor_set/peacekeeper_fake = 1, + /obj/effect/spawner/random/lethalstation_armor_set/hardened = 1, + /obj/effect/spawner/random/lethalstation_armor_set/archangel = 1, + /obj/effect/spawner/random/lethalstation_armor_set/koranda = 1, + /obj/effect/spawner/random/lethalstation_armor_set/kuroba = 1, + /obj/effect/spawner/random/lethalstation_armor_set/kuroba_super = 1, + /obj/effect/spawner/random/lethalstation_armor_set/val = 1, + /obj/effect/spawner/random/lethalstation_armor_set/sushi = 1, + /obj/effect/spawner/random/lethalstation_armor_set/filtre_light = 1, + /obj/effect/spawner/random/lethalstation_armor_set/filtre_heavy = 1, + ) + +/obj/effect/spawner/random/lethalstation_armor_set + name = "armor set spawner" + icon_state = "lizard_boots" + spawn_all_loot = TRUE + loot = list( + /obj/item/clothing/suit/armor/lethal_paper, + /obj/item/clothing/head/helmet/sf_peacekeeper/debranded, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/peacekeeper + loot = list( + /obj/item/clothing/suit/armor/sf_peacekeeper, + /obj/item/clothing/head/helmet/sf_peacekeeper, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/peacekeeper_fake + loot = list( + /obj/item/clothing/suit/armor/sf_peacekeeper/debranded, + /obj/item/clothing/head/helmet/sf_peacekeeper/debranded, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/hardened + loot = list( + /obj/item/clothing/suit/armor/sf_hardened, + /obj/item/clothing/head/helmet/toggleable/sf_hardened, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/archangel + loot = list( + /obj/item/clothing/suit/armor/sf_hardened/emt, + /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/koranda + loot = list( + /obj/item/clothing/suit/armor/lethal_koranda, + /obj/item/clothing/head/helmet/sf_peacekeeper, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/kuroba + loot = list( + /obj/item/clothing/suit/armor/lethal_kora_kulon, + /obj/item/clothing/head/helmet/lethal_kulon_helmet, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/kuroba_super + loot = list( + /obj/item/clothing/suit/armor/lethal_kora_kulon/full_set, + /obj/item/clothing/head/helmet/lethal_kulon_helmet/spawns_with_shield, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/val + loot = list( + /obj/item/clothing/suit/armor/sf_sacrificial, + /obj/item/clothing/head/helmet/sf_sacrificial/spawns_with_shield, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/sushi + loot = list( + /obj/item/clothing/suit/armor/lethal_slick, + /obj/item/clothing/head/helmet/lethal_larp_helmet, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/filtre_light + loot = list( + /obj/item/clothing/suit/armor/lethal_filtre, + /obj/item/clothing/head/helmet/lethal_filtre_helmet, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/filtre_heavy + loot = list( + /obj/item/clothing/suit/armor/lethal_filtre/heavy, + /obj/item/clothing/head/helmet/lethal_filtre_helmet, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_silly_arms + name = "deathmatch silly arms spawner" + desc = "Automagically transforms into a not-so-serious firearm." + icon_state = "random_common_gun" + loot = list( + /obj/item/gun/ballistic/automatic/pistol/sol = 1, + /obj/item/gun/ballistic/automatic/pistol/sol/evil = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/signalis_real = 1, + /obj/item/gun/energy/e_gun/mini = 1, + /obj/item/gun/ballistic/automatic/pistol/weevil = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/kurwa = 1, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_silly_arms_blue + name = "deathmatch silly arms spawner (blue)" + desc = "Automagically transforms into a not-so-serious firearm." + icon_state = "random_common_gun_blue" + loot = list( + /obj/item/gun/ballistic/automatic/pistol/trappiste = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/takbok = 1, + /obj/item/gun/ballistic/automatic/sol_smg = 1, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 1, + /obj/item/gun/ballistic/automatic/miecz = 1, + /obj/item/gun/ballistic/automatic/seiba_smg = 1, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually + name = "deathmatch single weapon spawner" + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/signalis_real + loot = list( + /obj/item/gun/ballistic/revolver/sol, + /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/takbok + loot = list( + /obj/item/gun/ballistic/revolver/takbok, + /obj/item/ammo_box/magazine/ammo_stack/c585_trappiste/prefilled, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/kurwa + loot = list( + /obj/item/gun/ballistic/revolver/shotgun_revolver, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/flechette, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_serious_arms + name = "deathmatch serious arms spawner" + desc = "Automagically transforms into a super serious firearm." + icon_state = "random_rare_gun" + loot = list( + /obj/item/gun/ballistic/automatic/sol_grenade_launcher = 1, + /obj/item/gun/ballistic/automatic/xhihao_smg = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/osako = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/scoped_osako = 1, + /obj/item/gun/energy/laser = 1, + /obj/item/gun/energy/e_gun = 1, + /obj/item/gun/ballistic/automatic/lanca = 1, + /obj/item/gun/ballistic/automatic/suppressed_rifle = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/lesbian_gun = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/super_shotgun = 1, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/osako + loot = list( + /obj/item/gun/ballistic/rifle/osako, + /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/scoped_osako + loot = list( + /obj/item/gun/ballistic/rifle/osako/scoped, + /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/kedown, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun + loot = list( + /obj/item/gun/ballistic/shotgun/riot/sol/thunderdome, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/lesbian_gun + loot = list( + /obj/item/gun/ballistic/marsian_super_rifle, + /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/super_shotgun + loot = list( + /obj/item/gun/ballistic/shotgun/ramu, + /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_serious_arms_blue + name = "deathmatch serious arms spawner (blue)" + desc = "Automagically transforms into a super serious firearm." + icon_state = "random_rare_gun_blue" + loot = list( + /obj/item/gun/ballistic/automatic/sol_rifle = 1, + /obj/item/gun/ballistic/automatic/sol_rifle/evil = 1, + /obj/item/gun/ballistic/automatic/sol_rifle/machinegun = 1, + /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil = 1, + /obj/item/gun/ballistic/automatic/xhihao_smg = 1, + /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun_evil = 1, + /obj/item/gun/energy/laser/hellgun = 1, + /obj/item/gun/energy/tesla_cannon = 1, + /obj/item/gun/ballistic/automatic/suppressed_rifle/marksman = 1, + /obj/item/gun/ballistic/automatic/nomi_shotgun = 1, + /obj/item/gun/ballistic/automatic/karim = 1, + ) + +/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun_evil + loot = list( + /obj/item/gun/ballistic/shotgun/riot/sol/evil/thunderdome, + /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/flechette, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_grenade_or_explosive + name = "deathmatch grenade or explosive spawner" + desc = "Automagically transforms into some kind of explosive or grenade." + icon_state = "random_bomb" + loot = list( + /obj/item/grenade/syndieminibomb/concussion/impact = 1, + /obj/item/grenade/frag/impact = 1, + /obj/item/grenade/antigravity = 1, + /obj/item/grenade/barrier = 1, + /obj/item/grenade/flashbang = 1, + /obj/item/grenade/frag = 1, + /obj/item/grenade/frag/mega = 1, + /obj/item/grenade/mirage = 1, + /obj/item/grenade/smokebomb = 1, + /obj/item/grenade/stingbang = 1, + /obj/item/grenade/stingbang/mega = 1, + /obj/item/grenade/iedcasing/spawned = 1, + /obj/item/grenade/syndieminibomb/concussion = 1, + /obj/item/grenade/syndieminibomb = 1, + /obj/item/grenade/clusterbuster/random = 1, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_medkit + name = "deathmatch medkit spawner" + desc = "Automagically transforms into a random medkit of some sort." + icon_state = "random_medkit" + loot = list( + /obj/item/storage/pouch/cin_medkit/thunderdome = 1, + /obj/item/storage/pouch/medical/thunderdome = 1, + /obj/item/storage/pouch/medical/firstaid/thunderdome = 1, + /obj/item/storage/medkit/civil_defense/stocked = 1, + /obj/item/storage/medkit/civil_defense/thunderdome = 1, + /obj/item/storage/medkit/frontier/stocked = 1, + /obj/item/storage/medkit/combat_surgeon/stocked = 1, + /obj/item/storage/medkit/robotic_repair/stocked = 1, + /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/backpack/duffelbag/deforest_medkit/stocked/super = 1, + ) + +/obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item + name = "deathmatch advanced medical item spawner" + desc = "Automagically transforms into a random advanced medical stack item." + icon_state = "random_med_stack_adv" + loot = list( + /obj/item/stack/medical/bruise_pack = 1, + /obj/item/stack/medical/gauze = 1, + /obj/item/stack/medical/gauze/sterilized = 1, + /obj/item/stack/medical/suture = 1, + /obj/item/stack/medical/suture/coagulant = 1, + /obj/item/stack/medical/suture/bloody = 1, + /obj/item/stack/medical/suture/medicated = 1, + /obj/item/stack/medical/ointment = 1, + /obj/item/stack/medical/ointment/red_sun = 1, + /obj/item/stack/medical/mesh = 1, + /obj/item/stack/medical/mesh/bloody = 1, + /obj/item/stack/medical/mesh/advanced = 1, + /obj/item/stack/medical/aloe = 1, + /obj/item/stack/medical/bone_gel = 1, + /obj/item/stack/medical/bandage = 1, + /obj/item/stack/sticky_tape/surgical = 1, + /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 = 1, + /obj/item/stack/medical/wound_recovery/robofoam = 1, + /obj/item/stack/medical/wound_recovery/robofoam_super = 1, + /obj/item/reagent_containers/pill/robotic_patch/synth_repair = 1, + // Medigels + /obj/item/reagent_containers/medigel/libital = 1, + /obj/item/reagent_containers/medigel/aiuri = 1, + /obj/item/reagent_containers/medigel/synthflesh = 1, + // Pill bottles + /obj/item/storage/pill_bottle/iron = 1, + /obj/item/storage/pill_bottle/painkiller = 1, + /obj/item/storage/pill_bottle/probital = 1, + // Tools + /obj/item/bonesetter = 1, + /obj/item/cautery = 1, + /obj/item/healthanalyzer = 1, + /obj/item/healthanalyzer/simple = 1, + /obj/item/hemostat = 1, + // Pens + /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi = 1, + /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 = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin = 1, + /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol = 1, + ) + +/obj/item/storage/pouch/medical/firstaid/thunderdome + +/obj/item/storage/pouch/medical/firstaid/thunderdome/PopulateContents() + for(var/iterator in 1 to atom_storage.max_slots) + new /obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item(src) + +/obj/item/storage/pouch/medical/thunderdome + +/obj/item/storage/pouch/medical/thunderdome/PopulateContents() + for(var/iterator in 1 to atom_storage.max_slots) + new /obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item(src) + +/obj/item/storage/pouch/cin_medkit/thunderdome + +/obj/item/storage/pouch/cin_medkit/thunderdome/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + atom_storage.max_total_storage = 8 + +/obj/item/storage/pouch/cin_medkit/thunderdome/PopulateContents() + for(var/iterator in 1 to atom_storage.max_slots) + new /obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item(src) + +/obj/effect/spawner/random/epic_loot/deathmatch_funny + name = "deathmatch funnies spawner" + desc = "Automagically transforms into a funny." + icon_state = "random_tool" + loot = list( + /obj/item/melee/energy/sword = 1, + /obj/item/melee/energy/axe = 1, + /obj/item/fireaxe/boardingaxe = 1, + /obj/item/fireaxe = 1, + /obj/item/storage/belt/sabre = 1, + /obj/item/autosurgeon/syndicate/sandy = 1, + /obj/item/autosurgeon/syndicate/razorwire = 1, + /obj/item/shield/ballistic = 1, + /obj/item/shield/energy/advanced = 1, + /obj/item/shield/energy = 1, + /obj/item/melee/baseball_bat/ablative = 1, + /obj/item/melee/baseball_bat/homerun = 1, + /obj/item/clothing/gloves/tackler/combat = 1, + /obj/item/clothing/gloves/race = 1, + /obj/item/clothing/gloves/rapid = 1, + /obj/item/shield/riot/flash = 1, + /obj/item/knife/combat = 1, + ) 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..b7b897241ab92 --- /dev/null +++ b/modular_doppler/epic_loot/code/storage_containers/containers.dm @@ -0,0 +1,325 @@ +/obj/item/storage/epic_loot_tag_case + name = "tag case" + desc = "A semi-rigid case for holding captured id tags, which may be useful!" + icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' + icon_state = "tag_case" + 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_tag_case + slot_flags = ITEM_SLOT_POCKETS + w_class = WEIGHT_CLASS_NORMAL + +/datum/storage/maintenance_loot_structure/epic_loot_tag_case + max_slots = 9 + max_specific_storage = WEIGHT_CLASS_NORMAL + max_total_storage = WEIGHT_CLASS_NORMAL * 9 + opening_sound = 'sound/items/zip/un_zip.ogg' + +/datum/storage/maintenance_loot_structure/epic_loot_tag_case/New() + . = ..() + + can_hold = typecacheof(list( + /obj/item/card, + )) + +/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_lethal_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_lethal_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/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_lethal_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_card_holder + name = "keycard holder" + desc = "A metal clip for holding your pile of extremely useful colored keycards together." + icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' + icon_state = "card_holder" + 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_keycards + w_class = WEIGHT_CLASS_SMALL + +/datum/storage/maintenance_loot_structure/epic_loot_keycards + 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 = 'modular_lethal_doppler/epic_loot/sound/containers/plastic.mp3' + +/datum/storage/maintenance_loot_structure/epic_loot_keycards/New() + . = ..() + + can_hold = typecacheof(list( + /obj/item/keycard, + )) + +/obj/item/storage/toolbox/ammobox/epic_loot + name = "ammo box" + desc = "A box for holding ammunition, magazines, or worse." + icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' + icon_state = "ammo" + inhand_icon_state = "toolbox_syndi" + material_flags = NONE + +/obj/item/storage/toolbox/ammobox/epic_loot/magazine_box + name = "magazine box" + desc = "A box for holding large numbers of spare magazines, though nothing is stopping you from putting bullets in there too..." + icon_state = "magazine" + inhand_icon_state = "toolbox_syndi" + +/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_lethal_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_grenade_case + name = "explosives case" + desc = "A thick-walled case for neatly storing away a collection of grenades. Keep away from fire." + icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' + icon_state = "explosives" + 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_grenade_box + w_class = WEIGHT_CLASS_BULKY + +/datum/storage/maintenance_loot_structure/epic_loot_grenade_box + max_slots = 8 + max_specific_storage = WEIGHT_CLASS_NORMAL + max_total_storage = WEIGHT_CLASS_NORMAL * 8 + screen_max_columns = 4 + numerical_stacking = FALSE + opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + +/datum/storage/maintenance_loot_structure/epic_loot_grenade_box/New() + . = ..() + + can_hold = typecacheof(list( + /obj/item/grenade, + /obj/item/epic_loot/plasma_explosive, + /obj/item/epic_loot/grenade_fuze, + )) + +/obj/item/storage/epic_loot_money_case + name = "money case" + desc = "A heavy duty case for the transportation of (bribe) money." + icon = 'modular_lethal_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_lethal_doppler/epic_loot/sound/containers/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_lethal_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_lethal_doppler/epic_loot/sound/containers/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/icons/epic_loot.dmi b/modular_doppler/epic_loot/icons/epic_loot.dmi new file mode 100644 index 0000000000000000000000000000000000000000..45258d4e6a9c5a0f2166dfabe7ff760affbf1b54 GIT binary patch literal 16364 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 CMK8wy literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..05213d941413bb462fb53eaf5f622cd4f605d400 GIT binary patch literal 13171 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 M6T`=~8g`NY2T^f6?EnA( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0358448001cb66d98af943418298b0aed545b8f4 GIT binary patch literal 4048 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

UCDF?b|=z6>ytWD56Bp!Ajs!6lhVy?{gG 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 iTr()$ii>7CyT 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 literal 0 HcmV?d00001 diff --git a/modular_doppler/epic_loot/sound/plastic.mp3 b/modular_doppler/epic_loot/sound/plastic.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..469ff97a2fdde39922374591bbcfba4852218df3 GIT binary patch literal 21504 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 U6pQ@N^Z$SSRR8ym|8q0&AIwo~S^xk5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..01fa391d6ccccb068aeb66ee0b4f93e1cb9246b5 GIT binary patch literal 21504 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 z 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 ChQJa4 literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 23f7189562ba6..30b0a667e2170 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6644,6 +6644,10 @@ #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\mystery_box_additions.dm" +#include "modular_doppler\epic_loot\code\random_spawners.dm" +#include "modular_doppler\epic_loot\code\random_spawners_deathmatch.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" From 81939e763e82281da2f3b6babace87198ce2b856 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Fri, 29 Nov 2024 23:01:39 -0600 Subject: [PATCH 2/9] ok --- code/__DEFINES/~doppler_defines/traits/declarations.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/~doppler_defines/traits/declarations.dm b/code/__DEFINES/~doppler_defines/traits/declarations.dm index 391336f06072b..bc7cf5f9b9340 100644 --- a/code/__DEFINES/~doppler_defines/traits/declarations.dm +++ b/code/__DEFINES/~doppler_defines/traits/declarations.dm @@ -1,3 +1,3 @@ -/// 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" + From 858995504ea66d143d2cdc356a82de27c237e954 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Fri, 29 Nov 2024 23:02:11 -0600 Subject: [PATCH 3/9] real --- code/__DEFINES/~doppler_defines/traits/declarations.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/__DEFINES/~doppler_defines/traits/declarations.dm b/code/__DEFINES/~doppler_defines/traits/declarations.dm index bc7cf5f9b9340..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" - From 3205f13b1d5de02366af421e8eba39f78b456fbb Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Sat, 30 Nov 2024 02:55:40 -0600 Subject: [PATCH 4/9] head, eyes --- modular_doppler/epic_loot/code/_basetype.dm | 10 +- .../epic_loot/code/loot_items/components.dm | 254 ++----- .../epic_loot/code/loot_items/electronics.dm | 157 ++--- .../epic_loot/code/loot_items/keycards.dm | 76 -- .../epic_loot/code/loot_items/medical.dm | 34 +- .../epic_loot/code/loot_items/valuables.dm | 156 ++--- .../code/loot_structures/ammo_box.dm | 10 +- .../code/loot_structures/computer_tower.dm | 4 +- .../epic_loot/code/loot_structures/files.dm | 3 +- .../code/loot_structures/grenade_box.dm | 10 +- .../code/loot_structures/gun_case.dm | 12 +- .../code/loot_structures/large_crate.dm | 41 +- .../epic_loot/code/loot_structures/medbox.dm | 30 +- .../code/loot_structures/military_case.dm | 21 +- .../code/loot_structures/register.dm | 2 +- .../epic_loot/code/loot_structures/safe.dm | 6 +- .../epic_loot/code/loot_structures/toolbox.dm | 5 +- .../code/loot_structures/wall_jackets.dm | 10 +- .../epic_loot/code/mystery_box_additions.dm | 39 -- .../code/random_spawners_deathmatch.dm | 358 ---------- ...om_spawners.dm => random_spawners_real.dm} | 663 ++++++++---------- .../code/storage_containers/containers.dm | 111 +-- modular_doppler/epic_loot/icons/epic_loot.dmi | Bin 16364 -> 11994 bytes .../epic_loot/icons/loot_structures.dmi | Bin 13171 -> 11801 bytes .../epic_loot/icons/storage_items.dmi | Bin 4048 -> 2783 bytes tgstation.dme | 21 +- 26 files changed, 529 insertions(+), 1504 deletions(-) delete mode 100644 modular_doppler/epic_loot/code/loot_items/keycards.dm delete mode 100644 modular_doppler/epic_loot/code/mystery_box_additions.dm delete mode 100644 modular_doppler/epic_loot/code/random_spawners_deathmatch.dm rename modular_doppler/epic_loot/code/{random_spawners.dm => random_spawners_real.dm} (53%) diff --git a/modular_doppler/epic_loot/code/_basetype.dm b/modular_doppler/epic_loot/code/_basetype.dm index 060e9167fa4d6..ae29b44ee8153 100644 --- a/modular_doppler/epic_loot/code/_basetype.dm +++ b/modular_doppler/epic_loot/code/_basetype.dm @@ -1,6 +1,6 @@ /obj/structure/maintenance_loot_structure name = "abandoned crate" - icon = 'modular_lethal_doppler/epic_loot/icons/loot_structures.dmi' + icon = 'modular_doppler/epic_loot/icons/loot_structures.dmi' density = TRUE anchored = TRUE layer = BELOW_OBJ_LAYER @@ -24,7 +24,7 @@ /obj/structure/maintenance_loot_structure/examine(mob/user) . = ..() - . += span_engradio("It might have other things you're looking for at a later time?") + . += 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 @@ -36,7 +36,7 @@ /// 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(7 MINUTES, 15 MINUTES) + var/refill_check_time = rand(15 MINUTES, 30 MINUTES) spawn_loot() addtimer(CALLBACK(src, PROC_REF(make_contents)), refill_check_time) @@ -59,7 +59,7 @@ rustle_sound = FALSE screen_max_columns = 3 /// What sound this makes when people open it's storage - var/opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/plastic.mp3' + var/opening_sound = 'modular_doppler/epic_loot/sound/containers/plastic.mp3' /datum/storage/maintenance_loot_structure/open_storage(mob/to_show) . = ..() @@ -71,7 +71,7 @@ /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_lethal_doppler/epic_loot/icons/epic_loot.dmi' + 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" diff --git a/modular_doppler/epic_loot/code/loot_items/components.dm b/modular_doppler/epic_loot/code/loot_items/components.dm index a1485daa9ab43..116507d6923e8 100644 --- a/modular_doppler/epic_loot/code/loot_items/components.dm +++ b/modular_doppler/epic_loot/code/loot_items/components.dm @@ -1,25 +1,28 @@ /datum/export/epic_loot_components cost = PAYCHECK_COMMAND - unit_name = "components" + 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, - /obj/item/epic_loot/aramid, - /obj/item/epic_loot/cordura, - /obj/item/epic_loot/ripstop, ) /datum/export/epic_loot_components_super cost = PAYCHECK_COMMAND * 2 - unit_name = "valuable components" + 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, @@ -29,22 +32,15 @@ // 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 = "The fuze of an older grenade type that used to see common use around known space." + 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' - -/obj/item/epic_loot/grenade_fuze/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 plasma explosive can be traded for 2 offensive impact grenades.") - . += span_notice("- 1 of these + 1 plasma explosive + 1 box of nails can be traded for 1 frag grenade.") - . += span_notice("- 1 of these + 1 water filter cartridge can be traded for 2 improvised explosives.") - - return . - + 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 @@ -54,53 +50,36 @@ inhand_icon_state = "miniFE" drop_sound = 'sound/items/handling/tools/weldingtool_drop.ogg' pickup_sound = 'sound/items/handling/tools/weldingtool_pickup.ogg' - -/obj/item/epic_loot/water_filter/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 suppressor.") - . += span_notice("- 1 of these + 1 grenade fuze can be traded for 2 improvised explosives.") - - return . + 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 = "A highly outdated, and likely broken, 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' - -/obj/item/epic_loot/thermometer/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 2 flashbangs.") - . += span_notice("- 1 of these + 1 box of nails can be traded for 2 stingbangs.") - - return . + 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 happens to be insanely rare in space." + 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 = SMALL_MATERIAL_AMOUNT*5,\ - /datum/material/cardboard = SHEET_MATERIAL_AMOUNT,) - -/obj/item/epic_loot/nail_box/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 analog thermometer can be traded for 2 stingbangs.") - . += span_notice("- 1 of these + 1 plasma explosive + 1 grenade fuze can be traded for 1 frag grenades.") - - return . + 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 @@ -110,14 +89,9 @@ inhand_icon_state = "razor" drop_sound = 'sound/items/handling/component_drop.ogg' pickup_sound = 'sound/items/handling/component_pickup.ogg' - -/obj/item/epic_loot/cold_weld/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these + 1 thermal camera module + 1 signal amplifier can be traded for 1 motion detector.") - - return . + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) // An electronic motor /obj/item/epic_loot/electric_motor @@ -128,17 +102,11 @@ 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 = SMALL_MATERIAL_AMOUNT*8, \ - /datum/material/iron = SMALL_MATERIAL_AMOUNT*2, \ - /datum/material/silver = SMALL_MATERIAL_AMOUNT*1,) - -/obj/item/epic_loot/electric_motor/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 type II 'Kastrol' helmet.") - - return . + 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 @@ -149,17 +117,11 @@ 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,) - -/obj/item/epic_loot/current_converter/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these + 1 signal amplifier can be traded for 1 pair of night vision goggles.") - - return . + 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 @@ -168,15 +130,11 @@ icon_state = "signal_amp" drop_sound = 'sound/items/handling/component_drop.ogg' pickup_sound = 'sound/items/handling/component_pickup.ogg' - -/obj/item/epic_loot/signal_amp/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these + 1 current converter can be traded for 1 pair of night vision goggles.") - . += span_notice("- 1 of these + 1 thermal camera module + 1 tube of cold weld can be traded for 1 motion detector") - - return . + 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 @@ -185,14 +143,11 @@ icon_state = "thermal" drop_sound = 'sound/items/handling/component_drop.ogg' pickup_sound = 'sound/items/handling/component_pickup.ogg' - -/obj/item/epic_loot/thermal_camera/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these + 1 signal amplifier + 1 tube of cold weld can be traded for 1 motion detector.") - - return . + 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 @@ -208,22 +163,12 @@ /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) -/obj/item/epic_loot/shuttle_gyro/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 implanted armblade.") - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 type II 'Muur' vest.") - - return . - // 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" @@ -233,17 +178,11 @@ 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,) - -/obj/item/epic_loot/phased_array/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 bowman headset.") - - return . + 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 @@ -254,89 +193,22 @@ 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,) + 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) -/obj/item/epic_loot/shuttle_battery/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 energy sword.") - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 type II 'Muur' helmet.") - - return . - // 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 polymer canister of advanced fuel conditioner, used to keep fuel burning vehicles and machines burning relatively clean." + 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' - -/obj/item/epic_loot/fuel_conditioner/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 frontier headset.") - - return . - -// Bullet and stab resistant fabric, use lots to make something stop bullets a bit better -/obj/item/epic_loot/aramid - name = "high-resistance fabric" - desc = "A yellow weaved fabric that has exceptional resistance to piercing and slashing, as well as a number of other common damage sources." - icon_state = "aramid" - w_class = WEIGHT_CLASS_NORMAL - drop_sound = 'sound/items/handling/cloth_drop.ogg' - pickup_sound = 'sound/items/handling/cloth_pickup.ogg' - -/obj/item/epic_loot/aramid/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 type I 'Kami' vest.") - . += span_notice("- 1 of these + 1 appendix can be traded for 1 type II 'Koranda' vest.") - - return . - -// You know they make your pouches and such out of this stuff? -/obj/item/epic_loot/cordura - name = "polymer weave fabric" - desc = "Common high-strength fabric used in the production of a large amount of equipment." - icon_state = "cordura" - w_class = WEIGHT_CLASS_NORMAL - drop_sound = 'sound/items/handling/cloth_drop.ogg' - pickup_sound = 'sound/items/handling/cloth_pickup.ogg' - -/obj/item/epic_loot/cordura/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these + 1 tear-resistant fabric can be traded for 1 type II 'Touvou' vest.") - - return . - -// It's like the one above but for different stuff -/obj/item/epic_loot/ripstop - name = "tear-resistant fabric" - desc = "A reinforced fabric made to be highly resistant to tearing, and to have a limited ability to repair itself." - icon_state = "ripstop" - w_class = WEIGHT_CLASS_NORMAL - drop_sound = 'sound/items/handling/cloth_drop.ogg' - pickup_sound = 'sound/items/handling/cloth_pickup.ogg' - -/obj/item/epic_loot/ripstop/examine_more(mob/user) - . = ..() - - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these + 1 polymer weave fabric can be traded for 1 type II 'Touvou' vest.") - - return . diff --git a/modular_doppler/epic_loot/code/loot_items/electronics.dm b/modular_doppler/epic_loot/code/loot_items/electronics.dm index 6e48c9fc44e86..5719a1ed842e6 100644 --- a/modular_doppler/epic_loot/code/loot_items/electronics.dm +++ b/modular_doppler/epic_loot/code/loot_items/electronics.dm @@ -1,6 +1,6 @@ /datum/export/epic_loot_electronics cost = PAYCHECK_COMMAND - unit_name = "electronic components" + unit_name = "electronic salvage" export_types = list( /obj/item/epic_loot/device_fan, /obj/item/epic_loot/display_broken, @@ -11,7 +11,7 @@ /datum/export/epic_loot_electronics_super cost = PAYCHECK_COMMAND * 2 - unit_name = "valuable electronic components" + unit_name = "high value electronic salvage" export_types = list( /obj/item/epic_loot/display, /obj/item/epic_loot/graphics, @@ -26,18 +26,10 @@ 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,) - -/obj/item/epic_loot/device_fan/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 zomushi pistol.") - . += span_notice("Equipment Trade Station:") - . += span_notice("- 3 of these can be traded for 1 telescopic shield.") - - return . + 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 @@ -47,19 +39,11 @@ 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,) - -/obj/item/epic_loot/display/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 fukiya rifle.") - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 operative holster") - - return . + 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 @@ -69,19 +53,13 @@ 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,) - -/obj/item/epic_loot/display_broken/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 2 of these can be traded for 1 seiba submachinegun.") - - return . + custom_materials = list( + /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/gold = SMALL_MATERIAL_AMOUNT, + ) -// You think nvidia still makes this shit? Nah son we got the konjin preemo stuff here +// 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." @@ -89,17 +67,11 @@ 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,) - -/obj/item/epic_loot/graphics/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 sindano submachinegun.") - - return . + 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 @@ -108,20 +80,12 @@ 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,) - -/obj/item/epic_loot/military_circuit/examine_more(mob/user) - . = ..() - - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 pocket medical kit.") - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 general-purpose circuit board can be traded for 1 renoster shotgun.") - - return . + 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 @@ -130,19 +94,11 @@ 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,) - -/obj/item/epic_loot/civilian_circuit/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 military-grade circuit board can be traded for 1 renoster shotgun.") - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 pocket first aid kit.") - - return . + 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 @@ -152,19 +108,11 @@ 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,) - -/obj/item/epic_loot/processor/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 1 sakhno-xhihao rifle.") - . += span_notice("Medical Trade Station:") - . += span_notice("- 3 of these can be traded for 1 premium robotic repair spray.") - - return . + 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 @@ -174,15 +122,11 @@ w_class = WEIGHT_CLASS_NORMAL drop_sound = 'sound/items/handling/ammobox_drop.ogg' pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' - -/obj/item/epic_loot/power_supply/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 2 of these can be traded for 1 fancy sabre.") - . += span_notice("- 1 of these + 1 hard disk reader can be traded for 1 bogseo submachinegun.") - - return . + 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 @@ -192,13 +136,8 @@ w_class = WEIGHT_CLASS_NORMAL drop_sound = 'sound/items/handling/ammobox_drop.ogg' pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' - -/obj/item/epic_loot/disk_drive/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 computer power supply can be traded for 1 bogseo submachinegun.") - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 combat stimulant hypospray.") - - return . + 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/keycards.dm b/modular_doppler/epic_loot/code/loot_items/keycards.dm deleted file mode 100644 index 57348041f1b25..0000000000000 --- a/modular_doppler/epic_loot/code/loot_items/keycards.dm +++ /dev/null @@ -1,76 +0,0 @@ -/datum/export/epic_loot_lost_keycards - cost = PAYCHECK_COMMAND * 2 - unit_name = "lost keycards" - export_types = list( - /obj/item/keycard/epic_loot/green, - /obj/item/keycard/epic_loot/teal, - /obj/item/keycard/epic_loot/blue, - /obj/item/keycard/epic_loot/ourple, - /obj/item/keycard/epic_loot/red, - /obj/item/keycard/epic_loot/orange, - /obj/item/keycard/epic_loot/yellow, - /obj/item/keycard/epic_loot/black, - ) - -/obj/item/keycard/epic_loot - name = "broken keycard" - desc = "You shouldn't have this." - icon = 'modular_lethal_doppler/epic_loot/icons/epic_loot.dmi' - icon_state = "keycard_basetype" - color = "#ffffff" - puzzle_id = "黄昏の" - drop_sound = 'sound/items/handling/disk_drop.ogg' - pickup_sound = 'sound/items/handling/disk_pickup.ogg' - -/obj/item/keycard/epic_loot/examine(mob/user) - . = ..() - . += span_engradio("You can probably sell this for some good money if you have no other use for it.") - return . - -/obj/item/keycard/epic_loot/green - name = "green keycard" - desc = "A standard keycard with a green trim." - icon_state = "keycard_green" - puzzle_id = "epic_loot_green" - -/obj/item/keycard/epic_loot/teal - name = "teal keycard" - desc = "A standard keycard with a teal trim." - icon_state = "keycard_teal" - puzzle_id = "epic_loot_teal" - -/obj/item/keycard/epic_loot/blue - name = "blue keycard" - desc = "A standard keycard with a blue trim." - icon_state = "keycard_blue" - puzzle_id = "epic_loot_blue" - -/obj/item/keycard/epic_loot/ourple - name = "purple keycard" - desc = "A standard keycard with a purple trim." - icon_state = "keycard_ourple" - puzzle_id = "epic_loot_purple" - -/obj/item/keycard/epic_loot/red - name = "red keycard" - desc = "A standard keycard with a red trim." - icon_state = "keycard_red" - puzzle_id = "epic_loot_red" - -/obj/item/keycard/epic_loot/orange - name = "orange keycard" - desc = "A standard keycard with an orange trim." - icon_state = "keycard_orange" - puzzle_id = "epic_loot_orange" - -/obj/item/keycard/epic_loot/yellow - name = "yellow keycard" - desc = "A standard keycard with a yellow trim." - icon_state = "keycard_yellow" - puzzle_id = "epic_loot_yellow" - -/obj/item/keycard/epic_loot/black - name = "black keycard" - desc = "A standard keycard with a black trim." - icon_state = "keycard_evil" - puzzle_id = "epic_loot_black" diff --git a/modular_doppler/epic_loot/code/loot_items/medical.dm b/modular_doppler/epic_loot/code/loot_items/medical.dm index 5b32d4dc276ed..d645cc4160f0a 100644 --- a/modular_doppler/epic_loot/code/loot_items/medical.dm +++ b/modular_doppler/epic_loot/code/loot_items/medical.dm @@ -1,6 +1,6 @@ /datum/export/epic_loot_super_med_tools cost = PAYCHECK_COMMAND * 5 - unit_name = "ancient medical tools" + unit_name = "high value medical salvage" export_types = list( /obj/item/epic_loot/vein_finder, /obj/item/epic_loot/eye_scope, @@ -14,9 +14,11 @@ 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,) + 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) . = ..() @@ -30,15 +32,6 @@ ) new /obj/effect/temp_visual/medical_holosign(get_turf(target), user) -/obj/item/epic_loot/vein_finder/examine_more(mob/user) - . = ..() - - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 satchel medical kit.") - . += span_notice("- 1 of these + 1 medical eye-scope can be traded for 1 advanced satchel medical kit.") - - return . - // 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" @@ -47,14 +40,7 @@ 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,) - -/obj/item/epic_loot/eye_scope/examine_more(mob/user) - . = ..() - - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 first responder surgical kit.") - . += span_notice("- 1 of these + 1 medican vein locator can be traded for 1 advanced satchel medical kit.") - - return . + 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 index c014c262fd68c..fb209e9a6485e 100644 --- a/modular_doppler/epic_loot/code/loot_items/valuables.dm +++ b/modular_doppler/epic_loot/code/loot_items/valuables.dm @@ -1,6 +1,6 @@ /datum/export/epic_loot_valuables cost = PAYCHECK_COMMAND * 3 - unit_name = "valuables" + unit_name = "recovered valuables" export_types = list( /obj/item/epic_loot/press_pass, /obj/item/epic_loot/hdd, @@ -11,7 +11,7 @@ /datum/export/epic_loot_valuables_super cost = PAYCHECK_COMMAND * 4 - unit_name = "high valuables" + unit_name = "recovered high valuables" export_types = list( /obj/item/epic_loot/ssd, /obj/item/epic_loot/military_flash, @@ -23,22 +23,15 @@ // 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 press pass" - desc = "An old lanyard with an expired press 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." + 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 - -/obj/item/epic_loot/press_pass/examine_more(mob/user) - . = ..() - - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 frontier first aid kit.") - . += span_notice("- 1 of these can be traded for 1 premium robotic repair kit.") - . += span_notice("- 1 of these can be traded for 1 'Sector 9 Special' autoinjector.") - - return . + custom_materials = list( + /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8, + ) // A computer SSD /obj/item/epic_loot/ssd @@ -48,17 +41,10 @@ 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,) - -/obj/item/epic_loot/ssd/examine_more(mob/user) - . = ..() - - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 pair of binoculars.") - . += span_notice("- 1 of these can be traded for 1 assault belt.") - - return . + 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 @@ -69,16 +55,10 @@ 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,) - -/obj/item/epic_loot/hdd/examine_more(mob/user) - . = ..() - - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 assault pack.") - - return . + 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 @@ -88,16 +68,10 @@ inhand_icon_state = "razor" drop_sound = 'sound/items/handling/disk_drop.ogg' pickup_sound = 'sound/items/handling/disk_pickup.ogg' - -/obj/item/epic_loot/military_flash/examine_more(mob/user) - . = ..() - - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 tag case.") - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 autoinjector pouch.") - - return . + 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 @@ -107,16 +81,9 @@ drop_sound = 'sound/items/handling/book_drop.ogg' pickup_sound = 'sound/items/handling/book_pickup.ogg' w_class = WEIGHT_CLASS_NORMAL - -/obj/item/epic_loot/diary/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 2 of these can be traded for 1 rengo precision rifle.") - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 keycard holder.") - - return . + custom_materials = list( + /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8, + ) // A slimmer version of the regular diary /obj/item/epic_loot/slim_diary @@ -125,16 +92,9 @@ icon_state = "slim_diary" drop_sound = 'sound/items/handling/book_drop.ogg' pickup_sound = 'sound/items/handling/book_pickup.ogg' - -/obj/item/epic_loot/slim_diary/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these can be traded for 2 smoke grenades.") - . += span_notice("Armor Trade Station:") - . += span_notice("- 1 of these can be traded for 1 pair of sunglasses.") - - return . + 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 @@ -145,22 +105,13 @@ pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg' w_class = WEIGHT_CLASS_NORMAL custom_materials = list( - /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 3, // for the. container? - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 5) // the part that explodes + /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 3, + ) /obj/item/epic_loot/plasma_explosive/Initialize(mapload) . = ..() AddComponent(/datum/component/explodable, 0, 1, 3, 5, 5) -/obj/item/epic_loot/plasma_explosive/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 grenade fuze can be traded for 2 offensive impact grenades.") - . += span_notice("- 1 of these + 1 grenade fuze + 1 box of nails can be traded for 2 defensive impact grenades") - - return . - // A folder from some corporation with likely valuable data inside /obj/item/epic_loot/corpo_folder name = "corporate data folder" @@ -169,16 +120,9 @@ drop_sound = 'sound/items/handling/book_drop.ogg' pickup_sound = 'sound/items/handling/book_pickup.ogg' w_class = WEIGHT_CLASS_NORMAL - -/obj/item/epic_loot/corpo_folder/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 intelligence folder can be traded for 1 fire axe.") - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 organizational pouch.") - - return . + 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 @@ -188,16 +132,9 @@ drop_sound = 'sound/items/handling/book_drop.ogg' pickup_sound = 'sound/items/handling/book_pickup.ogg' w_class = WEIGHT_CLASS_NORMAL - -/obj/item/epic_loot/intel_folder/examine_more(mob/user) - . = ..() - - . += span_notice("Weapons Trade Station:") - . += span_notice("- 1 of these + 1 corporate data folder can be traded for 1 fire axe.") - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these can be traded for 1 security belt.") - - return . + custom_materials = list( + /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 8, + ) // A small chainlet made of silver /obj/item/epic_loot/silver_chainlet @@ -206,17 +143,9 @@ 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) - -/obj/item/epic_loot/silver_chainlet/examine_more(mob/user) - . = ..() - - . += span_notice("Medical Trade Station:") - . += span_notice("- 1 of these can be traded for 1 civil defense medical kit.") - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these + 1 gold chainlet can be traded for 1 documents pouch.") - - return . + custom_materials = list( + /datum/material/silver = SHEET_MATERIAL_AMOUNT, + ) // A small chainlet made of gold /obj/item/epic_loot/gold_chainlet @@ -225,13 +154,6 @@ 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) - -/obj/item/epic_loot/gold_chainlet/examine_more(mob/user) - . = ..() - - . += span_notice("Equipment Trade Station:") - . += span_notice("- 1 of these + 1 silver chainlet can be traded for 1 documents pouch.") - . += span_notice("- 1 of these can be traded for 1 ammo pouch.") - - return . + 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 index 49d8a8d8891a9..9c9b9a052c2bd 100644 --- a/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm +++ b/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm @@ -3,16 +3,18 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 6 screen_max_columns = 3 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/ammo_box - name = "ammunition box" - desc = "A military-grade lockbox for secure storage of ammunition." + 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_ammunition = 1, + /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 diff --git a/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm b/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm index 01b94f55552c5..fa17c520bb1a3 100644 --- a/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm +++ b/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm @@ -3,11 +3,11 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 4 screen_max_columns = 2 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/plastic.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/plastic.mp3' /obj/structure/maintenance_loot_structure/computer_tower name = "computer tower" - desc = "A relatively compact computer unit, missing it's monitor. May still contain valuable components inside." + 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" diff --git a/modular_doppler/epic_loot/code/loot_structures/files.dm b/modular_doppler/epic_loot/code/loot_structures/files.dm index 76d4f5680e311..cce371e9a257f 100644 --- a/modular_doppler/epic_loot/code/loot_structures/files.dm +++ b/modular_doppler/epic_loot/code/loot_structures/files.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 6 screen_max_columns = 2 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/cabinet.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/cabinet.mp3' /obj/structure/maintenance_loot_structure/file_cabinet name = "filing cabinet" @@ -13,7 +13,6 @@ loot_spawn_dice_string = "1d10-4" loot_weighted_list = list( /obj/effect/spawner/random/epic_loot/random_documents = 9, - /obj/effect/spawner/random/epic_loot/random_keycard = 1, ) /obj/structure/maintenance_loot_structure/file_cabinet/white diff --git a/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm index 7761b098b9b8d..12e3c10decaba 100644 --- a/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm +++ b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm @@ -3,16 +3,18 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 4 screen_max_columns = 2 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_2.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_2.mp3' /obj/structure/maintenance_loot_structure/grenade_box - name = "grenade box" - desc = "A military-grade grenade box for secure storage of explosives." + 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_grenade_or_explosive = 1, + /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 diff --git a/modular_doppler/epic_loot/code/loot_structures/gun_case.dm b/modular_doppler/epic_loot/code/loot_structures/gun_case.dm index 61be7b6e1824f..813f75c8ff6fa 100644 --- a/modular_doppler/epic_loot/code/loot_structures/gun_case.dm +++ b/modular_doppler/epic_loot/code/loot_structures/gun_case.dm @@ -3,18 +3,18 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 4 screen_max_columns = 4 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/gun_box - name = "large gun case" - desc = "A military-grade gun case for secure storage of firearms." + 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_ammunition = 8, - /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, - /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, + /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 diff --git a/modular_doppler/epic_loot/code/loot_structures/large_crate.dm b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm index c4d9a226c2566..eb67418106c45 100644 --- a/modular_doppler/epic_loot/code/loot_structures/large_crate.dm +++ b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm @@ -3,10 +3,10 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 16 screen_max_columns = 4 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/large_crate - name = "ration supply box" + 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 @@ -16,59 +16,42 @@ ) /obj/structure/maintenance_loot_structure/large_crate/medical - name = "medical supply box" + 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_stack_item = 3, - /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 1, - /obj/effect/spawner/random/epic_loot/medical_tools = 3, - /obj/effect/spawner/random/epic_loot/medpens = 2, - /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1, + /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 supply box" + 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_tools = 1, - /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_engineering = 1, ) /obj/structure/maintenance_loot_structure/large_crate/engineering/airdrop icon_state = "supplydrop_yellow" /obj/structure/maintenance_loot_structure/large_crate/military - name = "military supply box" + 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_other_military_loot = 8, - /obj/effect/spawner/random/epic_loot/random_ammunition = 6, - /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, - /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, - ) - -/obj/structure/maintenance_loot_structure/large_crate/military/rare_loot - name = "military supply box" - 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_other_military_loot/rare_loot = 8, - /obj/effect/spawner/random/epic_loot/random_ammunition = 6, - /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, - /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, + /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_lethal_doppler/epic_loot/icons/loot_structures.dmi' + icon = 'modular_doppler/epic_loot/icons/loot_structures.dmi' icon_state = "crate_random" loot = list( /obj/structure/maintenance_loot_structure/large_crate, diff --git a/modular_doppler/epic_loot/code/loot_structures/medbox.dm b/modular_doppler/epic_loot/code/loot_structures/medbox.dm index 201c24ffbf53f..3ffd2a6a387f7 100644 --- a/modular_doppler/epic_loot/code/loot_structures/medbox.dm +++ b/modular_doppler/epic_loot/code/loot_structures/medbox.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 6 screen_max_columns = 3 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/plastic.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/plastic.mp3' /obj/structure/maintenance_loot_structure/medbox name = "emergency medical box" @@ -12,32 +12,15 @@ 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_stack_item = 2, - /obj/effect/spawner/random/epic_loot/medical_tools = 2, - /obj/effect/spawner/random/epic_loot/medpens = 1, + /obj/effect/spawner/random/epic_loot/medical_everything = 1, ) -/obj/structure/maintenance_loot_structure/medbox/advanced_loot - loot_weighted_list = list( - /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 2, - /obj/effect/spawner/random/epic_loot/medical_tools = 2, - /obj/effect/spawner/random/epic_loot/medpens = 2, - /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1, - ) - loot_spawn_dice_string = "1d6" - /obj/structure/maintenance_loot_structure/medbox/bleu icon_state = "medbox_blue" -/obj/structure/maintenance_loot_structure/medbox/advanced_loot/bleu - icon_state = "medbox_blue" - /obj/structure/maintenance_loot_structure/medbox/red icon_state = "medbox_red" -/obj/structure/maintenance_loot_structure/medbox/advanced_loot/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 @@ -51,12 +34,3 @@ . = ..() icon_state = pick(random_icon_states) update_appearance() - -/obj/structure/maintenance_loot_structure/medbox/random/advanced_loot - loot_weighted_list = list( - /obj/effect/spawner/random/epic_loot/medical_stack_item_advanced = 2, - /obj/effect/spawner/random/epic_loot/medical_tools = 2, - /obj/effect/spawner/random/epic_loot/medpens = 2, - /obj/effect/spawner/random/epic_loot/medpens_combat_based_redpilled = 1, - ) - loot_spawn_dice_string = "1d6" diff --git a/modular_doppler/epic_loot/code/loot_structures/military_case.dm b/modular_doppler/epic_loot/code/loot_structures/military_case.dm index 6d96aebba1fc0..cdf65c5ea337b 100644 --- a/modular_doppler/epic_loot/code/loot_structures/military_case.dm +++ b/modular_doppler/epic_loot/code/loot_structures/military_case.dm @@ -3,19 +3,18 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 8 screen_max_columns = 4 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/military_case - name = "military storage box" - desc = "A military-grade storage chest for general use." + 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_other_military_loot = 8, - /obj/effect/spawner/random/epic_loot/random_ammunition = 6, - /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, - /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, + /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 @@ -37,11 +36,3 @@ . = ..() icon_state = pick(random_icon_states) update_appearance() - -/obj/structure/maintenance_loot_structure/military_case/random/rare_loot - loot_weighted_list = list( - /obj/effect/spawner/random/epic_loot/random_other_military_loot/rare_loot = 8, - /obj/effect/spawner/random/epic_loot/random_ammunition = 6, - /obj/effect/spawner/random/epic_loot/random_silly_arms = 2, - /obj/effect/spawner/random/epic_loot/random_serious_arms = 1, - ) diff --git a/modular_doppler/epic_loot/code/loot_structures/register.dm b/modular_doppler/epic_loot/code/loot_structures/register.dm index ba6d51b7fbb34..63536361c71d6 100644 --- a/modular_doppler/epic_loot/code/loot_structures/register.dm +++ b/modular_doppler/epic_loot/code/loot_structures/register.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 2 screen_max_columns = 2 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_2.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_2.mp3' /obj/structure/maintenance_loot_structure/register name = "credits register" diff --git a/modular_doppler/epic_loot/code/loot_structures/safe.dm b/modular_doppler/epic_loot/code/loot_structures/safe.dm index f21fa265a2407..242ab0f1e1ac1 100644 --- a/modular_doppler/epic_loot/code/loot_structures/safe.dm +++ b/modular_doppler/epic_loot/code/loot_structures/safe.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 2 screen_max_columns = 1 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/desk_safe name = "compact safe" @@ -12,9 +12,7 @@ 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 = 2, - /obj/effect/spawner/random/entertainment/money_small = 1, - /obj/effect/spawner/random/entertainment/money = 1, + /obj/effect/spawner/random/epic_loot/random_strongbox_loot = 1, ) /obj/structure/maintenance_loot_structure/desk_safe/bleu diff --git a/modular_doppler/epic_loot/code/loot_structures/toolbox.dm b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm index 7e4a8d623dd65..bbb542bde6fb2 100644 --- a/modular_doppler/epic_loot/code/loot_structures/toolbox.dm +++ b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 6 screen_max_columns = 3 - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_1.mp3' /obj/structure/maintenance_loot_structure/toolbox name = "heavy toolbox" @@ -14,8 +14,7 @@ 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_tools = 2, - /obj/effect/spawner/random/epic_loot/random_components = 1, + /obj/effect/spawner/random/epic_loot/random_engineering = 1, ) /obj/structure/maintenance_loot_structure/toolbox/yellow diff --git a/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm b/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm index 4573d8583d0d6..3b3bfd24b0802 100644 --- a/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm +++ b/modular_doppler/epic_loot/code/loot_structures/wall_jackets.dm @@ -11,15 +11,9 @@ icon_state = "jacket_green" density = FALSE storage_datum_to_use = /datum/storage/maintenance_loot_structure/jacket - loot_spawn_dice_string = "1d4-2" + loot_spawn_dice_string = "1d3-1" loot_weighted_list = list( - /obj/effect/spawner/random/entertainment/money_small = 2, - /obj/effect/spawner/random/entertainment/money = 2, - /obj/effect/spawner/random/entertainment/cigarette_pack = 1, - /obj/effect/spawner/random/entertainment/cigarette = 1, - /obj/effect/spawner/random/entertainment/wallet_lighter = 2, - /obj/effect/spawner/random/epic_loot/pocket_sized_valuables = 2, - /obj/effect/spawner/random/epic_loot/random_keycard = 1, + /obj/effect/spawner/random/epic_loot/pocket_sized_items = 1, ) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/maintenance_loot_structure/wall_jacket, 28) diff --git a/modular_doppler/epic_loot/code/mystery_box_additions.dm b/modular_doppler/epic_loot/code/mystery_box_additions.dm deleted file mode 100644 index 672a14dcf8f38..0000000000000 --- a/modular_doppler/epic_loot/code/mystery_box_additions.dm +++ /dev/null @@ -1,39 +0,0 @@ -GLOBAL_LIST_INIT(lethal_deathmatch_guns, list( - /obj/effect/spawner/random/epic_loot/deathmatch_silly_arms, - /obj/effect/spawner/random/epic_loot/deathmatch_silly_arms_blue, - /obj/effect/spawner/random/epic_loot/deathmatch_serious_arms, - /obj/effect/spawner/random/epic_loot/deathmatch_serious_arms_blue, - /obj/effect/spawner/random/epic_loot/deathmatch_grenade_or_explosive, -)) - -GLOBAL_LIST_INIT(lethal_funny_mystery_box_items, list( - /obj/effect/spawner/random/epic_loot/deathmatch_armor, - /obj/effect/spawner/random/epic_loot/deathmatch_medkit, - /obj/effect/spawner/random/epic_loot/deathmatch_funny, -)) - -/obj/structure/mystery_box/guns/generate_valid_types() - valid_types = GLOB.lethal_deathmatch_guns - -/obj/structure/mystery_box/tdome/generate_valid_types() - valid_types = GLOB.lethal_deathmatch_guns + GLOB.lethal_funny_mystery_box_items - -/obj/structure/mystery_box/grant_weapon(mob/living/user) - new presented_item.selected_path(src) - for(var/obj/item/iterated_item in contents) - if(!isitem(iterated_item)) - continue - user.put_in_hands(iterated_item) - - if(isgun(iterated_item)) // handle pins + possibly extra ammo - var/obj/item/gun/instantiated_gun = iterated_item - instantiated_gun.unlock() - if(grant_extra_mag && istype(instantiated_gun, /obj/item/gun/ballistic)) - var/obj/item/gun/ballistic/instantiated_ballistic = instantiated_gun - if(!instantiated_ballistic.internal_magazine) - var/obj/item/ammo_box/magazine/extra_mag = new instantiated_ballistic.spawn_magazine_type(loc) - user.put_in_hands(extra_mag) - - user.visible_message(span_notice("[user] takes [iterated_item] from [src]."), span_notice("You take [iterated_item] from [src]."), vision_distance = COMBAT_MESSAGE_RANGE) - playsound(src, grant_sound, 70, FALSE, channel = current_sound_channel, falloff_exponent = 10) - close_box() diff --git a/modular_doppler/epic_loot/code/random_spawners_deathmatch.dm b/modular_doppler/epic_loot/code/random_spawners_deathmatch.dm deleted file mode 100644 index 64bba31f3df30..0000000000000 --- a/modular_doppler/epic_loot/code/random_spawners_deathmatch.dm +++ /dev/null @@ -1,358 +0,0 @@ -/obj/effect/spawner/random/epic_loot/deathmatch_armor - name = "deathmatch armor spawner" - desc = "Automagically transforms into a set of armor." - icon_state = "armor_random" - loot = list( - /obj/effect/spawner/random/lethalstation_armor_set = 1, - /obj/effect/spawner/random/lethalstation_armor_set/peacekeeper = 1, - /obj/effect/spawner/random/lethalstation_armor_set/peacekeeper_fake = 1, - /obj/effect/spawner/random/lethalstation_armor_set/hardened = 1, - /obj/effect/spawner/random/lethalstation_armor_set/archangel = 1, - /obj/effect/spawner/random/lethalstation_armor_set/koranda = 1, - /obj/effect/spawner/random/lethalstation_armor_set/kuroba = 1, - /obj/effect/spawner/random/lethalstation_armor_set/kuroba_super = 1, - /obj/effect/spawner/random/lethalstation_armor_set/val = 1, - /obj/effect/spawner/random/lethalstation_armor_set/sushi = 1, - /obj/effect/spawner/random/lethalstation_armor_set/filtre_light = 1, - /obj/effect/spawner/random/lethalstation_armor_set/filtre_heavy = 1, - ) - -/obj/effect/spawner/random/lethalstation_armor_set - name = "armor set spawner" - icon_state = "lizard_boots" - spawn_all_loot = TRUE - loot = list( - /obj/item/clothing/suit/armor/lethal_paper, - /obj/item/clothing/head/helmet/sf_peacekeeper/debranded, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/peacekeeper - loot = list( - /obj/item/clothing/suit/armor/sf_peacekeeper, - /obj/item/clothing/head/helmet/sf_peacekeeper, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/peacekeeper_fake - loot = list( - /obj/item/clothing/suit/armor/sf_peacekeeper/debranded, - /obj/item/clothing/head/helmet/sf_peacekeeper/debranded, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/hardened - loot = list( - /obj/item/clothing/suit/armor/sf_hardened, - /obj/item/clothing/head/helmet/toggleable/sf_hardened, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/archangel - loot = list( - /obj/item/clothing/suit/armor/sf_hardened/emt, - /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/koranda - loot = list( - /obj/item/clothing/suit/armor/lethal_koranda, - /obj/item/clothing/head/helmet/sf_peacekeeper, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/kuroba - loot = list( - /obj/item/clothing/suit/armor/lethal_kora_kulon, - /obj/item/clothing/head/helmet/lethal_kulon_helmet, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/kuroba_super - loot = list( - /obj/item/clothing/suit/armor/lethal_kora_kulon/full_set, - /obj/item/clothing/head/helmet/lethal_kulon_helmet/spawns_with_shield, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/val - loot = list( - /obj/item/clothing/suit/armor/sf_sacrificial, - /obj/item/clothing/head/helmet/sf_sacrificial/spawns_with_shield, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/sushi - loot = list( - /obj/item/clothing/suit/armor/lethal_slick, - /obj/item/clothing/head/helmet/lethal_larp_helmet, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/filtre_light - loot = list( - /obj/item/clothing/suit/armor/lethal_filtre, - /obj/item/clothing/head/helmet/lethal_filtre_helmet, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/filtre_heavy - loot = list( - /obj/item/clothing/suit/armor/lethal_filtre/heavy, - /obj/item/clothing/head/helmet/lethal_filtre_helmet, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_silly_arms - name = "deathmatch silly arms spawner" - desc = "Automagically transforms into a not-so-serious firearm." - icon_state = "random_common_gun" - loot = list( - /obj/item/gun/ballistic/automatic/pistol/sol = 1, - /obj/item/gun/ballistic/automatic/pistol/sol/evil = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/signalis_real = 1, - /obj/item/gun/energy/e_gun/mini = 1, - /obj/item/gun/ballistic/automatic/pistol/weevil = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/kurwa = 1, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_silly_arms_blue - name = "deathmatch silly arms spawner (blue)" - desc = "Automagically transforms into a not-so-serious firearm." - icon_state = "random_common_gun_blue" - loot = list( - /obj/item/gun/ballistic/automatic/pistol/trappiste = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/takbok = 1, - /obj/item/gun/ballistic/automatic/sol_smg = 1, - /obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 1, - /obj/item/gun/ballistic/automatic/miecz = 1, - /obj/item/gun/ballistic/automatic/seiba_smg = 1, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually - name = "deathmatch single weapon spawner" - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/signalis_real - loot = list( - /obj/item/gun/ballistic/revolver/sol, - /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/takbok - loot = list( - /obj/item/gun/ballistic/revolver/takbok, - /obj/item/ammo_box/magazine/ammo_stack/c585_trappiste/prefilled, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/kurwa - loot = list( - /obj/item/gun/ballistic/revolver/shotgun_revolver, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/flechette, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_serious_arms - name = "deathmatch serious arms spawner" - desc = "Automagically transforms into a super serious firearm." - icon_state = "random_rare_gun" - loot = list( - /obj/item/gun/ballistic/automatic/sol_grenade_launcher = 1, - /obj/item/gun/ballistic/automatic/xhihao_smg = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/osako = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/scoped_osako = 1, - /obj/item/gun/energy/laser = 1, - /obj/item/gun/energy/e_gun = 1, - /obj/item/gun/ballistic/automatic/lanca = 1, - /obj/item/gun/ballistic/automatic/suppressed_rifle = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/lesbian_gun = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/super_shotgun = 1, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/osako - loot = list( - /obj/item/gun/ballistic/rifle/osako, - /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/scoped_osako - loot = list( - /obj/item/gun/ballistic/rifle/osako/scoped, - /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/kedown, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun - loot = list( - /obj/item/gun/ballistic/shotgun/riot/sol/thunderdome, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/lesbian_gun - loot = list( - /obj/item/gun/ballistic/marsian_super_rifle, - /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/super_shotgun - loot = list( - /obj/item/gun/ballistic/shotgun/ramu, - /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_serious_arms_blue - name = "deathmatch serious arms spawner (blue)" - desc = "Automagically transforms into a super serious firearm." - icon_state = "random_rare_gun_blue" - loot = list( - /obj/item/gun/ballistic/automatic/sol_rifle = 1, - /obj/item/gun/ballistic/automatic/sol_rifle/evil = 1, - /obj/item/gun/ballistic/automatic/sol_rifle/machinegun = 1, - /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil = 1, - /obj/item/gun/ballistic/automatic/xhihao_smg = 1, - /obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun_evil = 1, - /obj/item/gun/energy/laser/hellgun = 1, - /obj/item/gun/energy/tesla_cannon = 1, - /obj/item/gun/ballistic/automatic/suppressed_rifle/marksman = 1, - /obj/item/gun/ballistic/automatic/nomi_shotgun = 1, - /obj/item/gun/ballistic/automatic/karim = 1, - ) - -/obj/effect/spawner/random/lethalstation_armor_set/gun_actually/shotgun_evil - loot = list( - /obj/item/gun/ballistic/shotgun/riot/sol/evil/thunderdome, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/flechette, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_grenade_or_explosive - name = "deathmatch grenade or explosive spawner" - desc = "Automagically transforms into some kind of explosive or grenade." - icon_state = "random_bomb" - loot = list( - /obj/item/grenade/syndieminibomb/concussion/impact = 1, - /obj/item/grenade/frag/impact = 1, - /obj/item/grenade/antigravity = 1, - /obj/item/grenade/barrier = 1, - /obj/item/grenade/flashbang = 1, - /obj/item/grenade/frag = 1, - /obj/item/grenade/frag/mega = 1, - /obj/item/grenade/mirage = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/grenade/stingbang = 1, - /obj/item/grenade/stingbang/mega = 1, - /obj/item/grenade/iedcasing/spawned = 1, - /obj/item/grenade/syndieminibomb/concussion = 1, - /obj/item/grenade/syndieminibomb = 1, - /obj/item/grenade/clusterbuster/random = 1, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_medkit - name = "deathmatch medkit spawner" - desc = "Automagically transforms into a random medkit of some sort." - icon_state = "random_medkit" - loot = list( - /obj/item/storage/pouch/cin_medkit/thunderdome = 1, - /obj/item/storage/pouch/medical/thunderdome = 1, - /obj/item/storage/pouch/medical/firstaid/thunderdome = 1, - /obj/item/storage/medkit/civil_defense/stocked = 1, - /obj/item/storage/medkit/civil_defense/thunderdome = 1, - /obj/item/storage/medkit/frontier/stocked = 1, - /obj/item/storage/medkit/combat_surgeon/stocked = 1, - /obj/item/storage/medkit/robotic_repair/stocked = 1, - /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/backpack/duffelbag/deforest_medkit/stocked/super = 1, - ) - -/obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item - name = "deathmatch advanced medical item spawner" - desc = "Automagically transforms into a random advanced medical stack item." - icon_state = "random_med_stack_adv" - loot = list( - /obj/item/stack/medical/bruise_pack = 1, - /obj/item/stack/medical/gauze = 1, - /obj/item/stack/medical/gauze/sterilized = 1, - /obj/item/stack/medical/suture = 1, - /obj/item/stack/medical/suture/coagulant = 1, - /obj/item/stack/medical/suture/bloody = 1, - /obj/item/stack/medical/suture/medicated = 1, - /obj/item/stack/medical/ointment = 1, - /obj/item/stack/medical/ointment/red_sun = 1, - /obj/item/stack/medical/mesh = 1, - /obj/item/stack/medical/mesh/bloody = 1, - /obj/item/stack/medical/mesh/advanced = 1, - /obj/item/stack/medical/aloe = 1, - /obj/item/stack/medical/bone_gel = 1, - /obj/item/stack/medical/bandage = 1, - /obj/item/stack/sticky_tape/surgical = 1, - /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 = 1, - /obj/item/stack/medical/wound_recovery/robofoam = 1, - /obj/item/stack/medical/wound_recovery/robofoam_super = 1, - /obj/item/reagent_containers/pill/robotic_patch/synth_repair = 1, - // Medigels - /obj/item/reagent_containers/medigel/libital = 1, - /obj/item/reagent_containers/medigel/aiuri = 1, - /obj/item/reagent_containers/medigel/synthflesh = 1, - // Pill bottles - /obj/item/storage/pill_bottle/iron = 1, - /obj/item/storage/pill_bottle/painkiller = 1, - /obj/item/storage/pill_bottle/probital = 1, - // Tools - /obj/item/bonesetter = 1, - /obj/item/cautery = 1, - /obj/item/healthanalyzer = 1, - /obj/item/healthanalyzer/simple = 1, - /obj/item/hemostat = 1, - // Pens - /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi = 1, - /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 = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin = 1, - /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol = 1, - ) - -/obj/item/storage/pouch/medical/firstaid/thunderdome - -/obj/item/storage/pouch/medical/firstaid/thunderdome/PopulateContents() - for(var/iterator in 1 to atom_storage.max_slots) - new /obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item(src) - -/obj/item/storage/pouch/medical/thunderdome - -/obj/item/storage/pouch/medical/thunderdome/PopulateContents() - for(var/iterator in 1 to atom_storage.max_slots) - new /obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item(src) - -/obj/item/storage/pouch/cin_medkit/thunderdome - -/obj/item/storage/pouch/cin_medkit/thunderdome/Initialize(mapload) - . = ..() - atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL - atom_storage.max_total_storage = 8 - -/obj/item/storage/pouch/cin_medkit/thunderdome/PopulateContents() - for(var/iterator in 1 to atom_storage.max_slots) - new /obj/effect/spawner/random/epic_loot/deathmatch_med_stack_item(src) - -/obj/effect/spawner/random/epic_loot/deathmatch_funny - name = "deathmatch funnies spawner" - desc = "Automagically transforms into a funny." - icon_state = "random_tool" - loot = list( - /obj/item/melee/energy/sword = 1, - /obj/item/melee/energy/axe = 1, - /obj/item/fireaxe/boardingaxe = 1, - /obj/item/fireaxe = 1, - /obj/item/storage/belt/sabre = 1, - /obj/item/autosurgeon/syndicate/sandy = 1, - /obj/item/autosurgeon/syndicate/razorwire = 1, - /obj/item/shield/ballistic = 1, - /obj/item/shield/energy/advanced = 1, - /obj/item/shield/energy = 1, - /obj/item/melee/baseball_bat/ablative = 1, - /obj/item/melee/baseball_bat/homerun = 1, - /obj/item/clothing/gloves/tackler/combat = 1, - /obj/item/clothing/gloves/race = 1, - /obj/item/clothing/gloves/rapid = 1, - /obj/item/shield/riot/flash = 1, - /obj/item/knife/combat = 1, - ) diff --git a/modular_doppler/epic_loot/code/random_spawners.dm b/modular_doppler/epic_loot/code/random_spawners_real.dm similarity index 53% rename from modular_doppler/epic_loot/code/random_spawners.dm rename to modular_doppler/epic_loot/code/random_spawners_real.dm index 75f555c8e7194..cc8080f4cd3cd 100644 --- a/modular_doppler/epic_loot/code/random_spawners.dm +++ b/modular_doppler/epic_loot/code/random_spawners_real.dm @@ -1,42 +1,95 @@ /obj/effect/spawner/random/epic_loot name = "extraction loot spawner" desc = "Gods please let there be nobody extract camping." - icon = 'modular_lethal_doppler/epic_loot/icons/epic_loot.dmi' + icon = 'modular_doppler/epic_loot/icons/epic_loot.dmi' icon_state = null -/obj/effect/spawner/random/epic_loot/chainlet - name = "random chainlet spawner" - desc = "Automagically transforms into a random chainlet made of valuable metals." - icon_state = "random_chain" +// 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/item/epic_loot/silver_chainlet = 2, - /obj/item/epic_loot/gold_chainlet = 1, + /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, ) -/obj/effect/spawner/random/epic_loot/pocket_sized_valuables - name = "random pocket sized valuables spawner" - desc = "Automagically transforms into a random valuable that would reasonably be in someone's coat pocket." - icon_state = "random_pocket_valuable" +// 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/effect/spawner/random/epic_loot/chainlet = 2, + /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/effect/spawner/random/epic_loot/random_keycard = 1, + /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 spawner" - desc = "Automagically transforms into a random medical stack item." + name = "random medical item" icon_state = "random_med_stack" loot = list( - /obj/item/stack/medical/bruise_pack = 4, - /obj/item/stack/medical/gauze = 4, - /obj/item/stack/medical/gauze/sterilized = 3, + /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 = 4, + /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, @@ -47,26 +100,6 @@ /obj/item/stack/sticky_tape/surgical = 2, /obj/item/reagent_containers/blood/random = 1, /obj/item/stack/medical/wound_recovery/robofoam = 2, - // Chemjaks - /obj/item/reagent_containers/cup/bottle/epinephrine = 2, - /obj/item/reagent_containers/cup/bottle/morphine = 1, - /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 = 1, - /obj/item/reagent_containers/cup/bottle/synaptizine = 1, - /obj/item/reagent_containers/cup/bottle/fentanyl = 1, - /obj/item/reagent_containers/cup/bottle/formaldehyde = 2, - /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 = 2, - /obj/item/reagent_containers/cup/bottle/atropine = 1, - /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, // Pill bottles /obj/item/storage/pill_bottle/iron = 2, /obj/item/storage/pill_bottle/potassiodide = 2, @@ -80,21 +113,20 @@ /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 spawner" - desc = "Automagically transforms into a random advanced medical stack item." + name = "random advanced medical item" icon_state = "random_med_stack_adv" loot = list( - /obj/item/stack/medical/bruise_pack = 3, - /obj/item/stack/medical/gauze = 2, /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 = 2, /obj/item/stack/medical/ointment/red_sun = 3, /obj/item/stack/medical/mesh = 3, /obj/item/stack/medical/mesh/bloody = 2, @@ -109,6 +141,33 @@ /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, @@ -123,32 +182,23 @@ /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/syringe = 3, + /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, - // 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, - // Medkits - /obj/effect/spawner/random/epic_loot/medkit = 1, ) +// Medical tools spawner + /obj/effect/spawner/random/epic_loot/medical_tools - name = "random medical tools spawner" - desc = "Automagically transforms into a random medical tools of various sorts." + name = "random medical tools" icon_state = "random_med_tools" loot = list( /obj/item/bonesetter = 2, @@ -161,8 +211,6 @@ /obj/item/healthanalyzer/simple = 2, /obj/item/healthanalyzer/simple/disease = 2, /obj/item/hemostat = 2, - /obj/item/hypospray/mkii = 2, - /obj/item/hypospray/mkii/deluxe = 1, /obj/item/storage/box/bandages = 1, /obj/item/bodybag = 2, /obj/item/blood_filter = 2, @@ -186,26 +234,29 @@ /obj/item/defibrillator/loaded = 1, /obj/item/emergency_bed = 2, /obj/item/storage/epic_loot_medical_case = 1, - /obj/effect/spawner/random/epic_loot/medkit = 2, ) +// Random medkits + /obj/effect/spawner/random/epic_loot/medkit - name = "random medkit spawner" - desc = "Automagically transforms into a random medkit of some sort." + name = "random medkit" icon_state = "random_medkit" loot = list( - /obj/item/storage/medkit/civil_defense/stocked = 4, - /obj/item/storage/medkit/civil_defense/comfort/stocked = 4, - /obj/item/storage/medkit/frontier/stocked = 3, - /obj/item/storage/medkit/combat_surgeon/stocked = 3, - /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked = 2, - /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked = 2, - /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked/super = 1, + /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 spawner" - desc = "Automagically transforms into random autoinjectors of various types." + name = "random autoinjectors" icon_state = "random_medpen_spawner" loot = list( /obj/item/reagent_containers/hypospray/medipen/deforest/occuisate = 2, @@ -222,9 +273,10 @@ /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 spawner" - desc = "Automagically transforms into a random combat focused autoinjector." + name = "random combat autoinjectors" icon_state = "random_medpen_advanced" loot = list( /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline = 3, @@ -242,9 +294,22 @@ /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 spawner" - desc = "Automagically transforms into components." + name = "random components" icon_state = "random_component" loot = list( /obj/item/epic_loot/water_filter = 2, @@ -259,17 +324,34 @@ /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/aramid = 2, - /obj/item/epic_loot/cordura = 2, - /obj/item/epic_loot/ripstop = 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 spawner" - desc = "Automagically transforms into a tool of some sort." + name = "random tools and supplies" icon_state = "random_tool" loot = list( // Wrench @@ -285,6 +367,7 @@ /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, @@ -323,11 +406,13 @@ /obj/item/stack/sticky_tape = 2, /obj/item/stack/sticky_tape/super = 1, // Cells - /obj/item/stock_parts/power_store/cell/upgraded = 2, - /obj/item/stock_parts/power_store/cell/crap = 3, + /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/sechailer = 2, /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, @@ -341,276 +426,114 @@ /obj/item/stack/medical/wound_recovery/robofoam_super = 1, ) -/obj/effect/spawner/random/epic_loot/random_computer_parts - name = "random computer parts spawner" - desc = "Automagically transforms into a part from a computer of some sort." - icon_state = "random_electronic_part" +// Random construction stuff + +/obj/effect/spawner/random/epic_loot/random_construction + name = "random constructions" + icon_state = "random_tool" 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, + // 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 spawner" - desc = "Automagically transforms into some form of documents, valuable or not." + 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 = 1, - /obj/item/epic_loot/corpo_folder = 1, - /obj/item/epic_loot/slim_diary = 1, - /obj/item/epic_loot/diary = 1, - /obj/item/computer_disk/maintenance = 2, - ) - -/obj/effect/spawner/random/epic_loot/random_strongbox_loot - name = "random strongbox loot spawner" - desc = "Automagically transforms into some kind of item that would be kept in a safe." - icon_state = "random_strongbox_loot" - loot = list( /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/epic_loot/ssd = 1, - /obj/item/epic_loot/hdd = 1, - /obj/item/epic_loot/military_flash = 1, - /obj/effect/spawner/random/epic_loot/chainlet = 2, /obj/item/computer_disk/maintenance = 2, - /obj/effect/spawner/random/epic_loot/random_keycard = 1, + /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, ) +// Stuff that comes in strongboxes specifically -/obj/effect/spawner/random/epic_loot/random_grenade_or_explosive - name = "random grenade or explosive spawner" - desc = "Automagically transforms into some kind of explosive or grenade." - icon_state = "random_bomb" +/obj/effect/spawner/random/epic_loot/random_strongbox_loot + name = "random strongbox loot" + icon_state = "random_strongbox_loot" loot = list( - /obj/item/grenade/syndieminibomb/concussion/impact = 2, - /obj/item/grenade/frag/impact = 2, - /obj/item/grenade/antigravity = 1, - /obj/item/grenade/barrier = 3, - /obj/item/grenade/c4 = 1, - /obj/item/grenade/firecracker = 2, - /obj/item/grenade/flashbang = 3, - /obj/item/grenade/frag = 2, - /obj/item/grenade/mirage = 3, - /obj/item/grenade/smokebomb = 3, - /obj/item/grenade/stingbang = 2, - /obj/item/grenade/iedcasing/spawned = 2, - /obj/item/grenade/syndieminibomb/concussion = 1, - /obj/item/grenade/clusterbuster/smoke = 1, - /obj/item/grenade/chem_grenade/teargas = 2, - /obj/item/epic_loot/plasma_explosive = 2, - /obj/item/epic_loot/grenade_fuze = 3, - /obj/item/storage/epic_loot_grenade_case = 2, - /obj/item/grenade/spawnergrenade/manhacks = 1, + /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, ) -/obj/effect/spawner/random/epic_loot/random_ammunition - name = "random ammunition spawner" - desc = "Automagically transforms into some kind of ammo for a weapon." - icon_state = "random_ammo" - loot = list( - // Ammo boxes - // .35 - /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled/tracer = 2, - /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled/superfrag = 2, - /obj/item/ammo_box/magazine/ammo_stack/c35_sol/prefilled/sabot = 2, - // .40 - /obj/item/ammo_box/magazine/ammo_stack/c40_sol/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/c40_sol/prefilled/hardcore = 2, - /obj/item/ammo_box/magazine/ammo_stack/c40_sol/prefilled/tracer = 2, - // .585 - /obj/item/ammo_box/magazine/ammo_stack/c585_trappiste/prefilled = 1, - /obj/item/ammo_box/magazine/ammo_stack/c585_trappiste/prefilled/hollowpoint = 1, - // .980 - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/aphe = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/thermobaric = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/shrapnel = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/ecm = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/flechette = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/phosphor = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/sabot = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/beacon = 1, - /obj/item/ammo_box/magazine/ammo_stack/c980/prefilled/smoke = 1, - // .310 - /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled = 1, - /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/tracer = 2, - /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/piercing = 2, - /obj/item/ammo_box/magazine/ammo_stack/c310_strilka/prefilled/kedown = 1, - // .27-54 - /obj/item/ammo_box/magazine/ammo_stack/c27_54cesarzowa/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/c27_54cesarzowa/prefilled/tracer = 2, - /obj/item/ammo_box/magazine/ammo_stack/c27_54cesarzowa/prefilled/ultrakill = 2, - // 12mm silenced - /obj/item/ammo_box/magazine/ammo_stack/c12chinmoku/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/c12chinmoku/prefilled/special = 1, - /obj/item/ammo_box/magazine/ammo_stack/c12chinmoku/prefilled/tracer = 2, - // 8mm mars - /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled/shockwave = 1, - /obj/item/ammo_box/magazine/ammo_stack/c8marsian/prefilled/piercing = 1, - // 6 gauge - /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled/longshot = 1, - /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled/slug = 2, - /obj/item/ammo_box/magazine/ammo_stack/s6gauge/prefilled/flash = 1, - // Magazines - /obj/item/ammo_box/magazine/c35sol_pistol = 2, - /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 1, - /obj/item/ammo_box/magazine/c40sol_rifle = 2, - /obj/item/ammo_box/magazine/c40sol_rifle/standard = 1, - /obj/item/ammo_box/magazine/c585trappiste_pistol = 2, - /obj/item/ammo_box/magazine/c980_grenade = 1, - /obj/item/ammo_box/magazine/c980_grenade/drum = 1, - /obj/item/ammo_box/magazine/lanca = 2, - /obj/item/ammo_box/magazine/miecz = 2, - /obj/item/ammo_box/magazine/recharge/plasma_battery = 2, - /obj/item/ammo_box/magazine/c12chinmoku = 2, - /obj/item/ammo_box/magazine/c12chinmoku/standard = 1, - /obj/item/ammo_box/magazine/c12nomi = 2, - /obj/item/ammo_box/magazine/c8marsian = 2, - /obj/item/ammo_box/magazine/karim = 1, - // Shotgun shells - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled = 2, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/flechette = 2, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/shrapnel = 2, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/ecm = 2, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/slug = 2, - /obj/item/ammo_box/magazine/ammo_stack/s12gauge/prefilled/ap_slug = 2, - // Ammo boxes - /obj/item/storage/toolbox/ammobox/epic_loot = 2, - /obj/item/storage/toolbox/ammobox/epic_loot/magazine_box = 2, - ) +// Unsorted yeah -/obj/effect/spawner/random/epic_loot/random_silly_arms - name = "random silly arms spawner" - desc = "Automagically transforms into a not-so-serious firearm." - icon_state = "random_common_gun" - loot = list( - /obj/item/gun/ballistic/automatic/pistol/sol = 3, - /obj/item/gun/ballistic/automatic/pistol/sol/evil = 3, - /obj/item/gun/ballistic/automatic/pistol/trappiste = 2, - /obj/item/gun/ballistic/revolver/sol = 3, - /obj/item/gun/ballistic/revolver/takbok = 2, - /obj/item/gun/ballistic/automatic/sol_smg = 2, - /obj/item/gun/energy/e_gun/mini = 2, - /obj/item/gun/ballistic/automatic/pistol/plasma_marksman = 2, - /obj/item/gun/ballistic/revolver/shotgun_revolver = 2, - /obj/item/gun/ballistic/automatic/miecz = 1, - /obj/item/gun/ballistic/automatic/seiba_smg = 2, - /obj/item/gun/ballistic/automatic/pistol/weevil = 2, - /obj/item/gun/energy/marksman_revolver = 1, - ) - -/obj/effect/spawner/random/epic_loot/random_serious_arms - name = "random serious arms spawner" - desc = "Automagically transforms into a super serious firearm." - icon_state = "random_rare_gun" - loot = list( - /obj/item/gun/ballistic/automatic/sol_rifle = 2, - /obj/item/gun/ballistic/automatic/sol_rifle/evil = 1, - /obj/item/gun/ballistic/automatic/sol_rifle/machinegun = 1, - /obj/item/gun/ballistic/automatic/sol_grenade_launcher = 2, - /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil = 1, - /obj/item/gun/ballistic/automatic/xhihao_smg = 2, - /obj/effect/spawner/random/sakhno = 3, - /obj/item/gun/ballistic/shotgun/riot/sol = 3, - /obj/item/gun/ballistic/shotgun/riot/sol/evil = 2, - /obj/item/gun/ballistic/rifle/osako = 2, - /obj/item/gun/ballistic/rifle/osako/scoped = 2, - /obj/item/gun/ballistic/automatic/karim = 1, - /obj/item/gun/energy/laser = 3, - /obj/item/gun/energy/laser/hellgun = 2, - /obj/item/gun/energy/tesla_cannon = 2, - /obj/item/gun/energy/e_gun = 2, - /obj/item/gun/ballistic/automatic/lanca = 1, - /obj/item/gun/ballistic/automatic/suppressed_rifle = 2, - /obj/item/gun/ballistic/automatic/suppressed_rifle/marksman = 2, - /obj/item/gun/ballistic/marsian_super_rifle = 3, - /obj/item/gun/ballistic/shotgun/ramu = 1, - ) +// "Military" loot /obj/effect/spawner/random/epic_loot/random_other_military_loot - name = "random military loot spawner" - 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/clothing/head/helmet/sf_peacekeeper = 3, - /obj/item/clothing/head/helmet/sf_peacekeeper/debranded = 3, - /obj/item/clothing/head/helmet/lethal_kulon_helmet = 1, - /obj/item/clothing/suit/armor/lethal_paper = 4, - /obj/item/clothing/suit/armor/sf_peacekeeper = 3, - /obj/item/clothing/suit/armor/sf_peacekeeper/debranded = 3, - /obj/item/clothing/suit/armor/lethal_koranda = 3, - /obj/item/clothing/suit/armor/lethal_kora_kulon = 1, - /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/aramid = 2, - /obj/item/epic_loot/cordura = 2, - /obj/item/epic_loot/ripstop = 2, - /obj/item/epic_loot/military_circuit = 3, - /obj/effect/spawner/random/epic_loot/medkit = 2, - /obj/effect/spawner/random/epic_loot/random_keycard = 1, - /obj/item/storage/toolbox/ammobox/epic_loot = 1, - /obj/item/storage/toolbox/ammobox/epic_loot/magazine_box = 1, - /obj/item/storage/epic_loot_grenade_case = 1, - ) - -/obj/effect/spawner/random/epic_loot/random_other_military_loot/rare_loot - name = "random rare military loot spawner" + 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/clothing/head/helmet/sf_peacekeeper = 3, - /obj/item/clothing/head/helmet/sf_peacekeeper/debranded = 3, - /obj/item/clothing/head/helmet/lethal_kulon_helmet = 2, - /obj/item/clothing/head/helmet/lethal_kulon_helmet/spawns_with_shield = 1, - /obj/item/clothing/head/helmet/sf_sacrificial = 1, - /obj/item/clothing/head/helmet/sf_sacrificial/spawns_with_shield = 1, - /obj/item/clothing/head/helmet/lethal_larp_helmet = 1, - /obj/item/clothing/suit/armor/lethal_paper = 4, - /obj/item/clothing/suit/armor/sf_peacekeeper = 3, - /obj/item/clothing/suit/armor/sf_peacekeeper/debranded = 3, - /obj/item/clothing/suit/armor/lethal_koranda = 3, - /obj/item/clothing/suit/armor/lethal_kora_kulon = 2, - /obj/item/clothing/suit/armor/lethal_kora_kulon/full_set = 1, - /obj/item/clothing/suit/armor/sf_sacrificial = 1, - /obj/item/clothing/suit/armor/lethal_slick = 1, /obj/item/folder/ancient_paperwork = 2, /obj/item/epic_loot/intel_folder = 3, /obj/item/epic_loot/slim_diary = 3, @@ -626,20 +549,15 @@ /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/aramid = 2, - /obj/item/epic_loot/cordura = 2, - /obj/item/epic_loot/ripstop = 2, /obj/item/epic_loot/military_circuit = 3, - /obj/effect/spawner/random/epic_loot/medkit = 2, - /obj/effect/spawner/random/epic_loot/random_keycard = 1, - /obj/item/storage/toolbox/ammobox/epic_loot = 1, - /obj/item/storage/toolbox/ammobox/epic_loot/magazine_box = 1, - /obj/item/storage/epic_loot_grenade_case = 1, + /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 spawner" - desc = "Automagically transforms into some kind of potentially edible meal." + name = "random provisions" icon_state = "random_food" loot = list( /obj/item/food/sustenance_bar = 3, @@ -665,6 +583,13 @@ /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, @@ -679,6 +604,8 @@ /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, @@ -694,6 +621,25 @@ /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, @@ -707,31 +653,20 @@ /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 -/obj/effect/spawner/random/epic_loot/random_keycard - name = "random keycard spawner" - desc = "Automagically transforms into a random colored keycard." - icon_state = "keycard_random" - loot = list( - /obj/item/keycard/epic_loot/green = 2, - /obj/item/keycard/epic_loot/teal = 2, - /obj/item/keycard/epic_loot/blue = 2, - /obj/item/keycard/epic_loot/ourple = 2, - /obj/item/keycard/epic_loot/red = 2, - /obj/item/keycard/epic_loot/orange = 2, - /obj/item/keycard/epic_loot/yellow = 2, - /obj/item/keycard/epic_loot/black = 1, - ) +// Maint structure spawner /obj/effect/spawner/random/epic_loot/random_maint_loot_structure name = "random maintenance loot structure spawner" desc = "Automagically transforms into a random loot structure that spawns in maint." - icon = 'modular_lethal_doppler/epic_loot/icons/loot_structures.dmi' + icon = 'modular_doppler/epic_loot/icons/loot_structures.dmi' icon_state = "random_maint_structure" loot = list( /obj/structure/maintenance_loot_structure/ammo_box/random, @@ -741,29 +676,9 @@ /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/medbox/random/advanced_loot, /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, ) - -// Overriding the tg and nova crate spawner to add epic loot to them -/obj/effect/spawner/random/structure/crate - loot = list( - /obj/effect/spawner/random/structure/crate_loot = 200, - /obj/effect/spawner/random/epic_loot/random_maint_loot_structure = 500, - /obj/structure/closet/crate/trashcart/filled = 50, - /obj/effect/spawner/random/trash/moisture_trap = 50, - /obj/effect/spawner/random/trash/hobo_squat = 20, - /obj/structure/closet/mini_fridge = 15, - /obj/effect/spawner/random/trash/mess = 10, - /obj/structure/closet/crate/decorations = 15, - ) - -// Trash piles suck a lot -/obj/structure/trash_pile/Initialize(mapload) - . = ..() - new /obj/effect/spawner/random/epic_loot/random_maint_loot_structure(get_turf(src)) - qdel(src) diff --git a/modular_doppler/epic_loot/code/storage_containers/containers.dm b/modular_doppler/epic_loot/code/storage_containers/containers.dm index b7b897241ab92..738879630f528 100644 --- a/modular_doppler/epic_loot/code/storage_containers/containers.dm +++ b/modular_doppler/epic_loot/code/storage_containers/containers.dm @@ -1,32 +1,7 @@ -/obj/item/storage/epic_loot_tag_case - name = "tag case" - desc = "A semi-rigid case for holding captured id tags, which may be useful!" - icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' - icon_state = "tag_case" - 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_tag_case - slot_flags = ITEM_SLOT_POCKETS - w_class = WEIGHT_CLASS_NORMAL - -/datum/storage/maintenance_loot_structure/epic_loot_tag_case - max_slots = 9 - max_specific_storage = WEIGHT_CLASS_NORMAL - max_total_storage = WEIGHT_CLASS_NORMAL * 9 - opening_sound = 'sound/items/zip/un_zip.ogg' - -/datum/storage/maintenance_loot_structure/epic_loot_tag_case/New() - . = ..() - - can_hold = typecacheof(list( - /obj/item/card, - )) - /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_lethal_doppler/epic_loot/icons/storage_items.dmi' + 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' @@ -61,7 +36,7 @@ /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_lethal_doppler/epic_loot/icons/storage_items.dmi' + 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' @@ -92,12 +67,13 @@ /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_lethal_doppler/epic_loot/icons/storage_items.dmi' + 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' @@ -114,49 +90,10 @@ numerical_stacking = TRUE opening_sound = 'sound/items/zip/un_zip.ogg' -/obj/item/storage/epic_loot_card_holder - name = "keycard holder" - desc = "A metal clip for holding your pile of extremely useful colored keycards together." - icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' - icon_state = "card_holder" - 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_keycards - w_class = WEIGHT_CLASS_SMALL - -/datum/storage/maintenance_loot_structure/epic_loot_keycards - 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 = 'modular_lethal_doppler/epic_loot/sound/containers/plastic.mp3' - -/datum/storage/maintenance_loot_structure/epic_loot_keycards/New() - . = ..() - - can_hold = typecacheof(list( - /obj/item/keycard, - )) - -/obj/item/storage/toolbox/ammobox/epic_loot - name = "ammo box" - desc = "A box for holding ammunition, magazines, or worse." - icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' - icon_state = "ammo" - inhand_icon_state = "toolbox_syndi" - material_flags = NONE - -/obj/item/storage/toolbox/ammobox/epic_loot/magazine_box - name = "magazine box" - desc = "A box for holding large numbers of spare magazines, though nothing is stopping you from putting bullets in there too..." - icon_state = "magazine" - inhand_icon_state = "toolbox_syndi" - /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_lethal_doppler/epic_loot/icons/storage_items.dmi' + 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' @@ -183,40 +120,10 @@ /obj/item/reagent_containers/cup, )) -/obj/item/storage/epic_loot_grenade_case - name = "explosives case" - desc = "A thick-walled case for neatly storing away a collection of grenades. Keep away from fire." - icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' - icon_state = "explosives" - 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_grenade_box - w_class = WEIGHT_CLASS_BULKY - -/datum/storage/maintenance_loot_structure/epic_loot_grenade_box - max_slots = 8 - max_specific_storage = WEIGHT_CLASS_NORMAL - max_total_storage = WEIGHT_CLASS_NORMAL * 8 - screen_max_columns = 4 - numerical_stacking = FALSE - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_1.mp3' - -/datum/storage/maintenance_loot_structure/epic_loot_grenade_box/New() - . = ..() - - can_hold = typecacheof(list( - /obj/item/grenade, - /obj/item/epic_loot/plasma_explosive, - /obj/item/epic_loot/grenade_fuze, - )) - /obj/item/storage/epic_loot_money_case name = "money case" desc = "A heavy duty case for the transportation of (bribe) money." - icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' + 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' @@ -232,7 +139,7 @@ max_total_storage = WEIGHT_CLASS_NORMAL * 6 screen_max_columns = 2 numerical_stacking = FALSE - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_1.mp3' /datum/storage/maintenance_loot_structure/epic_loot_the_money/New() . = ..() @@ -245,7 +152,7 @@ /obj/item/storage/epic_loot_medical_case name = "medical case" desc = "A heavy duty case for the transportation of medical supplies." - icon = 'modular_lethal_doppler/epic_loot/icons/storage_items.dmi' + 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' @@ -261,7 +168,7 @@ max_total_storage = WEIGHT_CLASS_BULKY * 21 screen_max_columns = 7 numerical_stacking = FALSE - opening_sound = 'modular_lethal_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_1.mp3' /datum/storage/maintenance_loot_structure/epic_loot_medkit/New() . = ..() diff --git a/modular_doppler/epic_loot/icons/epic_loot.dmi b/modular_doppler/epic_loot/icons/epic_loot.dmi index 45258d4e6a9c5a0f2166dfabe7ff760affbf1b54..e05a53aefdea62223a1e443587963c3ca620e13f 100644 GIT binary patch literal 11994 zcmaKSbyQSAANJj)K|)Fd5l}%I1O&+?BqRjsPH8FWUJwKXq#G&eSfrapP(otq?(T+N zVwaEi{p&s7`ObIloO|ZXo%!84zd84L=6UW!sJ)jbCZr_<0D$Z7Iij-UnipCRGYB*^%0|OZ6A5pKaP1 zhsoPmw8?SaU0U5-k47ZqNrI|h>UBoFb$OHM6tlz-ASOY76evN$F)5cBv-I5r5yZ*o^4@V&)+nfA3Ku7nhB~&3bdaYR=g3?miXE3usU?zhF0g;JQTAY znT#)yD|#>@#m;`NnLDt4(b~?6^C2d=)TFrOZJdavxV3|^Pt5lFsekN^nwRRZujNUP zX>sxDXx%s*Uj2FZH+onW@b9wy-AF)P9QlYizCuAyIpGT^Qs+}vq@yfbPYqF$HvMe6 zW2(@*1{Y?)Q1$yBIc9Ka_=+CB?6Mp zYe@dkCod8V8KKn_p&_T^Z3c6Y)MYWGBquWhY46LZ_j(KHwCO+s}7i&c%)vx}MKjX2;EaFwR!Y+=^WX_=`HN50 z*yg~8k>|l{-@XvRx}d2mWG4?ge@FHAfyAoAbDsVP>Ue0G7asD9CYcfRR__H5KDmPK z+FKW>^Wi!C5Pf*#*tUCEdVl%e_`_Wn_YQXpn)fD=6FPfEiH!KcjQAEYE|!jq-Zu*d zVUATQs?*hhVigUfVgXJi)?gtgyWKrh*yxt7e&1(7IgnxhweNWf zFkjR2pSZN_woD<*O~i;D2ddx{=37qXL`f`R@9VP#v@0fO{M?s8@zS_xoS(FWU|(#g zX;lj+XLNz()>bV;QiBmR?_DHh8`Q;c`H*@J8^Lz<`i;)t7W|1$r9hFd9b*g-C*zDz zPpS@_YDzU(oA@ge&mH@2ao5eLtg|wm${p{Nb#e37uWDGld+-VtVS0gph0~J!&llUZAX|vS&EdLXRnW&#m6+ zQlWB7Fbr7gZ_edokDrfadmn<)Vg4Z#Nz__rS)TBP=4gUDu4;_=UlnihBg7VcD;I#@ z;5e^@{Z!g@`;eCl%5LK@ zD?ONAlXCH-UC4uqkIxqnaH5{ef@K>p{_$_+e7@^;N2>m zL&4ALYqjOCY3WV zA@Y=QrD!xIrBh45ufoVZqI1e#O2~@~!`vBTFCBDUQ-D3OqoN4y3WaDc&~3u^bkEr4 zV04y`|Dwc;VTjO}QivA7%xgd7R{`~IjhRQ{y>@SjNNSZ~ZRLWFUoQ`)r1+;OHy)og z3tBePTpVeFQ%)t^uv^No-{giem?o!{fqCh;EYMHM1n`$m@X$4mk-^M9<0+8JE{iXA z(Y8h(uuNMB$4zl!wHU^?xQz|2Lr0f81N#qzKHwgacvhG*4ztGZLJQ49C6lG%9~xMB zMWHa)D4WQa(d>B7KFHMabr<{znKe})Fml_RI(JzlI|%rz1oGR3lYVf`sxtsMD*d%i zA&yv4eK7(4vZ@diM)W{iZ=R>3O;1I)@3M$qO>h2*tF*d}T3rT2sRZKa?b9$6c~Ih7 zdGyr`ZfEKN8QF;o#`$F=y9r^Gf?ri<%N-GZk4E|cy+A#DI##%EQ1M@^RkjzEO;8w4 z?Ck{eE#u}kKgHrwz~!mTcqb3{?$v<`Go=z+h4(qP!%oNk(&<^xE*EKxRC%12`GLST2p?n?R9M_KF3X@yqHVaeSh_b+ zB+}E$Q(WpnQ+hP^1Uh|jr@P?nPGKo%`alh?Dqz2)>~f$FOq=K(wd7D5yQybd?`6@) z)c+{8V)Rh-{lUO^`${R0*B9|+B2J!U2VI~P)^dYQ+J(t^&~>Q}4A(>K>gTLMLnN(t3528=h z0SCnML7ok~=m7gvs?Ify>V9Q4DKhN;Db19JLxdaIhGZev$Ht^kicUxqBmTvT7ztx? z;HebIqRk)HGd!$&^b9}uxEg2_H3#n2oxC^Q=^-1XTZR<5SBulL7}V=vUi>#4P+d%4 zB(Ft}xc>3vx1`{cd))pTPLyTy$ZyN<$a?MRJl)z4Y$nPft^aiN56W>u&8_|HmV-2` zxcGB-|Kp{xhodH2+KvdS6u!k6*u5Xw_#OB4*j?u@yQs88?GuTfdT{-oJIkRf=-Jgv zWDwt0BLr=cXl?pyjqakfLn=u!jmlHHB0=|KTp!=s?~_F}KsHHrQZz}gd49v+T=>Q7 zTw`9c7Q6wsdhpe%trWcOpjj-l3_$;4XTN8NF}Fkom(?dQ0s_U8X9*7GUZuI`uaPq5 zg$zhvlS>|alUb8Cx0Sd_NM;%NdBER8P)z|{XD@j3h8vmw#sH|gO?Z@RS1IYP4N~YY zYLZsHQTZpb`9i6mdTYew%?B<$zaUzn_9^oI7MA3i;nE!SN6g&F*idvuLwl7kcRr4J z{}le5UuD}kKRsL^qcR;fx#SWy*2ZEy7Gw*1CB$scJ=Hay}D6T-kjs{HAy=L=dy(IyD(KsfNTCm;ak+w zO}z(73*{;A6tw-V2E42VrD|B5M5}#rQC7?$eE9aFR7*@rQDHybim=yfD#0!~DO8G=^*G+I&#E)^)@=KGtwOeTf~xOjkpzJb_SKN~PYqhbY+D z_=xY}nD&0Z{19SC_YZ!IIVd&tJ_Eydm4`Li&sV0Vu=8Q;04_O`hX4MrpBGgXwXcvW z(pn$@+ix=SN(AfFNhV!&!7=abwdKr8t?0O=?N&UzG@YhNW0*a2RgFhy_BuxFHgxN$ zOMoL2jwEd%2{TmN(ts_7H!~7c3I0fYv9a|}8?Pgf;y+}Q#enM+!03A448npspIf5E{EtzoClKPyaxhhZ{@^|BN z2d^A&dv8L@zkHy|nR>1HG{x@^iyoAw_18YW_cBx#Ey{y$l1Zk3d&y0$9?TGH7~My%|_bz zHT~pMBW_>0;|~hYmUn{^rs<0&?q~XSZ`3I8`Gj?<6E|5m8n60YnhGCSMaZ4FpGmJ6AN$Ahh*&YzPU^?URv4{?570Geh21#CgO zolbVMQDzM-?w^?=YLUVGb(y7Vrg=75&076}Tm$}g!agZQ|~$I5A+=- z9Y9xR1^6NTq67h{@X!=+FU4_b8MfAMJfqa-Acr0`@M@I~4R+?Bz+Ae8ZDYBtpiOV} zvNVOuP`<=omzEa8qyOc*|EnJIO7*$ioS3mra`cbdo{eY}w^X>w&I}X{Pv)-iIlVaV>wkzi+J_Ys$ct0W#dBo$IpY*fx;5ffwkP{?WOvAS{xs>I^0Ga z41lDtIK<^Mdur!~F{!4j)2GNu+46+i(QIvr;LjbenW#&9!TcImLc^XD;#gFjh)LW} zT2~UbL}Qz;)CfDQcDLxmLUy1U!a(gB{!M zmP$IZFi4%8u%ltc0hBc$M{i#E(MxBnMOF{-ny1~J?^h%@EVxqDy&v@(OEY_wBHd6S z@t4Yp%KmJImrJ@DyVNUt#JKF4KA^i_b@4;%=YZ5f#!>#vhsofYGz{;>*!Lyx&gOMI zg0(1eO83|gI#yAk{m+WDxI+Gw@lLBI>X&p^^TldOdxvO;w{Ki#uvf{k*8$5}-o2}- zz=I>fzR&XBekyl(PiH9wFwZzfsGE8W*B}BK^+r0SA3wVUQTa|7v!j{ZJ{oIeNYW38 z-~RLoHFmWH3`{h)j7IQ5z{E%S`;(??Sl7iG7L&oF(KC%h?WVwei z90@I~V4W+F{=jsAchm~Km6kkqQGRb$YRvbf6G0!Uz85%=Y_c{7kce93akm9{W5$)o zvcJn9!OqGnc*P`f9Q)OZj8=5GS3In)f#LSj9dib|Hf~18Kh6x2>tpn389C~J;=jlN z*GK0eJh!WPHvS!CZ*Il?5zZBDKu(=4(QEr5*mw^cy8DkDypg@as!U zABM+JBJh9NRk7#ypp8jF^FSMH_{fPcIGv8US@Upq)AE8_yzyj1akWeaC7*$mFw9Hl z>}&5d0Oe$m;)c~#B59Y3nm%~)KnW5%%7xGBCdLMDOO3?Sn~l8xc9lJB*ZRhXYz{uk zciJ*jjIMtmlQ2d0xC{h?#oz5&8Lz~E^*ZI0Pzy5!PxBh8gXC#!* zhSree-Owj97~-rNFw}W&yZTwT5KAFp2JgY%L3kj%pTnH3i>P0xelSDNO;<#F7b;$54Z1$+&JLT zJDBS}O@N%kCJXHkxBul{#x{>4S(eq*NeI` z?wu;!)5*W8UDo0l9zP#5WLDe_d`63ri3%%4e7{St^6_R(d1ejxSTDJ__|DtJreu@d zP+hc=0QLRX9(lV($`^g7d5`zGzIW&2iWeC-P7excm~Jb5_bwHQV=h~u&a6Q+jreeu zCS1kk@Sm3iv~az_-cpb0H><^QTa;P~A$nxuRs?4!(aR1X$;LhB?p~=MVZN;07;%nD zhYOjOuAX+G{1i^ozW0@Z2DvvmfOIhVQ)$eoS9;f-w<5x5}n%SE!2bBQ$~otenYmH$>8BiWrW@{D)+C?WK9^Pv(fEkR05}99xmL-H? zZd*DD0iqY1SQPrw7oa^BB+9M?*d1 z@Bq(vSe5Zm~$m3W~gsBI};a_EJR%)#P*Qqre{pi zp-Ls!nyMPOmYx1K>5Cf|K(+maG$7_MT6kx@avaTWB&`o9Dd_{yW&)Yx(NKB28U`Cz z$jb0r)K>J8GSvyweg#l{eYJN;zl|4gKC?2U(7`+Luy!4(!~=~E_ym>hi`Mp=0*UD% z2!4A%$|}irpLZ$3-YK|-Gl&)YVhh3yD+N_|(MkG%EmlzJ6YRG?e<-YUJliQ63Db(k zp5H5Tnygr64XRo=JgjIon~uTJgU%_>sEfmA_;0N3F?AIMEt;oyvdX2 z={SR=SHgC5vDztV@qmW;-gTN|={fNwhWaDX$oGMPp7~l-uB4~4LTaa2iJ07X_5*WD zZF(skYQS@@wMe&qlxpR**)bAmt%PX91M$_a&mMZoHX%#4l-yaV z@YBsN_v&$hbp2VnQ_&|;O)mlUhr7r5855UPyPI`Bq6S*lK7L{Zb4DCak<^|O9r38{B2}W(a zt%e!Xa=(ADagg#`>_>z|g}gSTJef=BykkH}lUhg)rG*nhr4?T7fd96*K4gW0=PB~M zU`(IPi?Vss1NEnFQQP@I#u|^{fmBxO)yIWhAC6LX&o6R#>vi3?k|G%4CMkcmGH*16G83h@g9I%IJ^-DP!`k4s z2ZL{NsY(O5{$J=nO!hH9k@1{>qG2AE|&_sdEFP)r(zroaIfX&|)O6VX)Z_N5GHI{=-W8kXMh#tYsS{S^vgOIh`)MJFdpx>~dTJHe z1R@0ND|eC^DBniiiv3CmQeFvLhMX<=nw*{41luT-u5tHj>E~- z-UUmUg}?|?JK@{;6w_x2r#Ny2O37ZEmefv&ZA^d5iBqFeom?wrm|o6!-Fk%4MsQlx z(qw(KiZN~Cl}9V&lz$h~%*#(H73K7#mmNUk3$7F~06m&~u{)IMZYw(1soML|T2u-Y z0ZJ78GdvM8JOStjh^e4JyO@fL(uwwZzt>Q{c4FfNJ9ew21VWlDZrQ!bL2M+nbADv7 z#;T#SRuH)8F1ywnoPzP5YLXaZMxSxA&v{QRO>7~Hyc+pd!H-1)FeJ6vg*1_WDqAp5 zosML3V?$+(LL}DzW|slVJYpe{$2UHEK^^hkU+U)?#=PWtlyCIAtZZhUaxgUwUC#40 zCSq=zhqXW{quC}~`c%D&fu>5HX=oN7Z!0b>}^A zfaak(I$jQR3*z-CgROF4V%5M>=WBH2Ek^5a_9dFN;vvs!kALEpbdPFs`D1v0YIr%y zl?u=THBK==Eezg3tk0NIafGH+K5<L9SYwaWgrYDf~(4y zF6{7}=rF+V$2yyZ**l&BAK5`7TN*fw6fpx-i_21G4YbJRu5)=7+SJ-7Q`5Iy4v33T zqIv=b3P1rRlZ-L^rGiQYBs-7vucv-s$OFYsd|!h<7h{}UvAXAQ{m{tYnX6nS=O6s+ zu^6n4o$$$y(M@1Zy?-u~5R|2%|N2xV8 zDEYLhb@!8XHlXH@D#a(mun5SjP>9km7y40=kmE1qZhY3|AlKzVs(yyCXmi=Ir411u z(z%@H>Ee%`2mEu|)Wu)CMx5n(JI$bW#G>oh`SEPw3K&EMxE9AtKXUg+tqRu+MD%k- z%<)*{Ny_U%`m-)CT;&^7?JrKoUYf?5?fm_{VyW1}lZfY$50Cn1zIYZ(Ij?7ZZp=@Z zxuf50l9;+8e~!s=gd~Ym3V*!y$x+M0&iTZI!YjS-VK~F<{Ug+ZUz4>b@VIxAWd1-u z&@TY{A5`xr$U@p3-FgC4MY@0}^5A`qum$JU_Es|RVjBO$`5-datWE_oum zPv8gZ95R?o8Xz=W0~%z=w-YG{a5zKcetNagP>QliWe*wDzP|ac&OxXW zE!!>BP(>L#lWL^_)zh}=MRwGe;ir-_mPs10Y;o+FKV!kF0E*vJ`wj)tj%(*ULtLqT znI$YuJzLVa*3|u1^r6Si6o&01ccayMO&R#8j9jhMK6*nBbU(_6_M@E|(3-+HnR&7$RvD7BzNEF_W!IuT=qzCV{$?p;lBItU08@u#${af=qngicT~1t8F5+H>$WlVFY$Lyq z@_v-y68M^+$bIV_nI3PU8IaAGzmgAp0x#222RE)glh}09FqYpPf-1T#RsX6PYb(|~pAVU8bPKgr@M0VV4%f5K7qg49L zX=kr?<5#F(CMVENNlwsUuZzz(t`X*;qp>JZ!!Zvt%jMk)%)qRmu5=}K8E?H2UzZce zSyyEXO>hYOXU4nZF68|e(I{ecuOtGuoZPkBY|^ECCL-VMG)r~w1$EHm+|Lgduds`4 zNJA6MjgY!ir&ZB@9MU5K#ntk~Hkt1UC3%|ieTo*FzlNHwb;Wofr-+yKsHllDWXUL8 ziJMcmo!()yIh+jUB|cQ}ATYbawsKP)MnNF&zPDH)8vRIpw%sQgs3ii%9(jBbpQhYi%G=s5FM;kPgsm_193 zRh62{`3EInI{}kleBs)1Kb2KFkNwGmDM+J!#Rs@E2@wu?s$yE}p1CPIL!v^hG$*gp z6MyvS>f;ejY^y#c*8y*zbt4V85w*F`^Cd?WlSo~x+!UUlPSsLMZaRO9J&IDPq08D} zwRe<6rE_~xlW8k`$iY47js*?z6Ptz1Ekvg8VxBIToN_2Jhc}=N8?xyy5)JPp{uGq3?%>is!=*U3GN` z&}N0DgarXe)im1p8k12|5+WZEYQtuZO~`y<{Tpq zzfIFW`%+I3b1+`xp#u@UrdY6lh)Z$juVWZb7dY!`w3zTRXHZ4&)7?2B?Y68%;d5x< z>@&A6Pi6X9eO9B3KIzub=HDOHrPh^@?n(TXsCq-Oz#A#%(60sH}-_Q`3<{3mH1R4h-u)(dM%=>y0hk&_!M>E z!V=Gk(ydm{5jFj=h>!N9!D2Cm{;>y5PrhYiKQ0uJVrebGW}N;wYhh0)0;&I>(A^L_R^DB_)-1`m35!k}y6%A$nWvkKyQ3wzQW)ZkX(2P9I6E8t(P`#sIhm#$WdqR&V+)E)*C@QvZd(g>Ct_aNHZ-5>HQe8)ugwkhDxj+I15Sb$mz@0>geCI50| z1Iy1*_<(bRR$DNDaI1^^jMx89O7xNkJ$B^iV}sGddf#u|sxFDlh(TZdTPuuf(36j& zQ2Goo$JtF0G4|>gsPrAi5bDh~6v)8s1ViAgjlB=akHD;C&_I?SbB#k;cG>&sDxaR- z*pkH~T#aD-@-3r+_9)+C)ZlL;7*F&sXFxaQ}W;4M>`hDN)Fog_T%PdkA{e^&~M9)76>C$4s31P9 z#gv4gjYy?^WdT~aw^bOMj90C_V{4}$!ZHOe76t8n&+bjf{kM~zAGh@-VcGMMi7l_~ zMAV_CMK13s(Q-IK-MWenlhF?KI$;!1-kM>bW;iB8>k zr+)Sfh_!$9i$V?VvMhaZ7rwVDA5BYvxgq~D<5P|!(y1VpwBTFO;-UUWa~%wo zcs(e`42}0s?^q%3K_#M?!qtzU#6D#vrRT~QgV9GT@-6*g7I!5Zo_G;+Ld4Q3otw1K zO;jK|TF|W!Z*Frpg~jzpbhl;2Rw%JkKvV8f~wttiorB+sNn3w@0O(#8@^H z=5XJwdryHFYSLjFg+7n(j&JoB+hcJWM5M36isHFcj|bVI_P2r!>gyrFqG{`}LYINI zp>*Vl^Pz3;q>-&_4e`q-Hu8C{Hq&nnD7kJUEWTwgsopphiU@WIZ`yU#Z(Vn*HvS=PTyE|* zd4aAmgp7$c7Q#7Z*-edY2e(cFlGBfF^BWo>w%!GBF`9%*XFMg! zxrc1qtiYg(^>t=;9?P942iD>Z*{hZO=pB8&ldGC5;klNNdhVO9WAhdoCCV%k-%BXB zwou8uF*RBCHTd0pMmWPfn2~p}%l|SM5$%O!@%_%GuJl7O4v2#u)ShA>;Y*>>`Q7C$ zlpq(k!5i_ZOL{0a1#`U~&V5sIf_ACK8}Sq!QtW=Uwu~IICq>p&6~nCznvagt&Uv@*avZNeOD=F3pmT1S?*~Ajr^x+7C%JrCneyt zQNREdB70~>!$(k=kp6h$(vVJb_H<8SyYV>9jEr-C4yNMk2AvE%8Z$ZPqOf_iwTYCbm zeG_NsWw}yeIHolfJWco`#wA2FS(3l3{cjhdY z1Ac}UBNw?jB^_3M_Q~CEHo>$O&xUoWoUhSFENg$9qqXlp-M@OE@tyEEmT6O^f6(u? zw7gP^xxT8B{J)0MLZ1QB4>Bnw7u?zKpK@JTvV+uQZzLCNb6V=g)nHVDlbIoe8{0QK z9phAgluTyB)VIUxgQnGJQMzWYD3g_5^A=uwxPL?b5fz|tMoKC>oQMNCEuI6r7(LwG zHWCq+3o46r@A)riP8S<6cGF5kcf6tl?R|rnJh(qMQd%%1w;T`-FHvA)kFxE)R_F+F gdGHKh+6%)FL0Z)IHXp?IpQG#VWZ%DqNt*`$A0axBs{jB1 literal 16364 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 CMK8wy diff --git a/modular_doppler/epic_loot/icons/loot_structures.dmi b/modular_doppler/epic_loot/icons/loot_structures.dmi index 05213d941413bb462fb53eaf5f622cd4f605d400..213c69849cfef48d5676de50e47b081052320805 100644 GIT binary patch delta 11456 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 Sbpq(-d!eHJtXjz?;{O3u%I}f@ delta 12837 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 literal 4048 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 Date: Sat, 30 Nov 2024 02:57:10 -0600 Subject: [PATCH 5/9] sounds --- modular_doppler/epic_loot/code/_basetype.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/ammo_box.dm | 2 +- .../epic_loot/code/loot_structures/computer_tower.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/files.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/grenade_box.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/gun_case.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/large_crate.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/medbox.dm | 2 +- .../epic_loot/code/loot_structures/military_case.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/register.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/safe.dm | 2 +- modular_doppler/epic_loot/code/loot_structures/toolbox.dm | 2 +- .../epic_loot/code/storage_containers/containers.dm | 4 ++-- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/modular_doppler/epic_loot/code/_basetype.dm b/modular_doppler/epic_loot/code/_basetype.dm index ae29b44ee8153..3d4a84a43978f 100644 --- a/modular_doppler/epic_loot/code/_basetype.dm +++ b/modular_doppler/epic_loot/code/_basetype.dm @@ -59,7 +59,7 @@ 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/containers/plastic.mp3' + var/opening_sound = 'modular_doppler/epic_loot/sound/plastic.mp3' /datum/storage/maintenance_loot_structure/open_storage(mob/to_show) . = ..() diff --git a/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm b/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm index 9c9b9a052c2bd..d9d5f0f21e060 100644 --- a/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm +++ b/modular_doppler/epic_loot/code/loot_structures/ammo_box.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 6 screen_max_columns = 3 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/ammo_box name = "small shipping crate" diff --git a/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm b/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm index fa17c520bb1a3..b53491ae61b63 100644 --- a/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm +++ b/modular_doppler/epic_loot/code/loot_structures/computer_tower.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 4 screen_max_columns = 2 - opening_sound = 'modular_doppler/epic_loot/sound/containers/plastic.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/plastic.mp3' /obj/structure/maintenance_loot_structure/computer_tower name = "computer tower" diff --git a/modular_doppler/epic_loot/code/loot_structures/files.dm b/modular_doppler/epic_loot/code/loot_structures/files.dm index cce371e9a257f..5a0557ffcdd6f 100644 --- a/modular_doppler/epic_loot/code/loot_structures/files.dm +++ b/modular_doppler/epic_loot/code/loot_structures/files.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 6 screen_max_columns = 2 - opening_sound = 'modular_doppler/epic_loot/sound/containers/cabinet.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/cabinet.mp3' /obj/structure/maintenance_loot_structure/file_cabinet name = "filing cabinet" diff --git a/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm index 12e3c10decaba..df773672fec76 100644 --- a/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm +++ b/modular_doppler/epic_loot/code/loot_structures/grenade_box.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 4 screen_max_columns = 2 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_2.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_2.mp3' /obj/structure/maintenance_loot_structure/grenade_box name = "small shipping crate" diff --git a/modular_doppler/epic_loot/code/loot_structures/gun_case.dm b/modular_doppler/epic_loot/code/loot_structures/gun_case.dm index 813f75c8ff6fa..fa7d384e057bd 100644 --- a/modular_doppler/epic_loot/code/loot_structures/gun_case.dm +++ b/modular_doppler/epic_loot/code/loot_structures/gun_case.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 4 screen_max_columns = 4 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/gun_box name = "shipping crate" diff --git a/modular_doppler/epic_loot/code/loot_structures/large_crate.dm b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm index eb67418106c45..1164a42b17a7f 100644 --- a/modular_doppler/epic_loot/code/loot_structures/large_crate.dm +++ b/modular_doppler/epic_loot/code/loot_structures/large_crate.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 16 screen_max_columns = 4 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/large_crate name = "provision transport crate" diff --git a/modular_doppler/epic_loot/code/loot_structures/medbox.dm b/modular_doppler/epic_loot/code/loot_structures/medbox.dm index 3ffd2a6a387f7..40ffab841a33d 100644 --- a/modular_doppler/epic_loot/code/loot_structures/medbox.dm +++ b/modular_doppler/epic_loot/code/loot_structures/medbox.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 6 screen_max_columns = 3 - opening_sound = 'modular_doppler/epic_loot/sound/containers/plastic.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/plastic.mp3' /obj/structure/maintenance_loot_structure/medbox name = "emergency medical box" diff --git a/modular_doppler/epic_loot/code/loot_structures/military_case.dm b/modular_doppler/epic_loot/code/loot_structures/military_case.dm index cdf65c5ea337b..0b26b90cf3e74 100644 --- a/modular_doppler/epic_loot/code/loot_structures/military_case.dm +++ b/modular_doppler/epic_loot/code/loot_structures/military_case.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 8 screen_max_columns = 4 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/military_case name = "large shipping crate" diff --git a/modular_doppler/epic_loot/code/loot_structures/register.dm b/modular_doppler/epic_loot/code/loot_structures/register.dm index 63536361c71d6..0013d6d7761a3 100644 --- a/modular_doppler/epic_loot/code/loot_structures/register.dm +++ b/modular_doppler/epic_loot/code/loot_structures/register.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 2 screen_max_columns = 2 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_2.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_2.mp3' /obj/structure/maintenance_loot_structure/register name = "credits register" diff --git a/modular_doppler/epic_loot/code/loot_structures/safe.dm b/modular_doppler/epic_loot/code/loot_structures/safe.dm index 242ab0f1e1ac1..2b5342e028805 100644 --- a/modular_doppler/epic_loot/code/loot_structures/safe.dm +++ b/modular_doppler/epic_loot/code/loot_structures/safe.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_NORMAL max_total_storage = WEIGHT_CLASS_NORMAL * 2 screen_max_columns = 1 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_3.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_3.mp3' /obj/structure/maintenance_loot_structure/desk_safe name = "compact safe" diff --git a/modular_doppler/epic_loot/code/loot_structures/toolbox.dm b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm index bbb542bde6fb2..43e2babff2852 100644 --- a/modular_doppler/epic_loot/code/loot_structures/toolbox.dm +++ b/modular_doppler/epic_loot/code/loot_structures/toolbox.dm @@ -3,7 +3,7 @@ max_specific_storage = WEIGHT_CLASS_BULKY max_total_storage = WEIGHT_CLASS_BULKY * 6 screen_max_columns = 3 - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_1.mp3' /obj/structure/maintenance_loot_structure/toolbox name = "heavy toolbox" diff --git a/modular_doppler/epic_loot/code/storage_containers/containers.dm b/modular_doppler/epic_loot/code/storage_containers/containers.dm index 738879630f528..682315b83a58b 100644 --- a/modular_doppler/epic_loot/code/storage_containers/containers.dm +++ b/modular_doppler/epic_loot/code/storage_containers/containers.dm @@ -139,7 +139,7 @@ max_total_storage = WEIGHT_CLASS_NORMAL * 6 screen_max_columns = 2 numerical_stacking = FALSE - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_1.mp3' /datum/storage/maintenance_loot_structure/epic_loot_the_money/New() . = ..() @@ -168,7 +168,7 @@ max_total_storage = WEIGHT_CLASS_BULKY * 21 screen_max_columns = 7 numerical_stacking = FALSE - opening_sound = 'modular_doppler/epic_loot/sound/containers/wood_crate_1.mp3' + opening_sound = 'modular_doppler/epic_loot/sound/wood_crate_1.mp3' /datum/storage/maintenance_loot_structure/epic_loot_medkit/New() . = ..() From 76223d118ab7eabe36f7f51c5839081b025957da Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Sat, 30 Nov 2024 03:08:24 -0600 Subject: [PATCH 6/9] yeah! --- .../epic_loot/code/random_spawners_real.dm | 2 +- .../epic_loot/code/where_they_spawn.dm | 42 ++++++ .../objects_and_structures/code/structure.dm | 16 -- .../objects_and_structures/code/trash_pile.dm | 138 ------------------ tgstation.dme | 3 +- 5 files changed, 44 insertions(+), 157 deletions(-) create mode 100644 modular_doppler/epic_loot/code/where_they_spawn.dm delete mode 100644 modular_doppler/objects_and_structures/code/structure.dm delete mode 100644 modular_doppler/objects_and_structures/code/trash_pile.dm diff --git a/modular_doppler/epic_loot/code/random_spawners_real.dm b/modular_doppler/epic_loot/code/random_spawners_real.dm index cc8080f4cd3cd..5a7f2018c60d2 100644 --- a/modular_doppler/epic_loot/code/random_spawners_real.dm +++ b/modular_doppler/epic_loot/code/random_spawners_real.dm @@ -664,7 +664,7 @@ // Maint structure spawner /obj/effect/spawner/random/epic_loot/random_maint_loot_structure - name = "random maintenance loot structure spawner" + 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" 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/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 7bb5408bdf736..a4d812854bc35 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6646,6 +6646,7 @@ #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" @@ -7151,9 +7152,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" From 7bb7b98724443af085e1d60f1d6e4f760ec5bf6f Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Sat, 30 Nov 2024 03:16:02 -0600 Subject: [PATCH 7/9] read this nerd --- modular_doppler/epic_loot/code/_basetype.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modular_doppler/epic_loot/code/_basetype.dm b/modular_doppler/epic_loot/code/_basetype.dm index 3d4a84a43978f..48a1a91349a38 100644 --- a/modular_doppler/epic_loot/code/_basetype.dm +++ b/modular_doppler/epic_loot/code/_basetype.dm @@ -79,6 +79,5 @@ /obj/item/epic_loot/examine(mob/user) . = ..() - . += span_engradio("You can probably sell this for some good money if you have no other use for it.") - . += span_engradio("Examine this closer to see what it can be used for.") + . += span_engradio("You should probably sell or recycle this.") return . From a19b4594cec3f594a97810411bebdd4e352756c6 Mon Sep 17 00:00:00 2001 From: Paxilmaniac Date: Sat, 30 Nov 2024 03:20:18 -0600 Subject: [PATCH 8/9] adds some comical books to documents spawns --- modular_doppler/epic_loot/code/random_spawners_real.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modular_doppler/epic_loot/code/random_spawners_real.dm b/modular_doppler/epic_loot/code/random_spawners_real.dm index 5a7f2018c60d2..eab701f4a1391 100644 --- a/modular_doppler/epic_loot/code/random_spawners_real.dm +++ b/modular_doppler/epic_loot/code/random_spawners_real.dm @@ -508,6 +508,12 @@ /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 From db3aa101b14964dfedd927373674d25a9ecab987 Mon Sep 17 00:00:00 2001 From: Recoherent Date: Wed, 4 Dec 2024 17:53:03 -0600 Subject: [PATCH 9/9] hacky descriptionthing bad but it's already hacky in the first place --- code/modules/paperwork/paperwork.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm index 2acedcf00f093..9c88bb61a68c2 100644 --- a/code/modules/paperwork/paperwork.dm +++ b/code/modules/paperwork/paperwork.dm @@ -61,6 +61,10 @@ add_stamp() return TRUE +/obj/item/paperwork/examine(mob/user) // DOPPLER EDIT - paperwork has more description, modifying examine to fake the standard extended examine text + . = ..() + . += span_notice("This item could be examined further...") + /obj/item/paperwork/examine_more(mob/user) . = ..()