diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index ae08b5e3bbf..ec14083263a 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -909,6 +909,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define STATION_TRAIT_EMPTY_MAINT "station_trait_empty_maint"
#define STATION_TRAIT_PDA_GLITCHED "station_trait_pda_glitched"
#define STATION_TRAIT_BOTS_GLITCHED "station_trait_bot_glitch"
+#define STATION_TRAIT_CYBERNETIC_REVOLUTION "station_trait_cybernetic_revolution"
///From the market_crash event
#define MARKET_CRASH_EVENT_TRAIT "crashed_market_event"
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 09400c6675a..6e88a1ab12e 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -27,7 +27,8 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
list("Bad Touch", "Friendly"),
list("Extrovert", "Introvert"),
list("Prosthetic Limb", "Quadruple Amputee"),
- list("Quadruple Amputee", "Paraplegic","Frail"),
+ list("Quadruple Amputee", "Paraplegic", "Frail"),
+ list("Prosthetic Limb", "Body Purist"),
//SKYRAT EDIT ADDITION BEGIN
list("Nerve Stapled", "Pacifist"),
list("Nerve Stapled", "Nearsighted"),
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index 1344da6844c..de556e3ea15 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -420,3 +420,9 @@
description = "Blast it! That stunt didn't go as planned!"
mood_change = -2
timeout = 4 MINUTES
+
+/datum/mood_event/body_purist
+ description = "I feel cybernetics attached to me, and I HATE IT!"
+
+/datum/mood_event/body_purist/add_effects(power)
+ mood_change = power
diff --git a/code/datums/quirks/negative.dm b/code/datums/quirks/negative.dm
index a757dee3cfc..9e0f5ad64ec 100644
--- a/code/datums/quirks/negative.dm
+++ b/code/datums/quirks/negative.dm
@@ -993,6 +993,79 @@
hardcore_value = 8
mail_goodies = list(/obj/item/pai_card) // can read things for you
+/datum/quirk/body_purist
+ name = "Body Purist"
+ desc = "You believe your body is a temple and its natural form is an embodiment of perfection. Accordingly, you despise the idea of ever augmenting it with unnatural parts, cybernetic, prosthetic, or anything like it."
+ icon = "person-rays"
+ value = -2
+ mood_quirk = TRUE
+ gain_text = "You now begin to hate the idea of having cybernetic implants."
+ lose_text = "Maybe cybernetics aren't so bad. You now feel okay with augmentations and prosthetics."
+ medical_record_text = "This patient has disclosed an extreme hatred for unnatural bodyparts and augmentations."
+ hardcore_value = 3
+ mail_goodies = list(/obj/item/paper/pamphlet/cybernetics)
+ var/cybernetics_level = 0
+
+/datum/quirk/body_purist/add()
+ check_cybernetics()
+ RegisterSignal(quirk_holder, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(on_organ_gain))
+ RegisterSignal(quirk_holder, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(on_organ_lose))
+ RegisterSignal(quirk_holder, COMSIG_CARBON_ATTACH_LIMB, PROC_REF(on_limb_gain))
+ RegisterSignal(quirk_holder, COMSIG_CARBON_REMOVE_LIMB, PROC_REF(on_limb_lose))
+
+/datum/quirk/body_purist/remove()
+ UnregisterSignal(quirk_holder, list(
+ COMSIG_CARBON_GAIN_ORGAN,
+ COMSIG_CARBON_LOSE_ORGAN,
+ COMSIG_CARBON_ATTACH_LIMB,
+ COMSIG_CARBON_REMOVE_LIMB,
+ ))
+ quirk_holder.clear_mood_event("body_purist")
+
+/datum/quirk/body_purist/proc/check_cybernetics()
+ var/mob/living/carbon/owner = quirk_holder
+ if(!istype(owner))
+ return
+ for(var/obj/item/bodypart/limb as anything in owner.bodyparts)
+ if(!IS_ORGANIC_LIMB(limb))
+ cybernetics_level++
+ for(var/obj/item/organ/internal/organ as anything in owner.internal_organs)
+ if(organ.organ_flags & ORGAN_SYNTHETIC)
+ cybernetics_level++
+ for(var/obj/item/organ/external/organ as anything in owner.external_organs)
+ if(organ.organ_flags & ORGAN_SYNTHETIC)
+ cybernetics_level++
+ update_mood()
+
+/datum/quirk/body_purist/proc/update_mood()
+ quirk_holder.clear_mood_event("body_purist")
+ if(cybernetics_level)
+ quirk_holder.add_mood_event("body_purist", /datum/mood_event/body_purist, -cybernetics_level * 10)
+
+/datum/quirk/body_purist/proc/on_organ_gain(datum/source, obj/item/organ/new_organ, special)
+ SIGNAL_HANDLER
+ if(new_organ.organ_flags & ORGAN_SYNTHETIC || new_organ.status == ORGAN_ROBOTIC) //why the fuck are there 2 of them
+ cybernetics_level++
+ update_mood()
+
+/datum/quirk/body_purist/proc/on_organ_lose(datum/source, obj/item/organ/old_organ, special)
+ SIGNAL_HANDLER
+ if(old_organ.organ_flags & ORGAN_SYNTHETIC || old_organ.status == ORGAN_ROBOTIC)
+ cybernetics_level--
+ update_mood()
+
+/datum/quirk/body_purist/proc/on_limb_gain(datum/source, obj/item/bodypart/new_limb, special)
+ SIGNAL_HANDLER
+ if(!IS_ORGANIC_LIMB(new_limb))
+ cybernetics_level++
+ update_mood()
+
+/datum/quirk/body_purist/proc/on_limb_lose(datum/source, obj/item/bodypart/old_limb, special)
+ SIGNAL_HANDLER
+ if(!IS_ORGANIC_LIMB(old_limb))
+ cybernetics_level--
+ update_mood()
+
/datum/quirk/mute
name = "Mute"
desc = "For some reason you are completely unable to speak."
diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm
index 49db3a9c732..685145eafbf 100644
--- a/code/datums/station_traits/positive_traits.dm
+++ b/code/datums/station_traits/positive_traits.dm
@@ -270,3 +270,82 @@
// Put our filthy fingerprints all over the contents
for(var/obj/item/item in wallet)
item.add_fingerprint(living_mob, ignoregloves = TRUE)
+
+/datum/station_trait/cybernetic_revolution
+ name = "Cybernetic Revolution"
+ trait_type = STATION_TRAIT_POSITIVE
+ show_in_report = TRUE
+ weight = 0 // SKYRAT EDIT - We can't run this - ORIGINAL: weight = 1
+ report_message = "The new trends in cybernetics have come to the station! Everyone has some form of cybernetic implant."
+ trait_to_give = STATION_TRAIT_CYBERNETIC_REVOLUTION
+ /// List of all job types with the cybernetics they should receive.
+ var/static/list/job_to_cybernetic = list(
+ /datum/job/assistant = /obj/item/organ/internal/heart/cybernetic, //real cardiac
+ /datum/job/atmospheric_technician = /obj/item/organ/internal/cyberimp/mouth/breathing_tube,
+ /datum/job/bartender = /obj/item/organ/internal/liver/cybernetic/tier3,
+ /datum/job/botanist = /obj/item/organ/internal/cyberimp/chest/nutriment,
+ /datum/job/captain = /obj/item/organ/internal/heart/cybernetic/tier3,
+ /datum/job/cargo_technician = /obj/item/organ/internal/stomach/cybernetic/tier2,
+ /datum/job/chaplain = /obj/item/organ/internal/cyberimp/brain/anti_drop,
+ /datum/job/chemist = /obj/item/organ/internal/liver/cybernetic/tier2,
+ /datum/job/chief_engineer = /obj/item/organ/internal/cyberimp/chest/thrusters,
+ /datum/job/chief_medical_officer = /obj/item/organ/internal/cyberimp/chest/reviver,
+ /datum/job/clown = /obj/item/organ/internal/cyberimp/brain/anti_stun, //HONK!
+ /datum/job/cook = /obj/item/organ/internal/cyberimp/chest/nutriment/plus,
+ /datum/job/curator = /obj/item/organ/internal/eyes/robotic/glow,
+ /datum/job/detective = /obj/item/organ/internal/lungs/cybernetic/tier3,
+ /datum/job/doctor = /obj/item/organ/internal/cyberimp/arm/surgery,
+ /datum/job/geneticist = /obj/item/organ/internal/fly, //we don't care about implants, we have cancer.
+ /datum/job/head_of_personnel = /obj/item/organ/internal/eyes/robotic,
+ /datum/job/head_of_security = /obj/item/organ/internal/eyes/robotic/thermals,
+ /datum/job/janitor = /obj/item/organ/internal/eyes/robotic/xray,
+ /datum/job/lawyer = /obj/item/organ/internal/heart/cybernetic/tier2,
+ /datum/job/mime = /obj/item/organ/internal/tongue/robot, //...
+ /datum/job/paramedic = /obj/item/organ/internal/cyberimp/eyes/hud/medical,
+ /datum/job/prisoner = /obj/item/organ/internal/eyes/robotic/shield,
+ /datum/job/psychologist = /obj/item/organ/internal/ears/cybernetic/upgraded,
+ /datum/job/quartermaster = /obj/item/organ/internal/stomach/cybernetic/tier3,
+ /datum/job/research_director = /obj/item/organ/internal/cyberimp/bci,
+ /datum/job/roboticist = /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic,
+ /datum/job/scientist = /obj/item/organ/internal/ears/cybernetic,
+ /datum/job/security_officer = /obj/item/organ/internal/cyberimp/arm/flash,
+ /datum/job/shaft_miner = /obj/item/organ/internal/monster_core/rush_gland,
+ /datum/job/station_engineer = /obj/item/organ/internal/cyberimp/arm/toolset,
+ /datum/job/virologist = /obj/item/organ/internal/lungs/cybernetic/tier2,
+ /datum/job/warden = /obj/item/organ/internal/cyberimp/eyes/hud/security,
+
+ // SKYRAT EDIT ADDITION START - Skyrat Jobs
+ // Anything not on this list does not get an implant, because we can't be bothered to add them when we're explicitly removing this.
+ /datum/job/barber = null,
+ /datum/job/blueshield = null,
+ /datum/job/bouncer = null,
+ /datum/job/corrections_officer = null,
+ /datum/job/customs_agent = null,
+ /datum/job/engineering_guard = null,
+ /datum/job/nanotrasen_consultant = null,
+ /datum/job/orderly = null,
+ /datum/job/science_guard = null,
+ /datum/job/security_medic = null,
+ // SKYRAT EDIT END
+ )
+
+/datum/station_trait/cybernetic_revolution/New()
+ . = ..()
+ /* SKYRAT EDIT REMOVAL START - We can't run this with all of our customization stuff, and because it's not balanced around our gameplay loop. This is commented out so that it doesn't do anything even if bussed in.
+ RegisterSignal(SSdcs, COMSIG_GLOB_JOB_AFTER_SPAWN, PROC_REF(on_job_after_spawn))
+ */ // SKYRAT REMOVAL END
+
+/datum/station_trait/cybernetic_revolution/proc/on_job_after_spawn(datum/source, datum/job/job, mob/living/spawned, client/player_client)
+ SIGNAL_HANDLER
+
+ var/datum/quirk/body_purist/body_purist = /datum/quirk/body_purist
+ if(initial(body_purist.name) in player_client.prefs.all_quirks)
+ return
+ var/cybernetic_type = job_to_cybernetic[job.type]
+ if(!cybernetic_type)
+ if(isAI(spawned))
+ var/mob/living/silicon/ai/ai = spawned
+ ai.eyeobj.relay_speech = TRUE //surveillance upgrade. the ai gets cybernetics too.
+ return
+ var/obj/item/organ/internal/cybernetic = new cybernetic_type()
+ cybernetic.Insert(spawned, special = TRUE, drop_if_replaced = FALSE)
diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm
index 5220da6bfa3..be8aa9de890 100644
--- a/code/modules/awaymissions/pamphlet.dm
+++ b/code/modules/awaymissions/pamphlet.dm
@@ -46,3 +46,36 @@
As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \
Though complete safety is assured, participants are advised to prepare for inhospitable \
environs."
+
+/obj/item/paper/pamphlet/cybernetics
+ name = "pamphlet - 'Synthman's Cybernetic Starter Gear!'"
+ default_raw_text = "Join the Body Modder Revolution today! We are offering FREE SAMPLES of the latest and greatest \
+ cybernetic augments by Synthman Co. to you in this rare exclusive offer! With this letter, you are being gifted a \
+ special limited edition choice NTSDA-certified grade-A cybernetic implant, FREE OF CHARGE! Build up your body to \
+ GREATNESS with Synthman's new exclusive line of cybernetic products! Become greater, stronger, and BETTER today!"
+ var/obj/item/organ/internal/heart/cybernetic/sample
+
+/obj/item/paper/pamphlet/cybernetics/Initialize(mapload)
+ . = ..()
+ sample = new(src)
+ update_desc()
+
+/obj/item/paper/pamphlet/cybernetics/update_desc(updates)
+ . = ..()
+ desc = "A pamphlet encouraging the reader to implant themselves.[sample ? " Has an attached \"sample\"..." : ""]"
+
+/obj/item/paper/pamphlet/cybernetics/Destroy()
+ QDEL_NULL(sample)
+ return ..()
+
+/obj/item/paper/pamphlet/cybernetics/Exited(atom/movable/gone, direction)
+ . = ..()
+ if(gone == sample)
+ sample = null
+ update_desc()
+
+/obj/item/paper/pamphlet/cybernetics/attack_self(mob/user, modifiers)
+ . = ..()
+ to_chat(user, span_notice("As you read the pamphlet, a free sample falls out!"))
+ sample.forceMove(drop_location())
+ playsound(sample, 'sound/misc/splort.ogg', 50, vary = TRUE)
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index fed9f84b0e1..7b2cad7f0e6 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -1352,6 +1352,11 @@
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
+/datum/techweb_node/cyber_organs/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500)
+
/datum/techweb_node/cyber_organs_upgraded
id = "cyber_organs_upgraded"
display_name = "Upgraded Cybernetic Organs"
@@ -1366,6 +1371,11 @@
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
+/datum/techweb_node/cyber_organs_upgraded/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
+
/datum/techweb_node/cyber_implants
id = "cyber_implants"
display_name = "Cybernetic Implants"
@@ -1382,6 +1392,11 @@
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
+/datum/techweb_node/cyber_implants/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
+
/datum/techweb_node/adv_cyber_implants
id = "adv_cyber_implants"
display_name = "Advanced Cybernetic Implants"
@@ -1395,6 +1410,11 @@
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
+/datum/techweb_node/adv_cyber_implants/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
+
/datum/techweb_node/combat_cyber_implants
id = "combat_cyber_implants"
display_name = "Combat Cybernetic Implants"
@@ -1408,6 +1428,11 @@
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
+/datum/techweb_node/combat_cyber_implants/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
+
////////////////////////Tools////////////////////////
/datum/techweb_node/basic_mining
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 4c1a4e96e92..7b1d42fbd12 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -280,7 +280,8 @@
active_item.set_light_on(TRUE)
/obj/item/organ/internal/cyberimp/arm/flash/Retract()
- active_item.set_light_on(FALSE)
+ if(active_item)
+ active_item.set_light_on(FALSE)
return ..()
/obj/item/organ/internal/cyberimp/arm/baton
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 1414c3c344c..6a745e5fe0f 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -182,7 +182,8 @@
/obj/item/organ/internal/heart/cybernetic
name = "basic cybernetic heart"
desc = "A basic electronic device designed to mimic the functions of an organic human heart."
- icon_state = "heart-c"
+ icon_state = "heart-c-on"
+ base_icon_state = "heart-c"
organ_flags = ORGAN_SYNTHETIC
maxHealth = STANDARD_ORGAN_THRESHOLD*0.75 //This also hits defib timer, so a bit higher than its less important counterparts
@@ -194,7 +195,8 @@
/obj/item/organ/internal/heart/cybernetic/tier2
name = "cybernetic heart"
desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma."
- icon_state = "heart-c-u"
+ icon_state = "heart-c-u-on"
+ base_icon_state = "heart-c-u"
maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
dose_available = TRUE
emp_vulnerability = 40
@@ -202,7 +204,8 @@
/obj/item/organ/internal/heart/cybernetic/tier3
name = "upgraded cybernetic heart"
desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma. This upgraded model can regenerate its dose after use."
- icon_state = "heart-c-u2"
+ icon_state = "heart-c-u2-on"
+ base_icon_state = "heart-c-u2"
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
dose_available = TRUE
emp_vulnerability = 20
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index cf772183a2c..1670c0365bc 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -191,6 +191,7 @@
#include "spell_shapeshift.dm"
#include "spritesheets.dm"
#include "stack_singular_name.dm"
+#include "station_trait_tests.dm"
#include "stomach.dm"
#include "strange_reagent.dm"
#include "strippable.dm"
diff --git a/code/modules/unit_tests/station_trait_tests.dm b/code/modules/unit_tests/station_trait_tests.dm
new file mode 100644
index 00000000000..b74f6503a08
--- /dev/null
+++ b/code/modules/unit_tests/station_trait_tests.dm
@@ -0,0 +1,10 @@
+/// This test spawns various station traits and looks through them to see if there's any errors.
+/datum/unit_test/station_traits
+
+/datum/unit_test/station_traits/Run()
+ var/datum/station_trait/cybernetic_revolution/cyber_trait = allocate(/datum/station_trait/cybernetic_revolution)
+ for(var/datum/job/job in subtypesof(/datum/job))
+ if(!(initial(job.job_flags) & JOB_CREW_MEMBER))
+ continue
+ if(!(job in cyber_trait.job_to_cybernetic))
+ Fail("Job [job] does not have an assigned cybernetic for [cyber_trait.type] station trait.")
diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm
index a29f691b669..bd28454122c 100644
--- a/code/modules/uplink/uplink_items/explosive.dm
+++ b/code/modules/uplink/uplink_items/explosive.dm
@@ -62,6 +62,11 @@
item = /obj/item/storage/box/syndie_kit/emp
cost = 2
+/datum/uplink_item/explosives/emp/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ cost *= 3
+
/datum/uplink_item/explosives/pizza_bomb
name = "Pizza Bomb"
desc = "A pizza box with a bomb cunningly attached to the lid. The timer needs to be set by opening the box; afterwards, \
@@ -88,6 +93,11 @@
item = /obj/item/sbeacondrop/emp
cost = 7
+/datum/uplink_item/explosives/syndicate_bomb/emp/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ cost *= 2
+
// High progression cost
/datum/uplink_item/explosives/syndicate_bomb
diff --git a/code/modules/uplink/uplink_items/special.dm b/code/modules/uplink/uplink_items/special.dm
new file mode 100644
index 00000000000..00425f2089a
--- /dev/null
+++ b/code/modules/uplink/uplink_items/special.dm
@@ -0,0 +1,20 @@
+/datum/uplink_category/special
+ name = "Special"
+ weight = -3
+
+/datum/uplink_item/special
+ category = /datum/uplink_category/special
+ cant_discount = TRUE
+ surplus = 0
+ purchasable_from = NONE
+
+/datum/uplink_item/special/autosurgeon
+ name = "Syndicate Autosurgeon"
+ desc = "A multi-use autosurgeon for implanting whatever you want into yourself. Rip that station apart and make it part of you."
+ item = /obj/item/autosurgeon/syndicate
+ cost = 5
+
+/datum/uplink_item/special/autosurgeon/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ purchasable_from |= UPLINK_TRAITORS
diff --git a/code/modules/uplink/uplink_items/stealthy_tools.dm b/code/modules/uplink/uplink_items/stealthy_tools.dm
index 32ece25bd96..f6de15506a5 100644
--- a/code/modules/uplink/uplink_items/stealthy_tools.dm
+++ b/code/modules/uplink/uplink_items/stealthy_tools.dm
@@ -58,6 +58,11 @@
cost = 4
surplus = 30
+/datum/uplink_item/stealthy_tools/emplight/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ cost *= 3
+
/datum/uplink_item/stealthy_tools/mulligan
name = "Mulligan"
desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \
diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi
index 85e372b4b08..8402814dcd0 100644
Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ
diff --git a/modular_skyrat/modules/organs/code/tongue.dm b/modular_skyrat/modules/organs/code/tongue.dm
index 31368878152..9d2033d238c 100644
--- a/modular_skyrat/modules/organs/code/tongue.dm
+++ b/modular_skyrat/modules/organs/code/tongue.dm
@@ -5,7 +5,7 @@
icon_state = "tonguenormal"
modifies_speech = TRUE
-/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer)
+/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE)
. = ..()
signer.verb_ask = "arfs"
signer.verb_exclaim = "wans"
diff --git a/tgstation.dme b/tgstation.dme
index b3949e23ff2..49421fd6692 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4706,6 +4706,7 @@
#include "code\modules\uplink\uplink_items\implant.dm"
#include "code\modules\uplink\uplink_items\job.dm"
#include "code\modules\uplink\uplink_items\nukeops.dm"
+#include "code\modules\uplink\uplink_items\special.dm"
#include "code\modules\uplink\uplink_items\species.dm"
#include "code\modules\uplink\uplink_items\stealthy.dm"
#include "code\modules\uplink\uplink_items\stealthy_tools.dm"