diff --git a/code/game/objects/items/implants/implant_slave.dm b/code/game/objects/items/implants/implant_slave.dm
new file mode 100644
index 00000000..babba2af
--- /dev/null
+++ b/code/game/objects/items/implants/implant_slave.dm
@@ -0,0 +1,81 @@
+/obj/item/implant/slave
+ name = "slave implant"
+ desc = "Turns you into security's new pet."
+ resistance_flags = INDESTRUCTIBLE
+ activated = 0
+
+/obj/item/implant/slave/get_data()
+ var/dat = {"Implant Specifications:
+ Name: Alternative Criminal Reassignment Implant
+ Life: Ten years.
+ Important Notes: Personnel injected with this device are forced to be fully subservient to security personnel. Incompatible with mindshield-class implants.
+
+ Implant Details:
+ Function: Overrides the host's mental functions with an innate desire to serve security personnel, obeying nearly any command.
+ Special Features: Will cure, but not block most other forms of brainwashing.
+ Integrity: Implant will last so long as the implant remains within the host."}
+ return dat
+
+
+/obj/item/implant/slave/implant(mob/living/target, mob/user, silent = FALSE)
+ if(..())
+ /*
+ if(!target.mind)
+ ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant")
+ target.sec_hud_set_implants()
+ return TRUE
+ Can't be a pet without having a mind! */
+
+ if(target.mind.has_antag_datum(/datum/antagonist/brainwashed))
+ target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
+
+ if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable || target.mind.has_antag_datum(/datum/antagonist/gang/boss) || target.mind.assigned_role == "Security Officer" || target.mind.assigned_role == "Detective" || target.mind.assigned_role == "Warden" || target.mind.assigned_role == "Head of Security")
+ if(!silent)
+ if(target.mind.assigned_role == "Security Officer" || target.mind.assigned_role == "Detective" || target.mind.assigned_role == "Warden" || target.mind.assigned_role == "Head of Security")
+ target.visible_message("[target] seems to resist the implant! You can't enslave a member of security!", "You feel something interfering with your mental conditioning, but you resist it!")
+ else
+ target.visible_message("[target] seems to resist the implant!", "You feel something interfering with your mental conditioning, but you resist it!")
+ var/obj/item/implanter/I = loc
+ removed(target, 1)
+ qdel(src)
+ if(istype(I))
+ I.imp = null
+ I.update_icon()
+ return FALSE
+
+ var/datum/antagonist/gang/gang = target.mind.has_antag_datum(/datum/antagonist/gang)
+ var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
+ if(rev)
+ rev.remove_revolutionary(FALSE, user)
+ if(gang)
+ target.mind.remove_antag_datum(/datum/antagonist/gang)
+ if(!silent)
+ if(target.mind in SSticker.mode.cult)
+ to_chat(target, "You feel something interfering with your mental conditioning, but you resist it!")
+ else
+ to_chat(target, "You feel a sense of peace and security. You are now enslaved!")
+ var/slave_objective = "[(target.client?.prefs.lewdchem?"Obey all of security's commands, and be the perfect pet.":"Obey all of security's commands.")]"
+ brainwash(target, slave_objective)
+ target.sec_hud_set_implants()
+ return TRUE
+ return FALSE
+
+/obj/item/implant/slave/removed(mob/target, silent = FALSE, special = 0)
+ if(..())
+ if(isliving(target))
+ var/mob/living/L = target
+ target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
+ L.sec_hud_set_implants()
+ if(target.stat != DEAD && !silent)
+ to_chat(target, "Your mind suddenly feels free from burden. You are no longer enslaved!")
+ return 1
+ return 0
+
+/obj/item/implanter/slave
+ name = "implanter (slave)"
+ imp_type = /obj/item/implant/slave
+
+/obj/item/implantcase/slave
+ name = "implant case - 'Slave'"
+ desc = "A glass case containing a slave implant."
+ imp_type = /obj/item/implant/slave
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 4b2ce220..81cc8c27 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -230,6 +230,35 @@
new /obj/item/melee/baton/loaded(src)
update_icon()
+/obj/item/storage/belt/slut
+ name = "slutcurity belt"
+ desc = "Holds a variety of gear for \"alternative\" peacekeeping."
+ icon_state = "slutbelt"
+ item_state = "slut"
+
+obj/item/storage/belt/slut/ComponentInitialize()
+ . = ..()
+ GET_COMPONENT(STR, /datum/component/storage)
+ STR.max_items = 5
+ STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.can_hold = typecacheof(list(
+ /obj/item/melee/baton,
+ /obj/item/melee/classic_baton,
+ /obj/item/grenade,
+ /obj/item/reagent_containers/spray/pepper,
+ /obj/item/restraints/handcuffs,
+ /obj/item/assembly/flash/handheld,
+ /obj/item/clothing/glasses,
+ /obj/item/reagent_containers/food/snacks/donut,
+ /obj/item/flashlight/seclite,
+ /obj/item/radio,
+ /obj/item/clothing/gloves,
+ /obj/item/restraints/legcuffs/bola,
+ /obj/item/dildo,
+ /obj/item/leash,
+ /obj/item/condom
+ ))
+
/obj/item/storage/belt/mining
name = "explorer's webbing"
desc = "A versatile chest rig, cherished by miners and hunters alike."
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 1e464612..4c716a4f 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -672,17 +672,26 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
- damtype = "arousal"
+ damtype = AROUSAL
throwforce = 0
force = 5
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
+ hitsound = 'sound/weapons/whip.ogg'
+
+/obj/item/bdsm_whip/ridingcrop
+ name = "riding crop"
+ desc = "For teaching a lesson in a more compact fashion."
+ icon_state = "ridingcrop"
+ force = 10
/obj/item/bdsm_whip/suicide_act(mob/user)
user.visible_message("[user] is getting just a little too kinky!")
return (OXYLOSS)
/obj/item/bdsm_whip/attack(mob/M, mob/user)
- playsound(loc, 'sound/weapons/whip.ogg', 30)
- if(user.a_intent != INTENT_HELP)
- return ..(M, user)
\ No newline at end of file
+ if(user.zone_selected == BODY_ZONE_PRECISE_GROIN)
+ playsound(loc, 'sound/weapons/whip.ogg', 30)
+ M.visible_message("[user] has [pick(attack_verb)] [M] on the ass!")
+ else
+ return ..(M, user)
diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm
index 12dcb979..30c80a25 100644
--- a/code/game/objects/structures/beds_chairs/bed.dm
+++ b/code/game/objects/structures/beds_chairs/bed.dm
@@ -200,6 +200,12 @@
. = ..()
update_owner(M)
+/obj/structure/bed/secbed
+ name = "security pet bed"
+ desc = "A comfy-looking pet bed, now in the classic security colors."
+ icon_state = "secbed"
+ anchored = FALSE
+
/obj/structure/bed/alien
name = "resting contraption"
desc = "This looks similar to contraptions from Earth. Could aliens be stealing our technology?"
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 118c4171..362e245f 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -249,6 +249,11 @@
desc = "A special beret with the security insignia emblazoned on it. For officers with class."
icon_state = "officerberet"
+/obj/item/clothing/head/beret/sec/bitch
+ name = "security's bitch beret"
+ desc = "A softer beret with the word 'BITCH' embroidered on it in pink thread."
+ icon_state = "bitchberet"
+
//Curator
/obj/item/clothing/head/fedora/curator
name = "treasure hunter's fedora"
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
index f004f07b..537b1689 100644
--- a/code/modules/clothing/masks/hailer.dm
+++ b/code/modules/clothing/masks/hailer.dm
@@ -38,10 +38,32 @@
aggressiveness = 1 //Borgs are nicecurity!
actions_types = list(/datum/action/item_action/halt)
+/obj/item/clothing/mask/gas/sechailer/slut
+ name = "slutcurity hailer"
+ desc = "A modified Security gas mask designed for softer apprehension, now with a hot pink paintjob!"
+ icon_state = "sluthailer"
+ item_state = "sluthailer"
+ aggressiveness = 0 //can't have your pets being mean!
+ actions_types = list(/datum/action/item_action/halt)
+
+/obj/item/clothing/mask/gas/sechailer/slut/attack_hand(mob/user)
+ if(iscarbon(user))
+ var/mob/living/carbon/C = user
+ if(src == C.wear_mask)
+ to_chat(user, "The mask is fastened tight! You'll need help taking this off!")
+ return
+ ..()
+
/obj/item/clothing/mask/gas/sechailer/screwdriver_act(mob/living/user, obj/item/I)
if(..())
return TRUE
switch(aggressiveness)
+ if(-1)
+ to_chat(user, "You set the restrictor to the top position.")
+ aggressiveness = 0
+ if(0)
+ to_chat(user, "You set the restrictor to the bottom position.")
+ aggressiveness = -1
if(1)
to_chat(user, "You set the restrictor to the middle position.")
aggressiveness = 2
@@ -109,6 +131,10 @@
return
switch(aggressiveness) // checks if the user has unlocked the restricted phrases
+ if(-1)
+ phrase = rand(25,29) // the mask will only play submissive 'slut cop' phrases
+ if(0)
+ phrase = rand(19,24) // the mask will only play dominant 'slut cop' phrases
if(1)
phrase = rand(1,5) // set the upper limit as the phrase above the first 'bad cop' phrase, the mask will only play 'nice' phrases
if(2)
@@ -178,8 +204,44 @@
if(18)
phrase_text = "I am, the LAW!"
phrase_sound = "dredd"
+ if(19) // slut cop - dom
+ phrase_text = "Your ass is mine!"
+ phrase_sound = "ass"
+ if(20) //Thank you Yappy for 19 & 20
+ phrase_text = "Your consent is forfeit."
+ phrase_sound = "consent"
+ if(21)
+ phrase_text = "Fuck my brains out, I dare you."
+ phrase_sound = "brains"
+ if(22)
+ phrase_text = "Hands up, pants down."
+ phrase_sound = "pants"
+ if(23)
+ phrase_text = "On your knees, and say please."
+ phrase_sound = "knees"
+ if(24) //Thank you Nata for 22-24
+ phrase_text = "Empty or not, I'm cumming for you!"
+ phrase_sound = "empty"
+ if(25) // slut cop - sub
+ phrase_text = "Please, I need more!"
+ phrase_sound = "please"
+ if(26)
+ phrase_text = "My body is yours."
+ phrase_sound = "body"
+ if(27)
+ phrase_text = "Am I a good pet?"
+ phrase_sound = "goodpet"
+ if(28)
+ phrase_text = "I am yours..."
+ phrase_sound = "yours"
+ if(29) //Thank you Kraxie for 28 & 29
+ phrase_text = "Master..."
+ phrase_sound = "master"
- usr.audible_message("[usr]'s Compli-o-Nator: [phrase_text]")
+ if(aggressiveness <= 0)
+ usr.audible_message("[usr]'s Compli-o-Nator: [phrase_text]")
+ else
+ usr.audible_message("[usr]'s Compli-o-Nator: [phrase_text]")
playsound(src.loc, "sound/voice/complionator/[phrase_sound].ogg", 100, 0, 4)
cooldown = world.time
cooldown_special = world.time
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 1eb21de3..9f403cdf 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -9,7 +9,15 @@
equip_delay_other = 20
mutantrace_variation = MUTANTRACE_VARIATION
-/obj/item/clothing/mask/muzzle/attack_paw(mob/user)
+/obj/item/clothing/mask/muzzle/attack_hand(mob/user)
+ if(iscarbon(user))
+ var/mob/living/carbon/C = user
+ if(src == C.wear_mask)
+ to_chat(user, "You need help taking this off!")
+ return
+ ..()
+
+/obj/item/clothing/mask/muzzle/attack_paw(mob/user) //apparently this is for monkies only
if(iscarbon(user))
var/mob/living/carbon/C = user
if(src == C.wear_mask)
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 330f69dd..dd3ff919 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -267,6 +267,16 @@
hasprimary = TRUE
primary_color = "#222222"
+/obj/item/clothing/neck/petcollar/locked/security
+ name = "security collar"
+ desc = "For when you need to show everyone who your pet belongs to."
+ icon_state = "seccollar"
+ item_state = "seccollar"
+ hasprimary = FALSE
+ hassecondary = FALSE
+ hastertiary = FALSE
+
+
/obj/item/key/collar
name = "Collar Key"
desc = "A key for a tiny lock on a collar or bag."
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 18bf63b9..70d3c4ac 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -122,6 +122,12 @@
permeability_coefficient = 0.05 //Thick soles, and covers the ankle
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
+/obj/item/clothing/shoes/jackboots/tall
+ name = "tall jackboots"
+ desc = "A pair of knee-high jackboots, complete with heels. All style, all the time."
+ icon_state = "jackboots-tall"
+ item_state = "jackboots-tall"
+
/obj/item/clothing/shoes/jackboots/fast
slowdown = -1
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 07d76fe3..eeff6e0c 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -42,6 +42,20 @@
icon_state = "blueshift"
item_state = "blueshift"
+/obj/item/clothing/suit/armor/vest/stripper
+ name = "stripper armor"
+ desc = "Talk about lightweight."
+ icon_state = "armorstripper"
+ item_state = "armorstripper"
+ armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ dog_fashion = null
+
+/obj/item/clothing/suit/armor/vest/stripper/bikini
+ name = "bikini armor"
+ desc = "How is this even supposed to work? It barely covers anything!"
+ icon_state = "armorstripperalt"
+ item_state = "armorstripperalt"
+
/obj/item/clothing/suit/armor/hos
name = "armored greatcoat"
desc = "A greatcoat enhanced with a special alloy for some extra protection and style for those with a commanding presence."
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 7a2fa674..4a30ff99 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -573,6 +573,12 @@
armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
hoodtype = /obj/item/clothing/head/hooded/winterhood/security
+/obj/item/clothing/suit/hooded/wintercoat/security/pink
+ name = "pink security winter coat"
+ icon_state = "coatsecuritypink"
+ item_state = "coatsecuritypink"
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/security/pink
+
/obj/item/clothing/suit/hooded/wintercoat/security/Initialize()
. = ..()
allowed = GLOB.security_wintercoat_allowed
@@ -580,6 +586,9 @@
/obj/item/clothing/head/hooded/winterhood/security
icon_state = "winterhood_security"
+/obj/item/clothing/head/hooded/winterhood/security/pink
+ icon_state = "winterhood_securitypink"
+
/obj/item/clothing/suit/hooded/wintercoat/hos
name = "head of security's winter coat"
icon_state = "coathos"
@@ -887,4 +896,4 @@
allowed = GLOB.security_wintercoat_allowed
/obj/item/clothing/head/hooded/winterhood/durathread
- icon_state = "winterhood_durathread"
\ No newline at end of file
+ icon_state = "winterhood_durathread"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index ee3daf95..c33eb8b4 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -24,6 +24,12 @@
icon_state = "security"
item_state = "gy_suit"
item_color = "security"
+/obj/item/clothing/under/rank/security/pink
+ name = "pink security jumpsuit"
+ desc = "A tactical security jumpsuit for officers that screw up their laundry."
+ icon_state = "rsecuritypink"
+ item_state = "r_suit"
+ item_color = "rsecuritypink"
/obj/item/clothing/under/rank/security/skirt
name = "security jumpskirt"
desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt."
@@ -33,6 +39,26 @@
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE //you know now that i think of it if you adjust the skirt and the sprite disappears isn't that just like flashing everyone
fitted = FEMALE_UNIFORM_TOP
+/obj/item/clothing/under/rank/security/skirt/slut
+ name = "slutty security jumpskirt"
+ desc = "A \"\"\"tactical\"\"\" security jumpsuit with the legs replaced by a skirt. No matter how you adjust it, it always feels a little too small."
+ icon_state = "secslutskirt"
+ item_state = "secslutskirt"
+ item_color = null //i dont understand what item_color even is, apparently setting it to null means it won't change color in a washing machine?
+ mutantrace_variation = NO_MUTANTRACE_VARIATION //look at the first two comments in vg_under.dm
+/obj/item/clothing/under/rank/security/skirt/slut/pink
+ desc = "A \"\"\"tactical\"\"\" security jumpsuit with the legs replaced by a skirt. No matter how you adjust it, it always feels a little too small. This one seems to have an experimental color scheme."
+ icon_state = "secslutskirtpink"
+ item_state = "secslutskirtpink"
+/obj/item/clothing/under/rank/security/stripper
+ name = "security stripper outfit"
+ desc = "This can't be dress code compliant, can it?"
+ icon_state = "secstripper"
+ item_state = "secstripper"
+ item_color = null
+ can_adjust = FALSE
+ body_parts_covered = CHEST|GROIN
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/under/rank/warden
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 3ea406e8..7b7b1f53 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -783,4 +783,5 @@
item_state = "corset"
body_parts_covered = CHEST|GROIN
can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
\ No newline at end of file
+ fitted = FEMALE_UNIFORM_TOP
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 0afe2d08..2800eb8f 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -274,7 +274,7 @@
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
/mob/living/carbon/is_muzzled()
- return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+ return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)||istype(src.wear_mask, /obj/item/clothing/mask/gas/sechailer/slut)) //i sure do love snowflake code
/mob/living/carbon/hallucinating()
if(hallucination)
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index d95f4eeb..2a79d48b 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -522,6 +522,16 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
+/datum/design/implant_slave
+ name = "Slave Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implant_slave"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500)
+ build_path = /obj/item/implantcase/slave
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
+
//Cybernetic organs
/datum/design/cybernetic_liver
@@ -949,4 +959,4 @@
construction_time = 40
build_path = /obj/item/hypospray/mkii/disposable
category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
\ No newline at end of file
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 843244c5..e61e92e7 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -518,7 +518,7 @@
display_name = "Subdermal Implants"
description = "Electronic implants buried beneath the skin."
prereq_ids = list("biotech", "datatheory")
- design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking", "locator", "c38_trac")
+ design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking", "implant_slave", "locator", "c38_trac")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index b3b21fe3..c9e174ef 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -16,7 +16,16 @@
/obj/item/secbat = 5)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,
/obj/item/storage/fancy/donut_box = 2,
- /obj/item/ssword_kit = 1)
+ /obj/item/ssword_kit = 1,
+ /obj/item/clothing/suit/armor/vest/stripper = 5,
+ /obj/item/clothing/suit/armor/vest/stripper/bikini = 5,
+ /obj/item/clothing/neck/petcollar/locked/security = 5,
+ /obj/item/electropack/shockcollar/security = 5,
+ /obj/item/storage/belt/slut = 5,
+ /obj/item/clothing/mask/gas/sechailer/slut = 5,
+ /obj/item/bdsm_whip/ridingcrop = 3,
+ /obj/structure/bed/secbed = 3,
+ /obj/item/dildo/flared/gigantic = 1)
premium = list(/obj/item/coin/antagtoken = 1,
/obj/item/clothing/head/helmet/blueshirt = 1,
/obj/item/clothing/suit/armor/vest/blueshirt = 1,
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 83607cf7..e8f94efc 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -21,7 +21,15 @@
/obj/item/clothing/under/pants/khaki = 5)
premium = list(/obj/item/clothing/under/rank/security/navyblue = 5,
/obj/item/clothing/suit/security/officer = 5,
- /obj/item/clothing/head/beret/sec/navyofficer = 5)
+ /obj/item/clothing/head/beret/sec/navyofficer = 5,
+ /obj/item/clothing/under/rank/security/pink = 5,
+ /obj/item/clothing/suit/hooded/wintercoat/security/pink = 5,
+ /obj/item/clothing/under/rank/security/skirt/slut = 5,
+ /obj/item/clothing/under/rank/security/skirt/slut/pink = 5,
+ /obj/item/clothing/under/rank/security/stripper = 5,
+ /obj/item/clothing/shoes/jackboots/tall = 5,
+ /obj/item/clothing/head/beret/sec/bitch = 5,
+ /obj/item/clothing/gloves/latexsleeves/security = 5)
refill_canister = /obj/item/vending_refill/wardrobe/sec_wardrobe
/obj/item/vending_refill/wardrobe/sec_wardrobe
diff --git a/hyperstation/code/obj/kinkyclothes.dm b/hyperstation/code/obj/kinkyclothes.dm
index 032e3313..9c6c2e5f 100644
--- a/hyperstation/code/obj/kinkyclothes.dm
+++ b/hyperstation/code/obj/kinkyclothes.dm
@@ -7,6 +7,12 @@
alternate_worn_icon = 'hyperstation/icons/mobs/gloves.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
+/obj/item/clothing/gloves/latexsleeves/security
+ name = "security sleeves"
+ desc = "A pair of latex sleeves, with a band of red above the elbows denoting that the wearer is part of the security team."
+ icon_state = "latexsec"
+ item_state = "latexsec"
+
/obj/item/clothing/head/dominatrixcap
name = "dominatrix cap"
desc = "A sign of authority, over the body."
@@ -23,4 +29,4 @@
item_state = "highheels"
icon = 'hyperstation/icons/obj/clothing/shoes.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/feet.dmi'
- mutantrace_variation = NO_MUTANTRACE_VARIATION
\ No newline at end of file
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
diff --git a/hyperstation/icons/mobs/gloves.dmi b/hyperstation/icons/mobs/gloves.dmi
index 39e9b9b2..b453a69d 100644
Binary files a/hyperstation/icons/mobs/gloves.dmi and b/hyperstation/icons/mobs/gloves.dmi differ
diff --git a/hyperstation/icons/obj/clothing/gloves.dmi b/hyperstation/icons/obj/clothing/gloves.dmi
index 3f3f8f0a..652a7a56 100644
Binary files a/hyperstation/icons/obj/clothing/gloves.dmi and b/hyperstation/icons/obj/clothing/gloves.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index ad4ffaef..8e98eade 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi
index 835b21a9..9b4198ac 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/feet_digi.dmi b/icons/mob/feet_digi.dmi
index 3b99c2df..7b4070f4 100644
Binary files a/icons/mob/feet_digi.dmi and b/icons/mob/feet_digi.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 1dbbd727..18daf77a 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 2a649811..30ac12e2 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/neck.dmi b/icons/mob/neck.dmi
index 2e832ddb..cf0d15b9 100644
Binary files a/icons/mob/neck.dmi and b/icons/mob/neck.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index d37ceb0e..0eaab2c5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/suit_digi.dmi b/icons/mob/suit_digi.dmi
index a3c0405f..3eb360a5 100644
Binary files a/icons/mob/suit_digi.dmi and b/icons/mob/suit_digi.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 5f94b15a..25d3ea8e 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 121d2220..8d8cd646 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index f3750013..cabf557b 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 2478d882..178fed62 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi
index 0bdaa36e..83506180 100644
Binary files a/icons/obj/clothing/neck.dmi and b/icons/obj/clothing/neck.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index ce2eefae..87395f34 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index fd795c48..0384d098 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index e740aa1e..05b7a555 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index ddb9ed63..5caa3e04 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 647722b1..e7fdd874 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm
index 9d0757e2..fe5fcc0e 100644
--- a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm
+++ b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm
@@ -81,3 +81,9 @@
user << browse(dat, "window=radio")
onclose(user, "radio")
return
+
+/obj/item/electropack/shockcollar/security
+ name = "security shock collar"
+ desc = "A reinforced security collar. It has two electrodes that press against the neck, for disobedient pets."
+ icon_state = "shockseccollar"
+ item_state = "shockseccollar"
diff --git a/modular_citadel/code/modules/arousal/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm
index 4b0a7ad9..db7f1217 100644
--- a/modular_citadel/code/modules/arousal/toys/dildos.dm
+++ b/modular_citadel/code/modules/arousal/toys/dildos.dm
@@ -111,7 +111,7 @@
obj/item/dildo/human
dildo_shape = "human"
name = "human dildo"
- attack_verb = list("penetrated", "slapped", "inseminated")
+ attack_verb = list("penetrated", "slapped", "inseminated")
obj/item/dildo/plain
dildo_shape = "plain"
@@ -128,6 +128,12 @@ obj/item/dildo/flared/huge
desc = "THIS THING IS HUGE!"
dildo_size = 4
+obj/item/dildo/flared/gigantic
+ name = "bitch breaker"
+ desc = "You can barely carry this thing! Meant for... \"advanced\" interrogation techniques."
+ dildo_size = 5
+ attack_verb = list("penetrated", "slapped", "gaped", "prolapsed", "inseminated", "destroyed", "broke", "demolished", "whacked")
+
obj/item/dildo/custom
name = "customizable dildo"
desc = "Thanks to significant advances in synthetic nanomaterials, this dildo is capable of taking on many different forms to fit the user's preferences! Pricy!"
@@ -162,3 +168,13 @@ obj/item/dildo/custom
user.adjust_eye_damage(15)
return MANUAL_SUICIDE
+/obj/item/dildo/flared/gigantic/suicide_act(mob/living/user)
+ if(do_after(user,45,target=src))
+ user.visible_message("[user] tears-up and gags as they try to deepthroat the [src]! WHY WOULD THEY DO THAT? It looks like [user.p_theyre()] trying to commit suicide!!")
+ playsound(loc, 'sound/weapons/gagging.ogg', 50, 2, -1)
+ user.Stun(400)
+ user.adjust_blurriness(24)
+ user.adjust_eye_damage(20)
+ user.adjustOxyLoss(15)
+ return MANUAL_SUICIDE
+
diff --git a/modular_citadel/code/modules/client/loadout/_security.dm b/modular_citadel/code/modules/client/loadout/_security.dm
index 7a49b1f0..be54c276 100644
--- a/modular_citadel/code/modules/client/loadout/_security.dm
+++ b/modular_citadel/code/modules/client/loadout/_security.dm
@@ -68,4 +68,32 @@
name = "Security Hud"
category = SLOT_GLASSES
path = /obj/item/clothing/glasses/hud/security
- restricted_roles = list("Security Officer", "Warden", "Head of Security")
\ No newline at end of file
+ restricted_roles = list("Security Officer", "Warden", "Head of Security")
+
+/datum/gear/pinksec
+ name = "Pink Security Jumpsuit"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/rank/security/pink
+ cost = 1
+ restricted_roles = list("Security Officer","Warden","Head of Security")
+
+/datum/gear/pinksecskirt
+ name = "Pink Security Jumpskirt"
+ category = SLOT_W_UNIFORM
+ path = /obj/item/clothing/under/rank/security/skirt/slut/pink
+ cost = 1
+ restricted_roles = list("Security Officer","Warden","Head of Security")
+
+/datum/gear/secwintercoat
+ name = "Security Winter Coat"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/hooded/wintercoat/security
+ cost = 1
+ restricted_roles = list("Security Officer","Warden","Head of Security")
+
+/datum/gear/pinksecwintercoat
+ name = "Pink Security Winter Coat"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/hooded/wintercoat/security/pink
+ cost = 1
+ restricted_roles = list("Security Officer","Warden","Head of Security")
diff --git a/modular_citadel/code/modules/client/loadout/shoes.dm b/modular_citadel/code/modules/client/loadout/shoes.dm
index 9bf9e39b..662d36d0 100644
--- a/modular_citadel/code/modules/client/loadout/shoes.dm
+++ b/modular_citadel/code/modules/client/loadout/shoes.dm
@@ -23,6 +23,11 @@
category = SLOT_SHOES
path = /obj/item/clothing/shoes/jackboots/toeless
+/datum/gear/jackboots/tall
+ name = "tall jackboots"
+ category = SLOT_SHOES
+ path = /obj/item/clothing/shoes/jackboots/tall
+
/datum/gear/winterboots
name = "Winter boots"
category = SLOT_SHOES
@@ -86,4 +91,4 @@
datum/gear/highheels
name = "High Heels"
category = SLOT_SHOES
- path= /obj/item/clothing/shoes/highheels
\ No newline at end of file
+ path= /obj/item/clothing/shoes/highheels
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
index 023507fc..0a881a72 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -422,4 +422,4 @@
name = "Corset"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/corset
- cost = 1
\ No newline at end of file
+ cost = 1
diff --git a/modular_citadel/icons/mob/citadel/neck.dmi b/modular_citadel/icons/mob/citadel/neck.dmi
index 488623b3..a6427fd5 100644
Binary files a/modular_citadel/icons/mob/citadel/neck.dmi and b/modular_citadel/icons/mob/citadel/neck.dmi differ
diff --git a/modular_citadel/icons/mob/digishoes.dmi b/modular_citadel/icons/mob/digishoes.dmi
index 52314a63..3e757157 100644
Binary files a/modular_citadel/icons/mob/digishoes.dmi and b/modular_citadel/icons/mob/digishoes.dmi differ
diff --git a/modular_citadel/icons/mob/muzzled_mask.dmi b/modular_citadel/icons/mob/muzzled_mask.dmi
index eb51e97e..cb12318f 100644
Binary files a/modular_citadel/icons/mob/muzzled_mask.dmi and b/modular_citadel/icons/mob/muzzled_mask.dmi differ
diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/modular_citadel/icons/mob/suit_digi.dmi
index eeda8c37..84d8ec6a 100644
Binary files a/modular_citadel/icons/mob/suit_digi.dmi and b/modular_citadel/icons/mob/suit_digi.dmi differ
diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi
index 208ea85d..fd3c3cd9 100644
Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ
diff --git a/modular_citadel/icons/obj/clothing/cit_neck.dmi b/modular_citadel/icons/obj/clothing/cit_neck.dmi
index abccd4a1..40031792 100644
Binary files a/modular_citadel/icons/obj/clothing/cit_neck.dmi and b/modular_citadel/icons/obj/clothing/cit_neck.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/dildo.dmi b/modular_citadel/icons/obj/genitals/dildo.dmi
index c626846b..d383298b 100644
Binary files a/modular_citadel/icons/obj/genitals/dildo.dmi and b/modular_citadel/icons/obj/genitals/dildo.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 2f07e471..8e89617c 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -922,6 +922,7 @@
#include "code\game\objects\items\implants\implant_krav_maga.dm"
#include "code\game\objects\items\implants\implant_mindshield.dm"
#include "code\game\objects\items\implants\implant_misc.dm"
+#include "code\game\objects\items\implants\implant_slave.dm"
#include "code\game\objects\items\implants\implant_spell.dm"
#include "code\game\objects\items\implants\implant_stealth.dm"
#include "code\game\objects\items\implants\implant_storage.dm"