mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user