[MIRROR] Shibari! (#11716)
Co-authored-by: SatinIsle <98125273+SatinIsle@users.noreply.github.com> Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com>
@@ -182,7 +182,8 @@
|
|||||||
/obj/item/handcuffs/legcuffs/fuzzy,
|
/obj/item/handcuffs/legcuffs/fuzzy,
|
||||||
/obj/item/melee/fluff/holochain/mass,
|
/obj/item/melee/fluff/holochain/mass,
|
||||||
/obj/item/material/twohanded/riding_crop,
|
/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
|
containertype = /obj/structure/closet/crate
|
||||||
containername = "Restraints crate"
|
containername = "Restraints crate"
|
||||||
|
|||||||
@@ -172,7 +172,7 @@
|
|||||||
if (!ishuman(target)) return
|
if (!ishuman(target)) return
|
||||||
var/mob/living/carbon/human/H = target
|
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)
|
if (src.amount > 2)
|
||||||
var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc)
|
var/obj/effect/spresent/present = new /obj/effect/spresent (H.loc)
|
||||||
src.amount -= 2
|
src.amount -= 2
|
||||||
|
|||||||
@@ -125,6 +125,10 @@ var/last_chew = 0
|
|||||||
if (H.zone_sel.selecting != O_MOUTH) return
|
if (H.zone_sel.selecting != O_MOUTH) return
|
||||||
if (H.wear_mask) 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/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)]
|
var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)]
|
||||||
if (!O) return
|
if (!O) return
|
||||||
|
|||||||
@@ -118,7 +118,8 @@ something, make sure it's not in one of the other lists.*/
|
|||||||
prob(2);/obj/item/cracker,
|
prob(2);/obj/item/cracker,
|
||||||
prob(5);/obj/random/mega_nukies,
|
prob(5);/obj/random/mega_nukies,
|
||||||
prob(1);/obj/random/potion_ingredient/plus,
|
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 */
|
/* VOREStation Edit End */
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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_shrink,
|
||||||
prob(10);/obj/item/reagent_containers/food/drinks/cans/nukie_mega_grow
|
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
|
||||||
|
)
|
||||||
|
|||||||
84
code/modules/clothing/suits/shibari.dm
Normal file
@@ -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
|
||||||
@@ -1609,7 +1609,8 @@
|
|||||||
/obj/item/clothing/under/reverse_bunnytop_maid = 3,
|
/obj/item/clothing/under/reverse_bunnytop_maid = 3,
|
||||||
/obj/item/clothing/head/rabbitears = 3,
|
/obj/item/clothing/head/rabbitears = 3,
|
||||||
/obj/item/clothing/accessory/bunny_tail = 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,
|
prices = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
|
||||||
/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
|
/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
|
||||||
/obj/item/clothing/suit/chickensuit = 200,
|
/obj/item/clothing/suit/chickensuit = 200,
|
||||||
@@ -1694,7 +1695,8 @@
|
|||||||
/obj/item/clothing/under/reverse_bunnytop_maid = 50,
|
/obj/item/clothing/under/reverse_bunnytop_maid = 50,
|
||||||
/obj/item/clothing/head/rabbitears = 25,
|
/obj/item/clothing/head/rabbitears = 25,
|
||||||
/obj/item/clothing/accessory/bunny_tail = 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,
|
premium = list(/obj/item/clothing/suit/imperium_monk = 3,
|
||||||
/obj/item/clothing/suit/barding/agatha = 2,
|
/obj/item/clothing/suit/barding/agatha = 2,
|
||||||
/obj/item/clothing/suit/barding/alt_agatha = 2,
|
/obj/item/clothing/suit/barding/alt_agatha = 2,
|
||||||
|
|||||||
@@ -269,6 +269,10 @@
|
|||||||
return 1
|
return 1
|
||||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||||
return 1
|
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
|
return 0
|
||||||
|
|
||||||
/mob/living/carbon/human/var/co2overloadtime = null
|
/mob/living/carbon/human/var/co2overloadtime = null
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/mob/living/carbon/human/resist_restraints()
|
/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 escape_straight_jacket()
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
@@ -14,10 +14,16 @@
|
|||||||
break_straight_jacket()
|
break_straight_jacket()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
var/breakouttime
|
||||||
var/mob/living/carbon/human/H = src
|
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
|
var/attack_type = RESIST_ATTACK_DEFAULT
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 282 KiB |
|
Before Width: | Height: | Size: 671 KiB After Width: | Height: | Size: 796 KiB |
|
Before Width: | Height: | Size: 338 KiB After Width: | Height: | Size: 351 KiB |
|
Before Width: | Height: | Size: 702 B After Width: | Height: | Size: 2.7 KiB |
@@ -2599,6 +2599,7 @@
|
|||||||
#include "code\modules\clothing\suits\miscellaneous.dm"
|
#include "code\modules\clothing\suits\miscellaneous.dm"
|
||||||
#include "code\modules\clothing\suits\miscellaneous_vr.dm"
|
#include "code\modules\clothing\suits\miscellaneous_vr.dm"
|
||||||
#include "code\modules\clothing\suits\neosuits.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.dm"
|
||||||
#include "code\modules\clothing\suits\solgov_vr.dm"
|
#include "code\modules\clothing\suits\solgov_vr.dm"
|
||||||
#include "code\modules\clothing\suits\storage.dm"
|
#include "code\modules\clothing\suits\storage.dm"
|
||||||
|
|||||||