Shibari! (#18514)
* Shibari! Added a new scene item, shibari bindings! These by default only cover the torso, but by clicking on them in your hands, they can also be set to bind arms and legs, acting in a similar way to handcuffs. They are worn in the suit slot. They can be found in the costume vendors, maint and the restraints crate from cargo. They have sprites for humanoid mobs and digitigrade legs, but not tesh yet. * Fix mistake Fixes error in previous commit * Update code/game/objects/items/weapons/handcuffs.dm Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com> * Update code/modules/mob/living/carbon/human/human.dm Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com> * Make these defines to prevent copy paste errors --------- 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
|
||||
)
|
||||
|
||||
@@ -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
|
||||
@@ -1515,7 +1515,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,
|
||||
@@ -1600,7 +1601,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 |
@@ -2484,6 +2484,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"
|
||||
|
||||