i think it works

MAJOR antag backend update
- you cannot bruteforce the pen anymore
- uplink now uses bitflag to lock purchases
- poplock is handled entirely by the buyable uplink items
- tgui antag intro (for selected ones)
This commit is contained in:
LetterN
2021-10-30 11:45:50 +08:00
parent f7b898a2a9
commit 99019166e4
117 changed files with 3049 additions and 1868 deletions
+31 -29
View File
@@ -19,25 +19,46 @@
throw_range = 7
w_class = WEIGHT_CLASS_SMALL
/// The uplink flag for this type.
/// See [`code/__DEFINES/uplink.dm`]
var/uplink_flag = UPLINK_TRAITORS
/obj/item/uplink/Initialize(mapload, owner, tc_amount = 20)
. = ..()
AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount)
AddComponent(/datum/component/uplink, owner, FALSE, TRUE, uplink_flag, tc_amount)
/obj/item/uplink/nuclear/Initialize()
/obj/item/uplink/debug
name = "debug uplink"
/obj/item/uplink/debug/Initialize(mapload, owner, tc_amount = 9000)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.set_gamemode(/datum/game_mode/nuclear)
hidden_uplink.name = "debug uplink"
hidden_uplink.debug = TRUE
/obj/item/uplink/nuclear
uplink_flag = UPLINK_NUKE_OPS
/obj/item/uplink/nuclear/debug
name = "debug nuclear uplink"
uplink_flag = UPLINK_NUKE_OPS
/obj/item/uplink/nuclear/debug/Initialize(mapload, owner, tc_amount = 9000)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.name = "debug nuclear uplink"
hidden_uplink.debug = TRUE
/obj/item/uplink/nuclear_restricted
uplink_flag = UPLINK_NUKE_OPS
/obj/item/uplink/nuclear_restricted/Initialize()
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.allow_restricted = FALSE
hidden_uplink.set_gamemode(/datum/game_mode/nuclear)
/obj/item/uplink/clownop/Initialize()
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.set_gamemode(/datum/game_mode/nuclear/clown_ops)
/obj/item/uplink/clownop
uplink_flag = UPLINK_CLOWN_OPS
/obj/item/uplink/old
name = "dusty radio"
@@ -51,28 +72,9 @@
// Multitool uplink
/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20)
. = ..()
AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount)
AddComponent(/datum/component/uplink, owner, FALSE, TRUE, UPLINK_TRAITORS, tc_amount)
// Pen uplink
/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20)
. = ..()
AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount)
/obj/item/uplink/debug
name = "debug uplink"
/obj/item/uplink/debug/Initialize(mapload, owner, tc_amount = 9000)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.name = "debug uplink"
hidden_uplink.debug = TRUE
/obj/item/uplink/nuclear/debug
name = "debug nuclear uplink"
/obj/item/uplink/nuclear/debug/Initialize(mapload, owner, tc_amount = 9000)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.set_gamemode(/datum/game_mode/nuclear)
hidden_uplink.name = "debug nuclear uplink"
hidden_uplink.debug = TRUE
AddComponent(/datum/component/uplink, owner, TRUE, FALSE, UPLINK_TRAITORS, tc_amount)
+90 -69
View File
@@ -1,54 +1,76 @@
/proc/get_uplink_items(datum/game_mode/gamemode, allow_sales = TRUE, allow_restricted = TRUE, other_filter = list())
var/list/filtered_uplink_items = GLOB.uplink_categories.Copy() // list of uplink categories without associated values.
GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/proc/get_uplink_items(uplink_flag, allow_sales = TRUE, allow_restricted = TRUE)
var/list/filtered_uplink_items = list()
var/list/sale_items = list()
for(var/path in GLOB.uplink_items)
var/datum/uplink_item/I = new path
if(I.include_modes.len)
if(!gamemode && SSticker.mode && !(SSticker.mode.type in I.include_modes))
continue
if(gamemode && !(gamemode in I.include_modes))
continue
if(I.exclude_modes.len)
if(!gamemode && SSticker.mode && (SSticker.mode.type in I.exclude_modes))
continue
if(gamemode && (gamemode in I.exclude_modes))
continue
if(!I.item)
continue
if (!(I.purchasable_from & uplink_flag))
continue
if(I.player_minimum && I.player_minimum > GLOB.joined_player_list.len)
continue
if (I.restricted && !allow_restricted)
continue
if (I.type in other_filter)
continue
LAZYSET(filtered_uplink_items[I.category], I.name, I)
if(!filtered_uplink_items[I.category])
filtered_uplink_items[I.category] = list()
filtered_uplink_items[I.category][I.name] = I
if(I.limited_stock < 0 && !I.cant_discount && I.item && I.cost > 1)
sale_items += I
if(allow_sales)
for(var/i in 1 to 3)
var/datum/uplink_item/I = pick_n_take(sale_items)
var/datum/uplink_item/A = new I.type
var/discount = A.get_discount()
var/list/disclaimer = list("Void where prohibited.", "Not recommended for children.", "Contains small parts.", "Check local laws for legality in region.", "Do not taunt.", "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", "Keep away from fire or flames.", "Product is provided \"as is\" without any implied or expressed warranties.", "As seen on TV.", "For recreational use only.", "Use only as directed.", "16% sales tax will be charged for orders originating within Space Nebraska.")
A.limited_stock = 1
I.refundable = FALSE //THIS MAN USES ONE WEIRD TRICK TO GAIN FREE TC, CODERS HATES HIM!
A.refundable = FALSE
if(A.cost >= 20) //Tough love for nuke ops
discount *= 0.5
A.cost = max(round(A.cost * discount),1)
A.category = "Discounted Gear"
A.name += " ([round(((initial(A.cost)-A.cost)/initial(A.cost))*100)]% off!)"
A.desc += " Normally costs [initial(A.cost)] TC. All sales final. [pick(disclaimer)]"
A.item = I.item
var/datum/team/nuclear/nuclear_team
// if (uplink_flag & UPLINK_NUKE_OPS) // uplink code kind of needs a redesign
// nuclear_team = locate() in GLOB.antagonist_teams // the team discounts could be in a GLOB with this design but it would make sense for them to be team specific...
if (!nuclear_team)
create_uplink_sales(3, "Discounted Gear", 1, sale_items, filtered_uplink_items)
else
if (!nuclear_team.team_discounts)
// create 5 unlimited stock discounts
create_uplink_sales(5, "Discounted Team Gear", -1, sale_items, filtered_uplink_items)
// Create 10 limited stock discounts
create_uplink_sales(10, "Limited Stock Team Gear", 1, sale_items, filtered_uplink_items)
nuclear_team.team_discounts = list("Discounted Team Gear" = filtered_uplink_items["Discounted Team Gear"], "Limited Stock Team Gear" = filtered_uplink_items["Limited Stock Team Gear"])
else
for(var/cat in nuclear_team.team_discounts)
for(var/item in nuclear_team.team_discounts[cat])
var/datum/uplink_item/D = nuclear_team.team_discounts[cat][item]
var/datum/uplink_item/O = filtered_uplink_items[initial(D.category)][initial(D.name)]
O.refundable = FALSE
LAZYSET(filtered_uplink_items[A.category], A.name, A)
filtered_uplink_items["Discounted Team Gear"] = nuclear_team.team_discounts["Discounted Team Gear"]
filtered_uplink_items["Limited Stock Team Gear"] = nuclear_team.team_discounts["Limited Stock Team Gear"]
for(var/category in filtered_uplink_items)
if(!filtered_uplink_items[category]) //empty categories with no associated uplink item. Remove.
filtered_uplink_items -= category
return filtered_uplink_items
/proc/create_uplink_sales(num, category_name, limited_stock, sale_items, uplink_items)
if (num <= 0)
return
if(!uplink_items[category_name])
uplink_items[category_name] = list()
for (var/i in 1 to num)
var/datum/uplink_item/I = pick_n_take(sale_items)
var/datum/uplink_item/A = new I.type
var/discount = A.get_discount()
var/list/disclaimer = list("Void where prohibited.", "Not recommended for children.", "Contains small parts.", "Check local laws for legality in region.", "Do not taunt.", "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", "Keep away from fire or flames.", "Product is provided \"as is\" without any implied or expressed warranties.", "As seen on TV.", "For recreational use only.", "Use only as directed.", "16% sales tax will be charged for orders originating within Space Nebraska.")
A.limited_stock = limited_stock
I.refundable = FALSE //THIS MAN USES ONE WEIRD TRICK TO GAIN FREE TC, CODERS HATES HIM!
A.refundable = FALSE
if(A.cost >= 20) //Tough love for nuke ops
discount *= 0.5
A.category = category_name
A.cost = max(round(A.cost * discount),1)
A.name += " ([round(((initial(A.cost)-A.cost)/initial(A.cost))*100)]% off!)"
A.desc += " Normally costs [initial(A.cost)] TC. All sales final. [pick(disclaimer)]"
A.item = I.item
uplink_items[category_name][A.name] = A
/**
* Uplink Items
@@ -67,12 +89,14 @@
var/surplus = 100 // Chance of being included in the surplus crate.
var/cant_discount = FALSE
var/limited_stock = -1 //Setting this above zero limits how many times this item can be bought by the same traitor in a round, -1 is unlimited
var/list/include_modes = list() // Game modes to allow this item in.
var/list/exclude_modes = list() // Game modes to disallow this item from.
/// A bitfield to represent what uplinks can purchase this item.
/// See [`code/__DEFINES/uplink.dm`].
var/purchasable_from = ALL
var/list/restricted_roles = list() //If this uplink item is only available to certain roles. Roles are dependent on the frequency chip or stored ID.
var/player_minimum //The minimum crew size needed for this item to be added to uplinks.
var/purchase_log_vis = TRUE // Visible in the purchase log?
var/restricted = FALSE // Adds restrictions for VR/Events
var/list/restricted_species //Limits items to a specific species. Hopefully.
var/illegal_tech = TRUE // Can this item be deconstructed to unlock certain techweb research nodes?
/datum/uplink_item/proc/get_discount()
@@ -80,6 +104,7 @@
/datum/uplink_item/proc/purchase(mob/user, datum/component/uplink/U)
var/atom/A = spawn_item(item, user, U)
// log_uplink("[key_name(user)] purchased [src] for [cost] telecrystals from [U.parent]'s uplink")
if(purchase_log_vis && U.purchase_log)
U.purchase_log.LogPurchase(A, src, cost)
@@ -94,70 +119,66 @@
if(ishuman(user) && istype(A, /obj/item))
var/mob/living/carbon/human/H = user
if(H.put_in_hands(A))
to_chat(H, "[A] materializes into your hands!")
to_chat(H, span_boldnotice("[A] materializes into your hands!"))
return A
to_chat(user, "[A] materializes onto the floor.")
to_chat(user, span_boldnotice("[A] materializes onto the floor!"))
return A
/*
Uplink Categories:
Due to how the typesof() in-built byond proc works, it should be kept in mind
the order categories are displayed in the uplink UI is same to the order they are loaded in the code.
I trust no extra filter is needed as long as they are all contained within the following lines.
When adding new uplink categories, please keep them separate from their sub paths here and without set item.
Failure to comply may result in the new categories being listed at the bottom of the UI.
*/
//Discounts (dynamically filled above)
/datum/uplink_item/discounts
category = "Discounts"
// cit specific. idk
/datum/uplink_item/holiday
category = "Holiday"
/datum/uplink_item/bundles_TC
category = "Telecrystals and Bundles"
//All bundles and telecrystals
/datum/uplink_item/bundles_tc
category = "Bundles"
surplus = 0
cant_discount = TRUE
// Dangerous Items
/datum/uplink_item/dangerous
category = "Conspicuous Weapons"
/datum/uplink_item/stealthy_weapons
category = "Stealthy Weapons"
/datum/uplink_item/ammo
category = "Ammunition"
surplus = 40
/datum/uplink_item/explosives
category = "Explosives"
//Support and Mechs
/datum/uplink_item/support
category = "Support and Exosuits"
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/suits
category = "Clothing"
surplus = 40
purchasable_from = UPLINK_NUKE_OPS
// Stealth Items
/datum/uplink_item/stealthy_tools
category = "Stealth Gadgets"
//Space Suits and Hardsuits
/datum/uplink_item/suits
category = "Space Suits"
surplus = 40
// Devices and Tools
/datum/uplink_item/device_tools
category = "Misc. Gadgets"
// Implants
/datum/uplink_item/implants
category = "Implants"
surplus = 50
//Race-specific items
/datum/uplink_item/race_restricted
category = "Species-Restricted"
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
surplus = 0
// Role-specific items
/datum/uplink_item/role_restricted
category = "Role-Restricted"
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
surplus = 0
cant_discount = TRUE
// Pointless
/datum/uplink_item/badass
category = "(Pointless) Badassery"
surplus = 0
//Discounts (dynamically filled above)
/datum/uplink_item/discounts
category = "Discounted Gear"
+22 -22
View File
@@ -12,7 +12,7 @@
desc = "Contains 10 additional .45-70 GOVT rounds. Caliber is exceedingly rare, and thus, comes at a premium."
item = /obj/item/ammo_box/g4570
cost = 5
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/pistol
name = "10mm Handgun Magazine"
@@ -20,7 +20,7 @@
are dirt cheap but are half as effective as .357 rounds."
item = /obj/item/ammo_box/magazine/m10mm
cost = 1
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/ammo/pistol/box
name = "Ammo Box - 10mm"
@@ -34,7 +34,7 @@
These rounds are less effective at injuring the target but penetrate protective gear."
item = /obj/item/ammo_box/magazine/m10mm/ap
cost = 2
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/ammo/pistolap/box
name = "Ammo Box - 10mm Armour Piercing"
@@ -48,7 +48,7 @@
These rounds are more damaging but ineffective against armour."
item = /obj/item/ammo_box/magazine/m10mm/hp
cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/ammo/pistolhp/box
name = "Ammo Box - 10mm Hollow Point"
@@ -62,7 +62,7 @@
Loaded with incendiary rounds which inflict little damage, but ignite the target."
item = /obj/item/ammo_box/magazine/m10mm/fire
cost = 2
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/ammo/pistolfire/box
name = "Ammo Box - 10mm Incendiary"
@@ -85,7 +85,7 @@
/datum/uplink_item/ammo/shotgun
cost = 2
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/shotgun/bag
name = "12g Ammo Duffel Bag"
@@ -136,7 +136,7 @@
For when you really need a lot of things dead."
item = /obj/item/ammo_box/a357
cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/ammo/revolver/ap
name = ".357 Armor Piercing Speed Loader"
@@ -150,25 +150,25 @@
Your teammates will ask you to not shoot these down small hallways."
item = /obj/item/ammo_casing/a40mm
cost = 2
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/smg/bag
name = ".45 Ammo Duffel Bag"
desc = "A duffel bag filled with enough .45 ammo to supply an entire team, at a discounted price."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg
cost = 20 //instead of 27 TC
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/smg
name = ".45 SMG Magazine"
desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun."
item = /obj/item/ammo_box/magazine/smgm45
cost = 3
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/sniper
cost = 4
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/sniper/basic
name = ".50 Magazine"
@@ -194,7 +194,7 @@
These bullets pack less punch than 7.12x82mm rounds, but they still offer more power than .45 ammo."
item = /obj/item/ammo_box/magazine/m556
cost = 4
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/machinegun/match
name = "7.12x82mm (Match) Box Magazine"
@@ -206,7 +206,7 @@
/datum/uplink_item/ammo/machinegun
cost = 6
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/machinegun/basic
name = "1.95x129mm Box Magazine"
@@ -234,7 +234,7 @@
item = /obj/item/ammo_box/magazine/mm195x129/incen
/datum/uplink_item/ammo/rocket
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/rocket/basic
name = "84mm HE Rocket"
@@ -254,7 +254,7 @@
desc = "An additional 15-round 9mm magazine, compatible with the Stechkin APS pistol, found in the Spetsnaz Pyro bundle."
item = /obj/item/ammo_box/magazine/pistolm9mm
cost = 2
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/pistolaps
name = "Ammo Box - 9mm"
@@ -268,7 +268,7 @@
Loaded with armor piercing flechettes that very nearly ignore armor, but are not very effective against flesh."
item = /obj/item/ammo_box/magazine/flechette
cost = 2
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/flechettes
name = "Serrated Flechette Magazine"
@@ -277,7 +277,7 @@
These flechettes are highly likely to sever arteries, and even limbs."
item = /obj/item/ammo_box/magazine/flechette/s
cost = 2
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/toydarts
name = "Box of Riot Darts"
@@ -293,32 +293,32 @@
and broca systems, making it impossible for them to move or speak for some time."
item = /obj/item/storage/box/syndie_kit/bioterror
cost = 6
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/ammo/bolt_action
name = "Surplus Rifle Clip"
desc = "A stripper clip used to quickly load bolt action rifles. Contains 5 rounds."
item = /obj/item/ammo_box/a762
cost = 1
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/bolt_action_bulk
name = "Surplus Rifle Clip Box"
desc = "An ammo box we found in a warehouse, holding 7 clips of 5 rounds for bolt-action rifles. Yes, the cheap ones."
item = /obj/item/storage/toolbox/ammo
cost = 4
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/dark_gygax/bag
name = "Dark Gygax Ammo Bag"
desc = "A duffel bag containing ammo for three full reloads of the incendiary carbine and flash bang launcher that are equipped on a standard Dark Gygax exosuit."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/dark_gygax
cost = 4
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/ammo/mauler/bag
name = "Mauler Ammo Bag"
desc = "A duffel bag containing ammo for three full reloads of the LMG, scattershot carbine, and SRM-8 missile laucher that are equipped on a standard Mauler exosuit."
item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mauler
cost = 6
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
@@ -14,9 +14,9 @@
item = /obj/item/storage/box/syndie_kit/chameleon/broken
/datum/uplink_item/badass/costumes
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
cost = 4
cant_discount = TRUE
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/badass/costumes/centcom_official
name = "CentCom Official Costume"
@@ -77,14 +77,14 @@
cost = 4
limited_stock = 1
cant_discount = TRUE
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/badass/gaming_cardpack
name = "TCG Card Operatives Bundle"
desc = "A bundle full of goodies required to work as a TCG Card Operative. A warm pajama, a mug of cocoa, a plushie and a two packs full of rare 2560 Core Set cards!"
item = /obj/item/storage/box/syndie_kit/sleepytime/cardpack
cost = 20
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/badass/cardpack
name = "TCG Nuclear Cardpack"
@@ -7,30 +7,30 @@
When adding new entries to the file, please keep them sorted by category.
*/
/datum/uplink_item/bundles_TC/chemical
/datum/uplink_item/bundles_tc/chemical
name = "Bioterror bundle"
desc = "For the madman: Contains a handheld Bioterror chem sprayer, a Bioterror foam grenade, a box of lethal chemicals, a dart pistol, \
box of syringes, Donksoft assault rifle, and some riot darts. Remember: Seal suit and equip internals before use."
item = /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
cost = 30 // normally 42
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/bulldog
/datum/uplink_item/bundles_tc/bulldog
name = "Bulldog bundle"
desc = "Lean and mean: Optimized for people that want to get up close and personal. Contains the popular \
Bulldog shotgun, a 12g buckshot drum, a 12g taser slug drum and a pair of Thermal imaging goggles."
item = /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
cost = 13 // normally 16
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/c20r
/datum/uplink_item/bundles_tc/c20r
name = "C-20r bundle"
desc = "Old Faithful: The classic C-20r, bundled with two magazines, and a (surplus) suppressor at discount price."
item = /obj/item/storage/backpack/duffelbag/syndie/c20rbundle
cost = 14 // normally 16
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/contract_kit
/datum/uplink_item/bundles_tc/contract_kit
name = "Contract Kit"
desc = "The Syndicate have offered you the chance to become a contractor, take on kidnapping contracts for TC and cash payouts. Upon purchase, \
you'll be granted your own contract uplink embedded within the supplied tablet computer. Additionally, you'll be granted \
@@ -39,10 +39,10 @@
item = /obj/item/storage/box/syndie_kit/contract_kit
cost = 20
player_minimum = 25
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
restricted = TRUE
/datum/uplink_item/bundles_TC/northstar_bundle
/datum/uplink_item/bundles_tc/northstar_bundle
name = "Northstar Bundle"
desc = "An item usually reserved for the Gorlex Marauders and their operatives, now available for recreational use. \
These armbands let the user punch people very fast and with the lethality of a legendary martial artist. \
@@ -50,16 +50,16 @@
Combines with all martial arts, but the user will be unable to bring themselves to use guns, nor remove the armbands."
item = /obj/item/storage/box/syndie_kit/northstar
cost = 20
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/bundles_TC/scarp_bundle
/datum/uplink_item/bundles_tc/scarp_bundle
name = "Sleeping Carp Bundle"
desc = "Become one with your inner carp! Your ancient fish masters leave behind their legacy, and bestow to you their teachings, sacred uniform, and staff. \
Please be aware that you will not be able to use dishonerable ranged weapons."
item = /obj/item/storage/box/syndie_kit/scarp
cost = 20
player_minimum = 20
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/suits/infiltrator_bundle
name = "Insidious Infiltration Gear Case"
@@ -69,86 +69,85 @@
item = /obj/item/storage/toolbox/infiltrator
cost = 5
limited_stock = 1 //you only get one so you don't end up with too many gun cases
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/bundles_TC/cybernetics_bundle
/datum/uplink_item/bundles_tc/cybernetics_bundle
name = "Cybernetic Implants Bundle"
desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autosurgeon."
item = /obj/item/storage/box/cyber_implants
cost = 40
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/medical
/datum/uplink_item/bundles_tc/medical
name = "Medical bundle"
desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \
a Donksoft LMG, a box of riot darts and a pair of magboots to rescue your friends in no-gravity environments."
item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
cost = 15 // normally 20
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/modular
/datum/uplink_item/bundles_tc/modular
name = "Modular Pistol Kit"
desc = "A heavy briefcase containing one modular pistol (chambered in 10mm), one supressor, and spare ammunition, including a box of soporific ammo. \
Includes a suit jacket that is padded with a robust liner."
item = /obj/item/storage/briefcase/modularbundle
cost = 12
/datum/uplink_item/bundles_TC/shredder
/datum/uplink_item/bundles_tc/shredder
name = "Shredder bundle"
desc = "A truly horrific weapon designed simply to maim its victim, the CX Shredder is banned by several intergalactic treaties. \
You'll get two of them with this. And spare ammo to boot. And we'll throw in an extra elite hardsuit and chest rig to hold them all!"
item = /obj/item/storage/backpack/duffelbag/syndie/shredderbundle
cost = 30 // normally 41
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/sniper
/datum/uplink_item/bundles_tc/sniper
name = "Sniper bundle"
desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, \
two soporific knockout magazines, a free surplus supressor, and a sharp-looking tactical turtleneck suit. \
We'll throw in a free red tie if you order NOW."
item = /obj/item/storage/briefcase/sniperbundle
cost = 20 // normally 26
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/firestarter
/datum/uplink_item/bundles_tc/firestarter
name = "Spetsnaz Pyro bundle"
desc = "For systematic suppression of carbon lifeforms in close quarters: Contains a lethal New Russian backpack spray, Elite hardsuit, \
Stechkin APS pistol, two magazines, a minibomb and a stimulant syringe. \
Order NOW and comrade Boris will throw in an extra tracksuit."
item = /obj/item/storage/backpack/duffelbag/syndie/firestarter
cost = 30
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/bundles_TC/bundle
/datum/uplink_item/bundles_tc/bundle
name = "Syndicate Bundle"
desc = "Syndicate Bundles are specialized groups of items that arrive in a plain box. \
These items are collectively worth more than 20 telecrystals, but you do not know which specialization \
you will receive. May contain discontinued and/or exotic items."
item = /obj/item/storage/box/syndicate
cost = 20
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~(UPLINK_NUKE_OPS)
cant_discount = TRUE
/datum/uplink_item/bundles_TC/surplus
/datum/uplink_item/bundles_tc/surplus
name = "Syndicate Surplus Crate"
desc = "A dusty crate from the back of the Syndicate warehouse. Rumored to contain a valuable assortment of items, \
but you never know. Contents are sorted to always be worth 50 TC."
item = /obj/structure/closet/crate
cost = 20
player_minimum = 20
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
cant_discount = TRUE
player_minimum = 25
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
var/starting_crate_value = 50
/datum/uplink_item/bundles_TC/surplus/super
/datum/uplink_item/bundles_tc/surplus/super
name = "Super Surplus Crate"
desc = "A dusty SUPER-SIZED from the back of the Syndicate warehouse. Rumored to contain a valuable assortment of items, \
but you never know. Contents are sorted to always be worth 125 TC."
cost = 40
player_minimum = 30
player_minimum = 40
starting_crate_value = 125
/datum/uplink_item/bundles_TC/surplus/purchase(mob/user, datum/component/uplink/U)
/datum/uplink_item/bundles_tc/surplus/purchase(mob/user, datum/component/uplink/U)
var/list/uplink_items = get_uplink_items(SSticker && SSticker.mode? SSticker.mode : null, FALSE)
var/crate_value = starting_crate_value
@@ -170,7 +169,7 @@
U.purchase_log.LogPurchase(goods, I, 0)
return C
/datum/uplink_item/bundles_TC/reroll
/datum/uplink_item/bundles_tc/reroll
name = "Renegotiate Contract"
desc = "Selecting this will inform your employers that you wish for new objectives. Can only be done twice."
item = /obj/effect/gibspawner/generic
@@ -179,22 +178,21 @@
restricted = TRUE
limited_stock = 2
/datum/uplink_item/bundles_TC/reroll/purchase(mob/user, datum/component/uplink/U)
/datum/uplink_item/bundles_tc/reroll/purchase(mob/user, datum/component/uplink/U)
var/datum/antagonist/traitor/T = user?.mind?.has_antag_datum(/datum/antagonist/traitor)
if(istype(T))
T.set_traitor_kind(get_random_traitor_kind(blacklist = list(/datum/traitor_class/human/freeform, /datum/traitor_class/human/hijack, /datum/traitor_class/human/martyr)))
else
to_chat(user,"Invalid user for contract renegotiation.")
/datum/uplink_item/bundles_TC/random
/datum/uplink_item/bundles_tc/random
name = "Random Item"
desc = "Picking this will purchase a random item. Useful if you have some TC to spare or if you haven't decided on a strategy yet."
item = /obj/effect/gibspawner/generic // non-tangible item because techwebs use this path to determine illegal tech
cost = 0
cant_discount = TRUE
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/bundles_TC/random/purchase(mob/user, datum/component/uplink/U)
/datum/uplink_item/bundles_tc/random/purchase(mob/user, datum/component/uplink/U)
var/list/uplink_items = U.uplink_items
var/list/possible_items = list()
for(var/category in uplink_items)
@@ -202,7 +200,7 @@
var/datum/uplink_item/I = uplink_items[category][item]
if(src == I || !I.item)
continue
if(istype(I, /datum/uplink_item/bundles_TC/reroll)) //oops!
if(istype(I, /datum/uplink_item/bundles_tc/reroll)) //oops!
continue
if(U.telecrystals < I.cost)
continue
@@ -215,7 +213,7 @@
SSblackbox.record_feedback("tally", "traitor_random_uplink_items_gotten", 1, initial(I.name))
U.MakePurchase(user, I)
/datum/uplink_item/bundles_TC/telecrystal
/datum/uplink_item/bundles_tc/telecrystal
name = "1 Raw Telecrystal"
desc = "A telecrystal in its rawest and purest form; can be utilized on active uplinks to increase their telecrystal count."
item = /obj/item/stack/telecrystal
@@ -226,13 +224,13 @@
// it's just used to buy more items (including itself!)
purchase_log_vis = FALSE
/datum/uplink_item/bundles_TC/telecrystal/five
/datum/uplink_item/bundles_tc/telecrystal/five
name = "5 Raw Telecrystals"
desc = "Five telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count."
item = /obj/item/stack/telecrystal/five
cost = 5
/datum/uplink_item/bundles_TC/telecrystal/twenty
/datum/uplink_item/bundles_tc/telecrystal/twenty
name = "20 Raw Telecrystals"
desc = "Twenty telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count."
item = /obj/item/stack/telecrystal/twenty
@@ -12,35 +12,35 @@
desc = "A slightly armored conspicious jumpsuit that has no suit sensors attached to them, if someone sees you in this hope they think its a fake."
item = /obj/item/clothing/under/syndicate
cost = 1
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //They already get these
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/suits/turtlenck_skirt
name = "Tactical Skirtleneck"
desc = "A slightly armored conspicious jumpsuit that has no suit sensors attached to them, if someone sees you in this hope they think its a fake."
item = /obj/item/clothing/under/syndicate/skirt
cost = 1
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //They already get these
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/suits/padding
name = "Soft Padding"
desc = "An inconspicious soft padding meant to be worn underneath jumpsuits, will cushion the user from melee harm."
item = /obj/item/clothing/accessory/padding
cost = 2
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/suits/kevlar
name = "Kevlar Padding"
desc = "An inconspicious kevlar padding meant to be worn underneath jumpsuits, will cushion the wearer from ballistic harm."
item = /obj/item/clothing/accessory/kevlar
cost = 2
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/suits/plastic
name = "Ablative Padding"
desc = "An inconspicious ablative padding meant to be worn underneath jumpsuits, will cushion the wearer from energy lasers harm."
item = /obj/item/clothing/accessory/plastics
cost = 2
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/suits/space_suit
name = "Syndicate Space Suit"
@@ -59,7 +59,7 @@
Nanotrasen crew who spot these suits are known to panic."
item = /obj/item/clothing/suit/space/hardsuit/syndi
cost = 8
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //you can't buy it in nuke, because the elite hardsuit costs the same while being better
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //you can't buy it in nuke, because the elite hardsuit costs the same while being better
/datum/uplink_item/suits/hardsuit/elite
name = "Elite Syndicate Hardsuit"
@@ -67,8 +67,7 @@
provides the user with superior armor and mobility compared to the standard Syndicate hardsuit."
item = /obj/item/clothing/suit/space/hardsuit/syndi/elite
cost = 8
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
exclude_modes = list()
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/suits/hardsuit/shielded
name = "Shielded Syndicate Hardsuit"
@@ -76,8 +75,7 @@
The shields can handle up to three impacts within a short duration and will rapidly recharge while not under fire."
item = /obj/item/clothing/suit/space/hardsuit/shielded/syndi
cost = 30
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
exclude_modes = list()
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/suits/thiefgloves
name = "Thieving Gloves"
@@ -90,13 +88,13 @@
desc = "Through bluespace magic stolen from an organisation that hoards technology, these boots simply allow you to slip through the atoms that make up anything, but only while walking, for safety reasons. As well as this, they unfortunately cause minor breath loss as the majority of atoms in your lungs are sucked out into any solid object you walk through."
item = /obj/item/clothing/shoes/wallwalkers
cost = 6
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/device_tools/guerrillagloves
name = "Guerrilla Gloves"
desc = "A pair of highly robust combat gripper gloves that excels at performing takedowns at close range, with an added lining of insulation. Careful not to hit a wall!"
item = /obj/item/clothing/gloves/tackler/combat/insulated
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
cost = 2
illegal_tech = FALSE
@@ -111,4 +109,4 @@
desc = "A pair of highly reinforced armwraps allowing the user to parry almost anything. Fully reflects projectiles, no downsides to failing, but is very hard to parry melee with."
cost = 6
item = /obj/item/clothing/gloves/fingerless/ablative
exclude_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
@@ -13,7 +13,7 @@
with suppressors."
item = /obj/item/storage/box/syndie_kit/pistol
cost = 7
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/revolver
name = "Syndicate Revolver Kit"
@@ -22,7 +22,7 @@
cost = 13
player_minimum = 15
surplus = 50
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/rawketlawnchair
name = "84mm Rocket Propelled Grenade Launcher"
@@ -31,7 +31,7 @@
item = /obj/item/gun/ballistic/rocketlauncher
cost = 8
surplus = 30
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/antitank
name = "Anti Tank Pistol"
@@ -42,7 +42,7 @@
item = /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate
cost = 14
surplus = 25
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/pie_cannon
name = "Banana Cream Pie Cannon"
@@ -50,7 +50,7 @@
cost = 10
item = /obj/item/pneumatic_cannon/pie/selfcharge
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/bananashield
name = "Bananium Energy Shield"
@@ -60,7 +60,7 @@
item = /obj/item/shield/energy/bananium
cost = 16
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/clownsword
name = "Bananium Energy Sword"
@@ -69,7 +69,7 @@
item = /obj/item/melee/transforming/energy/sword/bananium
cost = 3
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/bioterror
name = "Biohazardous Chemical Sprayer"
@@ -79,7 +79,7 @@
item = /obj/item/reagent_containers/spray/chemsprayer/bioterror
cost = 20
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/throwingweapons
name = "Box of Throwing Weapons"
@@ -95,7 +95,7 @@
item = /obj/item/gun/ballistic/automatic/shotgun/bulldog
cost = 8
surplus = 40
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/smg
name = "C-20r Submachine Gun"
@@ -104,7 +104,7 @@
item = /obj/item/gun/ballistic/automatic/c20r
cost = 10
surplus = 40
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/doublesword
name = "Double-Bladed Energy Sword"
@@ -113,7 +113,7 @@
item = /obj/item/dualsaber
player_minimum = 25
cost = 16
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/doublesword/get_discount()
return pick(4;0.8,2;0.65,1;0.5)
@@ -125,7 +125,7 @@
item = /obj/item/dualsaber/hypereutactic
player_minimum = 25
cost = 16
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/hyperblade/get_discount()
return pick(4;0.8,2;0.65,1;0.5)
@@ -136,7 +136,7 @@
pocketed when inactive. Activating it produces a loud, distinctive noise."
item = /obj/item/melee/transforming/energy/sword/saber
cost = 8
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/shield
name = "Energy Shield"
@@ -145,7 +145,7 @@
item = /obj/item/shield/energy
cost = 16
surplus = 20
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/rapier
name = "Rapier"
@@ -154,7 +154,7 @@
However, due to the size of the blade and obvious nature of the sheath, the weapon stands out as being obviously nefarious."
item = /obj/item/storage/belt/sabre/rapier
cost = 8
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/flamethrower
name = "Flamethrower"
@@ -163,7 +163,7 @@
item = /obj/item/flamethrower/full/tank
cost = 4
surplus = 40
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/flechettegun
name = "Flechette Launcher"
@@ -173,7 +173,7 @@
item = /obj/item/gun/ballistic/automatic/flechette
cost = 12
surplus = 30
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/rapid
name = "Bands of the North Star"
@@ -182,7 +182,7 @@
Combines with all martial arts, but the user will be unable to bring themselves to use guns, nor remove the armbands."
item = /obj/item/clothing/gloves/fingerless/pugilist/rapid
cost = 30
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/guardian
name = "Holoparasites"
@@ -194,7 +194,7 @@
refundable = TRUE
cant_discount = TRUE
surplus = 0
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
player_minimum = 25
restricted = TRUE
refund_path = /obj/item/guardiancreator/tech/choose/traitor
@@ -208,7 +208,7 @@
refundable = TRUE
surplus = 50
refund_path = /obj/item/guardiancreator/tech/choose/nukie
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/machinegun
name = "L6 Squad Automatic Weapon"
@@ -217,7 +217,7 @@
item = /obj/item/gun/ballistic/automatic/l6_saw
cost = 18
surplus = 0
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/carbine
name = "M-90gl Carbine"
@@ -226,7 +226,7 @@
item = /obj/item/gun/ballistic/automatic/m90
cost = 18
surplus = 50
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/maulergauntlets
name = "Mauler Gauntlets"
@@ -245,7 +245,6 @@
deal extra damage and hit targets further. Use a screwdriver to take out any attached tanks."
item = /obj/item/melee/powerfist
cost = 8
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/dangerous/sniper
name = "Sniper Rifle"
@@ -253,14 +252,14 @@
item = /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate
cost = 16
surplus = 25
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/bolt_action
name = "Surplus Rifle"
desc = "A horribly outdated bolt action weapon. You've got to be desperate to use this."
item = /obj/item/gun/ballistic/shotgun/boltaction
cost = 2
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/dangerous/foamsmg
name = "Toy Submachine Gun"
@@ -268,7 +267,7 @@
item = /obj/item/gun/ballistic/automatic/c20r/toy
cost = 5
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/foammachinegun
name = "Toy Machine Gun"
@@ -277,7 +276,7 @@
item = /obj/item/gun/ballistic/automatic/l6_saw/toy
cost = 10
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/dangerous/foampistol
name = "Toy Pistol with Riot Darts"
@@ -293,4 +292,4 @@
Allows you to cut from a far distance!"
item = /obj/item/gun/magic/staff/motivation
cost = 10
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
@@ -46,7 +46,7 @@
item = /obj/item/assault_pod
cost = 30
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
restricted = TRUE
/datum/uplink_item/device_tools/binary
@@ -66,7 +66,7 @@
'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety."
item = /obj/item/clothing/shoes/magboots/syndie
cost = 2
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/device_tools/compressionkit
name = "Bluespace Compression Kit"
@@ -98,7 +98,7 @@
desc = "A robust seven-slot set of webbing that is capable of holding all manner of tactical equipment."
item = /obj/item/storage/belt/military
cost = 1
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/device_tools/ammo_pouch
name = "Ammo Pouch"
@@ -137,7 +137,7 @@
desc = "A cheap bottle of one use syndicate brand super glue. \
Use on any item to make it undroppable. \
Be careful not to glue an item you're already holding!"
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
item = /obj/item/syndie_glue
cost = 2
@@ -166,7 +166,7 @@
operatives in the fight, even while under fire. Don't cross the streams!"
item = /obj/item/gun/medbeam
cost = 15
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/device_tools/nutcracker
name = "Nutcracker"
@@ -224,7 +224,7 @@
and other supplies helpful for a field medic."
item = /obj/item/storage/firstaid/tactical/nukeop
cost = 4
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/device_tools/surgerybag
name = "Syndicate Surgery Duffel Bag"
@@ -272,7 +272,7 @@
desc = "A potion recovered at great risk by undercover Syndicate operatives and then subsequently modified with Syndicate technology. \
Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors."
cost = 2
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
restricted = TRUE
/* for now
@@ -15,7 +15,7 @@
item = /obj/item/grenade/chem_grenade/bioterrorfoam
cost = 5
surplus = 35
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/bombanana
name = "Bombanana"
@@ -24,7 +24,7 @@
item = /obj/item/reagent_containers/food/snacks/grown/banana/bombanana
cost = 4 //it is a bit cheaper than a minibomb because you have to take off your helmet to eat it, which is how you arm it
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/buzzkill
name = "Buzzkill Grenade Box"
@@ -33,7 +33,7 @@
item = /obj/item/storage/box/syndie_kit/bee_grenades
cost = 15
surplus = 35
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/c4
name = "Composition C-4"
@@ -58,7 +58,6 @@
item = /obj/item/storage/backpack/duffelbag/syndie/x4
cost = 4 //
cant_discount = TRUE
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/explosives/clown_bomb_clownops
name = "Clown Bomb"
@@ -70,7 +69,7 @@
item = /obj/item/sbeacondrop/clownbomb
cost = 15
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/detomatix
name = "Detomatix PDA Cartridge"
@@ -97,14 +96,14 @@
item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade
cost = 8
surplus = 35
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
restricted = TRUE
/datum/uplink_item/explosives/grenadier
name = "Grenadier's belt"
desc = "A belt containing 26 lethally dangerous and destructive grenades. Comes with an extra multitool and screwdriver."
item = /obj/item/storage/belt/grenade/full
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
cost = 22
surplus = 0
@@ -125,7 +124,6 @@
be defused, and some crew may attempt to do so."
item = /obj/item/sbeacondrop/bomb
cost = 11
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/explosives/syndicate_detonator
name = "Syndicate Detonator"
@@ -135,7 +133,7 @@
the blast radius before using the detonator."
item = /obj/item/syndicatedetonator
cost = 3
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/syndicate_minibomb
name = "Syndicate Minibomb"
@@ -143,7 +141,7 @@
in addition to dealing high amounts of damage to nearby personnel."
item = /obj/item/grenade/syndieminibomb
cost = 6
exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs)
purchasable_from = ~UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/tearstache
name = "Teachstache Grenade"
@@ -152,7 +150,7 @@
item = /obj/item/grenade/chem_grenade/teargas/moustache
cost = 3
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/explosives/viscerators
name = "Viscerator Delivery Grenade"
@@ -161,4 +159,4 @@
item = /obj/item/grenade/spawnergrenade/manhacks
cost = 5
surplus = 35
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
@@ -20,7 +20,7 @@
desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon."
item = /obj/item/autosurgeon/anti_stun
cost = 12
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/implants/deathrattle
name = "Box of Deathrattle Implants"
@@ -31,7 +31,7 @@
item = /obj/item/storage/box/syndie_kit/imp_deathrattle
cost = 4
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/implants/freedom
name = "Freedom Implant"
@@ -45,7 +45,7 @@
desc = "An implant injected into the body and later activated at the user's will. Allows the user to teleport to where they were 10 seconds ago. Has a 10 second cooldown."
item = /obj/item/storage/box/syndie_kit/imp_warp
cost = 6
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/implants/hijack
name = "Hijack Implant"
@@ -70,7 +70,7 @@
This will permanently destroy your body, however."
item = /obj/item/storage/box/syndie_kit/imp_microbomb
cost = 2
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/implants/macrobomb
name = "Macrobomb Implant"
@@ -78,7 +78,7 @@
Upon death, releases a massive explosion that will wipe out everything nearby."
item = /obj/item/storage/box/syndie_kit/imp_macrobomb
cost = 20
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
restricted = TRUE
/datum/uplink_item/implants/reviver
@@ -86,7 +86,7 @@
desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon."
item = /obj/item/autosurgeon/reviver
cost = 8
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/implants/stealthimplant
name = "Stealth Implant"
@@ -107,7 +107,7 @@
desc = "These cybernetic eyes will give you thermal vision. Comes with a free autosurgeon."
item = /obj/item/autosurgeon/thermal_eyes
cost = 8
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
/datum/uplink_item/implants/uplink
name = "Uplink Implant"
@@ -125,4 +125,4 @@
item = /obj/item/autosurgeon/xray_eyes
cost = 10
surplus = 0
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
@@ -30,7 +30,6 @@
item = /obj/item/gun/blastcannon
cost = 14 //High cost because of the potential for extreme damage in the hands of a skilled gas masked scientist.
restricted_roles = list("Research Director", "Scientist")
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/role_restricted/alientech
name = "Alien Research Disk"
@@ -99,7 +98,6 @@
player_minimum = 20
refundable = TRUE
restricted_roles = list("Chaplain")
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/role_restricted/arcane_tome
name = "Arcane Tome"
@@ -109,7 +107,6 @@
player_minimum = 20
refundable = TRUE
restricted_roles = list("Chaplain")
exclude_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/role_restricted/explosive_hot_potato
name = "Exploding Hot Potato"
@@ -19,14 +19,14 @@
to learn the abilities of krav maga to the wearer."
item = /obj/item/clothing/gloves/krav_maga/combatglovesplus
cost = 5
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
surplus = 0
/datum/uplink_item/stealthy_weapons/cqc
name = "CQC Manual"
desc = "A manual that teaches a single user tactical Close-Quarters Combat before self-destructing."
item = /obj/item/book/granter/martial/cqc
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS
cost = 13
surplus = 0
@@ -61,7 +61,7 @@
name = "Antique Derringer"
desc = "An easy to conceal, yet extremely deadly handgun, capable of firing .45-70 Govt rounds. Comes in a unique pack of cigarettes with additional munitions."
item = /obj/item/storage/fancy/cigarettes/derringer/midworld
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
cost = 10
surplus = 2
@@ -79,7 +79,7 @@
cost = 17
player_minimum = 20
surplus = 0
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_weapons/martialartstwo
name = "Rising Bass Scroll"
@@ -89,7 +89,7 @@
cost = 18
player_minimum = 20
surplus = 0
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_weapons/martialartsthree
name = "Krav Maga Scroll"
@@ -99,7 +99,6 @@
cost = 16
player_minimum = 25
surplus = 0
include_modes = list(/datum/game_mode/traitor/internal_affairs)
/datum/uplink_item/stealthy_weapons/crossbow
name = "Miniature Energy Crossbow"
@@ -112,7 +111,7 @@
item = /obj/item/gun/energy/kinetic_accelerator/crossbow
cost = 12
surplus = 50
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_weapons/traitor_chem_bottle
name = "Poison Kit"
@@ -130,7 +129,7 @@
cost = 25
player_minimum = 25
cant_discount = TRUE
exclude_modes = list(/datum/game_mode/nuclear)
purchasable_from = ~UPLINK_NUKE_OPS
/datum/uplink_item/stealthy_weapons/sleepy_pen
name = "Sleepy Pen"
@@ -140,14 +139,14 @@
falls asleep, they will be able to move and act."
item = /obj/item/pen/sleepy
cost = 4
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_weapons/taeclowndo_shoes
name = "Tae-clown-do Shoes"
desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn."
cost = 12
item = /obj/item/clothing/shoes/clown_shoes/taeclowndo
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/stealthy_weapons/suppressor
name = "Suppressor"
@@ -33,7 +33,7 @@
Due to budget cuts, the shoes don't provide protection against slipping."
item = /obj/item/storage/box/syndie_kit/chameleon
cost = 2
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_tools/chameleon_proj
name = "Chameleon Projector"
@@ -57,7 +57,7 @@
item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat
cost = 6
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/stealthy_tools/emplight
name = "EMP Flashlight"
@@ -75,7 +75,7 @@
cost = 1
surplus = 0
restricted = TRUE
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_tools/failsafe/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
if(!U)
@@ -93,7 +93,7 @@
item = /obj/item/reagent_containers/syringe/mulligan
cost = 3
surplus = 30
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_tools/syndigaloshes
name = "No-Slip Chameleon Shoes"
@@ -101,13 +101,12 @@
They do not work on heavily lubricated surfaces."
item = /obj/item/clothing/shoes/chameleon/noslip
cost = 2
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
item = /obj/item/clothing/shoes/chameleon/noslip
cost = 4
exclude_modes = list()
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
/datum/uplink_item/stealthy_tools/jammer
name = "Radio Jammer"
@@ -12,7 +12,7 @@
desc = "Call in an additional clown to share the fun, equipped with full starting gear, but no telecrystals."
item = /obj/item/antag_spawner/nuke_ops/clown
cost = 20
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
restricted = TRUE
/datum/uplink_item/support/reinforcement
@@ -22,7 +22,7 @@
item = /obj/item/antag_spawner/nuke_ops
cost = 25
refundable = TRUE
include_modes = list(/datum/game_mode/nuclear)
purchasable_from = UPLINK_NUKE_OPS
restricted = TRUE
/datum/uplink_item/support/reinforcement/assault_borg
@@ -66,7 +66,7 @@
desc = "A clown combat mech equipped with bombanana peel and tearstache grenade launchers, as well as the ubiquitous HoNkER BlAsT 5000."
item = /obj/mecha/combat/honker/dark/loaded
cost = 80
include_modes = list(/datum/game_mode/nuclear/clown_ops)
purchasable_from = UPLINK_CLOWN_OPS
/datum/uplink_item/support/mauler
name = "Mauler Exosuit"
+2 -2
View File
@@ -1,8 +1,8 @@
GLOBAL_LIST(uplink_purchase_logs_by_key) //assoc key = /datum/uplink_purchase_log
GLOBAL_LIST(uplink_purchase_logs_by_key) //assoc key = /datum/uplink_purchase_log
/datum/uplink_purchase_log
var/owner
var/list/purchase_log //assoc path-of-item = /datum/uplink_purchase_entry
var/list/purchase_log //assoc path-of-item = /datum/uplink_purchase_entry
var/total_spent = 0
/datum/uplink_purchase_log/New(_owner, datum/component/uplink/_parent)