Makes the megaphone cmaggable, reworks it a little bit. (#20940)

* Implement it

* Re-adds the emag action

* bump cooldown for emag

* shout shout let it all out

* emag feedback, cleans up a bit

* better message, too

* Remove uncmag, since the trait removal is handled where it's called

* Sirryan review

* sean review
This commit is contained in:
Luc
2023-06-22 20:52:51 +01:00
committed by GitHub
parent 94c16f5c80
commit 75c9deecde
3 changed files with 56 additions and 28 deletions
+55 -27
View File
@@ -7,12 +7,30 @@
w_class = WEIGHT_CLASS_SMALL
flags = CONDUCT
var/spamcheck = FALSE
var/insults = 0
var/span = ""
/// How long to wait when using it as normal
var/normal_cooldown = 2 SECONDS
/// How long to wait between insults
var/modified_cooldown = 20 SECONDS
/// If it's on cooldown.
var/on_cooldown = FALSE
/// Span to use by default for the message.
var/span = "reallybig"
/// List of insults to be sent when the megaphone is cmagged.
var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!")
/obj/item/megaphone/attack_self(mob/living/user as mob)
/obj/item/megaphone/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is uttering [user.p_their()] last words into [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
on_cooldown = FALSE
user.emote("scream")
say_msg(user, "AAAAAAAAAAAARGHHHHH")
return OXYLOSS
/obj/item/megaphone/examine(mob/user)
. = ..()
if(HAS_TRAIT(src, TRAIT_CMAGGED))
. += "<span class='warning'>Yellow ooze seems to be seeping from the speaker...</span>"
/obj/item/megaphone/attack_self(mob/living/user)
if(check_mute(user.ckey, MUTE_IC))
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
return
@@ -34,8 +52,8 @@
return
if(HAS_TRAIT(H, TRAIT_COMIC_SANS))
span = "sans"
if(spamcheck)
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
if(on_cooldown)
to_chat(user, "<span class='warning'>[src] needs to recharge!</span>")
return
var/message = input(user, "Shout a message:", "Megaphone") as text|null
@@ -49,33 +67,43 @@
user.handle_speech_problems(message_pieces)
message = multilingual_to_message(message_pieces)
if((loc == user && !user.incapacitated()))
if(emagged)
if(insults)
saymsg(user, pick(insultmsg))
insults--
else
to_chat(user, "<span class='warning'>*BZZZZzzzzzt*</span>")
else
if(span)
message = "<span class='[span]'>[message]</span>"
saymsg(user, message)
if(HAS_TRAIT(src, TRAIT_CMAGGED))
message = pick(insultmsg)
say_msg(user, message)
spamcheck = TRUE
spawn(20)
spamcheck = FALSE
on_cooldown = TRUE
addtimer(VARSET_CALLBACK(src, on_cooldown, FALSE), (HAS_TRAIT(src, TRAIT_CMAGGED) || emagged) ? modified_cooldown : normal_cooldown)
/obj/item/megaphone/proc/saymsg(mob/living/user as mob, message)
audible_message("<span class='game say'><span class='name'>[user.GetVoice()]</span> [user.GetAltName()] broadcasts, <span class='reallybig'>\"[message]\"</span></span>", hearing_distance = 14)
/obj/item/megaphone/proc/say_msg(mob/living/user, message)
if(HAS_TRAIT(src, TRAIT_CMAGGED))
playsound(src, "sound/items/bikehorn.ogg", 50, TRUE)
else
playsound(src, "sound/items/megaphone.ogg", 100, FALSE, 5)
audible_message("<span class='game say'><span class='name'>[user.GetVoice()]</span> [user.GetAltName()] broadcasts, <span class='[span]'>\"[message]\"</span></span>", hearing_distance = 14)
log_say(message, user)
for(var/obj/O in oview(14, get_turf(src)))
O.hear_talk(user, message_to_multilingual("<span class='reallybig'>[message]</span>"))
O.hear_talk(user, message_to_multilingual("<span class='[span]'>[message]</span>"))
for(var/mob/M in get_mobs_in_view(7, src))
if((M.client?.prefs.toggles2 & PREFTOGGLE_2_RUNECHAT) && M.can_hear())
M.create_chat_message(user, message, FALSE, "big")
/obj/item/megaphone/emag_act(user as mob)
if(!emagged)
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
emagged = TRUE
insults = rand(1, 3)//to prevent dickflooding
/obj/item/megaphone/cmag_act(mob/user)
if(HAS_TRAIT(src, TRAIT_CMAGGED))
return
if(user)
to_chat(user, "<span class='warning'>You drip some yellow ooze into [src]'s voice synthesizer, gunking it up.</span>")
playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
ADD_TRAIT(src, TRAIT_CMAGGED, CLOWN_EMAG)
/obj/item/megaphone/emag_act(mob/user)
if(emagged)
return
if(HAS_TRAIT(src, TRAIT_CMAGGED)) // one at a time
to_chat(user, "<span class='warning'>You go to short out [src], but it's covered in yellow ooze! You don't want to gunk up your emag!</span>")
return
to_chat(user, "<span class='danger'>You short out [src]'s dampener circuits.</span>")
emagged = TRUE
span = "reallybig userdanger" // really obvious, but also really loud