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"