Adds some special case interactions with the mail counterfitter device (#95180)

## About The Pull Request

Adds some type specific interactions to the mail produced by the GLA-2
mail counterfit device. Currently, it applies `attack_self()` to all
items when armed. The new interactions are, currently:

- Facehuggers jump on your face
- Flashes flash you
- Boxing gloves uppercut you
- Syringes prick you with poison
- Sprays spray you
- Signallers signal
- Monkey cubes/other cubes expand 
- Guns shoot you in the head

There'll be more, probably. Leave your ideas(only good ones though).

## Why It's Good For The Game

First of all, none of these are strenuous from a balance perspective.
The primary use of this device is an instant bomb, and none of these
things are bombs. Easy delineation, I doubt this will become a problem.

As said already, the primary use of this device is a bomb. I've seen it
used for another thing once ever, and while that thing was incredibly
cool, the counterfit device is still a one-trick pony for the most part.
While none of these can compete with the lethality of the bomb, the hope
is that they will collectively help bring variety to an item that feels
built for variety.

## Changelog
🆑

add: Several items have been given special interactions when placed
inside counterfit mail.

/🆑
This commit is contained in:
Leland Kemble
2026-02-25 14:51:55 +13:00
committed by GitHub
parent 725c591224
commit 07138d5445
18 changed files with 140 additions and 18 deletions
+13
View File
@@ -28,6 +28,10 @@
var/cooldown = 0
var/last_trigger = 0 //Last time it was successfully triggered.
/obj/item/assembly/flash/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ITEM_IN_UNWRAPPED_TRAITOR_MAIL, PROC_REF(on_mail_unwrap))
/obj/item/assembly/flash/suicide_act(mob/living/user)
if(burnt_out)
user.visible_message(span_suicide("[user] raises \the [src] up to [user.p_their()] eyes and activates it ... but it's burnt out!"))
@@ -265,6 +269,15 @@
// Attacker lateral to the victim.
return DEVIATION_PARTIAL
/obj/item/assembly/flash/proc/on_mail_unwrap(atom/source, mob/user, obj/item/mail/traitor/letter)
SIGNAL_HANDLER
if(!try_use_flash())
return NONE
to_chat(user, span_danger("As you open [letter], a very bright light shoots out from inside!"))
flash_mob(user)
forceMove(user.loc)
return COMPONENT_TRAITOR_MAIL_HANDLED
/obj/item/assembly/flash/attack(mob/living/target, mob/user)
if(!try_use_flash(user))
return FALSE
+7
View File
@@ -53,6 +53,7 @@
/obj/item/assembly/signaler/Initialize(mapload)
. = ..()
set_frequency(frequency)
RegisterSignal(src, COMSIG_ITEM_IN_UNWRAPPED_TRAITOR_MAIL, PROC_REF(on_mail_unwrap))
/obj/item/assembly/signaler/Destroy()
SSradio.remove_object(src,frequency)
@@ -181,6 +182,12 @@
radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER)
return
/obj/item/assembly/signaler/proc/on_mail_unwrap(atom/source, mob/user, obj/item/mail/traitor/letter)
SIGNAL_HANDLER
to_chat(user, span_danger("As you open [letter], you accidentally press a button on [src]!"))
INVOKE_ASYNC(src, PROC_REF(signal)) // No need to check for cooldown, the cooldown is shorter than the do_after for opening mail
return NONE //don't return handled, we want in hands and open ui
/obj/item/assembly/signaler/cyborg
/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)