diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 7e4a561422..9c8622d16e 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -87,3 +87,12 @@
/datum/component/storage/concrete/pockets/pocketprotector/real_location()
// if the component is reparented to a jumpsuit, the items still go in the protector
return original_parent
+
+/datum/component/storage/concrete/pockets/small/rushelmet
+ max_items = 1
+ quickdraw = TRUE
+
+/datum/component/storage/concrete/pockets/small/rushelmet/Initialize()
+ . = ..()
+ can_hold = typecacheof(list(/obj/item/reagent_containers/glass/bottle,
+ /obj/item/ammo_box/a762))
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index 10a2b2c807..c1833ba44a 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -260,9 +260,8 @@
var/position = vending_names_paths.Find(build_path)
position = (position == vending_names_paths.len) ? 1 : (position + 1)
var/typepath = vending_names_paths[position]
-
- to_chat(user, "You set the board to \"[vending_names_paths[typepath]]\".")
set_type(typepath)
+ to_chat(user, "You set the board to \"[vending_names_paths[typepath]]\".")
else
return ..()
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 1e37de2581..70c3a5dd4b 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -225,16 +225,31 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
STR.max_items = 10
/obj/item/storage/toolbox/artistic/PopulateContents()
- new/obj/item/storage/crayons(src)
- new/obj/item/crowbar(src)
- new/obj/item/stack/cable_coil/red(src)
- new/obj/item/stack/cable_coil/yellow(src)
- new/obj/item/stack/cable_coil/blue(src)
- new/obj/item/stack/cable_coil/green(src)
- new/obj/item/stack/cable_coil/pink(src)
- new/obj/item/stack/cable_coil/orange(src)
- new/obj/item/stack/cable_coil/cyan(src)
- new/obj/item/stack/cable_coil/white(src)
+ new /obj/item/storage/crayons(src)
+ new /obj/item/crowbar(src)
+ new /obj/item/stack/cable_coil/red(src)
+ new /obj/item/stack/cable_coil/yellow(src)
+ new /obj/item/stack/cable_coil/blue(src)
+ new /obj/item/stack/cable_coil/green(src)
+ new /obj/item/stack/cable_coil/pink(src)
+ new /obj/item/stack/cable_coil/orange(src)
+ new /obj/item/stack/cable_coil/cyan(src)
+ new /obj/item/stack/cable_coil/white(src)
+
+/obj/item/storage/toolbox/ammo
+ name = "ammo box"
+ desc = "It contains a few clips."
+ icon_state = "ammobox"
+ item_state = "ammobox"
+
+/obj/item/storage/toolbox/ammo/PopulateContents()
+ new /obj/item/ammo_box/a762(src)
+ new /obj/item/ammo_box/a762(src)
+ new /obj/item/ammo_box/a762(src)
+ new /obj/item/ammo_box/a762(src)
+ new /obj/item/ammo_box/a762(src)
+ new /obj/item/ammo_box/a762(src)
+ new /obj/item/ammo_box/a762(src)
/obj/item/storage/toolbox/gold_real
name = "golden toolbox"
@@ -314,4 +329,4 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
generate_rubber_toolbox_icon()
icon = GLOB.rubber_toolbox_icons[icon_state]
. = ..()
- AddComponent(/datum/component/bouncy)
\ No newline at end of file
+ AddComponent(/datum/component/bouncy)
diff --git a/code/modules/cargo/packs/armory.dm b/code/modules/cargo/packs/armory.dm
index 58677814a6..259ea2d7e3 100644
--- a/code/modules/cargo/packs/armory.dm
+++ b/code/modules/cargo/packs/armory.dm
@@ -93,9 +93,12 @@
/datum/supply_pack/security/armory/trackingimp
name = "Tracking Implants Crate"
- desc = "Contains four tracking implants. Requires Armory access to open."
- cost = 1050
- contains = list(/obj/item/storage/box/trackimp)
+ desc = "Contains four tracking implants and three tracking speedloaders of tracing .38 ammo. Requires Armory access to open."
+ cost = 1100
+ contains = list(/obj/item/storage/box/trackimp,
+ /obj/item/ammo_box/c38/trac,
+ /obj/item/ammo_box/c38/trac,
+ /obj/item/ammo_box/c38/trac)
crate_name = "tracking implant crate"
/datum/supply_pack/security/armory/fire
@@ -172,6 +175,32 @@
/obj/item/storage/box/beanbag)
crate_name = "riot shotgun crate"
+/datum/supply_pack/security/armory/russian
+ name = "Russian Surplus Crate"
+ desc = "Hello Comrade, we have the most modern russian military equipment the black market can offer, for the right price of course. Sadly we couldnt remove the lock so it requires Armory access to open."
+ cost = 5000
+ contraband = TRUE
+ contains = list(/obj/item/reagent_containers/food/snacks/rationpack,
+ /obj/item/ammo_box/a762,
+ /obj/item/storage/toolbox/ammo,
+ /obj/item/clothing/suit/armor/vest/russian,
+ /obj/item/clothing/head/helmet/rus_helmet,
+ /obj/item/clothing/shoes/russian,
+ /obj/item/clothing/gloves/combat,
+ /obj/item/clothing/under/syndicate/rus_army,
+ /obj/item/clothing/under/soviet,
+ /obj/item/clothing/mask/russian_balaclava,
+ /obj/item/clothing/head/helmet/rus_ushanka,
+ /obj/item/clothing/suit/armor/vest/russian_coat,
+ /obj/item/gun/ballistic/shotgun/boltaction,
+ /obj/item/gun/ballistic/shotgun/boltaction)
+ crate_name = "surplus military crate"
+
+/datum/supply_pack/security/armory/russian/fill(obj/structure/closet/crate/C)
+ for(var/i in 1 to 10)
+ var/item = pick(contains)
+ new item(C)
+
/datum/supply_pack/security/armory/swat
name = "SWAT Crate"
desc = "Contains two fullbody sets of tough, fireproof, pressurized suits designed in a joint effort by IS-ERI and Nanotrasen. Each set contains a suit, helmet, mask, combat belt, and combat gloves. Requires Armory access to open."
@@ -223,7 +252,7 @@
/obj/item/ammo_box/magazine/wt550m9)
crate_name = "auto rifle ammo crate"
-/datum/supply_pack/security/armory/wt550ammo_nonlethal // Takes around 12 shots to stun crit someone
+/datum/supply_pack/security/armory/wt550ammo_nonlethal // Takes around 12 shots to stamcrit someone
name = "WT-550 Semi-Auto SMG Non-Lethal Ammo Crate"
desc = "Contains four 20-round magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
cost = 1000
diff --git a/code/modules/cargo/packs/emergency.dm b/code/modules/cargo/packs/emergency.dm
index 30153ef077..747e820f52 100644
--- a/code/modules/cargo/packs/emergency.dm
+++ b/code/modules/cargo/packs/emergency.dm
@@ -23,6 +23,21 @@
crate_name = "Biker Kit"
crate_type = /obj/structure/closet/crate/large
+/datum/supply_pack/emergency/bio
+ name = "Biological Emergency Crate"
+ desc = "This crate holds 2 full bio suits which will protect you from viruses, along with a bio bag and two spaceacillin syringes."
+ cost = 2000
+ contains = list(/obj/item/clothing/head/bio_hood,
+ /obj/item/clothing/head/bio_hood,
+ /obj/item/clothing/suit/bio_suit,
+ /obj/item/clothing/suit/bio_suit,
+ /obj/item/storage/bag/bio,
+ /obj/item/reagent_containers/syringe/antiviral,
+ /obj/item/reagent_containers/syringe/antiviral,
+ /obj/item/clothing/gloves/color/latex/nitrile,
+ /obj/item/clothing/gloves/color/latex/nitrile)
+ crate_name = "bio suit crate"
+
/datum/supply_pack/emergency/equipment
name = "Emergency Bot/Internals Crate"
desc = "Explosions got you down? These supplies are guaranteed to patch up holes, in stations and people alike! Comes with two floorbots, two medbots, five oxygen masks and five small oxygen tanks."
@@ -112,8 +127,8 @@
crate_type = /obj/structure/closet/crate/internals
/datum/supply_pack/emergency/soft_suit
- name = "Emergency Space Suit "
- desc = "Are there bombs going off left and right? Are there meteors shooting around the station? Well then! Here's two fragile space suit for emergencies. Comes with air and masks."
+ name = "Emergency Space Suit"
+ desc = "Are there bombs going off left and right? Are there meteors shooting around the station? Well then! Here's two fragile space suits for emergencies. Comes with air and masks."
cost = 1200
contains = list(/obj/item/tank/internals/air,
/obj/item/tank/internals/air,
@@ -126,6 +141,18 @@
crate_name = "emergency crate"
crate_type = /obj/structure/closet/crate/internals
+/datum/supply_pack/emergency/bomb
+ name = "Explosive Emergency Crate"
+ desc = "Science gone bonkers? Beeping behind the airlock? Buy now and be the hero the station des... I mean needs! (Time not included.)"
+ cost = 1500
+ contains = list(/obj/item/clothing/head/bomb_hood,
+ /obj/item/clothing/suit/bomb_suit,
+ /obj/item/clothing/mask/gas,
+ /obj/item/screwdriver,
+ /obj/item/wirecutters,
+ /obj/item/multitool)
+ crate_name = "bomb suit crate"
+
/datum/supply_pack/emergency/firefighting
name = "Firefighting Crate"
desc = "Only you can prevent station fires. Partner up with two firefighter suits, gas masks, flashlights, large oxygen tanks, extinguishers, and hardhats!"
@@ -307,4 +334,3 @@
/obj/item/reagent_containers/spray/plantbgone)
crate_name = "weed control crate"
crate_type = /obj/structure/closet/crate/secure/hydroponics
-
diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm
index 1b55c0540a..ebfb96ec23 100644
--- a/code/modules/cargo/packs/livestock.dm
+++ b/code/modules/cargo/packs/livestock.dm
@@ -25,6 +25,20 @@
new /obj/item/reagent_containers/food/snacks/grown/wheat(.)
+/datum/supply_pack/critter/parrot
+ name = "Bird Crate"
+ desc = "Contains five expert telecommunication birds."
+ cost = 4000
+ contains = list(/mob/living/simple_animal/parrot)
+ crate_name = "parrot crate"
+
+/datum/supply_pack/critter/parrot/generate()
+ . = ..()
+ for(var/i in 1 to 4)
+ new /mob/living/simple_animal/parrot(.)
+ if(prob(1))
+ new /mob/living/simple_animal/parrot/clock_hawk(.)
+
/datum/supply_pack/critter/butterfly
name = "Butterflies Crate"
desc = "Not a very dangerous insect, but they do give off a better image than, say, flies or cockroaches."//is that a motherfucking worm reference
diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm
index 1e5097fd11..a60afe4f7a 100644
--- a/code/modules/cargo/packs/medical.dm
+++ b/code/modules/cargo/packs/medical.dm
@@ -57,6 +57,27 @@
crate_name = "blood freezer"
crate_type = /obj/structure/closet/crate/freezer
+/datum/supply_pack/medical/chemical
+ name = "Chemical Starter Kit Crate"
+ desc = "Contains twelve different chemicals, for all the fun experiments you can make."
+ cost = 1700
+ contains = list(/obj/item/reagent_containers/glass/bottle/hydrogen,
+ /obj/item/reagent_containers/glass/bottle/carbon,
+ /obj/item/reagent_containers/glass/bottle/nitrogen,
+ /obj/item/reagent_containers/glass/bottle/oxygen,
+ /obj/item/reagent_containers/glass/bottle/fluorine,
+ /obj/item/reagent_containers/glass/bottle/phosphorus,
+ /obj/item/reagent_containers/glass/bottle/silicon,
+ /obj/item/reagent_containers/glass/bottle/chlorine,
+ /obj/item/reagent_containers/glass/bottle/radium,
+ /obj/item/reagent_containers/glass/bottle/sacid,
+ /obj/item/reagent_containers/glass/bottle/ethanol,
+ /obj/item/reagent_containers/glass/bottle/potassium,
+ /obj/item/clothing/glasses/science,
+ /obj/item/reagent_containers/dropper,
+ /obj/item/storage/box/beakers)
+ crate_name = "chemical crate"
+
/datum/supply_pack/medical/defibs
name = "Defibrillator Crate"
desc = "Contains two defibrillators for bringing the recently deceased back to life."
@@ -229,7 +250,7 @@
/datum/supply_pack/medical/anitvirus
name = "Virus Containment Crate"
- desc = "Viro let out a death plague Mk II again? Someone didnt wash their hands? Old plagues born anew? Well this crate is for you! Hope you cure it before it breaks out of the station... This crate needs medical access to open and has two bio suits, a box of needles and beakers, five spaceacillin needles, and a medibot."
+ desc = "Viro let out a death plague Mk II again? Someone didn't wash their hands? Old plagues born anew? Well, this crate is for you! Hope you cure it before it breaks out of the station... This crate needs medical access to open and has two bio suits, a box of needles and beakers, five spaceacillin needles, and a medibot."
cost = 3000
access = ACCESS_MEDICAL
contains = list(/mob/living/simple_animal/bot/medbot,
@@ -245,4 +266,4 @@
/obj/item/storage/box/syringes,
/obj/item/storage/box/beakers)
crate_name = "virus containment unit crate"
- crate_type = /obj/structure/closet/crate/secure/plasma
\ No newline at end of file
+ crate_type = /obj/structure/closet/crate/secure/plasma
diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm
index 29133b78d2..f8656ef761 100644
--- a/code/modules/cargo/packs/misc.dm
+++ b/code/modules/cargo/packs/misc.dm
@@ -281,8 +281,7 @@
/obj/item/storage/book/bible/booze,
/obj/item/storage/book/bible/booze,
/obj/item/clothing/suit/hooded/chaplain_hoodie,
- /obj/item/clothing/suit/hooded/chaplain_hoodie
- )
+ /obj/item/clothing/suit/hooded/chaplain_hoodie)
crate_name = "religious supplies crate"
/datum/supply_pack/misc/funeral
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index 4a90af6fd0..dd0f987d25 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -47,6 +47,26 @@
/obj/item/storage/fancy/donut_box)
crate_name = "candy crate"
+/datum/supply_pack/organic/randomized/chef
+ name = "Excellent Meat Crate"
+ desc = "The best cuts in the whole galaxy."
+ cost = 2000
+ contains = list(/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime,
+ /obj/item/reagent_containers/food/snacks/meat/slab/killertomato,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bear,
+ /obj/item/reagent_containers/food/snacks/meat/slab/xeno,
+ /obj/item/reagent_containers/food/snacks/meat/slab/spider,
+ /obj/item/reagent_containers/food/snacks/meat/rawbacon,
+ /obj/item/reagent_containers/food/snacks/spiderleg,
+ /obj/item/reagent_containers/food/snacks/carpmeat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human)
+ crate_name = "food crate"
+
+/datum/supply_pack/organic/randomized/chef/fill(obj/structure/closet/crate/C)
+ for(var/i in 1 to 15)
+ var/item = pick(contains)
+ new item(C)
+
/datum/supply_pack/organic/exoticseeds
name = "Exotic Seeds Crate"
desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
@@ -92,6 +112,26 @@
/obj/item/reagent_containers/food/snacks/grown/banana)
crate_name = "food crate"
+/datum/supply_pack/organic/randomized/chef/fruits
+ name = "Fruit Crate"
+ desc = "Rich in vitamins, may contain oranges."
+ cost = 1500
+ contains = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lime,
+ /obj/item/reagent_containers/food/snacks/grown/citrus/orange,
+ /obj/item/reagent_containers/food/snacks/grown/banana,
+ /obj/item/reagent_containers/food/snacks/grown/watermelon,
+ /obj/item/reagent_containers/food/snacks/grown/apple,
+ /obj/item/reagent_containers/food/snacks/grown/berries,
+ /obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
+ /obj/item/reagent_containers/food/snacks/grown/pineapple,
+ /obj/item/reagent_containers/food/snacks/grown/cherries,
+ /obj/item/reagent_containers/food/snacks/grown/grapes,
+ /obj/item/reagent_containers/food/snacks/grown/grapes/green,
+ /obj/item/reagent_containers/food/snacks/grown/eggplant,
+ /obj/item/reagent_containers/food/snacks/grown/peach,
+ /obj/item/reagent_containers/food/snacks/grown/strawberry)
+ crate_name = "food crate"
+
/datum/supply_pack/organic/fiestatortilla
name = "Fiesta Crate"
desc = "Spice up the kitchen with this fiesta themed food order! Contains 8 tortilla based food items, as well as a sombrero, moustache, and cloak!"
@@ -111,71 +151,6 @@
/obj/item/reagent_containers/glass/bottle/capsaicin)
crate_name = "fiesta crate"
-/datum/supply_pack/organic/fruit_1
- name = "Fruit Basic Crate"
- desc = "Getting scurvy on the station? Well heres your fixing! Contains three of each - bananas, watermelons, limes, lemons, oranges and even three pineapple."
- cost = 2250
- contains = list(/obj/item/reagent_containers/food/snacks/grown/watermelon,
- /obj/item/reagent_containers/food/snacks/grown/watermelon,
- /obj/item/reagent_containers/food/snacks/grown/watermelon,
- /obj/item/reagent_containers/food/snacks/grown/pineapple,
- /obj/item/reagent_containers/food/snacks/grown/pineapple,
- /obj/item/reagent_containers/food/snacks/grown/pineapple,
- /obj/item/reagent_containers/food/snacks/grown/citrus/lime,
- /obj/item/reagent_containers/food/snacks/grown/citrus/lime,
- /obj/item/reagent_containers/food/snacks/grown/citrus/lime,
- /obj/item/reagent_containers/food/snacks/grown/citrus/orange,
- /obj/item/reagent_containers/food/snacks/grown/citrus/orange,
- /obj/item/reagent_containers/food/snacks/grown/citrus/orange,
- /obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
- /obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
- /obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
- /obj/item/reagent_containers/food/snacks/grown/banana,
- /obj/item/reagent_containers/food/snacks/grown/banana,
- /obj/item/reagent_containers/food/snacks/grown/banana)
- crate_name = "fruit crate"
-
-/datum/supply_pack/organic/fruit_2
- name = "Fruit Delux Crate"
- desc = "Getting tired of the basic fruits and want to have something a bit more decadent! This crate is for you! Contains three of each - bunches of berries, apples, pineapples, cherries, green & red grapes, eggplants, bananas, peaches, and lastly seven strawberry. Includes one serving tray."
- cost = 3500
- contains = list(/obj/item/reagent_containers/food/snacks/grown/berries,
- /obj/item/reagent_containers/food/snacks/grown/berries,
- /obj/item/reagent_containers/food/snacks/grown/berries,
- /obj/item/reagent_containers/food/snacks/grown/apple,
- /obj/item/reagent_containers/food/snacks/grown/apple,
- /obj/item/reagent_containers/food/snacks/grown/apple,
- /obj/item/reagent_containers/food/snacks/grown/pineapple,
- /obj/item/reagent_containers/food/snacks/grown/pineapple,
- /obj/item/reagent_containers/food/snacks/grown/pineapple,
- /obj/item/reagent_containers/food/snacks/grown/cherries,
- /obj/item/reagent_containers/food/snacks/grown/cherries,
- /obj/item/reagent_containers/food/snacks/grown/cherries,
- /obj/item/reagent_containers/food/snacks/grown/grapes,
- /obj/item/reagent_containers/food/snacks/grown/grapes,
- /obj/item/reagent_containers/food/snacks/grown/grapes,
- /obj/item/reagent_containers/food/snacks/grown/grapes/green,
- /obj/item/reagent_containers/food/snacks/grown/grapes/green,
- /obj/item/reagent_containers/food/snacks/grown/grapes/green,
- /obj/item/reagent_containers/food/snacks/grown/banana,
- /obj/item/reagent_containers/food/snacks/grown/banana,
- /obj/item/reagent_containers/food/snacks/grown/banana,
- /obj/item/reagent_containers/food/snacks/grown/eggplant,
- /obj/item/reagent_containers/food/snacks/grown/eggplant,
- /obj/item/reagent_containers/food/snacks/grown/eggplant,
- /obj/item/reagent_containers/food/snacks/grown/peach,
- /obj/item/reagent_containers/food/snacks/grown/peach,
- /obj/item/reagent_containers/food/snacks/grown/peach,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/reagent_containers/food/snacks/grown/strawberry,
- /obj/item/storage/bag/tray)
- crate_name = "fruit crate"
-
/datum/supply_pack/organic/grill
name = "Grilling Starter Kit"
desc = "Hey dad I'm Hungry. Hi Hungry I'm THE NEW GRILLING STARTER KIT ONLY 5000 BUX GET NOW! Contains a cooking grill and five fuel coal sheets."
@@ -283,6 +258,19 @@
considered \[REDACTED\] and returned at your leisure. Note that objects the anomaly produces are specifically attuned exactly to the individual opening the anomaly; regardless \
of species, the individual will find the object edible and it will taste great according to their personal definitions, which vary significantly based on person and species.")
+/datum/supply_pack/organic/randomized/chef/vegetables
+ name = "Vegetables Crate"
+ desc = "Grown in vats."
+ cost = 1300
+ contains = list(/obj/item/reagent_containers/food/snacks/grown/chili,
+ /obj/item/reagent_containers/food/snacks/grown/corn,
+ /obj/item/reagent_containers/food/snacks/grown/tomato,
+ /obj/item/reagent_containers/food/snacks/grown/potato,
+ /obj/item/reagent_containers/food/snacks/grown/carrot,
+ /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle,
+ /obj/item/reagent_containers/food/snacks/grown/onion,
+ /obj/item/reagent_containers/food/snacks/grown/pumpkin)
+ crate_name = "food crate"
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Hydroponics /////////////////////////////////////
@@ -372,6 +360,8 @@
/obj/item/hatchet,
/obj/item/cultivator,
/obj/item/plant_analyzer,
+ /obj/item/clothing/gloves/botanic_leather,
+ /obj/item/clothing/suit/apron,
/obj/item/flashlight,
/obj/item/seeds/carrot,
/obj/item/seeds/carrot,
diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm
index 981e343045..f14bc37371 100644
--- a/code/modules/cargo/packs/science.dm
+++ b/code/modules/cargo/packs/science.dm
@@ -54,7 +54,7 @@
/datum/supply_pack/science/robotics/mecha_odysseus
name = "Circuit Crate (Odysseus)"
desc = "Ever wanted to build your own giant medical robot? Well, now you can! Contains the Odysseus main control board and Odysseus peripherals board. Requires Robotics access to open."
- cost = 2500
+ cost = 1500
access = ACCESS_ROBOTICS
contains = list(/obj/item/circuitboard/mecha/odysseus/peripherals,
/obj/item/circuitboard/mecha/odysseus/main)
@@ -64,7 +64,7 @@
/datum/supply_pack/science/robotics/mecha_ripley
name = "Circuit Crate (Ripley APLU)"
desc = "Rip apart rocks and xenomorphs alike with the Ripley APLU. Contains the Main Ripley control board, as well as the Ripley Peripherals board. Requires Robotics access to open."
- cost = 3000
+ cost = 1200
access = ACCESS_ROBOTICS
contains = list(/obj/item/book/manual/ripley_build_and_repair,
/obj/item/circuitboard/mecha/ripley/main,
@@ -153,6 +153,13 @@
crate_name = "robotics assembly crate"
crate_type = /obj/structure/closet/crate/secure/science
+/datum/supply_pack/science/rped
+ name = "RPED crate"
+ desc = "Need to rebuild the ORM but science got annihilated after a bomb test? Buy this for the most advanced parts NT can give you."
+ cost = 1500
+ contains = list(/obj/item/storage/part_replacer/cargo)
+ crate_name = "\improper RPED crate"
+
/datum/supply_pack/science/shieldwalls
name = "Shield Generator Crate"
desc = "These high powered Shield Wall Generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Contains four shield wall generators. Requires Teleporter access to open."
@@ -188,7 +195,7 @@
/datum/supply_pack/science/tablets
name = "Tablet Crate"
desc = "What's a computer? Contains five cargo tablets."
- cost = 3000
+ cost = 1500
contains = list(/obj/item/modular_computer/tablet/preset/cargo,
/obj/item/modular_computer/tablet/preset/cargo,
/obj/item/modular_computer/tablet/preset/cargo,
diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm
index 0bda316ca3..69967d65d1 100644
--- a/code/modules/cargo/packs/security.dm
+++ b/code/modules/cargo/packs/security.dm
@@ -11,6 +11,23 @@
access = ACCESS_SECURITY
crate_type = /obj/structure/closet/crate/secure/gear
+/datum/supply_pack/security/ammo
+ name = "Ammo Crate - General Purpose"
+ desc = "Contains two 20-round magazines for the WT-550 Auto Rifle, three boxes of buckshot ammo, three boxes of rubber ammo and special .38 speedloarders. Requires Security access to open."
+ cost = 2500
+ contains = list(/obj/item/ammo_box/magazine/wt550m9,
+ /obj/item/ammo_box/magazine/wt550m9,
+ /obj/item/storage/box/lethalshot,
+ /obj/item/storage/box/lethalshot,
+ /obj/item/storage/box/lethalshot,
+ /obj/item/storage/box/rubbershot,
+ /obj/item/storage/box/rubbershot,
+ /obj/item/storage/box/rubbershot,
+ /obj/item/ammo_box/c38/trac,
+ /obj/item/ammo_box/c38/hotshot,
+ /obj/item/ammo_box/c38/iceblox)
+ crate_name = "ammo crate"
+
/datum/supply_pack/security/armor
name = "Armor Crate"
desc = "Three vests of well-rounded, decently-protective armor. Requires Security access to open."
@@ -146,6 +163,13 @@
/obj/item/storage/box/handcuffs)
crate_name = "security supply crate"
+/datum/supply_pack/security/vending/security
+ name = "SecTech Supply Crate"
+ desc = "Officer Paul bought all the donuts? Then refill the security vendor with ths crate."
+ cost = 1500
+ contains = list(/obj/machinery/vending/security)
+ crate_name = "SecTech supply crate"
+
/datum/supply_pack/security/firingpins
name = "Standard Firing Pins Crate"
desc = "Upgrade your arsenal with 10 standard firing pins. Requires Security access to open."
diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm
index 8fd5b6eb58..01524b1910 100644
--- a/code/modules/cargo/packs/service.dm
+++ b/code/modules/cargo/packs/service.dm
@@ -103,7 +103,7 @@
/datum/supply_pack/service/cutlery
name = "Kitchen Cutlery Deluxe Set"
- desc = "Need to slice and dice away those ''Tomatoes''? Well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
+ desc = "Need to slice and dice away those \"Tomatoes\"? Well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
cost = 10000
contraband = TRUE
contains = list(/obj/item/sharpener, //Deluxe for a reason
@@ -127,6 +127,16 @@
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass)
crate_name = "kitchen cutlery deluxe set"
+/datum/supply_pack/service/replacementdb
+ name = "Replacement Defensive Bar Shotgun"
+ desc = "Someone stole the Bartender's twin-barreled possession? Give them another one at a significant markup. Comes with one unused double-barrel shotgun, shells not included. Requires bartender access to open."
+ cost = 2200
+ access = ACCESS_BAR
+ contraband = TRUE
+ contains = list(/obj/item/gun/ballistic/revolver/doublebarrel)
+ crate_name = "replacement double-barrel crate"
+ crate_type = /obj/structure/closet/crate/secure
+
//////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Janitor //////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index be6e270e45..ad450ec7aa 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -337,10 +337,28 @@
var/datum/action/A = X
A.UpdateButtonIcon()
-
/obj/item/clothing/head/helmet/durathread
name = "makeshift helmet"
desc = "A hardhat with strips of leather and durathread for additional blunt protection."
icon_state = "durathread"
item_state = "durathread"
armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+
+/obj/item/clothing/head/helmet/rus_helmet
+ name = "russian helmet"
+ desc = "It can hold a bottle of vodka."
+ icon_state = "rus_helmet"
+ item_state = "rus_helmet"
+ armor = list("melee" = 30, "bullet" = 25, "laser" = 20,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 50)
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/rushelmet
+
+/obj/item/clothing/head/helmet/rus_ushanka
+ name = "battle ushanka"
+ desc = "100% bear."
+ icon_state = "rus_ushanka"
+ item_state = "rus_ushanka"
+ clothing_flags = THICKMATERIAL
+ body_parts_covered = HEAD
+ cold_protection = HEAD
+ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
+ armor = list("melee" = 10, "bullet" = 5, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 0)
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index 3960bdadeb..aa8df7123a 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -57,3 +57,12 @@
desc = "Worn by robust fighters who are willing to do anything to win."
icon_state = "luchar"
item_state = "luchar"
+
+/obj/item/clothing/mask/russian_balaclava
+ name = "russian balaclava"
+ desc = "Protects your face from snow."
+ icon_state = "rus_balaclava"
+ item_state = "rus_balaclava"
+ flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
+ visor_flags_inv = HIDEFACE|HIDEFACIALHAIR
+ w_class = WEIGHT_CLASS_SMALL
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 43c99fe7fd..c81584dbcc 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -327,6 +327,13 @@
lightCycle = 0
active = FALSE
+/obj/item/clothing/shoes/russian
+ name = "russian boots"
+ desc = "Comfy shoes."
+ icon_state = "rus_shoes"
+ item_state = "rus_shoes"
+ pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
+
// kevin is into feet
/obj/item/clothing/shoes/wraps
name = "gilded leg wraps"
@@ -347,4 +354,4 @@
/obj/item/clothing/shoes/wraps/blue
name = "blue leg wraps"
desc = "Ankle coverings. Hang ten, brother."
- icon_state = "bluecuffs"
\ No newline at end of file
+ icon_state = "bluecuffs"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 19050dc36f..e536d307ef 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -248,3 +248,20 @@
max_integrity = 200
resistance_flags = FLAMMABLE
armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
+
+/obj/item/clothing/suit/armor/vest/russian
+ name = "russian vest"
+ desc = "A bulletproof vest with forest camo. Good thing there's plenty of forests to hide in around here, right?"
+ icon_state = "rus_armor"
+ item_state = "rus_armor"
+ armor = list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 15, "bomb" = 10, "bio" = 0, "rad" = 20, "fire" = 20, "acid" = 50)
+/obj/item/clothing/suit/armor/vest/russian_coat
+ name = "russian battle coat"
+ desc = "Used in extremly cold fronts, made out of real bears."
+ icon_state = "rus_coat"
+ item_state = "rus_coat"
+ clothing_flags = THICKMATERIAL
+ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
+ armor = list("melee" = 25, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 50)
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 4e3e1aa0cc..69db08d19d 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -68,9 +68,18 @@
item_color = "syndicate_combat"
can_adjust = FALSE
+/obj/item/clothing/under/syndicate/rus_army
+ name = "advanced military tracksuit"
+ desc = "Military grade tracksuits for frontline squatting."
+ icon_state = "rus_under"
+ item_color = "rus_under"
+ can_adjust = FALSE
+ armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ resistance_flags = NONE
+
/obj/item/clothing/under/syndicate/baseball
name = "major league, number unknown"
- desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game"
+ desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game..."
icon_state = "syndicatebaseball"
item_state = "syndicatebaseball"
item_color = "syndicatebaseball"
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index 12fe64463d..e29cf28f34 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -51,6 +51,56 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi
alt_sound = 'sound/items/pshoom_2.ogg'
component_type = /datum/component/storage/concrete/bluespace/rped
+/obj/item/storage/part_replacer/bluespace/tier1
+
+/obj/item/storage/part_replacer/bluespace/tier1/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stock_parts/scanning_module(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/micro_laser(src)
+ new /obj/item/stock_parts/matter_bin(src)
+
+/obj/item/storage/part_replacer/bluespace/tier2
+
+/obj/item/storage/part_replacer/bluespace/tier2/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/stock_parts/capacitor/adv(src)
+ new /obj/item/stock_parts/scanning_module/adv(src)
+ new /obj/item/stock_parts/manipulator/nano(src)
+ new /obj/item/stock_parts/micro_laser/high(src)
+ new /obj/item/stock_parts/matter_bin/adv(src)
+
+/obj/item/storage/part_replacer/bluespace/tier3
+
+/obj/item/storage/part_replacer/bluespace/tier3/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/stock_parts/capacitor/super(src)
+ new /obj/item/stock_parts/scanning_module/phasic(src)
+ new /obj/item/stock_parts/manipulator/pico(src)
+ new /obj/item/stock_parts/micro_laser/ultra(src)
+ new /obj/item/stock_parts/matter_bin/super(src)
+
+/obj/item/storage/part_replacer/bluespace/tier4
+
+/obj/item/storage/part_replacer/bluespace/tier4/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/stock_parts/capacitor/quadratic(src)
+ new /obj/item/stock_parts/scanning_module/triphasic(src)
+ new /obj/item/stock_parts/manipulator/femto(src)
+ new /obj/item/stock_parts/micro_laser/quadultra(src)
+ new /obj/item/stock_parts/matter_bin/bluespace(src)
+
+/obj/item/storage/part_replacer/cargo //used in a cargo crate
+
+/obj/item/storage/part_replacer/cargo/PopulateContents()
+ for(var/i in 1 to 10)
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stock_parts/scanning_module(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/micro_laser(src)
+ new /obj/item/stock_parts/matter_bin(src)
+
/obj/item/storage/part_replacer/cyborg
icon_state = "borgrped"
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index 208386a93b..6cf8136c50 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -24,6 +24,7 @@
/obj/item/ssword_kit = 1)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
resistance_flags = FIRE_PROOF
+ refill_canister = /obj/item/vending_refill/security
/obj/machinery/vending/security/pre_throw(obj/item/I)
if(istype(I, /obj/item/grenade))
@@ -33,3 +34,6 @@
var/obj/item/flashlight/F = I
F.on = TRUE
F.update_brightness()
+
+/obj/item/vending_refill/security
+ icon_state = "snackorange"
diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi
index 2188952740..e768271757 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/feet_digi.dmi b/icons/mob/feet_digi.dmi
index e0a9cd462d..028dc67e72 100644
Binary files a/icons/mob/feet_digi.dmi and b/icons/mob/feet_digi.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 365ed5afd9..3adedcffba 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/inhands/equipment/toolbox_lefthand.dmi b/icons/mob/inhands/equipment/toolbox_lefthand.dmi
index 801df7abb8..c0caf78855 100644
Binary files a/icons/mob/inhands/equipment/toolbox_lefthand.dmi and b/icons/mob/inhands/equipment/toolbox_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/toolbox_righthand.dmi b/icons/mob/inhands/equipment/toolbox_righthand.dmi
index f38ddfc9a4..1d016e35a9 100644
Binary files a/icons/mob/inhands/equipment/toolbox_righthand.dmi and b/icons/mob/inhands/equipment/toolbox_righthand.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 019ae09517..a4ff676bd0 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/mask_muzzled.dmi b/icons/mob/mask_muzzled.dmi
index 59c669ea72..92e6149bb1 100644
Binary files a/icons/mob/mask_muzzled.dmi and b/icons/mob/mask_muzzled.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 5b84dad999..dec1c372b5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi
index 58dd2f5700..a0f6e6ab08 100644
Binary files a/icons/mob/suit_digi.dmi and b/icons/mob/suit_digi.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index fb2f4ab0d6..778b718fe6 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/mob/uniform_digi.dmi b/icons/mob/uniform_digi.dmi
index e568d70310..9173a3ceaa 100644
Binary files a/icons/mob/uniform_digi.dmi and b/icons/mob/uniform_digi.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index b3cc31fc6d..4587d6e7b6 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 4ec45666c4..245b44e56b 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index 728d244b5f..b52c314296 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 2e53bb24db..6831c17e56 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 2dcd8b9a06..e6474e7899 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 8fee8fcf9f..4a6b8964e5 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ