Skip to content

Commit fcaa424

Browse files
authored
Silencing Spray (#36867)
* Silencing Spray * the supermatter incident * fixes
1 parent 04b2cab commit fcaa424

File tree

11 files changed

+117
-23
lines changed

11 files changed

+117
-23
lines changed

code/datums/uplink_item.dm

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,14 +1154,29 @@ var/list/discounted_items_of_the_round = list()
11541154
/datum/uplink_item/jobspecific/clown_mime/invisible_spray
11551155
name = "Can of Invisible Spray"
11561156
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."
1157-
item = /obj/item/weapon/invisible_spray
1157+
item = /obj/item/weapon/syndie_spray/invisible_spray
1158+
cost = 6
1159+
jobs_excluded = list("Clown", "Mime")
1160+
1161+
/datum/uplink_item/jobspecific/clown_mime/silent_spray
1162+
name = "Can of Silencing Spray"
1163+
desc = "Spray something to render it silent for five minutes! Can only be used once. Permanence not guaranteed when exposed to water."
1164+
item = /obj/item/weapon/syndie_spray/silent_spray
11581165
cost = 6
11591166
jobs_excluded = list("Clown", "Mime")
11601167

11611168
/datum/uplink_item/jobspecific/clown_mime/invisible_spray/permanent
11621169
name = "Can of Permanent Invisible Spray"
11631170
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."
1164-
item = /obj/item/weapon/invisible_spray/permanent
1171+
item = /obj/item/weapon/syndie_spray/invisible_spray/permanent
1172+
cost = 4
1173+
jobs_excluded = list()
1174+
jobs_exclusive = list("Clown", "Mime")
1175+
1176+
/datum/uplink_item/jobspecific/clown_mime/silent_spray/permanent
1177+
name = "Can of Permanent Silencing Spray"
1178+
desc = "Spray something to render it permanently silent! Can only be used once. Permanence not guaranteed when exposed to water."
1179+
item = /obj/item/weapon/syndie_spray/silent_spray/permanent
11651180
cost = 4
11661181
jobs_excluded = list()
11671182
jobs_exclusive = list("Clown", "Mime")

code/game/atoms.dm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var/global/list/ghdel_profiling = list()
5858

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

61+
6162
var/image/moody_light
6263
var/list/moody_lights
6364

code/game/atoms_movable.dm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959

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

62+
var/silence_sprayed = FALSE //sprayed by silencing spray
63+
6264
/atom/movable/New()
6365
. = ..()
6466
if((flags & HEAR) && !ismob(src))
@@ -1350,3 +1352,12 @@
13501352
change_dir(new_dir)
13511353
sleep(1)
13521354
change_dir(prev_dir)
1355+
1356+
/atom/movable/proc/make_silent(var/duration)
1357+
silence_sprayed = TRUE
1358+
if(duration > 0)
1359+
spawn(duration)
1360+
silence_sprayed = FALSE
1361+
1362+
/atom/movable/proc/remove_silence()
1363+
silence_sprayed = FALSE

code/game/objects/items/weapons/cosmetics.dm

Lines changed: 73 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -418,20 +418,21 @@
418418
..()
419419
H.reagents.add_reagent(TOXIN,1)
420420

421-
/obj/item/weapon/invisible_spray
422-
name = "can of invisible spray"
423-
desc = "A can of... invisibility? The label reads: \"Wears off after five minutes.\""
421+
/obj/item/weapon/syndie_spray
422+
name = "syndicate spray"
423+
desc = "A can of... nothing?"
424424
icon = 'icons/obj/items.dmi'
425425
icon_state = "invisible_spray"
426426
flags = FPRINT
427427
w_class = W_CLASS_SMALL
428428
var/permanent = 0
429-
var/invisible_time = 5 MINUTES
429+
var/effect_time = 5 MINUTES
430430
var/sprays_left = 1
431+
var/effect_adjective = ""
431432
var/static/list/prohibited_objects = list( //For fun removal
432433
)
433434

434-
/obj/item/weapon/invisible_spray/examine(var/mob/user)
435+
/obj/item/weapon/syndie_spray/examine(var/mob/user)
435436
..()
436437
if(loc != user)
437438
return
@@ -440,17 +441,16 @@
440441
else
441442
to_chat(user, "<span class='notice'>The can feels empty.</span>")
442443

443-
444-
/obj/item/weapon/invisible_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
444+
/obj/item/weapon/syndie_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
445445
if (!proximity_flag)
446446
return 0
447447
if(!istype(target))
448448
return
449449
if(!sprays_left)
450450
to_chat(user, "\The [src] is empty.")
451451
return
452-
if(target.invisibility || target.alpha <= 1)
453-
to_chat(user, "\The [target] is already invisible!")
452+
if(effect_active(target))
453+
to_chat(user, "\The [target] is already [effect_adjective]!")
454454
return
455455
if(is_type_in_list(target,prohibited_objects))
456456
to_chat(user, "<span class='notice'>For some reason, you don't think that would work.</span>")
@@ -461,35 +461,91 @@
461461
to_chat(user, "\The [src] is empty.")
462462
return
463463
if(permanent)
464-
invisible_time = 0
464+
effect_time = 0
465465
var/mob/M = target
466466
if(M == user)
467467
to_chat(user, "You spray yourself with \the [src].")
468-
user.make_invisible(INVISIBLESPRAY, invisible_time, FALSE, 1)
468+
apply_spray_effect(user, effect_time)
469469
else if (ismob(M))
470470
to_chat(user, "You spray [M] with \the [src].")
471-
M.make_invisible(INVISIBLESPRAY, invisible_time, FALSE, 1)
471+
apply_spray_effect(M, effect_time)
472472
var/obj/O = target
473473
if(isobj(O))
474474
if(locate(O) in get_contents_in_object(user))
475-
O.make_invisible(INVISIBLESPRAY, invisible_time, 1)
475+
apply_spray_effect(O, effect_time)
476476
else
477-
O.make_invisible(INVISIBLESPRAY, invisible_time, 1)
477+
apply_spray_effect(O, effect_time)
478478
to_chat(user, "You spray \the [O] with \the [src].")
479-
480479
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
481480
sprays_left--
481+
return 1
482+
483+
/obj/item/weapon/syndie_spray/proc/effect_active(atom/movable/target)
484+
return 0
485+
486+
/obj/item/weapon/syndie_spray/proc/apply_spray_effect(atom/movable/target,var/duration)
487+
return 1
488+
489+
/obj/item/weapon/syndie_spray/invisible_spray
490+
name = "can of invisible spray"
491+
desc = "A can of... invisibility? The label reads: \"Wears off after five minutes.\""
492+
icon_state = "invisible_spray"
493+
effect_adjective = "invisible"
494+
495+
/obj/item/weapon/syndie_spray/invisible_spray/effect_active(atom/movable/target)
496+
if(target.invisibility || target.alpha <= 1)
497+
return 1
498+
499+
/obj/item/weapon/syndie_spray/invisible_spray/apply_spray_effect(atom/movable/target, duration)
500+
if(ismob(target))
501+
var/mob/M = target
502+
M.make_invisible(INVISIBLESPRAY, duration, FALSE, 1)
503+
return 1
504+
else if(isobj(target))
505+
var/obj/O = target
506+
O.make_invisible(INVISIBLESPRAY, duration, FALSE, 1)
507+
return 1
508+
509+
/obj/item/weapon/syndie_spray/invisible_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
510+
if(!..())
511+
return
482512
if(istype(target, /obj/machinery/power/supermatter))
483513
return 0
484514
if(istype(target, /obj/machinery/singularity))
485515
animate(target, color = grayscale, time = 6 SECONDS)
486516
return 0
487-
return 1
488517

489-
/obj/item/weapon/invisible_spray/permanent
518+
/obj/item/weapon/syndie_spray/invisible_spray/permanent
490519
desc = "A can of... invisibility?"
491520
permanent = 1
492521

522+
/obj/item/weapon/syndie_spray/silent_spray
523+
name = "can of silencing spray"
524+
desc = "A can of... silence? The label reads: \"Wears off after five minutes.\""
525+
icon_state = "silent_spray"
526+
effect_adjective = "silent"
527+
528+
/obj/item/weapon/syndie_spray/silent_spray/effect_active(atom/movable/target)
529+
if(target.silence_sprayed)
530+
return 1
531+
532+
/obj/item/weapon/syndie_spray/silent_spray/apply_spray_effect(atom/movable/target, duration)
533+
target.make_silent(duration)
534+
return 1
535+
536+
/obj/item/weapon/syndie_spray/silent_spray/preattack(atom/movable/target, mob/user, proximity_flag, click_parameters)
537+
if(!..())
538+
return
539+
if(istype(target, /obj/machinery/power/supermatter))
540+
return 0
541+
if(istype(target, /obj/machinery/singularity))
542+
animate(target, color = grayscale, time = 6 SECONDS)
543+
return 0
544+
545+
/obj/item/weapon/syndie_spray/silent_spray/permanent
546+
desc = "A can of... silence?"
547+
permanent = 1
548+
493549
/obj/item/weapon/razor
494550
name = "electric razor"
495551
desc = "The latest and greatest power razor born from the science of shaving."

code/game/objects/items/weapons/storage/uplink_kits.dm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
new /obj/item/weapon/pen/paralysis(src)
2222
new /obj/item/device/chameleon(src)
2323
new /obj/item/weapon/soap/syndie(src)
24+
new /obj/item/weapon/syndie_spray/silent_spray(src)
2425

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

177178
if("Clown") //4 + 4 + 6 + 14 + 6 + ? = 34?
178-
new /obj/item/weapon/invisible_spray/permanent(src)
179+
new /obj/item/weapon/syndie_spray/invisible_spray/permanent(src)
179180
new /obj/item/weapon/glue(src)
180181
new /obj/item/weapon/glue(src)
181182
new /obj/item/weapon/gun/hookshot/whip/windup_box/clownbox(src)

code/game/say.dm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ var/global/lastDecTalkUse = 0
3939
return
4040

4141
/atom/movable/proc/can_speak()
42+
if(silence_sprayed)
43+
return
4244
return 1
4345

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

379381
if(turf)
380382
for(var/mob/virtualhearer/VH in hearers(radio.canhear_range, turf))
381-
. |= VH.attached
383+
. |= VH.attached

code/game/sound.dm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ var/list/trayhit_sound = list('sound/items/trayhit1.ogg', 'sound/items/trayhit2.
6363
extrarange = 0
6464
if(!vol) //don't do that
6565
return
66+
if(istype(source,/atom/movable))
67+
var/atom/movable/AM = source
68+
if(AM.silence_sprayed) //shhhh
69+
return
6670

6771
if(turf_source)
6872
vol *= turf_source.volume_mult

code/modules/reagents/reagents/reagents_basic.dm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,13 @@
256256
var/mob/living/carbon/C = M
257257
var/datum/disease2/effect/E = C.has_active_symptom(/datum/disease2/effect/thick_skin)
258258
C.make_visible(INVISIBLESPRAY,FALSE)
259+
M.remove_silence()
259260
if(E)
260261
E.multiplier = max(E.multiplier - rand(1,3), 1)
261262
to_chat(C, "<span class='notice'>The water quenches your dry skin.</span>")
262263
else
263264
M.make_visible(INVISIBLESPRAY)
265+
M.remove_silence()
264266
if(isliving(M))
265267
var/mob/living/L = M
266268
L.ExtinguishMob()
@@ -318,6 +320,8 @@
318320
if(O.invisibility)
319321
O.make_visible(INVISIBLESPRAY)
320322

323+
O.remove_silence()
324+
321325
O.clean_act(CLEANLINESS_WATER)//removes glue and extinguishes fire
322326

323327
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))

icons/obj/items.dmi

685 Bytes
Binary file not shown.

maps/RandomZLevels/hive.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
/obj/item/weapon/gun/stickybomb,
5959
/obj/item/weapon/gun/projectile/rocketlauncher/nikita,
6060
/obj/item/weapon/cloakingcloak/hive,
61-
/obj/item/weapon/invisible_spray,
61+
/obj/item/weapon/syndie_spray/invisible_spray,
6262
/obj/item/clothing/gloves/powerfist,
6363
/obj/item/clothing/glasses/hud/thermal/eyepatch
6464
)

0 commit comments

Comments
 (0)