Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions code/datums/uplink_item.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1148,14 +1148,29 @@ var/list/discounted_items_of_the_round = list()
/datum/uplink_item/jobspecific/clown_mime/invisible_spray
name = "Can of Invisible Spray"
desc = "Spray something to render it invisible for five minutes! Can only be used once. Permanence not guaranteed when exposed to water, may not render all parts invisible, especially for humans."
item = /obj/item/weapon/invisible_spray
item = /obj/item/weapon/syndie_spray/invisible_spray
cost = 6
jobs_excluded = list("Clown", "Mime")

/datum/uplink_item/jobspecific/clown_mime/silent_spray
name = "Can of Silencing Spray"
desc = "Spray something to render it silent for five minutes! Can only be used once. Permanence not guaranteed when exposed to water."
item = /obj/item/weapon/syndie_spray/silent_spray
cost = 6
jobs_excluded = list("Clown", "Mime")

/datum/uplink_item/jobspecific/clown_mime/invisible_spray/permanent
name = "Can of Permanent Invisible Spray"
desc = "Spray something to render it permanently invisible! Can only be used once. Permanence not guaranteed when exposed to water, may not render all parts invisible, especially for humans."
item = /obj/item/weapon/invisible_spray/permanent
item = /obj/item/weapon/syndie_spray/invisible_spray/permanent
cost = 4
jobs_excluded = list()
jobs_exclusive = list("Clown", "Mime")

/datum/uplink_item/jobspecific/clown_mime/silent_spray/permanent
name = "Can of Permanent Silencing Spray"
desc = "Spray something to render it permanently silent! Can only be used once. Permanence not guaranteed when exposed to water."
item = /obj/item/weapon/syndie_spray/silent_spray/permanent
cost = 4
jobs_excluded = list()
jobs_exclusive = list("Clown", "Mime")
Expand Down
1 change: 1 addition & 0 deletions code/game/atoms.dm
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ var/global/list/ghdel_profiling = list()

var/arcanetampered = 0 //A looot of things can be


var/image/moody_light
var/list/moody_lights

Expand Down
11 changes: 11 additions & 0 deletions code/game/atoms_movable.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@

var/atom/movable/border_dummy/border_dummy //Used for border objects. The old Uncross() method fails miserably with pixel movement or large hitboxes.

var/silence_sprayed = FALSE //sprayed by silencing spray

/atom/movable/New()
. = ..()
if((flags & HEAR) && !ismob(src))
Expand Down Expand Up @@ -1350,3 +1352,12 @@
change_dir(new_dir)
sleep(1)
change_dir(prev_dir)

/atom/movable/proc/make_silent(var/duration)
silence_sprayed = TRUE
if(duration > 0)
spawn(duration)
silence_sprayed = FALSE

/atom/movable/proc/remove_silence()
silence_sprayed = FALSE
90 changes: 73 additions & 17 deletions code/game/objects/items/weapons/cosmetics.dm
Original file line number Diff line number Diff line change
Expand Up @@ -418,20 +418,21 @@
..()
H.reagents.add_reagent(TOXIN,1)

/obj/item/weapon/invisible_spray
name = "can of invisible spray"
desc = "A can of... invisibility? The label reads: \"Wears off after five minutes.\""
/obj/item/weapon/syndie_spray
name = "syndicate spray"
desc = "A can of... nothing?"
icon = 'icons/obj/items.dmi'
icon_state = "invisible_spray"
flags = FPRINT
w_class = W_CLASS_SMALL
var/permanent = 0
var/invisible_time = 5 MINUTES
var/effect_time = 5 MINUTES
var/sprays_left = 1
var/effect_adjective = ""
var/static/list/prohibited_objects = list( //For fun removal
)

/obj/item/weapon/invisible_spray/examine(var/mob/user)
/obj/item/weapon/syndie_spray/examine(var/mob/user)
..()
if(loc != user)
return
Expand All @@ -440,17 +441,16 @@
else
to_chat(user, "<span class='notice'>The can feels empty.</span>")


/obj/item/weapon/invisible_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
/obj/item/weapon/syndie_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
if (!proximity_flag)
return 0
if(!istype(target))
return
if(!sprays_left)
to_chat(user, "\The [src] is empty.")
return
if(target.invisibility || target.alpha <= 1)
to_chat(user, "\The [target] is already invisible!")
if(effect_active(target))
to_chat(user, "\The [target] is already [effect_adjective]!")
return
if(is_type_in_list(target,prohibited_objects))
to_chat(user, "<span class='notice'>For some reason, you don't think that would work.</span>")
Expand All @@ -461,35 +461,91 @@
to_chat(user, "\The [src] is empty.")
return
if(permanent)
invisible_time = 0
effect_time = 0
var/mob/M = target
if(M == user)
to_chat(user, "You spray yourself with \the [src].")
user.make_invisible(INVISIBLESPRAY, invisible_time, FALSE, 1)
apply_spray_effect(user, effect_time)
else if (ismob(M))
to_chat(user, "You spray [M] with \the [src].")
M.make_invisible(INVISIBLESPRAY, invisible_time, FALSE, 1)
apply_spray_effect(M, effect_time)
var/obj/O = target
if(isobj(O))
if(locate(O) in get_contents_in_object(user))
O.make_invisible(INVISIBLESPRAY, invisible_time, 1)
apply_spray_effect(O, effect_time)
else
O.make_invisible(INVISIBLESPRAY, invisible_time, 1)
apply_spray_effect(O, effect_time)
to_chat(user, "You spray \the [O] with \the [src].")

playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
sprays_left--
return 1

/obj/item/weapon/syndie_spray/proc/effect_active(atom/movable/target)
return 0

/obj/item/weapon/syndie_spray/proc/apply_spray_effect(atom/movable/target,var/duration)
return 1

/obj/item/weapon/syndie_spray/invisible_spray
name = "can of invisible spray"
desc = "A can of... invisibility? The label reads: \"Wears off after five minutes.\""
icon_state = "invisible_spray"
effect_adjective = "invisible"

/obj/item/weapon/syndie_spray/invisible_spray/effect_active(atom/movable/target)
if(target.invisibility || target.alpha <= 1)
return 1

/obj/item/weapon/syndie_spray/invisible_spray/apply_spray_effect(atom/movable/target, duration)
if(ismob(target))
var/mob/M = target
M.make_invisible(INVISIBLESPRAY, duration, FALSE, 1)
return 1
else if(isobj(target))
var/obj/O = target
O.make_invisible(INVISIBLESPRAY, duration, FALSE, 1)
return 1

/obj/item/weapon/syndie_spray/invisible_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
if(!..())
return
if(istype(target, /obj/machinery/power/supermatter))
return 0
if(istype(target, /obj/machinery/singularity))
animate(target, color = grayscale, time = 6 SECONDS)
return 0
return 1

/obj/item/weapon/invisible_spray/permanent
/obj/item/weapon/syndie_spray/invisible_spray/permanent
desc = "A can of... invisibility?"
permanent = 1

/obj/item/weapon/syndie_spray/silent_spray
name = "can of silencing spray"
desc = "A can of... silence? The label reads: \"Wears off after five minutes.\""
icon_state = "silent_spray"
effect_adjective = "silent"

/obj/item/weapon/syndie_spray/silent_spray/effect_active(atom/movable/target)
if(target.silence_sprayed)
return 1

/obj/item/weapon/syndie_spray/silent_spray/apply_spray_effect(atom/movable/target, duration)
target.make_silent(duration)
return 1

/obj/item/weapon/syndie_spray/silent_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
if(!..())
return
if(istype(target, /obj/machinery/power/supermatter))
return 0
if(istype(target, /obj/machinery/singularity))
animate(target, color = grayscale, time = 6 SECONDS)
return 0

/obj/item/weapon/syndie_spray/silent_spray/permanent
desc = "A can of... silence?"
permanent = 1

/obj/item/weapon/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
Expand Down
3 changes: 2 additions & 1 deletion code/game/objects/items/weapons/storage/uplink_kits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
new /obj/item/weapon/pen/paralysis(src)
new /obj/item/device/chameleon(src)
new /obj/item/weapon/soap/syndie(src)
new /obj/item/weapon/syndie_spray/silent_spray(src)

if("Screwed")//6?+6?+10+4=26
new /obj/effect/spawner/newbomb/timer(src)
Expand Down Expand Up @@ -175,7 +176,7 @@
new /obj/item/weapon/spellbook/oneuse/mutate/highlander(src)

if("Clown") //4 + 4 + 6 + 14 + 6 + ? = 34?
new /obj/item/weapon/invisible_spray/permanent(src)
new /obj/item/weapon/syndie_spray/invisible_spray/permanent(src)
new /obj/item/weapon/glue(src)
new /obj/item/weapon/glue(src)
new /obj/item/weapon/gun/hookshot/whip/windup_box/clownbox(src)
Expand Down
4 changes: 3 additions & 1 deletion code/game/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ var/global/lastDecTalkUse = 0
return

/atom/movable/proc/can_speak()
if(silence_sprayed)
return
return 1

/atom/movable/proc/send_speech(var/datum/speech/speech, var/range=7, var/bubble_type)
Expand Down Expand Up @@ -378,4 +380,4 @@ var/global/resethearers = 0

if(turf)
for(var/mob/virtualhearer/VH in hearers(radio.canhear_range, turf))
. |= VH.attached
. |= VH.attached
4 changes: 4 additions & 0 deletions code/game/sound.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ var/list/trayhit_sound = list('sound/items/trayhit1.ogg', 'sound/items/trayhit2.
extrarange = 0
if(!vol) //don't do that
return
if(istype(source,/atom/movable))
var/atom/movable/AM = source
if(AM.silence_sprayed) //shhhh
return

if(turf_source)
vol *= turf_source.volume_mult
Expand Down
4 changes: 4 additions & 0 deletions code/modules/reagents/reagents/reagents_basic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -263,11 +263,13 @@
var/mob/living/carbon/C = M
var/datum/disease2/effect/E = C.has_active_symptom(/datum/disease2/effect/thick_skin)
C.make_visible(INVISIBLESPRAY,FALSE)
M.remove_silence()
if(E)
E.multiplier = max(E.multiplier - rand(1,3), 1)
to_chat(C, "<span class='notice'>The water quenches your dry skin.</span>")
else
M.make_visible(INVISIBLESPRAY)
M.remove_silence()
if(isliving(M))
var/mob/living/L = M
L.ExtinguishMob()
Expand Down Expand Up @@ -325,6 +327,8 @@
if(O.invisibility)
O.make_visible(INVISIBLESPRAY)

O.remove_silence()

O.clean_act(CLEANLINESS_WATER)//removes glue and extinguishes fire

if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
Expand Down
Binary file modified icons/obj/items.dmi
Binary file not shown.
2 changes: 1 addition & 1 deletion maps/RandomZLevels/hive.dm
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
/obj/item/weapon/gun/stickybomb,
/obj/item/weapon/gun/projectile/rocketlauncher/nikita,
/obj/item/weapon/cloakingcloak/hive,
/obj/item/weapon/invisible_spray,
/obj/item/weapon/syndie_spray/invisible_spray,
/obj/item/clothing/gloves/powerfist,
/obj/item/clothing/glasses/hud/thermal/eyepatch
)
Expand Down
2 changes: 1 addition & 1 deletion maps/RandomZLevels/hive.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -1077,7 +1077,7 @@
/turf/unsimulated/floor/evil,
/area/awaymission/hive)
"ep" = (
/obj/item/weapon/invisible_spray,
/obj/item/weapon/syndie_spray/invisible_spray,
/turf/unsimulated/floor/evil/breathing,
/area/awaymission/hive)
"eq" = (
Expand Down