diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index 1f93f58f20..d87746b4b1 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -182,7 +182,8 @@ /obj/item/handcuffs/legcuffs/fuzzy, /obj/item/melee/fluff/holochain/mass, /obj/item/material/twohanded/riding_crop, - /obj/item/clothing/under/fluff/latexmaid + /obj/item/clothing/under/fluff/latexmaid, + /obj/item/clothing/suit/shibari/pink ) containertype = /obj/structure/closet/crate containername = "Restraints crate" diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 298ecbae5d..0308bded58 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -172,7 +172,7 @@ if (!ishuman(target)) return var/mob/living/carbon/human/H = target - if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket) || H.stat) + if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket) || istype(H.wear_suit, /obj/item/clothing/suit/shibari) || H.stat) if (src.amount > 2) var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc) src.amount -= 2 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 482e479f74..52001eb43b 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -125,6 +125,10 @@ var/last_chew = 0 if (H.zone_sel.selecting != O_MOUTH) return if (H.wear_mask) return if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return + if (istype(H.wear_suit, /obj/item/clothing/suit/shibari)) + var/obj/item/clothing/suit/shibari/s = wear_suit + if(s.rope_mode == "Arms" || s.rope_mode == "Arms and Legs") + return var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)] if (!O) return diff --git a/code/game/objects/random/maintenance.dm b/code/game/objects/random/maintenance.dm index 4393735f9b..c4769d9c99 100644 --- a/code/game/objects/random/maintenance.dm +++ b/code/game/objects/random/maintenance.dm @@ -118,7 +118,8 @@ something, make sure it's not in one of the other lists.*/ prob(2);/obj/item/cracker, prob(5);/obj/random/mega_nukies, prob(1);/obj/random/potion_ingredient/plus, - prob(2);/obj/random/translator + prob(2);/obj/random/translator, + prob(1);/obj/random/shibari /* VOREStation Edit End */ ) diff --git a/code/game/objects/random/misc_vr.dm b/code/game/objects/random/misc_vr.dm index 5be44703b2..65cfa9c33d 100644 --- a/code/game/objects/random/misc_vr.dm +++ b/code/game/objects/random/misc_vr.dm @@ -419,3 +419,20 @@ prob(10);/obj/item/reagent_containers/food/drinks/cans/nukie_mega_shrink, prob(10);/obj/item/reagent_containers/food/drinks/cans/nukie_mega_grow ) + +/obj/random/shibari + name = "random shibari" + desc = "A random shibari." + icon = 'icons/inventory/suit/item.dmi' + icon_state = "shibari_None" + spawn_nothing_percentage = 0 + +/obj/random/shibari/item_to_spawn() + return pick(prob(5);/obj/item/clothing/suit/shibari, + prob(5);/obj/item/clothing/suit/shibari/red, + prob(5);/obj/item/clothing/suit/shibari/blue, + prob(5);/obj/item/clothing/suit/shibari/green, + prob(5);/obj/item/clothing/suit/shibari/yellow, + prob(5);/obj/item/clothing/suit/shibari/black, + prob(5);/obj/item/clothing/suit/shibari/pink + ) diff --git a/code/modules/clothing/suits/shibari.dm b/code/modules/clothing/suits/shibari.dm new file mode 100644 index 0000000000..08786a5e2b --- /dev/null +++ b/code/modules/clothing/suits/shibari.dm @@ -0,0 +1,84 @@ +// Behaves similar to straight jackets but the effects can be varied easily. +#define SHIBARI_NONE "None" +#define SHIBARI_ARMS "Arms" +#define SHIBARI_LEGS "Legs" +#define SHIBARI_BOTH "Arms and Legs" + +/obj/item/clothing/suit/shibari + name = "shibari bindings" + desc = "A set of ropes that designed to be tied around another person to restrain them." + icon_state = "shibari_None" + + var/resist_time = 1 MINUTE + + var/rope_mode = SHIBARI_NONE + + +/obj/item/clothing/suit/shibari/attack_hand(mob/living/user as mob) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(src == H.wear_suit) + to_chat(H, span_notice("You need help taking this off!")) + return + ..() + +/obj/item/clothing/suit/shibari/attack_self(mob/living/user) + rope_mode = tgui_input_list(user, "Which limbs would you like to restrain with the bindings?", "Shibari", list(SHIBARI_NONE, SHIBARI_ARMS, SHIBARI_LEGS, SHIBARI_BOTH)) + if(!rope_mode) + rope_mode = SHIBARI_NONE + if(rope_mode == SHIBARI_BOTH) + icon_state = "shibari_Both" + else + icon_state = "shibari_[rope_mode]" + +/obj/item/clothing/suit/shibari/equipped(var/mob/living/user,var/slot) + . = ..() + if((rope_mode == SHIBARI_ARMS) || (rope_mode == SHIBARI_BOTH)) + if(slot == slot_wear_suit) + if(user.get_left_hand() != src) + user.drop_l_hand() + if(user.get_right_hand() != src) + user.drop_r_hand() + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.drop_from_inventory(H.handcuffed) + if((rope_mode == SHIBARI_LEGS) || (rope_mode == SHIBARI_BOTH)) + if(slot == slot_wear_suit) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.drop_from_inventory(H.legcuffed) + H.legcuffed = src + if(user.m_intent != I_WALK) + user.m_intent = I_WALK + if(user.hud_used && user.hud_used.move_intent) + user.hud_used.move_intent.icon_state = "walking" + +/obj/item/clothing/suit/shibari/dropped(var/mob/living/user) + ..() + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.legcuffed == src) + H.legcuffed = FALSE + +/obj/item/clothing/suit/shibari/red + color = "#ff0000" + +/obj/item/clothing/suit/shibari/blue + color = "#006aff" + +/obj/item/clothing/suit/shibari/green + color = "#00ff0d" + +/obj/item/clothing/suit/shibari/yellow + color = "#f6ff00" + +/obj/item/clothing/suit/shibari/black + color = "#000000" + +/obj/item/clothing/suit/shibari/pink + color = "#ff00bf" + +#undef SHIBARI_NONE +#undef SHIBARI_ARMS +#undef SHIBARI_LEGS +#undef SHIBARI_BOTH diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index 8ce4c30aba..8ef74d82ad 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -1609,7 +1609,8 @@ /obj/item/clothing/under/reverse_bunnytop_maid = 3, /obj/item/clothing/head/rabbitears = 3, /obj/item/clothing/accessory/bunny_tail = 3, - /obj/item/clothing/suit/shrine_maiden = 3) + /obj/item/clothing/suit/shrine_maiden = 3, + /obj/item/clothing/suit/shibari = 5) prices = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 200, /obj/item/clothing/suit/storage/hooded/costume/carp = 200, /obj/item/clothing/suit/chickensuit = 200, @@ -1694,7 +1695,8 @@ /obj/item/clothing/under/reverse_bunnytop_maid = 50, /obj/item/clothing/head/rabbitears = 25, /obj/item/clothing/accessory/bunny_tail = 25, - /obj/item/clothing/suit/shrine_maiden = 200) + /obj/item/clothing/suit/shrine_maiden = 200, + /obj/item/clothing/suit/shibari = 50) premium = list(/obj/item/clothing/suit/imperium_monk = 3, /obj/item/clothing/suit/barding/agatha = 2, /obj/item/clothing/suit/barding/alt_agatha = 2, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1083054f89..7f8efde117 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -269,6 +269,10 @@ return 1 if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) return 1 + if (istype(wear_suit, /obj/item/clothing/suit/shibari)) + var/obj/item/clothing/suit/shibari/s = wear_suit + if(s.rope_mode == "Arms" || s.rope_mode == "Arms and Legs") + return 1 return 0 /mob/living/carbon/human/var/co2overloadtime = null diff --git a/code/modules/mob/living/carbon/human/human_resist.dm b/code/modules/mob/living/carbon/human/human_resist.dm index db860f7939..a54f75e753 100644 --- a/code/modules/mob/living/carbon/human/human_resist.dm +++ b/code/modules/mob/living/carbon/human/human_resist.dm @@ -1,5 +1,5 @@ /mob/living/carbon/human/resist_restraints() - if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + if(wear_suit && (istype(wear_suit, /obj/item/clothing/suit/straight_jacket) || istype(wear_suit, /obj/item/clothing/suit/shibari))) return escape_straight_jacket() return ..() @@ -14,10 +14,16 @@ break_straight_jacket() return + var/breakouttime var/mob/living/carbon/human/H = src - var/obj/item/clothing/suit/straight_jacket/SJ = H.wear_suit + if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + var/obj/item/clothing/suit/straight_jacket/S = H.wear_suit + breakouttime = S.resist_time + if(istype(wear_suit, /obj/item/clothing/suit/shibari)) + var/obj/item/clothing/suit/shibari/S = H.wear_suit + breakouttime = S.resist_time - var/breakouttime = SJ.resist_time // Configurable per-jacket! + var/obj/item/clothing/suit/SJ = wear_suit var/attack_type = RESIST_ATTACK_DEFAULT diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi index 954162361e..6fa3388435 100644 Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index 1a1ae3fe76..e4dd7b9c06 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/inventory/suit/mob_digi.dmi b/icons/inventory/suit/mob_digi.dmi index b6f707a58a..f0d72e9792 100644 Binary files a/icons/inventory/suit/mob_digi.dmi and b/icons/inventory/suit/mob_digi.dmi differ diff --git a/icons/mob/human_races/r_digi.dmi b/icons/mob/human_races/r_digi.dmi index 4a38e7155e..a6fa035b41 100644 Binary files a/icons/mob/human_races/r_digi.dmi and b/icons/mob/human_races/r_digi.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 8e6f15fca4..fdf9ebc6b7 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2599,6 +2599,7 @@ #include "code\modules\clothing\suits\miscellaneous.dm" #include "code\modules\clothing\suits\miscellaneous_vr.dm" #include "code\modules\clothing\suits\neosuits.dm" +#include "code\modules\clothing\suits\shibari.dm" #include "code\modules\clothing\suits\solgov.dm" #include "code\modules\clothing\suits\solgov_vr.dm" #include "code\modules\clothing\suits\storage.dm"