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 00000000000..31d7a8d1ad9 Binary files /dev/null and b/sound/items/megaphone.ogg differ