From 75c9deecde82e18681e7ae62d2b62c7fa27a0001 Mon Sep 17 00:00:00 2001 From: Luc <89928798+lewcc@users.noreply.github.com> Date: Thu, 22 Jun 2023 12:52:51 -0700 Subject: [PATCH] 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 --- code/game/atoms.dm | 2 +- code/game/objects/items/devices/megaphone.dm | 82 +++++++++++++------ sound/items/megaphone.ogg | Bin 0 -> 9353 bytes 3 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 sound/items/megaphone.ogg diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f8b9af86ea4..b7147a80ab8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -519,7 +519,7 @@ /atom/proc/unemag() return -/atom/proc/cmag_act() +/atom/proc/cmag_act(mob/user) return /atom/proc/uncmag() diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index e6eed89274e..d4b7fe1f700 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -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("[user] is uttering [user.p_their()] last words into [src]! It looks like [user.p_theyre()] trying to commit suicide!") + on_cooldown = FALSE + user.emote("scream") + say_msg(user, "AAAAAAAAAAAARGHHHHH") + return OXYLOSS + +/obj/item/megaphone/examine(mob/user) + . = ..() + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + . += "Yellow ooze seems to be seeping from the speaker..." + +/obj/item/megaphone/attack_self(mob/living/user) if(check_mute(user.ckey, MUTE_IC)) to_chat(src, "You cannot speak in IC (muted).") return @@ -34,8 +52,8 @@ return if(HAS_TRAIT(H, TRAIT_COMIC_SANS)) span = "sans" - if(spamcheck) - to_chat(user, "\The [src] needs to recharge!") + if(on_cooldown) + to_chat(user, "[src] needs to recharge!") 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, "*BZZZZzzzzzt*") - else - if(span) - message = "[message]" - 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("[user.GetVoice()] [user.GetAltName()] broadcasts, \"[message]\"", 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("[user.GetVoice()] [user.GetAltName()] broadcasts, \"[message]\"", hearing_distance = 14) log_say(message, user) for(var/obj/O in oview(14, get_turf(src))) - O.hear_talk(user, message_to_multilingual("[message]")) + O.hear_talk(user, message_to_multilingual("[message]")) 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, "You overload \the [src]'s voice synthesizer.") - 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, "You drip some yellow ooze into [src]'s voice synthesizer, gunking it up.") + 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, "You go to short out [src], but it's covered in yellow ooze! You don't want to gunk up your emag!") + return + to_chat(user, "You short out [src]'s dampener circuits.") + emagged = TRUE + span = "reallybig userdanger" // really obvious, but also really loud + diff --git a/sound/items/megaphone.ogg b/sound/items/megaphone.ogg new file mode 100644 index 0000000000000000000000000000000000000000..31d7a8d1ad968a7ac94b00fb87ac67408f4b0e25 GIT binary patch literal 9353 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 literal 0 HcmV?d00001