[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/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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
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/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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
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_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"
|
||||
|
||||