Merge pull request #4385 from FlattestGuitar/tapegag

Tape gags for all
This commit is contained in:
TheDZD
2016-05-09 19:12:53 -04:00
18 changed files with 164 additions and 30 deletions
+1
View File
@@ -66,6 +66,7 @@
#define HAS_MARKINGS 256
#define TAIL_WAGGING 512
#define NO_EYES 1024
#define HAS_FUR 2048
//Species Diet Flags
#define DIET_CARN 1
+41 -18
View File
@@ -7,62 +7,85 @@
w_class = 1.0
desc = "This is rubbish."
raisins
/obj/item/trash/raisins
name = "4no raisins"
icon_state= "4no_raisins"
candy
/obj/item/trash/candy
name = "Candy"
icon_state= "candy"
cheesie
/obj/item/trash/cheesie
name = "Cheesie honkers"
icon_state = "cheesie_honkers"
chips
/obj/item/trash/chips
name = "Chips"
icon_state = "chips"
popcorn
/obj/item/trash/popcorn
name = "Popcorn"
icon_state = "popcorn"
sosjerky
/obj/item/trash/sosjerky
name = "Scaredy's Private Reserve Beef Jerky"
icon_state = "sosjerky"
syndi_cakes
/obj/item/trash/syndi_cakes
name = "Syndi cakes"
icon_state = "syndi_cakes"
waffles
/obj/item/trash/waffles
name = "Waffles"
icon_state = "waffles"
plate
/obj/item/trash/plate
name = "Plate"
icon_state = "plate"
snack_bowl
/obj/item/trash/snack_bowl
name = "Snack bowl"
icon_state = "snack_bowl"
pistachios
/obj/item/trash/pistachios
name = "Pistachios pack"
icon_state = "pistachios_pack"
semki
/obj/item/trash/semki
name = "Semki pack"
icon_state = "semki_pack"
tray
/obj/item/trash/tray
name = "Tray"
icon_state = "tray"
candle
/obj/item/trash/candle
name = "candle"
icon = 'icons/obj/candle.dmi'
icon_state = "candle4"
liquidfood
/obj/item/trash/liquidfood
name = "\improper \"LiquidFood\" ration"
icon_state = "liquidfood"
can
/obj/item/trash/can
name = "crushed can"
icon_state = "cola"
gum
/obj/item/trash/gum
name = "chewed gum"
desc = "NOT free candy."
icon_state = "gum"
tastybread
/obj/item/trash/tastybread
name = "bread tube"
icon_state = "tastybread"
/obj/item/trash/tapetrash
name = "old duct tape"
icon_state = "tape"
desc = "Not sticky anymore."
throw_range = 1
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
return
+30 -1
View File
@@ -12,6 +12,35 @@
update_icon()
/obj/item/stack/tape_roll/attack(mob/living/carbon/human/M as mob, mob/living/user as mob)
if(M.wear_mask)
to_chat(user, "Remove their mask first!")
else if(amount < 2)
to_chat(user, "You'll need more tape for this!")
else if(!M.check_has_mouth())
to_chat(user, "They have no mouth to tape over!")
else
if(M == user)
to_chat(user, "You try to tape your own mouth shut.")
else
to_chat(user, "You try to tape [M]'s mouth shut.")
M.visible_message("<span class='warning'>[user] tries to tape [M]'s mouth closed!</span>")
if(do_after(user, 50, target = M))
if(M == user)
to_chat(user, "You cover your own mouth with a piece of duct tape.")
else
to_chat(user, "You cover [M]'s mouth with a piece of duct tape. That will shut them up!")
M.visible_message("<span class='warning'>[user] tapes [M]'s mouth shut!</span>")
var/obj/item/clothing/mask/muzzle/G = new /obj/item/clothing/mask/muzzle/tapegag
M.equip_to_slot(G, slot_wear_mask)
G.add_fingerprint(user)
amount = amount - 2
if(amount <= 0)
user.unEquip(src, 1)
qdel(src)
/* -- Disabled for now until it has a use --
/obj/item/stack/tape_roll/attack_self(mob/user as mob)
to_chat(user, "You remove a length of tape from [src].")
@@ -110,4 +139,4 @@
if(dir_offset & NORTH)
pixel_y += 32
else if(dir_offset & SOUTH)
pixel_y -= 32
pixel_y -= 32
+31 -1
View File
@@ -7,6 +7,8 @@
w_class = 2
gas_transfer_coefficient = 0.90
put_on_delay = 20
var/resist_time = 0 //deciseconds of how long you need to gnaw to get rid of the gag, 0 to make it impossible to remove
var/mute = 1 // 1 - completely mutes you, 0 - muffles everything you say "MHHPHHMMM!!!"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
@@ -24,6 +26,34 @@
icon_state = "gag"
w_class = 1
/obj/item/clothing/mask/muzzle/tapegag
name = "tape gag"
desc = "MHPMHHH!"
icon_state = "tapegag"
item_state = null
w_class = 1
resist_time = 150
mute = 0
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
)
/obj/item/clothing/mask/muzzle/tapegag/dropped(mob/living/carbon/human/user)
var/atom/movable/R = new /obj/item/trash/tapetrash
if(user.species.bodyflags & HAS_FUR)
R.desc += " Is that...fur?"
var/turf/T = get_turf(src)
R.loc = T
transfer_fingerprints_to(R)
playsound(src,'sound/items/poster_ripped.ogg',40,1)
spawn(0) // Because of how dropping is done, if the muzzle gets deleted now, icons won't properly update and the whole unEquip() proc will break stuff.
qdel(src) // This makes sure it gets deleted AFTER all that has to be done is done.
user.emote("scream")
/obj/item/clothing/mask/surgical
name = "sterile mask"
desc = "A sterile mask designed to help prevent the spread of diseases."
@@ -244,4 +274,4 @@ obj/item/clothing/mask/bandana/purple
name = "black bandana"
icon_state = "bandblack"
item_color = "black"
desc = "It's a black bandana."
desc = "It's a black bandana."
+1 -2
View File
@@ -124,7 +124,6 @@
I.dropped(src)
if(I)
I.layer = initial(I.layer)
return 1
@@ -173,4 +172,4 @@
return l_hand
if(slot_r_hand)
return r_hand
return null
return null
+19
View File
@@ -746,6 +746,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
spintime -= speed
/mob/living/carbon/resist_buckle()
spawn(0)
resist_muzzle()
if(restrained())
changeNext_move(CLICK_CD_BREAKOUT)
last_special = world.time + CLICK_CD_BREAKOUT
@@ -776,6 +778,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/resist_restraints()
spawn(0)
resist_muzzle()
var/obj/item/I = null
if(handcuffed)
I = handcuffed
@@ -786,6 +790,21 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
last_special = world.time + CLICK_CD_BREAKOUT
cuff_resist(I)
/mob/living/carbon/resist_muzzle()
if(!istype(wear_mask, /obj/item/clothing/mask/muzzle))
return
var/obj/item/clothing/mask/muzzle/I = wear_mask
var/time = I.resist_time
if(I.resist_time == 0)//if it's 0, you can't get out of it
to_chat(src, "[I] is too well made, you'll need hands for this one!")
else
visible_message("<span class='warning'>[src] gnaws on [I], trying to remove it!</span>")
to_chat(src, "<span class='notice'>You attempt to remove [I]... (This will take around [time/10] seconds and you need to stand still.)</span>")
if(do_after(src, time, 0, target = src))
visible_message("<span class='warning'>[src] removes [I]!</span>")
to_chat(src, "<span class='notice'>You get rid of [I]!</span>")
unEquip(I)
/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0)
breakouttime = I.breakouttime
@@ -607,4 +607,4 @@
return 0
return 1
return 0 //Unsupported slot
return 0 //Unsupported slot
@@ -104,7 +104,7 @@
flags = HAS_LIPS | CAN_BE_FAT
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
flesh_color = "#AFA59E"
@@ -148,7 +148,7 @@
flags = HAS_LIPS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
flesh_color = "#966464"
@@ -793,4 +793,4 @@
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
H.h_style = ""
spawn(100)
if(H) H.update_hair()
if(H) H.update_hair()
+8 -1
View File
@@ -580,12 +580,19 @@
return
/mob/living/proc/resist_buckle()
spawn(0)
resist_muzzle()
buckled.user_unbuckle_mob(src,src)
/mob/living/proc/resist_muzzle()
return
/mob/living/proc/resist_fire()
return
/mob/living/proc/resist_restraints()
spawn(0)
resist_muzzle()
return
/*//////////////////////
@@ -835,4 +842,4 @@
if(slowed)
tally += 10
return tally
return tally
+11 -3
View File
@@ -166,8 +166,13 @@ proc/get_radio_key_from_channel(var/channel)
verb = say_quote(message, speaking)
if(is_muzzled())
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
return
var/obj/item/clothing/mask/muzzle/G = wear_mask
if(G.mute) //if the mask is supposed to mute you completely or just muffle you
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
return
else
message = muffledspeech(message)
verb = "mumbles"
message = trim_left(message)
@@ -356,7 +361,10 @@ proc/get_radio_key_from_channel(var/channel)
return
if(is_muzzled())
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
if(istype(wear_mask, /obj/item/clothing/mask/muzzle/tapegag)) //just for tape
to_chat(src, "<span class='danger'>Your mouth is taped and you cannot speak!</span>")
else
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
return
var/message_range = 1
+18
View File
@@ -233,6 +233,24 @@ proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 fo
return returntext
proc/muffledspeech(phrase)
phrase = html_decode(phrase)
var/leng=lentext(phrase)
var/counter=lentext(phrase)
var/newphrase=""
var/newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
if(newletter in list(" ", "!", "?", ".", ","))
//do nothing
else if(lowertext(newletter) in list("a", "e", "i", "o", "u", "y"))
newletter = "ph"
else
newletter = "m"
newphrase+="[newletter]"
counter-=1
return newphrase
/proc/shake_camera(mob/M, duration, strength=1)
if(!M || !M.client || M.shakecamera)