[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>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-09-21 15:26:11 -07:00
committed by GitHub
parent 2b7d27d6b8
commit ca150fd5a2
14 changed files with 128 additions and 8 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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 */
)

View File

@@ -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
)

View 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

View File

@@ -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,

View File

@@ -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

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 671 KiB

After

Width:  |  Height:  |  Size: 796 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 KiB

After

Width:  |  Height:  |  Size: 351 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -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"