diff --git a/code/__DEFINES/blackmarket.dm b/code/__DEFINES/blackmarket.dm
index 5494c371db7b..042066df522d 100644
--- a/code/__DEFINES/blackmarket.dm
+++ b/code/__DEFINES/blackmarket.dm
@@ -3,8 +3,6 @@
// The BEST way of shipping items: accurate, "undetectable"
#define SHIPPING_METHOD_LTSRBT "LTSRBT"
-// Picks a random area to teleport the item to and gives you a minute to get there before it is sent.
-#define SHIPPING_METHOD_TELEPORT "Teleport"
-// Throws the item from somewhere at the station.
+// Throws the item from somewhere at the uplink.
#define SHIPPING_METHOD_LAUNCH "Launch"
diff --git a/code/controllers/subsystem/blackmarket.dm b/code/controllers/subsystem/blackmarket.dm
index 6014259278d7..cbd07fcd8fda 100644
--- a/code/controllers/subsystem/blackmarket.dm
+++ b/code/controllers/subsystem/blackmarket.dm
@@ -5,8 +5,8 @@ SUBSYSTEM_DEF(blackmarket)
/// Descriptions for each shipping methods.
var/shipping_method_descriptions = list(
- SHIPPING_METHOD_LAUNCH="Launches the item at your coordinates from across deep space, cheap but you might not recieve your item at all.",
- SHIPPING_METHOD_LTSRBT="Long-To-Short-Range-Bluespace-Transceiver, a machine that prepares items at a remote storage location and then teleports them to the location of the uplink."
+ SHIPPING_METHOD_LAUNCH="Launches the item at your coordinates from across deep space. Cheap, but you might not recieve your item at all. We recommend being stationary in space, away from any large structures, for best results.",
+ SHIPPING_METHOD_LTSRBT="Long-To-Short-Range-Bluespace-Transceiver, a machine that prepares items at a remote storage location and then teleports them to the location of the LTRSBT."
)
/// List of all existing markets.
@@ -29,7 +29,8 @@ SUBSYSTEM_DEF(blackmarket)
if(!markets[M])
stack_trace("SSblackmarket: Item [I] available in market that does not exist.")
continue
- markets[M].add_item(item)
+ markets[M].add_item(item, FALSE)
+
qdel(I)
. = ..()
@@ -47,22 +48,10 @@ SUBSYSTEM_DEF(blackmarket)
switch(purchase.method)
// Find a ltsrbt pad and make it handle the shipping.
if(SHIPPING_METHOD_LTSRBT)
- if(!telepads.len)
- continue
- // Prioritize pads that don't have a cooldown active.
- var/free_pad_found = FALSE
- for(var/obj/machinery/ltsrbt/pad in telepads)
- if(pad.recharge_cooldown)
- continue
- pad.add_to_queue(purchase)
- queued_purchases -= purchase
- free_pad_found = TRUE
- break
-
- if(free_pad_found)
+ if(!purchase.uplink.target)
continue
- var/obj/machinery/ltsrbt/pad = pick(telepads)
+ var/obj/machinery/ltsrbt/pad = purchase.uplink.target
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message noting that the order is being processed by [pad].")
@@ -76,7 +65,7 @@ SUBSYSTEM_DEF(blackmarket)
var/pickedloc = vlevel.get_side_turf(startSide)
var/atom/movable/item = purchase.entry.spawn_item(pickedloc)
- item.throw_at(purchase.uplink, 3, 3, spin = FALSE)
+ item.safe_throw_at(purchase.uplink, 3, 3, spin = FALSE)
to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message noting the order is being launched at your coordinates from [dir2text(startSide)].")
@@ -96,7 +85,7 @@ SUBSYSTEM_DEF(blackmarket)
/// Used to add /datum/blackmarket_purchase to queued_purchases var. Returns TRUE when queued.
/datum/controller/subsystem/blackmarket/proc/queue_item(datum/blackmarket_purchase/P)
- if(P.method == SHIPPING_METHOD_LTSRBT && !telepads.len)
+ if(P.method == SHIPPING_METHOD_LTSRBT && !P.uplink.target)
return FALSE
queued_purchases += P
return TRUE
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 200fc408768f..e3ef63e116d4 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -160,6 +160,9 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
/obj/item/stack/sheet/mineral/uranium/twenty
amount = 20
+/obj/item/stack/sheet/mineral/uranium/ten
+ amount = 10
+
/obj/item/stack/sheet/mineral/uranium/five
amount = 5
@@ -210,6 +213,9 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
/obj/item/stack/sheet/mineral/plasma/twenty
amount = 20
+/obj/item/stack/sheet/mineral/plasma/ten
+ amount = 10
+
/obj/item/stack/sheet/mineral/plasma/five
amount = 5
diff --git a/code/modules/cargo/blackmarket/blackmarket_item.dm b/code/modules/cargo/blackmarket/blackmarket_item.dm
index fa09c3985de6..cbadddcf1221 100644
--- a/code/modules/cargo/blackmarket/blackmarket_item.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_item.dm
@@ -28,6 +28,8 @@
var/availability_prob = 0
// Should there be an unlimited stock of an item
var/unlimited = FALSE
+ /// Should another item spawn alongside this one in the catalogue?
+ var/datum/blackmarket_item/pair_item
/datum/blackmarket_item/New()
if(isnull(price))
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm b/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm
index 95cb31d27a5e..951574fedfe2 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm
@@ -1,15 +1,45 @@
/datum/blackmarket_item/clothing
category = "Clothing"
-/datum/blackmarket_item/clothing/ninja_mask
- name = "Space Ninja Mask"
- desc = "Apart from being acid, lava, fireproof and being hard to take off someone it does nothing special on it's own."
- item = /obj/item/clothing/mask/gas/space_ninja
+/datum/blackmarket_item/clothing/cloth
+ name = "Build Your Own Jumpsuit Special"
+ desc = "Ever wanted to learn how to sew? This lovely selection of cloth is perfect to get some practice with."
+ item = /obj/item/stack/sheet/cotton/cloth/ten
price_min = 200
- price_max = 500
- stock_max = 3
- availability_prob = 40
+ price_max = 400
+ stock_max = 5
+ availability_prob = 80
+
+/datum/blackmarket_item/clothing/crown
+ name = "Crown"
+ desc = "A beautiful golden crown, rich with history and pedigree. Better worn than left to collect dust in a museum, right?"
+ item = /obj/item/clothing/head/crown/fancy
+
+ price_min = 1000
+ price_max = 2000
+ stock_max = 1
+ availability_prob = 20
+
+/datum/blackmarket_item/clothing/galaxy_blue
+ name = "Blue Galaxy Suit"
+ desc = "A handsome silk suit, treated with a finish of bluespace dust for an out of this world sheen."
+ item = /obj/item/clothing/under/rank/civilian/lawyer/galaxy
+
+ price_min = 500
+ price_max = 2000
+ stock = 1
+ availability_prob = 20
+
+/datum/blackmarket_item/clothing/galaxy_red
+ name = "Red Galaxy Suit"
+ desc = "A handsome silk suit, treated with a finish of telecrystal dust. It cuts a menacing figure."
+ item = /obj/item/clothing/under/rank/civilian/lawyer/galaxy/red
+
+ price_min = 500
+ price_max = 2000
+ stock = 1
+ availability_prob = 20
/datum/blackmarket_item/clothing/durathread_vest
name = "Durathread Vest"
@@ -31,15 +61,73 @@
stock_max = 4
availability_prob = 50
+/datum/blackmarket_item/clothing/degraded_armor_set
+ name = "Clearance Bin Armor Set"
+ desc = "Looking to protect yourself, but on a tight budget? These previously used vest and helmets served their former owners well! (May they rest in peace.)"
+ item = /obj/item/storage/box
+
+ price_min = 100
+ price_max = 400
+ stock_min = 4
+ stock_max = 6
+ availability_prob = 80
+
+/datum/blackmarket_item/clothing/degraded_armor_set/spawn_item(loc)
+ var/obj/item/storage/box/B = ..()
+ B.name = "Used Armor Set Box"
+ B.desc = "It smells distinctly of iron."
+ new /obj/item/clothing/head/helmet/old(B)
+ new /obj/item/clothing/suit/armor/vest/old(B)
+ return B
+
+/datum/blackmarket_item/clothing/frontiersmen_armor_set
+ name = "X-11 Bulletproof Armor Set"
+ desc = "We got a good deal on some extra bulletproof armor from a Frontiersmen Quartermaster, and we're passing those savings onto you!"
+ item = /obj/item/storage/box
+
+ price_min = 1000
+ price_max = 1750
+ stock_max = 3
+ availability_prob = 50
+
+/datum/blackmarket_item/clothing/frontiersmen_armor_set/spawn_item(loc)
+ var/obj/item/storage/box/B = ..()
+ B.name = "Bulletproof Armor Set Box"
+ B.desc = "A beat up looking box with some armor inside."
+ new /obj/item/clothing/suit/armor/vest/bulletproof/frontier(B)
+ new /obj/item/clothing/head/helmet/bulletproof/x11/frontier(B)
+ return B
+
+/datum/blackmarket_item/clothing/gezena_armor
+ name = "Raksha-Plating vest"
+ desc = "Genuine armor vests used by the PGF Marine Corp. If a military guy in a cape comes by, play dumb."
+ item = /obj/item/clothing/suit/armor/gezena/marine
+ pair_item = /datum/blackmarket_item/clothing/gezena_helmet
+
+ price_min = 750
+ price_max = 1250
+ stock_max = 3
+ availability_prob = 20
+
+/datum/blackmarket_item/clothing/gezena_helmet
+ name = "Raksha-Helm"
+ desc = "A helmet used by the PGF Marine Corp. They won't miss it. Not like there's much to protect up there anyways."
+ item = /obj/item/clothing/head/helmet/gezena
+
+ price_min = 500
+ price_max = 600
+ stock_max = 3
+ availability_prob = 0
+
/datum/blackmarket_item/clothing/full_spacesuit_set
name = "\improper Nanotrasen Branded Spacesuit Box"
desc = "A few boxes of \"Old Style\" space suits fell off the back of a space truck."
item = /obj/item/storage/box
- price_min = 1500
- price_max = 4000
+ price_min = 250
+ price_max = 750
stock_max = 3
- availability_prob = 30
+ availability_prob = 70
/datum/blackmarket_item/clothing/full_spacesuit_set/spawn_item(loc)
var/obj/item/storage/box/B = ..()
@@ -60,11 +148,31 @@
availability_prob = 70
/datum/blackmarket_item/clothing/combatmedic_suit
- name = "Combat Medic hardsuit"
- desc = "A discarded combat medic hardsuit, found in the ruins of a carpet bombed xeno hive. Definately used, but as sturdy as an anchor."
+ name = "Combat Medic Hardsuit"
+ desc = "A discarded combat medic hardsuit, found in the ruins of a carpet bombed xeno hive. Definitely used, but as sturdy as an anchor."
item = /obj/item/clothing/suit/space/hardsuit/combatmedic
- price_min = 5500
- price_max = 7000
- stock_max = 1
- availability_prob = 10
+ price_min = 1000
+ price_max = 2500
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/clothing/ramzi_suit
+ name = "Rusted Red Hardsuit"
+ desc = "A vintage ICW Era Gorlex Maruader hardsuit. The previous owner said we could have it when we pried it off their cold dead hands. Dry cleaning not included."
+ item = /obj/item/clothing/head/helmet/space/hardsuit/syndi/ramzi
+
+ price_min = 1500
+ price_max = 2500
+ stock = 1
+ availability_prob = 30
+
+/datum/blackmarket_item/clothing/frontiersmen_hardsuit
+ name = "Frontiersmen Hardsuit"
+ desc = "An old but durable hardsuit typically used by the Frontiersmen. We accept no liability if you're shot by CLIP while wearing this."
+ item = /obj/item/clothing/suit/space/hardsuit/security/independent/frontier
+
+ price_min = 1000
+ price_max = 2000
+ stock_max = 3
+ availability_prob = 40
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm
index 00cfd456ea13..6e6551b58e86 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm
@@ -1,20 +1,10 @@
/datum/blackmarket_item/consumable
category = "Consumables"
-/datum/blackmarket_item/consumable/clown_tears
- name = "Bowl of Clown's Tears"
- desc = "Guaranteed fresh from Weepy Boggins Tragic Kitchen"
- item = /obj/item/reagent_containers/food/snacks/soup/clownstears
- stock = 1
-
- price_min = 520
- price_max = 600
- availability_prob = 10
-
/datum/blackmarket_item/consumable/donk_pocket_box
name = "Box of Donk Pockets"
desc = "A well packaged box containing the favourite snack of every spacefarer."
- item = /obj/item/storage/box/donkpockets
+ item = /obj/effect/spawner/lootdrop/donkpockets
stock_min = 2
stock_max = 5
@@ -29,8 +19,8 @@
stock_min = 2
stock_max = 3
- price_min = 400
- price_max = 700
+ price_min = 200
+ price_max = 500
availability_prob = 50
/datum/blackmarket_item/consumable/suspicious_pills/spawn_item(loc)
@@ -52,12 +42,176 @@
price_max = 60
availability_prob = 50
+/datum/blackmarket_item/consumable/trickwine
+ name = "Trickwine"
+ desc = "The SRM keeps the recipes for their trickwines a closely guarded secret. The Hunters carrying those bottles? Less so."
+ item = /datum/reagent/consumable/ethanol/trickwine/ash_wine
+
+ price_min = 200
+ price_max = 600
+ stock_min = 3
+ stock_max = 7
+ availability_prob = 40
+
+/datum/blackmarket_item/consumable/trickwine/spawn_item(loc)
+ var/trickwine = pick(list(/obj/item/reagent_containers/food/drinks/breakawayflask/vintage/ashwine,
+ /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/icewine,
+ /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/shockwine,
+ /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/hearthwine,
+ /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/forcewine,
+ /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/prismwine))
+ return new trickwine(loc)
+
+
/datum/blackmarket_item/consumable/pumpup
name = "Maintenance Pump-Up"
- desc = "Resist any Baton stun with this handy device!"
+ desc = "Resist any Baton stun with this handy instant tetanus free injector!."
item = /obj/item/reagent_containers/hypospray/medipen/pumpup
stock_max = 3
price_min = 50
price_max = 150
availability_prob = 90
+
+/datum/blackmarket_item/consumable/morphine
+ name = "Morphine Bottle"
+ desc = "Medicinal? Recreational? You can decide with this 30u bottle of morphine!"
+ item = /obj/item/reagent_containers/glass/bottle/morphine
+
+ price_min = 50
+ price_max = 150
+ stock_max = 4
+ availability_prob = 50
+
+/datum/blackmarket_item/consumable/cyanide
+ name = "Cyanide Bottle"
+ desc = "Cyanide, a tried and true classic for all your poisoning needs."
+ item = /obj/item/reagent_containers/glass/bottle/cyanide
+
+ price_min = 300
+ price_max = 600
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/consumable/sodium_thiopental
+ name = "Sodium Thiopental Bottle"
+ desc = "Sodium Thiopental, a potent and fast acting sedative for any occasion."
+ item = /obj/item/reagent_containers/glass/bottle/sodium_thiopental
+
+ price_min = 300
+ price_max = 600
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/consumable/amanitin
+ name = "Amanitin bottle"
+ desc = "A slow acting, but nearly undetectable poison. For the dignified assassin."
+ item = /obj/item/reagent_containers/glass/bottle/amanitin
+
+ price_min = 300
+ price_max = 600
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/consumable/gumballs
+ name = "Gumball"
+ desc = "Looking for a sweet treat? These gumballs are sure to satisfy."
+ item = /obj/item/reagent_containers/food/snacks/gumball
+
+ price_min = 10
+ price_max = 20
+ stock_min = 10
+ stock_max = 20
+ availability_prob = 80
+
+/datum/blackmarket_item/consumable/xeno_meat
+ name = "Xenomorph steak"
+ desc = "The Frontier's most dangerous game, delivered right to your plate! May constitute a violation of your local BARD laws and regulations."
+ item = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
+
+ price_min = 300
+ price_max = 500
+ stock_max = 5
+ availability_prob = 20
+
+/datum/blackmarket_item/consumable/berries
+ name = "Berries"
+ desc = "Some fresh berries we found growing in the corner of our hangar. We're not 100% sure what species these are."
+ item = /obj/item/reagent_containers/food/snacks/grown/berries
+
+ price_min = 25
+ price_max = 100
+ stock_min = 10
+ stock_max = 20
+ availability_prob = 40
+
+/datum/blackmarket_item/consumable/berries/spawn_item(loc)
+ var/berries = pick(list(/obj/item/reagent_containers/food/snacks/grown/berries,
+ /obj/item/reagent_containers/food/snacks/grown/berries/poison/stealth,
+ /obj/item/reagent_containers/food/snacks/grown/berries/death/stealth))
+ return new berries(loc)
+
+/datum/blackmarket_item/consumable/ration
+ name = "Ration Pack"
+ desc = "PGF military surplus rations. What's in them? Who knows. Surprise is the spice of life after all."
+ item = /obj/effect/spawner/lootdrop/ration
+
+ price_min = 150
+ price_max = 400
+ availability_prob = 80
+ unlimited = TRUE
+
+/datum/blackmarket_item/consumable/thirteenloko
+ name = "Can of Thirteen Loko"
+ desc = "This product was quietly discontinued after multiple health related incidents. But you aren't a coward, are you?"
+ item = /obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko
+
+ price_min = 10
+ price_max = 50
+ stock_min = 10
+ stock_max = 20
+ availability_prob = 50
+
+/datum/blackmarket_item/consumable/sutures
+ name = "Sutures"
+ desc = "A bundle of sutures for stitching up your latest bullet wound."
+ item = /obj/item/stack/medical/suture
+
+ price_min = 200
+ price_max = 450
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 40
+
+/datum/blackmarket_item/consumable/regen_mesh
+ name = "Regenerative Mesh"
+ desc = "A smoothing pack of regenerative mesh for your burns."
+ item = /obj/item/stack/medical/mesh
+
+ price_min = 200
+ price_max = 450
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 40
+
+/datum/blackmarket_item/consumable/bruise_pack
+ name = "Bruise Packs"
+ desc = "A bundle of old bruise packs, for you guessed it, bruises. Any rumors of these containing hazardous chemicals are just that. Rumors."
+ item = /obj/item/stack/medical/bruise_pack
+
+ price_min = 300
+ price_max = 500
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 30
+
+/datum/blackmarket_item/consumable/ointment
+ name = "Burn ointment"
+ desc = "A tube of burn ointment. It's past the expiry date, but those are only suggestions."
+ item = /obj/item/stack/medical/ointment
+
+ price_min = 300
+ price_max = 500
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 30
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/emergency.dm b/code/modules/cargo/blackmarket/blackmarket_items/emergency.dm
new file mode 100644
index 000000000000..b609da87945d
--- /dev/null
+++ b/code/modules/cargo/blackmarket/blackmarket_items/emergency.dm
@@ -0,0 +1,52 @@
+/datum/blackmarket_item/emergency
+ category = "Emergency"
+
+/datum/blackmarket_item/emergency/plasma
+ name = "Ten Plasma Sheets"
+ desc = "Low on fuel? We can part with some plasma... for a reasonable price."
+ item = /obj/item/stack/sheet/mineral/plasma/ten
+
+ price_min = 1750
+ price_max = 2250
+ availability_prob = 100
+ unlimited = TRUE
+
+/datum/blackmarket_item/emergency/uranium
+ name = "Ten Uranium Sheets"
+ desc = "Fuel? Dirty Bomb? Fancy nightlight? Doesn't matter, we'll supply."
+ item = /obj/item/stack/sheet/mineral/uranium/ten
+
+ price_min = 1750
+ price_max = 2250
+ availability_prob = 100
+ unlimited = TRUE
+
+/datum/blackmarket_item/emergency/ion_thruster
+ name = "Ion Thruster"
+ desc = "Need a boost? We have a leftover engine board or two from a ship we happened to find. If you're lucky, you won't be the next."
+ item = /obj/item/circuitboard/machine/shuttle/engine/electric
+
+ price_min = 2000
+ price_max = 3000
+ stock_max = 5
+ availability_prob = 100
+
+/datum/blackmarket_item/emergency/oyxgen
+ name = "Oxygen Canister"
+ desc = "What keeps us all breathing. It'll keep you breathing too, if you know what's good for you."
+ item = /obj/machinery/portable_atmospherics/canister/oxygen
+
+ price_min = 2000
+ price_max = 3000
+ stock_max = 3
+ availability_prob = 100
+
+/datum/blackmarket_item/emergency/metal_foam
+ name = "Metal Foam Grenade"
+ desc = "Poor piloting blow a hole in the side of your hull? These metal foam grenades should keep everything important in."
+ item = /obj/item/grenade/chem_grenade/metalfoam
+
+ price_min = 300
+ price_max = 750
+ availability_prob = 100
+ unlimited = TRUE
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm b/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm
new file mode 100644
index 000000000000..7fe78cdcd055
--- /dev/null
+++ b/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm
@@ -0,0 +1,88 @@
+/datum/blackmarket_item/explosive
+ category = "Explosives"
+
+/datum/blackmarket_item/explosive/emp_grenade
+ name = "EMP Grenade"
+ desc = "Use this grenade for SHOCKING results!"
+ item = /obj/item/grenade/empgrenade
+
+ price_min = 100
+ price_max = 400
+ stock_max = 5
+ availability_prob = 50
+
+/datum/blackmarket_item/explosive/h_e
+ name = "HE Grenade"
+ desc = "These high explosive grenades are sure to get some bang for your buck."
+ item = /obj/item/grenade/syndieminibomb/concussion
+
+ price_min = 100
+ price_max = 500
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 25
+
+/datum/blackmarket_item/explosive/frag
+ name = "Fragmentation Grenade"
+ desc = "Pull the pin, count to three, and throw for best results."
+ item = /obj/item/grenade/frag
+
+ price_min = 100
+ price_max = 500
+ stock_min = 3
+ stock_max = 5
+ availability_prob = 40
+
+/datum/blackmarket_item/explosive/c4
+ name = "C4"
+ desc = "Looking to make an explosive entrance? These plastic explosives are perfect for the job."
+ item = /obj/item/grenade/c4
+
+ price_min = 100
+ price_max = 400
+ stock_min = 5
+ stock_max = 10
+ availability_prob = 50
+
+/datum/blackmarket_item/explosive/x4
+ name = "X4"
+ desc = "X4 Plastic Explosives! Better than W4, worse than Y4."
+ item = /obj/item/grenade/c4/x4
+
+ price_min = 400
+ price_max = 700
+ stock_min = 2
+ stock_max = 4
+ availability_prob = 25
+
+/datum/blackmarket_item/explosive/slipocalypse
+ name = "Slipocalyse Cluster Bomb"
+ desc = "Wash away the opposition with sudstastic grenade!"
+ item = /obj/item/grenade/clusterbuster/soap
+
+ price_min = 500
+ price_max = 1500
+ stock = 1
+ availability_prob = 10
+
+/datum/blackmarket_item/explosive/rusted_mine
+ name = "Landmine"
+ desc = "Recovered from a decades old ICW battlefield by our best EOD tech, Nicky Nine Fingers."
+ item = /obj/item/mine/pressure/explosive/rusty
+
+ price_min = 250
+ price_max = 500
+ stock_max = 7
+ availability_prob = 50
+
+/datum/blackmarket_item/explosive/rpg
+ name = "PML-9 RPG"
+ desc = "Offically, it's an anti-armor RPG launcher. Technically, it's anti-everything. Most things don't enjoy being hit in the face with high explosives."
+ item = /obj/item/gun/ballistic/rocketlauncher
+
+ price_min = 3500
+ price_max = 6500
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 20
+
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm
index c9a165faaa2f..eb3de3c4040d 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm
@@ -16,26 +16,11 @@
desc = "Yeehaw, hardboiled friends! This holster is the first step in your dream of becoming a detective and being allowed to shoot real guns!"
item = /obj/item/clothing/accessory/holster
- price_min = 400
+ price_min = 200
price_max = 800
stock_max = 8
availability_prob = 60
-/datum/blackmarket_item/misc/holywater
- name = "Flask of holy water"
- desc = "Father Lootius' own brand of ready-made holy water."
- item = /obj/item/reagent_containers/food/drinks/bottle/holywater
-
- price_min = 400
- price_max = 600
- stock_max = 3
- availability_prob = 40
-
-/datum/blackmarket_item/misc/holywater/spawn_item(loc)
- if (prob(6.66))
- return new /obj/item/reagent_containers/glass/beaker/unholywater(loc)
- return ..()
-
/datum/blackmarket_item/misc/strange_seed
name = "Strange Seeds"
desc = "An Exotic Variety of seed that can contain anything from glow to acid."
@@ -51,7 +36,74 @@
desc = "This easily hidden satchel can become a versatile tool to anybody with the desire to keep certain items out of sight and out of mind."
item = /obj/item/storage/backpack/satchel/flat/empty
- price_min = 750
+ price_min = 250
price_max = 1000
stock_max = 2
availability_prob = 30
+
+/datum/blackmarket_item/misc/organs
+ name = "Organ Freezer"
+ desc = "Need some fresh organs in a jiffy? We got you covered. Make good use of them, someone died to get these to you."
+ item = /obj/structure/closet/crate/freezer/surplus_limbs/organs
+
+ price_min = 1000
+ price_max = 2500
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/misc/abandoned_crate
+ name = "Abandoned Crate"
+ desc = "Why, it could be anything. Are you feeling lucky?"
+ item = /obj/structure/closet/crate/secure/loot
+
+ price_min = 250
+ price_max = 400
+ availability_prob = 100
+ unlimited = TRUE
+
+/datum/blackmarket_item/misc/spygass
+ name = "Spy Glass Kit"
+ desc = "A set of trick glasses and a linked camera. Suit and dashing shades not included."
+ item = /obj/item/storage/box/rxglasses/spyglasskit
+
+ price_min = 250
+ price_max = 1000
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/misc/ripley_mk_4
+ name = "Ripley Mk IV Upgrade Kit"
+ desc = "Pimp out your Ripley to the CLIP Mark IV Rogue Model today! Killjoy bureaucrats not included, thank god."
+ item = /obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley/clip
+
+ price_min = 1500
+ price_max = 2500
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/misc/secret_docs
+ name = "Classified Documents"
+ desc = "Good people died to get these. Luckily, we aren't good people."
+ item = /obj/item/documents
+
+ price_min = 1000
+ price_max = 10000
+ stock = 1
+ availability_prob = 40
+
+/datum/blackmarket_item/consumable/secret_docs/spawn_item(loc)
+ var/docs = pick(list(/obj/item/documents/nanotrasen,
+ /obj/item/documents/solgov,
+ /obj/item/documents/terragov,
+ /obj/item/documents/syndicate/red))
+ return new docs(loc)
+
+/datum/blackmarket_item/misc/black_box
+ name = "Blackbox"
+ desc = "Recorded in here is final moments of some poor souls who are no longer with us. We suggest watching it with friends and popcorn."
+ item = /obj/item/blackbox
+
+ price_min = 1000
+ price_max = 10000
+ stock = 1
+ availability_prob = 40
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/tools.dm b/code/modules/cargo/blackmarket/blackmarket_items/tools.dm
index 0b2cb16aa827..0c86f608e51c 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/tools.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/tools.dm
@@ -5,60 +5,81 @@
name = "Experimental Wrench"
desc = "The extra fast and handy wrench you always wanted!"
item = /obj/item/wrench/caravan
- stock = 1
- price_min = 400
- price_max = 800
- availability_prob = 20
+ price_min = 100
+ price_max = 200
+ stock_max = 3
+ availability_prob = 40
/datum/blackmarket_item/tool/caravan_wirecutters
name = "Experimental Wirecutters"
desc = "The extra fast and handy wirecutters you always wanted!"
item = /obj/item/wirecutters/caravan
- stock = 1
- price_min = 400
- price_max = 800
- availability_prob = 20
+ price_min = 100
+ price_max = 200
+ stock_max = 3
+ availability_prob = 40
/datum/blackmarket_item/tool/caravan_screwdriver
name = "Experimental Screwdriver"
desc = "The extra fast and handy screwdriver you always wanted!"
item = /obj/item/screwdriver/caravan
- stock = 1
- price_min = 400
- price_max = 800
- availability_prob = 20
+ price_min = 100
+ price_max = 200
+ stock_max = 3
+ availability_prob = 40
/datum/blackmarket_item/tool/caravan_crowbar
name = "Experimental Crowbar"
desc = "The extra fast and handy crowbar you always wanted!"
item = /obj/item/crowbar/red/caravan
- stock = 1
- price_min = 400
- price_max = 800
+ price_min = 100
+ price_max = 200
+ stock_max = 3
+ availability_prob = 40
+
+/datum/blackmarket_item/tool/combat_wrench
+ name = "Combat Wrench"
+ desc = "Under fire while doing repairs? With this dual purpose wrench, never be caught unprepared again!"
+ item = /obj/item/wrench/combat
+
+ price_min = 500
+ price_max = 2500
+ stock = 1
availability_prob = 20
+/datum/blackmarket_item/tool/syndi_toolbox
+ name = "Syndicate Toolbox"
+ desc = "A set of specialized tools, built to precision perfection and certified by the GEC."
+ item = /obj/item/storage/toolbox/syndicate
+
+ price_min = 500
+ price_max = 2000
+ stock = 1
+ availability_prob = 30
+
/datum/blackmarket_item/tool/binoculars
name = "Binoculars"
desc = "Increase your sight by 150% with this handy Tool!"
item = /obj/item/binoculars
- stock = 1
- price_min = 400
- price_max = 960
- availability_prob = 30
+ price_min = 50
+ price_max = 300
+ stock_min = 2
+ stock_max = 4
+ availability_prob = 70
/datum/blackmarket_item/tool/riot_shield
name = "Riot Shield"
desc = "Protect yourself from an unexpected Riot at your local Police department!"
item = /obj/item/shield/riot
- price_min = 450
- price_max = 650
- stock_max = 2
+ price_min = 300
+ price_max = 800
+ stock_max = 3
availability_prob = 50
/datum/blackmarket_item/tool/thermite_bottle
@@ -66,10 +87,20 @@
desc = "30u of Thermite to assist in creating a quick access point or get away!"
item = /obj/item/reagent_containers/glass/bottle/thermite
- price_min = 500
+ price_min = 100
+ price_max = 600
+ stock_max = 10
+ availability_prob = 50
+
+/datum/blackmarket_item/tool/thermite_jug
+ name = "Thermite Jug"
+ desc = "An extra large 150u jug of thermite. For those hard to reach places."
+ item = /obj/item/reagent_containers/glass/chem_jug/thermite
+
+ price_min = 400
price_max = 1500
stock_max = 3
- availability_prob = 30
+ availability_prob = 20
/datum/blackmarket_item/tool/science_goggles
name = "Science Goggles"
@@ -80,3 +111,105 @@
price_max = 200
stock_max = 3
availability_prob = 50
+
+/datum/blackmarket_item/tool/thermal_eyepatch
+ name = "Thermal Eyepatch"
+ desc = "A thermal eyepatch, capable of tracking the heat signatures of living beings through solid objects."
+ item = /obj/item/clothing/glasses/thermal/eyepatch
+
+ price_min = 1000
+ price_max = 3000
+ stock = 1
+ availability_prob = 20
+
+/datum/blackmarket_item/tool/jumpboots
+ name = "Jump Boots"
+ desc = "Jump ahead of the competition with these specialized mining boots!"
+ item = /obj/item/clothing/shoes/bhop
+
+ price_min = 100
+ price_max = 1000
+ stock = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/tool/rocket_gloves
+ name = "Rocket Gloves"
+ desc = "The pinacle of tackling technology, no one will be able to resist a tackle from these rocket propelled gloves. Make sure not to miss though, we don't sell wheelchairs."
+ item = /obj/item/clothing/gloves/tackler/rocket
+
+ price_min = 500
+ price_max = 2000
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/tool/chem_master
+ name = "Chem Master Board"
+ desc = "A Chem Master board, capable of seperating and packaging reagents. Perfect for any aspiring at home chemist."
+ item = /obj/item/circuitboard/machine/chem_master
+
+ price_min = 1000
+ price_max = 3000
+ stock = 1
+ availability_prob = 30
+
+/datum/blackmarket_item/tool/rcd
+ name = "Rapid Construction Device"
+ desc = "Borrowed from a GEC construction site, this handy device will make building a cinch."
+ item = /obj/item/construction/rcd
+
+ price_min = 1000
+ price_max = 3000
+ stock = 1
+ availability_prob = 30
+
+/datum/blackmarket_item/tool/suppressor
+ name = "Suppressor"
+ desc = "A suppressor, for when you to keep your murder on the down low."
+ item = /obj/item/suppressor
+
+ price_min = 100
+ price_max = 700
+ stock_min = 3
+ stock_max = 6
+ availability_prob = 60
+
+/datum/blackmarket_item/tool/blastwave
+ name = "Blastwave Jackhammer"
+ desc = "We found a shipment of brand new hypersonic jackhammers in a cargo freighter. So we don't need these old ones anymore."
+ item = /obj/item/pickaxe/drill/jackhammer/old
+
+ price_min = 750
+ price_max = 1750
+ stock_max = 3
+ availability_prob = 40
+
+/datum/blackmarket_item/tool/impro_jetpack
+ name = "Improvised Jetpack"
+ desc = "A lovingly handcrafted jetpack built by our salvage techs. For the frugal space explorer."
+ item = /obj/item/tank/jetpack/improvised
+
+ price_min = 500
+ price_max = 1000
+ stock_min = 3
+ stock_max = 6
+ availability_prob = 70
+
+/datum/blackmarket_item/tool/jet_harness
+ name = "Jet Harness"
+ desc = "A compact oxygen filled jet harness for tactical EVA insertions and extractions."
+ item = /obj/item/tank/jetpack/oxygen/harness
+
+ price_min = 1250
+ price_max = 3500
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/tool/jetpack_upgrade
+ name = "Hardsuit Jetpack Upgrade"
+ desc = "A modular jetpack compatible with most hardsuits. If the screws feel a bit loose, it's because the last suit it was attached to was beyond recovery."
+ item = /obj/item/tank/jetpack/suit
+
+ price_min = 1750
+ price_max = 3000
+ stock = 1
+ availability_prob = 25
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
index dea11a4c36d3..8832729e58af 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
@@ -6,9 +6,10 @@
desc = "Get the janitor back at his own game with this affordable prank kit."
item = /obj/item/restraints/legcuffs/beartrap
- price_min = 300
- price_max = 550
- stock_max = 3
+ price_min = 150
+ price_max = 400
+ stock_min = 3
+ stock_max = 7
availability_prob = 40
/datum/blackmarket_item/weapon/shotgun_dart
@@ -34,30 +35,312 @@
stock_max = 3
availability_prob = 60
-/datum/blackmarket_item/weapon/emp_grenade
- name = "EMP Grenade"
- desc = "Use this grenade for SHOCKING results!"
- item = /obj/item/grenade/empgrenade
+/datum/blackmarket_item/weapon/switchblade
+ name = "Switchblade"
+ desc = "Extra shrap switchblades for intimidation AND style. Bandages not included if you cut yourself."
+ item = /obj/item/switchblade
- price_min = 100
- price_max = 400
- stock_max = 2
+ price_min = 500
+ price_max = 700
+ stock_max = 3
availability_prob = 50
+/datum/blackmarket_item/weapon/sabre
+ name = "SUNS Dueling Sabre"
+ desc = "A mastercrafted sabre formerly wielded by a SUNS academic. It's very sharp, we had to spend hours stitching our fingers back on after getting it."
+ item = /obj/item/storage/belt/sabre/suns
+
+ price_min = 1500
+ price_max = 3500
+ stock = 1
+ availability_prob = 25
+
/datum/blackmarket_item/weapon/derringer
name = "Derringer"
desc = "A concealable handgun small enough to hide nearly anywhere. Uses .38 revolver rounds."
item = /obj/item/gun/ballistic/derringer
- price_min = 400
- price_max = 600
+ price_min = 100
+ price_max = 500
stock_max = 6
availability_prob = 50
-/datum/blackmarket_item/weapon/derringer
+/datum/blackmarket_item/weapon/golden
name = "Golden Derringer"
desc = "A rare custom-made concealable weapon designed to fire illegal .357 rounds."
item = /obj/item/gun/ballistic/derringer/gold
price_min = 1000
price_max = 3000
- stock_max = 1
- availability_prob = 5
+ stock = 1
+ availability_prob = 10
+
+/datum/blackmarket_item/weapon/himehabu
+ name = "Himehabu Pistol"
+ desc = "Great things come in small packages. The Himehabu is perfect for all your espionage needs. Chambered in .22lr."
+ item = /obj/item/gun/ballistic/automatic/pistol/himehabu
+ pair_item = /datum/blackmarket_item/weapon/himehabu_mag
+
+ price_min = 100
+ price_max = 600
+ stock_max = 6
+ availability_prob = 50
+
+/datum/blackmarket_item/weapon/himehabu_mag
+ name = "Himehabu Magazines"
+ desc = "Compact 10 round .22lr magazines for use in the Himehabu pistol."
+ item = /obj/item/ammo_box/magazine/m22lr
+
+ price_min = 100
+ price_max = 200
+ stock_min = 3
+ stock_max = 6
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/e10
+ name = "E-10 Laser Pistol"
+ desc = "Sharplite letting you down? Try these classic Eoehoma Firearms E-10 Laser Pistols."
+ item = /obj/item/gun/energy/laser/e10
+
+ price_min = 500
+ price_max = 1250
+ stock_max = 5
+ availability_prob = 20
+
+/datum/blackmarket_item/weapon/e11
+ name = "E-11 Energy Gun"
+ desc = "Look. I'll be straight with you. These guns are awful. But, they are cheap if you're that desperate."
+ item = /obj/item/gun/energy/e_gun/e11
+
+ price_min = 250
+ price_max = 750
+ stock = 5
+ availability_prob = 60
+
+/datum/blackmarket_item/weapon/e40
+ name = "E-40 Hybrid Assault Rifle"
+ desc = "A dual mode hybrid assault rifle made by the now defunct Eoehoma Firearms. Capable of firing both bullets AND lasers, for the discerning dealer in death. Chambered in Eoehoma .299 Caseless."
+ item = /obj/item/gun/ballistic/automatic/assault/e40
+ pair_item = /datum/blackmarket_item/weapon/e40_mag
+
+ price_min = 7000
+ price_max = 13000
+ stock = 1
+ availability_prob = 20
+
+/datum/blackmarket_item/weapon/e40_mag
+ name = "Eoehoma .299 Caseless Magazine"
+ desc = "A 30 round magazine for the E-40 Hybrid Rifle."
+ item = /obj/item/ammo_box/magazine/e40
+
+ price_min = 750
+ price_max = 1250
+ stock_min = 2
+ stock_max = 4
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/e50
+ name = "E-50 Energy Emitter"
+ desc = "An Eoehoma Firearms E-50 Emitter cannon. For when you want a send a message. A really big message."
+ item = /obj/item/gun/energy/laser/e50
+
+ price_min = 4000
+ price_max = 7000
+ stock_max = 2
+ availability_prob = 20
+
+/datum/blackmarket_item/weapon/saber_smg
+ name = "Saber 9mm SMG"
+ desc = "A prototype 9mm submachine gun. Most of these never got past the RND phase and into distribution. But we happen know a guy."
+ item = /obj/item/gun/ballistic/automatic/smg/proto
+ pair_item = /datum/blackmarket_item/weapon/saber_mag
+
+ price_min = 2500
+ price_max = 4200
+ stock_max = 2
+ availability_prob = 25
+
+/datum/blackmarket_item/weapon/saber_mag
+ name = "Saber 9mm SMG Magazines"
+ desc = "Magazines for use in the Saber 9mm SMG. No, they don't work as swords."
+ item = /obj/item/ammo_box/magazine/smgm9mm
+
+ price_min = 500
+ price_max = 1000
+ stock = 2
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/bg_16
+ name = "BG-16 Beam Gun"
+ desc = "Not satisfied by Etherbor's civilian offerings? Try this military grade one we found!"
+ item = /obj/item/gun/energy/kalix/pgf
+
+ price_min = 2500
+ price_max = 5000
+ stock = 2
+ availability_prob = 20
+
+/datum/blackmarket_item/weapon/sawn_illestren
+ name = "Sawn off Illestren Rifle"
+ desc = "We had to saw down the barrels on these to fit them in the smuggling compartment. They don't aim too good, but it still packs a good punch."
+ item = /obj/item/gun/ballistic/rifle/illestren/sawn
+
+ price_min = 600
+ price_max = 1250
+ stock_min = 2
+ stock_max = 5
+ availability_prob = 60
+
+/datum/blackmarket_item/weapon/combat_shotgun
+ name = "Combat Shotgun"
+ desc = "Are your arms tired from pumping Hunter's Pride shotguns? This semi-automatic combat shotgun will make killing a breeze."
+ item = /obj/item/gun/ballistic/shotgun/automatic/combat
+
+ price_min = 2000
+ price_max = 4000
+ stock_max = 3
+ availability_prob = 40
+
+/datum/blackmarket_item/weapon/mecha_weapon_bay
+ name = "Concealed Weapons Bay"
+ desc = "Ripley with a laser cannon? Odysseus with a missile rack? Sky's the limit with this omni-compatible weapons bay! (Missiles and lasers not included)"
+ item = /obj/item/mecha_parts/concealed_weapon_bay
+
+ price_min = 1000
+ price_max = 2000
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/weapon/model_h
+ name = "Model H"
+ desc = "A Model H slug pistol. The H stands for Hurt. Chambered in ferromagnetic slugs."
+ item = /obj/item/gun/ballistic/automatic/powered/gauss/modelh
+ pair_item = /datum/blackmarket_item/weapon/model_h_mag
+
+ price_min = 2000
+ price_max = 3500
+ stock = 2
+ availability_prob = 35
+
+/datum/blackmarket_item/weapon/model_h/spawn_item(loc)
+ var/model_h = pick(list(/obj/item/gun/ballistic/automatic/powered/gauss/modelh/suns,
+ /obj/item/gun/ballistic/automatic/powered/gauss/modelh))
+ return new model_h(loc)
+
+/datum/blackmarket_item/weapon/model_h_mag
+ name = "Model H Magazine"
+ desc = "A 10 round magazine for Model H slug pistol."
+ item = /obj/item/ammo_box/magazine/modelh
+
+ price_min = 500
+ price_max = 1000
+ stock_max = 4
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/sgg
+ name = "SSG-669C Rotary Sniper Rifle"
+ desc = "I could tell you it's full name, but we'd be here all day. It's a sniper rifle. It shoots people from far away. Chambered in 8x58mm."
+ item = /obj/item/gun/ballistic/rifle/solgov
+ pair_item = /datum/blackmarket_item/weapon/sgg_stripper
+
+ price_min = 3000
+ price_max = 6000
+ stock = 1
+ availability_prob = 20
+
+/datum/blackmarket_item/weapon/sgg_stripper
+ name = "8x58mm Stripper Clip"
+ desc = "A five round 8x58mm stripper clip for use with the SGG-669C."
+ item = /obj/item/ammo_box/a858
+
+ price_min = 500
+ price_max = 1000
+ stock_min = 4
+ stock_max = 6
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/pistole_c
+ name = "Pistole C"
+ desc = "Pistole Compact? Pistole Caseless? Pistole Cheese? Fuck if I know. All I know is these little numbers pack a nasty sting. Chambered in 5.56 caseless."
+ item = /obj/item/gun/ballistic/automatic/pistol/solgov/old
+ pair_item = /datum/blackmarket_item/weapon/pistole_c_mag
+
+ price_min = 900
+ price_max = 1250
+ stock_max = 3
+ availability_prob = 30
+
+/datum/blackmarket_item/weapon/pistole_c_mag
+ name = "5.56 Caseless Magazine"
+ desc = "A 12 round magazine for the Pistole Cheese."
+ item = /obj/item/ammo_box/magazine/pistol556mm
+
+ price_min = 250
+ price_max = 750
+ stock_max = 2
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/proto_gauss
+ name = "Prototype Gauss Rifle"
+ desc = "A prototype gauss rifle made by Nanotrasen. Perfect for making swiss cheese out of people. Chambered in ferromagnetic pellets."
+ item = /obj/item/gun/ballistic/automatic/powered/gauss
+ pair_item = /datum/blackmarket_item/weapon/proto_gauss_mag
+
+ price_min = 3500
+ price_max = 6000
+ stock = 2
+ availability_prob = 25
+
+/datum/blackmarket_item/weapon/proto_gauss_mag
+ name = "Prototype Gauss Rifle Magazine"
+ desc = "A 25 round ferromagnetic pellet magazine for the prototype gauss rifle."
+ item = /obj/item/ammo_box/magazine/gauss
+
+ price_min = 600
+ price_max = 1100
+ stock_min = 2
+ stock_max = 4
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/tec
+ name = "TEC-9 Machine Pistol"
+ desc = "Hallelujah! It's raining lead! This 9mm machine pistol is capable of spitting out bullets at rapid pace."
+ item = /obj/item/gun/ballistic/automatic/pistol/tec9
+ pair_item = /datum/blackmarket_item/weapon/tec_mag
+
+ price_min = 1500
+ price_max = 2750
+ stock_max = 2
+ availability_prob = 35
+
+/datum/blackmarket_item/weapon/tec_mag
+ name = "TEC-9 AP Magazine"
+ desc = "A 20 round magazine of AP ammo for the TEC-9 machine pistol."
+ item = /obj/item/ammo_box/magazine/tec9
+
+ price_min = 600
+ price_max = 1000
+ stock_max = 2
+ availability_prob = 0
+
+/datum/blackmarket_item/weapon/scout
+ name = "HP Scout"
+ desc = "A scoped rifle chambered in .300 Magnum. As the name would imply, perfect for scouts. Try not to tunnel vision with the scope like the last guy."
+ item = /obj/item/gun/ballistic/rifle/scout
+ pair_item = /datum/blackmarket_item/weapon/scout_stripper
+
+ price_min = 4000
+ price_max = 6500
+ stock = 1
+ availability_prob = 20
+
+/datum/blackmarket_item/weapon/scout_stripper
+ name = ".300 Magnum Stripper Clip"
+ desc = "A 5 round .300 Magnum stripper clips for use with the HP Scout."
+ item = /obj/item/ammo_box/a300
+
+ price_min = 500
+ price_max = 1000
+ stock_min = 4
+ stock_max = 6
+ availability_prob = 0
+
+
diff --git a/code/modules/cargo/blackmarket/blackmarket_market.dm b/code/modules/cargo/blackmarket/blackmarket_market.dm
index 6979d62e1021..3e055048a85b 100644
--- a/code/modules/cargo/blackmarket/blackmarket_market.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_market.dm
@@ -13,8 +13,8 @@
var/list/categories = list()
/// Adds item to the available items and add it's category if it is not in categories yet.
-/datum/blackmarket_market/proc/add_item(datum/blackmarket_item/item)
- if(!prob(initial(item.availability_prob)))
+/datum/blackmarket_market/proc/add_item(datum/blackmarket_item/item, paired)
+ if(!prob(initial(item.availability_prob)) && !paired)
return FALSE
if(ispath(item))
@@ -25,6 +25,10 @@
available_items[item.category] = list()
available_items[item.category] += item
+
+ if(item.pair_item)
+ add_item(item.pair_item, TRUE)
+
return TRUE
/// Handles buying the item, this is mainly for future use and moving the code away from the uplink.
@@ -49,5 +53,4 @@
/datum/blackmarket_market/blackmarket
name = "Black Market"
shipping = list(SHIPPING_METHOD_LTSRBT =50,
- SHIPPING_METHOD_LAUNCH =10,
- SHIPPING_METHOD_TELEPORT=75)
+ SHIPPING_METHOD_LAUNCH =10)
diff --git a/code/modules/cargo/blackmarket/blackmarket_telepad.dm b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
index 0a77d9822bf3..0dea6c59b819 100644
--- a/code/modules/cargo/blackmarket/blackmarket_telepad.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_telepad.dm
@@ -27,7 +27,7 @@
/// Current recharge progress.
var/recharge_cooldown = 0
/// Base recharge time which is used to get recharge_time.
- var/base_recharge_time = 100
+ var/base_recharge_time = 10
/// Current /datum/blackmarket_purchase being recieved.
var/recieving
/// Current /datum/blackmarket_purchase being sent to the target uplink.
@@ -37,10 +37,8 @@
/obj/machinery/ltsrbt/Initialize()
. = ..()
- SSblackmarket.telepads += src
/obj/machinery/ltsrbt/Destroy()
- SSblackmarket.telepads -= src
// Bye bye orders.
if(SSblackmarket.telepads.len)
for(var/datum/blackmarket_purchase/P in queue)
@@ -49,9 +47,9 @@
/obj/machinery/ltsrbt/RefreshParts()
recharge_time = base_recharge_time
- // On tier 4 recharge_time should be 20 and by default it is 80 as scanning modules should be tier 1.
+ // On tier 4 recharge_time should be 2 and by default it is 8 as scanning modules should be tier 1.
for(var/obj/item/stock_parts/scanning_module/scan in component_parts)
- recharge_time -= scan.rating * 10
+ recharge_time -= scan.rating
recharge_cooldown = recharge_time
power_efficiency = 0
@@ -61,6 +59,16 @@
if(!power_efficiency)
power_efficiency = 1
+/// Stores the LTSRBT Data in the uplink for linking
+/obj/machinery/ltsrbt/attackby(obj/item/O, mob/user, params)
+ if(istype(O, /obj/item/blackmarket_uplink))
+ var/obj/item/blackmarket_uplink/uplink = O
+ uplink.target = src
+ to_chat(user, "[src] linked to [O].")
+ return TRUE
+
+ return ..()
+
/// Adds /datum/blackmarket_purchase to queue unless the machine is free, then it sets the purchase to be instantly recieved
/obj/machinery/ltsrbt/proc/add_to_queue(datum/blackmarket_purchase/purchase)
if(!recharge_cooldown && !recieving && !transmitting)
diff --git a/code/modules/cargo/blackmarket/blackmarket_uplink.dm b/code/modules/cargo/blackmarket/blackmarket_uplink.dm
index e8abd0424b2d..26363bf71b82 100644
--- a/code/modules/cargo/blackmarket/blackmarket_uplink.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_uplink.dm
@@ -2,6 +2,7 @@
name = "Black Market Uplink"
icon = 'icons/obj/blackmarket.dmi'
icon_state = "uplink"
+ desc = "A jury rigged uplink capable of accessing illicit or grey market vendors. There's a port on side for linking it to a LTSRBT for more practical shipping."
// UI variables.
var/viewing_category
@@ -13,6 +14,8 @@
var/money = 0
/// List of typepaths for "/datum/blackmarket_market"s that this uplink can access.
var/list/accessible_markets = list(/datum/blackmarket_market/blackmarket)
+ // Linked LTSRBT for uplink to send to.
+ var/obj/machinery/ltsrbt/target
/obj/item/blackmarket_uplink/Initialize()
. = ..()
@@ -53,6 +56,10 @@
user.put_in_hands(holochip)
to_chat(user, "You withdraw [amount_to_remove] credits into a holochip.")
+/obj/item/blackmarket_uplink/examine(mob/user)
+ . = ..()
+ . += "It's LTSRBT link [target ? "contains a [target]." : "is empty."]"
+
/obj/item/blackmarket_uplink/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
@@ -87,7 +94,7 @@
/obj/item/blackmarket_uplink/ui_static_data(mob/user)
var/list/data = list()
data["delivery_method_description"] = SSblackmarket.shipping_method_descriptions
- data["ltsrbt_built"] = SSblackmarket.telepads.len
+ data["ltsrbt_built"] = target
data["markets"] = list()
for(var/M in accessible_markets)
var/datum/blackmarket_market/BM = SSblackmarket.markets[M]
@@ -155,7 +162,7 @@
time = 30
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_MULTITOOL)
reqs = list(
- /obj/item/stock_parts/subspace/amplifier = 1,
+ /obj/item/stock_parts/scanning_module = 1,
/obj/item/stack/cable_coil = 15,
/obj/item/radio = 1,
/obj/item/analyzer = 1
diff --git a/code/modules/cargo/packs/machinery.dm b/code/modules/cargo/packs/machinery.dm
index 0bf718fffdd5..825329e97c80 100644
--- a/code/modules/cargo/packs/machinery.dm
+++ b/code/modules/cargo/packs/machinery.dm
@@ -176,7 +176,7 @@
/datum/supply_pack/machinery/blackmarket_telepad
name = "Black Market LTSRBT"
desc = "Need a faster and better way of transporting your illegal goods from and to the sector? Fear not, the Long-To-Short-Range-Bluespace-Transceiver (LTSRBT for short) is here to help. Contains a LTSRBT circuit, two bluespace crystals, and one ansible."
- cost = 5000
+ cost = 1000
contains = list(
/obj/item/circuitboard/machine/ltsrbt,
/obj/item/stack/ore/bluespace_crystal/artificial,
diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm
index 9c45ac569da8..1632e175fd8e 100644
--- a/code/modules/projectiles/guns/ballistic/rifle.dm
+++ b/code/modules/projectiles/guns/ballistic/rifle.dm
@@ -113,6 +113,14 @@
item_state = "illestren_factory_sawn"
mob_overlay_state = item_state
+/obj/item/gun/ballistic/rifle/illestren/sawn
+ name = "sawn-off Illestren rifle"
+ desc = "An Illestren rifle sawn down to a ridiculously small size. There was probably a reason it wasn't made this short to begin with, but it still packs a punch."
+ item_state = "illestren_sawn"
+ sawn_off = TRUE
+ weapon_weight = WEAPON_MEDIUM
+
+
/obj/item/gun/ballistic/rifle/solgov
name = "SSG-669C"
desc = "A bolt-action sniper rifle used by Solarian troops. Beloved for its rotary design and accuracy. Chambered in 8x58mm Caseless."
diff --git a/shiptest.dme b/shiptest.dme
index 9a944898dc69..e012a19140de 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -1880,6 +1880,8 @@
#include "code\modules\cargo\blackmarket\blackmarket_uplink.dm"
#include "code\modules\cargo\blackmarket\blackmarket_items\clothing.dm"
#include "code\modules\cargo\blackmarket\blackmarket_items\consumables.dm"
+#include "code\modules\cargo\blackmarket\blackmarket_items\emergency.dm"
+#include "code\modules\cargo\blackmarket\blackmarket_items\explosives.dm"
#include "code\modules\cargo\blackmarket\blackmarket_items\misc.dm"
#include "code\modules\cargo\blackmarket\blackmarket_items\tools.dm"
#include "code\modules\cargo\blackmarket\blackmarket_items\weapons.dm"