diff --git a/code/datums/supplypacks/supplypacks.dm b/code/datums/supplypacks/supplypacks.dm
index d419198af3..14e97cce7a 100644
--- a/code/datums/supplypacks/supplypacks.dm
+++ b/code/datums/supplypacks/supplypacks.dm
@@ -23,6 +23,7 @@ var/list/all_supply_groups = list("Atmospherics",
"Science",
"Security",
"Supplies",
+ "Vendor Refills",
"Voidsuits")
/datum/supply_pack
diff --git a/code/datums/supplypacks/vending_refills_vr.dm b/code/datums/supplypacks/vending_refills_vr.dm
new file mode 100644
index 0000000000..47ee538d7e
--- /dev/null
+++ b/code/datums/supplypacks/vending_refills_vr.dm
@@ -0,0 +1,137 @@
+/datum/supply_pack/vending_refills
+ group = "Vendor Refills"
+ containertype = /obj/structure/closet/crate/plastic
+ containername = "vendor refill cartridge crate"
+
+/datum/supply_pack/randomised/vending_refills
+ group = "Vendor Refills"
+ containertype = /obj/structure/closet/crate/plastic
+ containername = "vendor refill cartridge crate"
+
+/datum/supply_pack/vending_refills/snack
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snack)
+ name = "Getmore Chocolate Corp Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/fitness
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/fitness)
+ name = "SweatMAX Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/hotfood
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/hotfood)
+ name = "Hot Foods Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/weeb
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/weeb)
+ name = "Nippon-tan Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/sol
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/sol)
+ name = "Sol-Snacks Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/snix
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snix)
+ name = "Snix Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/snlvend
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snlvend)
+ name = "Shop-n-Large Snacks Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/sovietvend
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/sovietvend)
+ name = "Ration Station Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/coffee
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/coffee)
+ name = "Hot Drinks Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/cola
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/cola)
+ name = "Robust Softdrinks Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/cola_soft
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft)
+ name = "Soft Robustdrinks Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/sovietsoda
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda)
+ name = "BODA Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/bepis
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/drink/bepis)
+ name = "Bepis Softdrinks Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/cigarette
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/cigarette)
+ name = "Cigarette Vendor Refill Cartridge"
+ cost = 15
+
+/datum/supply_pack/vending_refills/wardrobe
+ contains = list(/obj/item/weapon/refill_cartridge/multitype/wardrobe)
+ name = "Wardrobe Vendor Refill Cartridge"
+ cost = 10
+
+/datum/supply_pack/vending_refills/giftvendor
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/giftvendor)
+ name = "AlliCo Baubles and Confectionaries Vendor Refill Cartridge"
+ cost = 20
+
+/datum/supply_pack/vending_refills/general_food
+ contains = list(/obj/item/weapon/refill_cartridge/multitype/food = 5)
+ name = "5-Pack Food Vendor Refill Cartridges"
+ cost = 75
+
+/datum/supply_pack/vending_refills/general_drink
+ contains = list(/obj/item/weapon/refill_cartridge/multitype/drink = 5)
+ name = "5-Pack Drink Vendor Refill Cartridges"
+ cost = 75
+
+/datum/supply_pack/vending_refills/general_clothing
+ contains = list(/obj/item/weapon/refill_cartridge/multitype/clothing = 5)
+ name = "5-Pack Clothing Vendor Refill Cartridges"
+ cost = 75
+
+/datum/supply_pack/vending_refills/general_technical
+ contains = list(/obj/item/weapon/refill_cartridge/multitype/technical = 5)
+ name = "5-Pack Technical Vendor Refill Cartridges"
+ cost = 75
+
+/datum/supply_pack/vending_refills/general_specialty
+ contains = list(/obj/item/weapon/refill_cartridge/multitype/specialty = 5)
+ name = "5-Pack Specialty Vendor Refill Cartridges"
+ cost = 150
+
+/datum/supply_pack/randomised/vending_refills/value_pack // 5 random vendor-specific cartridges at lower average price. But why?
+ num_contained = 5
+ contains = list(/obj/item/weapon/refill_cartridge/autoname/food/snack,
+ /obj/item/weapon/refill_cartridge/autoname/food/fitness,
+ /obj/item/weapon/refill_cartridge/autoname/food/hotfood,
+ /obj/item/weapon/refill_cartridge/autoname/food/weeb,
+ /obj/item/weapon/refill_cartridge/autoname/food/sol,
+ /obj/item/weapon/refill_cartridge/autoname/food/snix,
+ /obj/item/weapon/refill_cartridge/autoname/food/snlvend,
+ /obj/item/weapon/refill_cartridge/autoname/food/sovietvend,
+ /obj/item/weapon/refill_cartridge/autoname/drink/coffee,
+ /obj/item/weapon/refill_cartridge/autoname/drink/cola,
+ /obj/item/weapon/refill_cartridge/autoname/drink/cola_soft,
+ /obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda,
+ /obj/item/weapon/refill_cartridge/autoname/drink/bepis,
+ /obj/item/weapon/refill_cartridge/autoname/cigarette,
+ /obj/item/weapon/refill_cartridge/multitype/wardrobe,
+ /obj/item/weapon/refill_cartridge/autoname/technical/assist,
+ /obj/item/weapon/refill_cartridge/autoname/technical/tool,
+ /obj/item/weapon/refill_cartridge/autoname/giftvendor)
+ name = "5-pack Extra-Cheap Vendor Refill Cartridges"
+ cost = 35
\ No newline at end of file
diff --git a/code/datums/vending/stored_item.dm b/code/datums/vending/stored_item.dm
index 7af6029bd5..fecc362c88 100644
--- a/code/datums/vending/stored_item.dm
+++ b/code/datums/vending/stored_item.dm
@@ -65,7 +65,12 @@
var/new_product = new item_path(stored)
instances += new_product
-
+/datum/stored_item/proc/refill_products(var/refill_amount)
+ if(!instances)
+ init_products()
+ for(var/i = 1 to refill_amount)
+ var/new_product = new item_path(stored)
+ instances += new_product
/datum/stored_item/stack/get_amount()
return amount
diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm
index 09a9b480aa..f073f3f396 100644
--- a/code/modules/economy/vending.dm
+++ b/code/modules/economy/vending.dm
@@ -42,6 +42,10 @@
var/list/prices = list() // Prices for each item, list(/type/path = price), items not in the list don't have a price.
/// Set automatically, enables pricing
var/has_prices = FALSE
+ // This one is used for refill cartridge use.
+ var/list/refill = list() // For each, use the following pattern:
+ // Enables refilling with appropriate cartridges
+ var/refillable = TRUE
// List of vending_product items available.
var/list/product_records = list()
@@ -126,12 +130,31 @@ GLOBAL_LIST_EMPTY(vending_products)
if(LAZYLEN(premium))
has_premium = TRUE
+
+ if(!LAZYLEN(refill) && refillable) // Manually setting refill list prevents the automatic population. By default filled with all entries from normal product.
+ refill += products
+
LAZYCLEARLIST(products)
LAZYCLEARLIST(contraband)
LAZYCLEARLIST(premium)
LAZYCLEARLIST(prices)
all_products.Cut()
+/obj/machinery/vending/proc/refill_inventory()
+ if(!(LAZYLEN(refill))) //This shouldn't happen, but just in case...
+ return
+
+ for(var/entry in refill)
+ var/datum/stored_item/vending_product/current_product
+ for(var/datum/stored_item/vending_product/product in product_records)
+ if(product.item_path == entry)
+ current_product = product
+ break
+ if(!current_product)
+ continue
+ else
+ current_product.refill_products(refill[entry])
+
/obj/machinery/vending/Destroy()
qdel(wires)
wires = null
@@ -170,6 +193,29 @@ GLOBAL_LIST_EMPTY(vending_products)
if(I || istype(W, /obj/item/weapon/spacecash))
attack_hand(user)
return
+ else if(istype(W, /obj/item/weapon/refill_cartridge))
+ if(stat & (BROKEN|NOPOWER))
+ to_chat(user, "You cannot refill [src] while it is not functioning.")
+ return
+ if(!anchored)
+ to_chat(user, "You cannot refill [src] while it is not secured.")
+ return
+ if(panel_open)
+ to_chat(user, "You cannot refill [src] while it's panel is open.")
+ return
+ if(!refillable)
+ to_chat(user, "\the [src] does not have a refill port.")
+ return
+ var/obj/item/weapon/refill_cartridge/RC = W
+ if(RC.can_refill(src))
+ to_chat(user, "You refill [src] using [RC].")
+ user.drop_from_inventory(RC)
+ qdel(RC)
+ refill_inventory()
+ return
+ else
+ to_chat(user, "You cannot refill [src] with [RC].")
+ return
else if(W.is_screwdriver())
panel_open = !panel_open
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm
index d0213216ed..f60863e1d0 100644
--- a/code/modules/economy/vending_machines_vr.dm
+++ b/code/modules/economy/vending_machines_vr.dm
@@ -23,6 +23,8 @@
/obj/item/clothing/glasses/omnihud/med = 4, /obj/item/device/glasses_kit = 1, /obj/item/weapon/storage/quickdraw/syringe_case = 4)
..()
+// Food Machines (for event/away maps)
+
//I want this not just as part of the zoo. ;v
/obj/machinery/vending/food
name = "Food-O-Mat"
@@ -234,20 +236,7 @@
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/tofurkey = 10)
vend_delay = 10
-//End of food event machines
-
-/* For later, then
-/obj/machinery/vending/weapon_machine
- name = "Frozen Star Guns&Ammo"
- desc = "A self-defense equipment vending machine. When you need to take care of that clown."
- product_slogans = "The best defense is good offense!;Buy for your whole family today!;Nobody can outsmart bullet!;God created man - Frozen Star made them EQUAL!;Nobody can outsmart bullet!;Stupidity can be cured! By LEAD.;Dead kids can't bully your children!"
- product_ads = "Stunning!;Take justice in your own hands!;LEADearship!"
- icon = 'icons/obj/vending_vr.dmi'
- icon_state = "weapon"
- products = list(/obj/item/device/flash = 6,/obj/item/weapon/reagent_containers/spray/pepper = 6, /obj/item/weapon/gun/projectile/olivaw = 5, /obj/item/weapon/gun/projectile/giskard = 5, /obj/item/ammo_magazine/mg/cl32/rubber = 20)
- contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6)
- prices = list(/obj/item/device/flash = 600,/obj/item/weapon/reagent_containers/spray/pepper = 800, /obj/item/weapon/gun/projectile/olivaw = 1600, /obj/item/weapon/gun/projectile/giskard = 1200, /obj/item/ammo_magazine/mg/cl32/rubber = 200)
-*/
+// Food Machines (for event/away maps)
/obj/machinery/vending/fitness/New()
products += list(/obj/item/weapon/reagent_containers/food/snacks/liquidprotein = 8)
@@ -271,6 +260,75 @@
req_log_access = access_cmo
has_logs = 1
+<<<<<<< HEAD
+=======
+//Airlock antitox vendor
+/obj/machinery/vending/wallmed_airlock
+ name = "Airlock NanoMed"
+ desc = "Wall-mounted Medical Equipment dispenser. This limited-use version dispenses antitoxins with mild painkillers for surface EVAs."
+ icon_state = "wallmed"
+ density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
+ products = list(/obj/item/weapon/reagent_containers/pill/airlock = 20)
+ contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2)
+ req_log_access = access_cmo
+ has_logs = 1
+
+/obj/machinery/seed_storage/brig
+ name = "Prisoners' food seed storage"
+ starting_seeds = list(
+ /obj/item/seeds/appleseed = 3,
+ /obj/item/seeds/bananaseed = 3,
+ /obj/item/seeds/berryseed = 3,
+ /obj/item/seeds/cabbageseed = 3,
+ /obj/item/seeds/carrotseed = 3,
+ /obj/item/seeds/celery = 3,
+ /obj/item/seeds/chantermycelium = 3,
+ /obj/item/seeds/cherryseed = 3,
+ /obj/item/seeds/chiliseed = 3,
+ /obj/item/seeds/cocoapodseed = 3,
+ /obj/item/seeds/cornseed = 3,
+ /obj/item/seeds/durian = 3,
+ /obj/item/seeds/eggplantseed = 3,
+ /obj/item/seeds/grapeseed = 3,
+ /obj/item/seeds/grassseed = 3,
+ /obj/item/seeds/replicapod = 3,
+ /obj/item/seeds/lavenderseed = 3,
+ /obj/item/seeds/lemonseed = 3,
+ /obj/item/seeds/lettuce = 3,
+ /obj/item/seeds/limeseed = 3,
+ /obj/item/seeds/mtearseed = 2,
+ /obj/item/seeds/orangeseed = 3,
+ /obj/item/seeds/onionseed = 3,
+ /obj/item/seeds/peanutseed = 3,
+ /obj/item/seeds/plumpmycelium = 3,
+ /obj/item/seeds/poppyseed = 3,
+ /obj/item/seeds/potatoseed = 3,
+ /obj/item/seeds/pumpkinseed = 3,
+ /obj/item/seeds/rhubarb = 3,
+ /obj/item/seeds/riceseed = 3,
+ /obj/item/seeds/rose = 3,
+ /obj/item/seeds/soyaseed = 3,
+ /obj/item/seeds/pineapple = 3,
+ /obj/item/seeds/sugarcaneseed = 3,
+ /obj/item/seeds/sunflowerseed = 3,
+ /obj/item/seeds/shandseed = 2,
+ /obj/item/seeds/tobaccoseed = 3,
+ /obj/item/seeds/tomatoseed = 3,
+ /obj/item/seeds/towermycelium = 3,
+ /obj/item/seeds/vanilla = 3,
+ /obj/item/seeds/watermelonseed = 3,
+ /obj/item/seeds/wheatseed = 3,
+ /obj/item/seeds/whitebeetseed = 3,
+ /obj/item/seeds/wabback = 2)
+
+/obj/machinery/vending/hydronutrients/brig
+ name = "Brig NutriMax"
+ desc = "A plant nutrients vendor. Seems some items aren't included."
+ products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20,
+ /obj/item/weapon/reagent_containers/glass/beaker = 4,/obj/item/weapon/storage/bag/plants = 5)
+ premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
+
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/machinery/vending/abductor
name = "Abduct-U"
desc = "A mysterious machine which can fabricate many tools for acquiring test subjects."
@@ -294,7 +352,13 @@
/obj/item/device/perfect_tele/alien = 1
)
vend_delay = 15
+<<<<<<< HEAD
+=======
+
+// Loadout Vending Machines Start
+
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/machinery/vending/loadout
name = "Fingers and Toes"
desc = "A special vendor for gloves and shoes!"
@@ -749,7 +813,10 @@
/obj/item/clothing/under/dress/maid = 5,
/obj/item/clothing/under/dress/maid/sexy = 5,
/obj/item/clothing/under/dress/maid/janitor = 5,
+<<<<<<< HEAD
/obj/item/clothing/under/harness = 5, //CHOMP Edit: Added gear harness,
+=======
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/item/clothing/under/moderncoat = 5,
/obj/item/clothing/under/permit = 5,
/obj/item/clothing/under/oldwoman = 5,
@@ -1037,6 +1104,7 @@
premium = list(/obj/item/clothing/under/color/rainbow = 1)
contraband = list(/obj/item/clothing/under/rank/clown = 1)
+<<<<<<< HEAD
//////////////////START OF CHIPS CO. VENDORS//////////////////
/obj/machinery/vending/loadout/gadget
@@ -1130,6 +1198,8 @@
//////////////////END OF CHIPS CO. VENDORS//////////////////
+=======
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/machinery/vending/loadout/loadout_misc
name = "Bits and Bobs"
desc = "A special vendor for things and also stuff!"
@@ -1166,8 +1236,12 @@
product_ads = "Dress your best! It's what big D would want.;Overwear for all occasions!;Big D has what you need if what you need is some form of jacket!;Need a new hoodie? Bid D has you covered.;Big D says you need a new suit!;Big D smiles when he sees you in one of his coats!"
icon_state = "suit"
vend_delay = 16
+<<<<<<< HEAD
products = list(/obj/item/clothing/suit/storage/toggle/labcoat/old = 100,
/obj/item/clothing/suit/storage/apron = 5,
+=======
+ products = list(/obj/item/clothing/suit/storage/apron = 5,
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/item/clothing/suit/storage/flannel/aqua = 5,
/obj/item/clothing/suit/storage/toggle/bomber = 5,
/obj/item/clothing/suit/storage/bomber/alt = 5,
@@ -1210,6 +1284,10 @@
/obj/item/clothing/suit/storage/toggle/labcoat/pink = 5,
/obj/item/clothing/suit/storage/toggle/labcoat/red = 5,
/obj/item/clothing/suit/storage/toggle/labcoat/yellow = 5,
+<<<<<<< HEAD
+=======
+ /obj/item/clothing/suit/storage/toggle/labcoat/old = 5,
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/item/clothing/suit/leathercoat = 5,
/obj/item/clothing/suit/storage/toggle/leather_jacket = 5,
/obj/item/clothing/suit/storage/leather_jacket_alt = 5,
@@ -1234,6 +1312,10 @@
/obj/item/clothing/suit/jacket/puffer/vest = 5,
/obj/item/clothing/suit/storage/flannel/red = 5,
/obj/item/clothing/suit/unathi/robe = 5,
+<<<<<<< HEAD
+=======
+ /obj/item/clothing/suit/storage/snowsuit = 5,
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
/obj/item/clothing/suit/storage/toggle/internalaffairs = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket = 5,
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5,
@@ -1297,6 +1379,7 @@
/obj/item/clothing/suit/storage/toggle/labcoat/pink = 100,
/obj/item/clothing/suit/storage/toggle/labcoat/red = 100,
/obj/item/clothing/suit/storage/toggle/labcoat/yellow = 100,
+ /obj/item/clothing/suit/storage/toggle/labcoat/old = 100,
/obj/item/clothing/suit/leathercoat = 100,
/obj/item/clothing/suit/storage/toggle/leather_jacket = 100,
/obj/item/clothing/suit/storage/leather_jacket_alt = 100,
@@ -1489,6 +1572,67 @@
contraband = list(/obj/item/clothing/head/syndicatefake = 1,
/obj/item/clothing/suit/syndicatefake = 1)
+/obj/machinery/vending/loadout/gadget
+ name = "Chips Co."
+ desc = "A special vendor for devices and gadgets."
+ product_ads = "You can't RESIST our great deals!;Feeling disconnected? We have a gadget for you!;You know you have the capacity to buy our capacitors!;FILL THAT HOLE IN YOUR HEART WITH OUR PLASTIC DISTRACTIONS!!!;Devices for everyone! Chips Co.!;ROBUST INVENTORY, GREAT PRICES! ;DON'T FORGET THE oyPAD 13s PRO! ON SALE NOW, ONLY ONE THOUSAND THALERS!"
+ icon_state = "gadgets"
+ vend_delay = 11
+ products = list(/obj/item/clothing/suit/circuitry = 1,
+ /obj/item/clothing/head/circuitry = 1,
+ /obj/item/clothing/shoes/circuitry = 1,
+ /obj/item/clothing/gloves/circuitry = 1,
+ /obj/item/clothing/under/circuitry = 1,
+ /obj/item/clothing/glasses/circuitry = 1,
+ /obj/item/clothing/ears/circuitry = 1,
+ /obj/item/device/text_to_speech = 5,
+ /obj/item/device/paicard = 5,
+ /obj/item/device/communicator = 10,
+ /obj/item/device/communicator/watch = 10,
+ /obj/item/device/radio = 10,
+ /obj/item/device/camera = 5,
+ /obj/item/device/taperecorder = 5,
+ /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 5,
+ /obj/item/device/pda = 10,
+ /obj/item/device/radio/headset = 10,
+ /obj/item/device/flashlight = 5,
+ /obj/item/device/laser_pointer = 3,
+ /obj/item/clothing/glasses/omnihud = 10,
+ /obj/item/device/walkpod = 5,
+ /obj/item/device/juke_remote = 1,
+ /obj/item/instrument/piano_synth/headphones = 2, // You're making a subsystem do work, I don't want it TOO busy
+ /obj/item/instrument/piano_synth/headphones/spacepods = 2,
+ /obj/item/clothing/gloves/bluespace = 5)
+ prices = list(/obj/item/clothing/suit/circuitry = 100,
+ /obj/item/clothing/head/circuitry = 100,
+ /obj/item/clothing/shoes/circuitry = 100,
+ /obj/item/clothing/gloves/circuitry = 100,
+ /obj/item/clothing/under/circuitry = 100,
+ /obj/item/clothing/glasses/circuitry = 100,
+ /obj/item/clothing/ears/circuitry = 100,
+ /obj/item/device/text_to_speech = 300,
+ /obj/item/device/paicard = 100,
+ /obj/item/device/communicator = 100,
+ /obj/item/device/communicator/watch = 100,
+ /obj/item/device/radio = 100,
+ /obj/item/device/camera = 100,
+ /obj/item/device/taperecorder = 100,
+ /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 1000,
+ /obj/item/device/pda = 50,
+ /obj/item/device/radio/headset = 50,
+ /obj/item/device/flashlight = 100,
+ /obj/item/device/laser_pointer = 200,
+ /obj/item/clothing/glasses/omnihud = 100,
+ /obj/item/device/walkpod = 300,
+ /obj/item/device/juke_remote = 1000,
+ /obj/item/instrument/piano_synth/headphones = 200,
+ /obj/item/instrument/piano_synth/headphones/spacepods = 600,
+ /obj/item/clothing/gloves/bluespace = 500)
+ premium = list(/obj/item/device/perfect_tele/one_beacon = 1)
+ contraband = list(/obj/item/weapon/disk/nifsoft/compliance = 1)
+
+// Loadout Vending Machines End
+
/obj/machinery/vending/entertainer
name = "Thespian's Delight"
desc = "Sometimes nerds need costumes!"
@@ -1580,6 +1724,7 @@
/obj/item/clothing/shoes/knight_costume = 3,
/obj/item/clothing/shoes/knight_costume/black = 3)
+// Event Loadout Vending Machines Start
/obj/machinery/vending/event //FOR FACILITATING AND EQUIPPING EVENTS, DO NOT PLACE ON THE NORMAL MAP//
name = "Fingers and Toes"
@@ -2256,6 +2401,36 @@
/obj/item/clothing/suit/space/rig/military = 5
)
+/obj/machinery/vending/event/gadget //FOR FACILITATING AND EQUIPPING EVENTS, DO NOT PLACE ON THE NORMAL MAP//
+ name = "Chips Co."
+ desc = "A special vendor for devices and gadgets."
+ product_ads = "You can't RESIST our great deals!;Feeling disconnected? We have a gadget for you!;You know you have the capacity to buy our capacitors!;FILL THAT HOLE IN YOUR HEART WITH OUR PLASTIC DISTRACTIONS!!!;Devices for everyone! Chips Co.!;ROBUST INVENTORY, GREAT PRICES! ;DON'T FORGET THE oyPAD 13s PRO! ON SALE NOW, ONLY ONE THOUSAND THALERS!"
+ icon_state = "gadgets"
+ vend_delay = 11
+ products = list(/obj/item/clothing/suit/circuitry = 1,
+ /obj/item/clothing/head/circuitry = 1,
+ /obj/item/clothing/shoes/circuitry = 1,
+ /obj/item/clothing/gloves/circuitry = 1,
+ /obj/item/clothing/under/circuitry = 1,
+ /obj/item/clothing/glasses/circuitry = 1,
+ /obj/item/clothing/ears/circuitry = 1,
+ /obj/item/device/text_to_speech = 5,
+ /obj/item/device/paicard = 5,
+ /obj/item/device/communicator = 10,
+ /obj/item/device/communicator/watch = 10,
+ /obj/item/device/radio = 10,
+ /obj/item/device/camera = 5,
+ /obj/item/device/taperecorder = 5,
+ /obj/item/modular_computer/tablet/preset/custom_loadout/cheap = 5,
+ /obj/item/device/pda = 10,
+ /obj/item/device/radio/headset = 10,
+ /obj/item/device/flashlight = 5,
+ /obj/item/device/laser_pointer = 3,
+ /obj/item/clothing/glasses/omnihud = 10,
+ /obj/item/device/perfect_tele/one_beacon = 1,
+ /obj/item/weapon/disk/nifsoft/compliance = 1,
+ /obj/item/device/perfect_tele/alien = 10)
+
/obj/machinery/vending/event/costume //FOR FACILITATING AND EQUIPPING EVENTS, DO NOT PLACE ON THE NORMAL MAP//
name = "Thespian's Delight"
desc = "Sometimes nerds need costumes!"
@@ -2336,6 +2511,9 @@
/obj/item/clothing/suit/syndicatefake = 1
)
+// Event Loadout Vending Machines End
+
+// Event Food Vending Machines Start
/obj/machinery/vending/event/food //FOR FACILITATING/OUTFITTING EVENTS, DO NOT PUT THESE ON THE MAP//
name = "Dog Food"
@@ -3277,6 +3455,8 @@
/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat = 10)
vend_delay = 15
+// Event Food Vending Machines End
+
/obj/machinery/vending/emergencyfood
name = "Food Cube Dispenser"
desc = "An ominous machine dispensing food cubes. It will keep you fed, but at what cost?"
@@ -3292,6 +3472,8 @@
contraband = list(/obj/item/weapon/storage/box/wings/tray = 20)
/obj/machinery/vending/cola/soft
+ name = "Soft Robustdrinks"
+ desc = "A different vendor brand for soft drinks, taking off very successfully with its unique imagery and equal stock."
icon = 'icons/obj/vending_vr.dmi'
icon_state = "Cola_Machine"
diff --git a/code/modules/economy/vending_refills.dm b/code/modules/economy/vending_refills.dm
new file mode 100644
index 0000000000..b2c0188ef9
--- /dev/null
+++ b/code/modules/economy/vending_refills.dm
@@ -0,0 +1,161 @@
+/obj/item/weapon/refill_cartridge
+ name = "vending refill cartridge"
+ desc = "A specialized cartridge used to refill vending machines with fresh product. Tamper proof."
+ icon = 'icons/obj/refill_cartridges.dmi'
+ icon_state = "rc_generic"
+ item_state = "syringe_kit"
+ var/refill_type
+
+/obj/item/weapon/refill_cartridge/proc/can_refill(obj/machinery/vending/V as obj)
+ if(V.type == refill_type)
+ return TRUE
+ return FALSE
+
+/obj/item/weapon/refill_cartridge/multitype
+ refill_type = list()
+ var/refill_exceptions = list()
+
+/obj/item/weapon/refill_cartridge/multitype/can_refill(obj/machinery/vending/V as obj)
+ for(var/entry in refill_type)
+ if(istype(V, entry) && !(V.type in refill_exceptions))
+ return TRUE
+ return FALSE
+
+/obj/item/weapon/refill_cartridge/autoname/Initialize()
+ ..()
+ if(refill_type && ispath(refill_type))
+ var/atom/tmp = refill_type
+ src.name = "[initial(tmp.name)] refill cartridge"
+
+/obj/item/weapon/refill_cartridge/universal // For admin/event use. Can refill any refillable vendor.
+ name = "ultimate vending refill cartridge"
+ desc = "A universal cartridge used to refill vending machines with fresh product."
+ icon_state = "rc_mystery"
+
+/obj/item/weapon/refill_cartridge/universal/can_refill(obj/machinery/vending/V as obj)
+ return TRUE
+
+// Multi-vendor subtypes
+
+/obj/item/weapon/refill_cartridge/multitype/technical
+ name = "technical vendor refill cartridge"
+ icon_state = "rc_mechanical"
+ refill_type = list(/obj/machinery/vending/assist,
+ /obj/machinery/vending/tool,
+ /obj/machinery/vending/loadout/gadget)
+
+/obj/item/weapon/refill_cartridge/multitype/food
+ name = "food vendor refill cartridge"
+ icon_state = "rc_food"
+ refill_type = list(/obj/machinery/vending/snack,
+ /obj/machinery/vending/fitness,
+ /obj/machinery/vending/hotfood,
+ /obj/machinery/vending/weeb,
+ /obj/machinery/vending/sol,
+ /obj/machinery/vending/snix,
+ /obj/machinery/vending/snlvend,
+ /obj/machinery/vending/sovietvend)
+
+/obj/item/weapon/refill_cartridge/multitype/drink
+ name = "drinks vendor refill cartridge"
+ icon_state = "rc_drink"
+ refill_type = list(/obj/machinery/vending/coffee,
+ /obj/machinery/vending/cola,
+ /obj/machinery/vending/sovietsoda,
+ /obj/machinery/vending/bepis)
+
+/obj/item/weapon/refill_cartridge/multitype/smokes //Multitype version in case multiple smoke machine vendors exist in future.
+ name = "smoking vendor refill cartridge"
+ icon_state = "rc_generic"
+ refill_type = list(/obj/machinery/vending/cigarette)
+
+/obj/item/weapon/refill_cartridge/multitype/clothing
+ name = "clothing vendor refill cartridge"
+ icon_state = "rc_clothes"
+ refill_type = list(/obj/machinery/vending/wardrobe,
+ /obj/machinery/vending/loadout)
+ refill_exceptions = list(/obj/machinery/vending/loadout/gadget)
+
+/obj/item/weapon/refill_cartridge/multitype/specialty
+ name = "specialty vendor refill cartridge"
+ icon_state = "rc_generic"
+ refill_type = list(/obj/machinery/vending/cart,
+ /obj/machinery/vending/medical,
+ /obj/machinery/vending/phoronresearch,
+ /obj/machinery/vending/wallmed1,
+ /obj/machinery/vending/wallmed2,
+ /obj/machinery/vending/wallmed_airlock,
+ /obj/machinery/vending/security,
+ /obj/machinery/vending/hydronutrients,
+ /obj/machinery/vending/dinnerware,
+ /obj/machinery/vending/engivend,
+ /obj/machinery/vending/robotics,
+ /obj/machinery/vending/fishing,
+ /obj/machinery/vending/blood,
+ /obj/machinery/vending/entertainer)
+
+/obj/item/weapon/refill_cartridge/autoname/food
+ icon_state = "rc_food"
+
+/obj/item/weapon/refill_cartridge/autoname/food/snack
+ refill_type = /obj/machinery/vending/snack
+
+/obj/item/weapon/refill_cartridge/autoname/food/fitness
+ refill_type = /obj/machinery/vending/fitness
+
+/obj/item/weapon/refill_cartridge/autoname/food/hotfood
+ refill_type = /obj/machinery/vending/hotfood
+
+/obj/item/weapon/refill_cartridge/autoname/food/weeb
+ refill_type = /obj/machinery/vending/weeb
+
+/obj/item/weapon/refill_cartridge/autoname/food/sol
+ refill_type = /obj/machinery/vending/sol
+
+/obj/item/weapon/refill_cartridge/autoname/food/snix
+ refill_type = /obj/machinery/vending/snix
+
+/obj/item/weapon/refill_cartridge/autoname/food/snlvend
+ refill_type = /obj/machinery/vending/snlvend
+
+/obj/item/weapon/refill_cartridge/autoname/food/sovietvend
+ refill_type = /obj/machinery/vending/sovietvend
+
+/obj/item/weapon/refill_cartridge/autoname/drink
+ icon_state = "rc_drink"
+
+/obj/item/weapon/refill_cartridge/autoname/drink/coffee
+ refill_type = /obj/machinery/vending/coffee
+
+/obj/item/weapon/refill_cartridge/autoname/drink/cola
+ refill_type = /obj/machinery/vending/cola
+
+/obj/item/weapon/refill_cartridge/autoname/drink/cola_soft
+ refill_type = /obj/machinery/vending/cola/soft
+
+/obj/item/weapon/refill_cartridge/autoname/drink/sovietsoda
+ refill_type = /obj/machinery/vending/sovietsoda
+
+/obj/item/weapon/refill_cartridge/autoname/drink/bepis
+ refill_type = /obj/machinery/vending/bepis
+
+/obj/item/weapon/refill_cartridge/autoname/cigarette
+ icon_state = "rc_generic"
+ refill_type = /obj/machinery/vending/cigarette
+
+/obj/item/weapon/refill_cartridge/multitype/wardrobe
+ name = "specialized wardrobe refill cartridge"
+ icon_state = "rc_clothes"
+ refill_type = list(/obj/machinery/vending/wardrobe)
+
+/obj/item/weapon/refill_cartridge/autoname/technical
+ icon_state = "rc_mechanical"
+
+/obj/item/weapon/refill_cartridge/autoname/technical/assist
+ refill_type = /obj/machinery/vending/assist
+
+/obj/item/weapon/refill_cartridge/autoname/technical/tool
+ refill_type = /obj/machinery/vending/tool
+
+/obj/item/weapon/refill_cartridge/autoname/giftvendor
+ refill_type = /obj/machinery/vending/giftvendor
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/pill_vr.dm b/code/modules/reagents/reagent_containers/pill_vr.dm
index b7789b18ce..df787bf071 100644
--- a/code/modules/reagents/reagent_containers/pill_vr.dm
+++ b/code/modules/reagents/reagent_containers/pill_vr.dm
@@ -147,4 +147,17 @@
. = ..()
reagents.add_reagent("sleevingcure", 1)
color = reagents.get_color()
+<<<<<<< HEAD
*/ //CHOMPStation removal end
+=======
+
+/obj/item/weapon/reagent_containers/pill/airlock
+ name = "\'Airlock\' Pill"
+ desc = "Neutralizes toxins and provides a mild analgesic effect."
+ icon_state = "pill2"
+
+/obj/item/weapon/reagent_containers/pill/airlock/New()
+ ..()
+ reagents.add_reagent("anti_toxin", 15)
+ reagents.add_reagent("paracetamol", 5)
+>>>>>>> b5e1cef4480... Merge pull request #12235 from Heroman3003/refill_cartridges
diff --git a/icons/obj/refill_cartridges.dmi b/icons/obj/refill_cartridges.dmi
new file mode 100644
index 0000000000..61818e977c
Binary files /dev/null and b/icons/obj/refill_cartridges.dmi differ
diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm
index abd967be09..ce61b1d9e0 100644
--- a/maps/tether/tether_things.dm
+++ b/maps/tether/tether_things.dm
@@ -264,27 +264,6 @@
/obj/machinery/power/supermatter/touch_map_edge()
qdel(src)
-//Airlock antitox vendor
-/obj/machinery/vending/wallmed_airlock
- name = "Airlock NanoMed"
- desc = "Wall-mounted Medical Equipment dispenser. This limited-use version dispenses antitoxins with mild painkillers for surface EVAs."
- icon_state = "wallmed"
- density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
- products = list(/obj/item/weapon/reagent_containers/pill/airlock = 20)
- contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2)
- req_log_access = access_cmo
- has_logs = 1
-
-/obj/item/weapon/reagent_containers/pill/airlock
- name = "\'Airlock\' Pill"
- desc = "Neutralizes toxins and provides a mild analgesic effect."
- icon_state = "pill2"
-
-/obj/item/weapon/reagent_containers/pill/airlock/New()
- ..()
- reagents.add_reagent("anti_toxin", 15)
- reagents.add_reagent("paracetamol", 5)
-
//"Red" Armory Door
/obj/machinery/door/airlock/security/armory
name = "Red Armory"
diff --git a/vorestation.dme b/vorestation.dme
index 784c9844b9..805d696176 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -492,6 +492,7 @@
#include "code\datums\supplypacks\supply.dm"
#include "code\datums\supplypacks\supply_vr.dm"
#include "code\datums\supplypacks\supplypacks.dm"
+#include "code\datums\supplypacks\vending_refills_vr.dm"
#include "code\datums\supplypacks\voidsuits.dm"
#include "code\datums\supplypacks\voidsuits_vr.dm"
#include "code\datums\underwear\bottom.dm"
@@ -2279,6 +2280,7 @@
#include "code\modules\economy\vending.dm"
#include "code\modules\economy\vending_machines.dm"
#include "code\modules\economy\vending_machines_vr.dm"
+#include "code\modules\economy\vending_refills.dm"
#include "code\modules\emotes\emote_define.dm"
#include "code\modules\emotes\emote_mob.dm"
#include "code\modules\emotes\definitions\_mob.dm"