From 02a9ac9b941612383fc879cb5e0cf7b9ff7022ef Mon Sep 17 00:00:00 2001
From: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com>
Date: Thu, 11 Apr 2024 09:22:03 +0100
Subject: [PATCH] Display reputation and fix nukies
---
code/__DEFINES/antagonists.dm | 2 +
.../subsystem/priority_directives.dm | 6 +-
code/datums/components/uplink.dm | 4 +-
code/game/gamemodes/nuclear/nuclear.dm | 5 +-
code/modules/uplink/uplink_devices.dm | 12 +--
code/modules/uplink/uplink_items.dm | 98 ++++++++++++++-----
tgui/packages/tgui/interfaces/Uplink.js | 38 ++++++-
.../tgui/styles/interfaces/Uplink.scss | 3 +-
8 files changed, 126 insertions(+), 42 deletions(-)
diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index 224b13fe9241e..114a97015fca2 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -138,6 +138,8 @@
/// Access to anything your heart could ever desire
#define REPUTATION_MAX 1000
+#define REPUTATION_TRAITOR_START 300
+
/// How much reputation is gained per completed directive
#define REPUTATION_GAIN_PER_DIRECTIVE 200
diff --git a/code/controllers/subsystem/priority_directives.dm b/code/controllers/subsystem/priority_directives.dm
index 75db9c2743c66..81c5e03efd200 100644
--- a/code/controllers/subsystem/priority_directives.dm
+++ b/code/controllers/subsystem/priority_directives.dm
@@ -7,7 +7,7 @@ SUBSYSTEM_DEF(directives)
/datum/controller/subsystem/directives/Initialize(start_timeofday)
. = ..()
- next_directive_time = world.time + rand(10 MINUTES, 15 MINUTES)
+ next_directive_time = world.time + 10 MINUTES
for (var/directive_type in subtypesof(/datum/priority_directive))
directives += new directive_type()
@@ -102,7 +102,9 @@ SUBSYSTEM_DEF(directives)
"track_x" = track_turf?.x,
"track_y" = track_turf?.y,
"track_z" = track_turf?.z,
- "action" = active_directive.get_special_action()?.action_name
+ "action" = active_directive.get_special_action()?.action_name,
+ "rep_loss" = active_directive.reputation_loss,
+ "rep_gain" = active_directive.reputation_reward,
))
data["objectives"] = known_objectives
return data
diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm
index 46e7290ced9e7..781c0d7042fd4 100644
--- a/code/datums/components/uplink.dm
+++ b/code/datums/components/uplink.dm
@@ -33,7 +33,7 @@ GLOBAL_LIST_EMPTY(uplinks)
var/non_traitor_allowed = TRUE
// Tied to uplink rather than mind since generally traitors only have 1 uplink
// and tying it to anything else is difficult due to how much uses an uplink
- var/reputation = 200
+ var/reputation = REPUTATION_TRAITOR_START
var/list/previous_attempts
@@ -42,7 +42,7 @@ GLOBAL_LIST_EMPTY(uplinks)
_enabled = FALSE,
uplink_flag = UPLINK_TRAITORS,
starting_tc = TELECRYSTALS_DEFAULT,
- _reputation = 200,
+ _reputation = REPUTATION_TRAITOR_START,
)
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 34f92120e4b10..f340503bd45e2 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -129,6 +129,7 @@
/obj/item/knife/combat/survival)
var/tc = 25
+ var/reputation = REPUTATION_EXCELLENT
var/command_radio = FALSE
var/uplink_type = /obj/item/uplink/nuclear
@@ -139,6 +140,7 @@
gloves = /obj/item/clothing/gloves/krav_maga/combatglovesplus
r_hand = /obj/item/nuclear_challenge
command_radio = TRUE
+ reputation = REPUTATION_ELITE
/datum/outfit/syndicate/no_crystals
name = "Syndicate Operative - Reinforcement"
@@ -153,7 +155,7 @@
R.use_command = TRUE
if(ispath(uplink_type, /obj/item/uplink/nuclear) || tc) // /obj/item/uplink/nuclear understands 0 tc
- var/obj/item/U = new uplink_type(H, H, tc)
+ var/obj/item/U = new uplink_type(H, H, tc, reputation)
H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK)
var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H)
@@ -177,6 +179,7 @@
/obj/item/tank/jetpack/oxygen/harness=1,\
/obj/item/gun/ballistic/automatic/pistol=1,\
/obj/item/knife/combat/survival)
+ reputation = REPUTATION_ELITE
/datum/game_mode/nuclear/generate_credit_text()
diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm
index 6e4ebd8dbbb51..a20bb6069fcf0 100644
--- a/code/modules/uplink/uplink_devices.dm
+++ b/code/modules/uplink/uplink_devices.dm
@@ -21,14 +21,14 @@
var/uplink_flag = UPLINK_TRAITORS
-/obj/item/uplink/Initialize(mapload, mob/owner, tc_amount = 20)
+/obj/item/uplink/Initialize(mapload, mob/owner, tc_amount = 20, rep_amount = TRAITOR_REPUTATION_START)
. = ..()
AddComponent(/datum/component/uplink, owner?.mind, FALSE, TRUE, uplink_flag, tc_amount)
/obj/item/uplink/debug
name = "debug uplink"
-/obj/item/uplink/debug/Initialize(mapload, mob/owner, tc_amount = 9000)
+/obj/item/uplink/debug/Initialize(mapload, mob/owner, tc_amount = 9000, rep_amount = REPUTATION_MAX)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.name = "debug uplink"
@@ -41,7 +41,7 @@
name = "debug nuclear uplink"
uplink_flag = UPLINK_NUKE_OPS
-/obj/item/uplink/nuclear/debug/Initialize(mapload, mob/owner, tc_amount = 9000)
+/obj/item/uplink/nuclear/debug/Initialize(mapload, mob/owner, tc_amount = 9000, rep_amount = REPUTATION_MAX)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
hidden_uplink.name = "debug nuclear uplink"
@@ -62,17 +62,17 @@
name = "dusty radio"
desc = "A dusty looking radio."
-/obj/item/uplink/old/Initialize(mapload, mob/owner, tc_amount = 10)
+/obj/item/uplink/old/Initialize(mapload, mob/owner, tc_amount = 10, rep_amount = REPUTATION_LOW)
. = ..()
var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink, owner?.mind)
hidden_uplink.name = "dusty radio"
// Multitool uplink
-/obj/item/multitool/uplink/Initialize(mapload, mob/owner, tc_amount = 20)
+/obj/item/multitool/uplink/Initialize(mapload, mob/owner, tc_amount = 20, rep_amount = TRAITOR_REPUTATION_START)
. = ..()
AddComponent(/datum/component/uplink, owner?.mind, FALSE, TRUE, UPLINK_TRAITORS, tc_amount)
// Pen uplink
-/obj/item/pen/uplink/Initialize(mapload, mob/owner, tc_amount = 20)
+/obj/item/pen/uplink/Initialize(mapload, mob/owner, tc_amount = 20, rep_amount = TRAITOR_REPUTATION_START)
. = ..()
AddComponent(/datum/component/uplink, owner?.mind, TRUE, FALSE, UPLINK_TRAITORS, tc_amount)
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index c81ee18a1d2fb..673bef24379ed 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -284,7 +284,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
you will receive. May contain discontinued and/or exotic items."
item = /obj/item/storage/box/syndie_kit/bundle_A
cost = 15
- reputation_required = REPUTATION_STANDARD
+ reputation_required = REPUTATION_GOOD
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/bundles_TC/bundle_B
@@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
In Syndi-kit Special, you will receive items used by famous syndicate agents of the past. Collectively worth more than 20 telecrystals, the syndicate loves a good throwback."
item = /obj/item/storage/box/syndie_kit/bundle_B
cost = 15
- reputation_required = REPUTATION_STANDARD
+ reputation_required = REPUTATION_GOOD
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
/datum/uplink_item/bundles_TC/surplus
@@ -493,6 +493,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
desc = "A knife that is made of two razor sharp blades, it has a secret compartment in the handle to store liquids which are injected when stabbing something. Can hold up to forty units of reagents but comes empty."
item = /obj/item/knife/poison
cost = 6 // all in all it's not super stealthy and you have to get some chemicals yourself
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/dangerous/rawketlawnchair
name = "84mm Rocket Propelled Grenade Launcher"
@@ -588,6 +589,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
player_minimum = 25
cost = 18
purchasable_from = ~UPLINK_CLOWN_OPS
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/dangerous/doublesword/get_discount()
return pick(4;0.8,2;0.65,1;0.5)
@@ -599,6 +601,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/melee/transforming/energy/sword/saber
cost = 8
purchasable_from = ~UPLINK_CLOWN_OPS
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/dangerous/shield
name = "Energy Shield"
@@ -632,8 +635,8 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \
organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host."
item = /obj/item/holoparasite_creator/tech
- cost = 15
- reputation_required = REPUTATION_EXCELLENT
+ cost = 12
+ reputation_required = REPUTATION_ELITE
surplus = 10
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
player_minimum = 25
@@ -691,6 +694,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/gun/ballistic/automatic/pistol
cost = 7
purchasable_from = ~UPLINK_CLOWN_OPS
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/dangerous/derringer
name = "'Infiltrator' Coat Pistol"
@@ -713,11 +717,10 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
name = "Syndicate Revolver"
desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
item = /obj/item/gun/ballistic/revolver
- player_minimum = 25
cost = 12
- reputation_required = REPUTATION_GOOD
surplus = 50
purchasable_from = ~UPLINK_CLOWN_OPS
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/dangerous/foamsmg
name = "Toy Submachine Gun"
@@ -866,6 +869,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/storage/box/syndie_kit/chemical
cost = 6
surplus = 50
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/stealthy_weapons/romerol_kit
name = "Romerol"
@@ -888,6 +892,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/pen/sleepy
cost = 5
purchasable_from = ~UPLINK_NUKE_OPS
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/stealthy_weapons/suppressor
name = "Suppressor"
@@ -910,6 +915,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
purchasable_from = ~UPLINK_CLOWN_OPS
illegal_tech = FALSE
contents_are_illegal_tech = FALSE
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/ammo/pistolap
name = "10mm Armour Piercing Magazine"
@@ -920,6 +926,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
purchasable_from = ~UPLINK_CLOWN_OPS
illegal_tech = FALSE
contents_are_illegal_tech = FALSE
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/ammo/pistolhp
name = "10mm Hollow Point Magazine"
@@ -930,6 +937,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
purchasable_from = ~UPLINK_CLOWN_OPS
illegal_tech = FALSE
contents_are_illegal_tech = FALSE
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/ammo/pistolfire
name = "10mm Incendiary Magazine"
@@ -940,6 +948,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
purchasable_from = ~UPLINK_CLOWN_OPS
illegal_tech = FALSE
contents_are_illegal_tech = FALSE
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/ammo/shotgun
cost = 2
@@ -995,6 +1004,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
purchasable_from = ~UPLINK_CLOWN_OPS
illegal_tech = FALSE
contents_are_illegal_tech = FALSE
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/ammo/c38
name = ".38-special Speed Loader"
@@ -1306,7 +1316,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer."
item = /obj/item/computer_hardware/hard_drive/role/virus/syndicate
cost = 6
- reputation_required = REPUTATION_GOOD
+ reputation_required = REPUTATION_EXCELLENT
restricted = TRUE
/datum/uplink_item/explosives/emp
@@ -1315,12 +1325,14 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
security's energy weapons and silicon lifeforms when you're in a tight spot."
item = /obj/item/storage/box/syndie_kit/emp
cost = 4
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/explosives/ducky
name = "Exploding Rubber Duck"
desc = "A seemingly innocent rubber duck. When placed, it arms, and will violently explode when stepped on."
item = /obj/item/deployablemine/traitor
cost = 4
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/explosives/doorCharge
name = "Airlock Charge"
@@ -1328,6 +1340,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
To apply, remove the airlock's maintenance panel and place it within."
item = /obj/item/doorCharge
cost = 4
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/explosives/virus_grenade
name = "Fungal Tuberculosis Grenade"
@@ -1354,7 +1367,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
This variant has been fitted with high yield X4 charges for a larger explosion."
item = /obj/item/deployablemine/traitor/bigboom
cost = 10
- reputation_required = REPUTATION_GOOD
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/explosives/pizza_bomb
name = "Pizza Bomb"
@@ -1363,6 +1376,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/pizzabox/bomb
cost = 3
surplus = 8
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/explosives/soap_clusterbang
name = "Slipocalypse Clusterbang"
@@ -1379,8 +1393,8 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
be defused, and some crew may attempt to do so. \
The bomb core can be pried out and manually detonated with other explosives."
item = /obj/item/sbeacondrop/bomb
- cost = 12
- reputation_required = REPUTATION_GOOD
+ cost = 8
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/explosives/syndicate_detonator
name = "Syndicate Detonator"
@@ -1399,7 +1413,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/grenade/syndieminibomb
cost = 4
purchasable_from = ~UPLINK_CLOWN_OPS
- reputation_required = REPUTATION_STANDARD
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/explosives/tearstache
name = "Teachstache Grenade"
@@ -1536,7 +1550,8 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't \
move the projector from their hand. Disguised users move slowly, and projectiles pass over them."
item = /obj/item/chameleon
- cost = 7
+ cost = 6
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/stealthy_tools/codespeak_manual
name = "Codespeak Manual"
@@ -1585,8 +1600,9 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \
They do not work on heavily lubricated surfaces."
item = /obj/item/clothing/shoes/chameleon/noslip
- cost = 3
+ cost = 2
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
item = /obj/item/clothing/shoes/chameleon/noslip
@@ -1616,6 +1632,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
desc = "This device will disrupt any nearby outgoing wireless signals when activated."
item = /obj/item/jammer
cost = 5
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/stealthy_tools/smugglersatchel
name = "Smuggler's Satchel"
@@ -1638,6 +1655,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
sightings, however."
item = /obj/item/storage/box/syndie_kit/space
cost = 3
+ reputation_required = REPUTATION_STANDARD
/datum/uplink_item/suits/hardsuit
name = "Syndicate Hardsuit"
@@ -1647,9 +1665,9 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
Additionally the suit is collapsible, making it small enough to fit within a backpack. \
Nanotrasen crew who spot these suits are known to panic."
item = /obj/item/clothing/suit/space/hardsuit/syndi
- cost = 7
+ cost = 5
purchasable_from = ~UPLINK_NUKE_OPS //you can't buy it in nuke, because the elite hardsuit costs the same while being better
- reputation_required = REPUTATION_STANDARD
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/suits/hardsuit/spawn_item(spawn_path, mob/user, datum/component/uplink/U)
var/obj/item/clothing/suit/space/hardsuit/suit = ..()
@@ -1710,6 +1728,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
cost = 4
surplus = 75
restricted = TRUE
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/device_tools/compressionkit
name = "Bluespace Compression Kit"
@@ -1798,7 +1817,8 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
Due to the Syndicate's more limited research of teleportation technologies, it is incapable of phasing the user \
through solid matter nor is it capable of teleporting them across longer ranges."
item = /obj/item/teleporter
- cost = 7
+ cost = 5
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/device_tools/frame
name = "F.R.A.M.E. PDA Disk"
@@ -1853,13 +1873,14 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
Be careful with wording, as artificial intelligences may look for loopholes to exploit."
item = /obj/item/aiModule/syndicate
cost = 3
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/device_tools/hypnotic_flash
name = "Hypnotic Flash"
desc = "A modified flash able to hypnotize targets. If the target is not in a mentally vulnerable state, it will only confuse and pacify them temporarily."
item = /obj/item/assembly/flash/hypnotic
cost = 7
- reputation_required = REPUTATION_GOOD
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/device_tools/medgun
name = "Medbeam Gun"
@@ -1896,6 +1917,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/reagent_containers/hypospray/medipen/stimulants
cost = 5
surplus = 90
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/device_tools/medkit
name = "Syndicate Combat Medic Kit"
@@ -1921,6 +1943,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
a Syndicate brand MMI, a straitjacket, and a muzzle."
item = /obj/item/storage/backpack/duffelbag/syndie/surgery
cost = 3
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/device_tools/encryptionkey
name = "Syndicate Encryption Key"
@@ -1966,6 +1989,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks."
item = /obj/item/clothing/glasses/thermal/syndi
cost = 3
+ reputation_required = REPUTATION_GOOD
// Implants
/datum/uplink_item/implants
@@ -1979,6 +2003,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/storage/box/syndie_kit/imp_adrenal
cost = 8
player_minimum = 20
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/implants/antistun
name = "CNS Rebooter Implant"
@@ -2035,14 +2060,16 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
desc = "This one-of-a-kind implant will make you almost invisible if you play your cards right. \
On activation, it will conceal you inside a chameleon cardboard box that is only revealed once someone bumps into it."
item = /obj/item/storage/box/syndie_kit/imp_stealth
- cost = 7
+ cost = 6
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/implants/storage
name = "Storage Implant"
desc = "An implant injected into the body, and later activated at the user's will. It will open a small bluespace \
pocket capable of storing two regular-sized items."
item = /obj/item/storage/box/syndie_kit/imp_storage
- cost = 7
+ cost = 5
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/implants/thermals
name = "Thermal Eyes"
@@ -2138,6 +2165,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
cost = 2
restricted_roles = list(JOB_NAME_ASSISTANT)
surplus = 0
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/pie_cannon
name = "Banana Cream Pie Cannon"
@@ -2146,6 +2174,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/pneumatic_cannon/pie/selfcharge
restricted_roles = list(JOB_NAME_CLOWN)
surplus = 0 //No fun unless you're the clown!
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/blastcannon
name = "Blast Cannon"
@@ -2156,6 +2185,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/gun/blastcannon
cost = 14 //High cost because of the potential for extreme damage in the hands of a skilled scientist.
restricted_roles = list(JOB_NAME_RESEARCHDIRECTOR, JOB_NAME_SCIENTIST)
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/role_restricted/crushmagboots
name = "Crushing Magboots"
@@ -2171,6 +2201,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/storage/box/gorillacubes
cost = 6
restricted_roles = list(JOB_NAME_GENETICIST, JOB_NAME_CHIEFMEDICALOFFICER)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/rad_laser
name = "Radioactive Microlaser"
@@ -2181,6 +2212,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/healthanalyzer/rad_laser
restricted_roles = list(JOB_NAME_MEDICALDOCTOR, JOB_NAME_CHIEFMEDICALOFFICER, JOB_NAME_ROBOTICIST, JOB_NAME_PARAMEDIC, JOB_NAME_BRIGPHYSICIAN)
cost = 3
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/syndicate_mmi
name = "Syndicate MMI"
@@ -2215,6 +2247,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/sbeacondrop/clownbomb
cost = 10
restricted_roles = list(JOB_NAME_CLOWN)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/clown_grenade
name = "C.L.U.W.N.E"
@@ -2223,6 +2256,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/grenade/spawnergrenade/clown
cost = 3
restricted_roles = list(JOB_NAME_CLOWN)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/clown_grenade_broken
@@ -2233,6 +2267,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/grenade/spawnergrenade/clown_broken
cost = 5
restricted_roles = list(JOB_NAME_CLOWN)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/clowncar
name = "Clown Car"
@@ -2256,22 +2291,24 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/clothing/shoes/clown_shoes/taeclowndo
restricted_roles = list(JOB_NAME_CLOWN)
-/datum/uplink_item/role_restricted/superior_honkrender
- name = "Superior Honkrender"
+/datum/uplink_item/role_restricted/honkrender
+ name = "Honkrender"
desc = "An ancient artifact recovered from an ancient cave. Opens the way to the Dark Carnival"
item = /obj/item/veilrender/honkrender
- cost = 8
+ cost = 6
restricted = TRUE
restricted_roles = list(JOB_NAME_CLOWN, JOB_NAME_CHAPLAIN)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/superior_honkrender
name = "Superior Honkrender"
desc = "An ancient artifact recovered from -. Opens the way to TRANSMISSION OFFLINE\
All praise be to the honkmother"
item = /obj/item/veilrender/honkrender/honkhulkrender
- cost = 20
+ cost = 12
restricted = TRUE
restricted_roles = list(JOB_NAME_CLOWN, JOB_NAME_CHAPLAIN)
+ reputation_required = REPUTATION_EXCELLENT
/datum/uplink_item/role_restricted/concealed_weapon_bay
name = "Concealed Weapon Bay"
@@ -2281,6 +2318,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/mecha_parts/concealed_weapon_bay
cost = 3
restricted_roles = list(JOB_NAME_ROBOTICIST, JOB_NAME_RESEARCHDIRECTOR)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/haunted_magic_eightball
name = "Haunted Magic Eightball"
@@ -2304,6 +2342,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
item = /obj/item/prisoncube
cost = 5
restricted_roles = list(JOB_NAME_CURATOR)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/his_grace
name = "His Grace"
@@ -2375,6 +2414,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
cost = 10
player_minimum = 25
restricted_roles = list(JOB_NAME_BOTANIST, JOB_NAME_COOK, JOB_NAME_BARTENDER)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/holocarp
name = "Holocarp Parasites"
@@ -2423,6 +2463,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
cost = 5 //you need one for full damage, so total of 5 for maximum damage
limited_stock = 1 //you can't use more than one!
restricted_roles = list(JOB_NAME_SHAFTMINER)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/esaw
name = "Energy Saw"
@@ -2437,28 +2478,32 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
cost = 8
item = /obj/item/autosurgeon/syndicate/esaw_arm
restricted_roles = list(JOB_NAME_MEDICALDOCTOR, JOB_NAME_CHIEFMEDICALOFFICER, JOB_NAME_PARAMEDIC, JOB_NAME_BRIGPHYSICIAN)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/magillitis_serum
name = "Magillitis Serum Autoinjector"
desc = "A single-use autoinjector which contains an experimental serum that causes rapid muscular growth in Hominidae. \
Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas."
item = /obj/item/reagent_containers/hypospray/medipen/magillitis
- cost = 15
+ cost = 13
restricted_roles = list(JOB_NAME_GENETICIST, JOB_NAME_CHIEFMEDICALOFFICER)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/modified_syringe_gun
name = "Modified Syringe Gun"
desc = "A syringe gun that fires DNA injectors instead of normal syringes."
item = /obj/item/gun/syringe/dna
- cost = 14
+ cost = 12
restricted_roles = list(JOB_NAME_GENETICIST, JOB_NAME_CHIEFMEDICALOFFICER)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/chemical_gun
name = "Reagent Dartgun"
desc = "A heavily modified syringe gun which is capable of synthesizing its own chemical darts using input reagents. Can hold 100u of reagents."
item = /obj/item/gun/chem
- cost = 12
+ cost = 11
restricted_roles = list(JOB_NAME_CHEMIST, JOB_NAME_CHIEFMEDICALOFFICER)
+ reputation_required = REPUTATION_GOOD
/datum/uplink_item/role_restricted/reverse_bear_trap
name = "Reverse Bear Trap"
@@ -2483,6 +2528,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
cost = 12
item = /obj/item/autosurgeon/syndicate/laser_arm
restricted_roles = list(JOB_NAME_ROBOTICIST, JOB_NAME_RESEARCHDIRECTOR)
+ reputation_required = REPUTATION_GOOD
// Pointless
diff --git a/tgui/packages/tgui/interfaces/Uplink.js b/tgui/packages/tgui/interfaces/Uplink.js
index b7a958a9245d9..0e7ab328c3bda 100644
--- a/tgui/packages/tgui/interfaces/Uplink.js
+++ b/tgui/packages/tgui/interfaces/Uplink.js
@@ -270,6 +270,8 @@ const Directives = (props, context) => {
name: objective.name,
reward: objective.reward || 0,
time_left: objective.time ? (objective.time - time) * 0.1 : null,
+ rep_gain: objective.rep_gain || null,
+ rep_loss: objective.rep_loss || null,
}}
/>
))}
@@ -317,6 +319,20 @@ const Directives = (props, context) => {
{task}
))}
+ {(selectedObjective?.rep_gain || selectedObjective?.rep_loss) && (
+ <>
+
+
+
+