diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index ca4b8d8066..fc3c03518b 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -10,44 +10,162 @@ var/insults = 0 var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TERRORIST!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "GLORY TO ALMACH!") -/obj/item/device/megaphone/attack_self(mob/living/user as mob) +/obj/item/device/megaphone/proc/can_broadcast(var/mob/living/user) if (user.client) if(user.client.prefs.muted & MUTE_IC) - src << "You cannot speak in IC (muted)." - return - if(!ishuman(user)) - user << "You don't know how to use this!" - return + to_chat(user, "You cannot speak in IC (muted).") + return 0 + if(!(ishuman(user) || user.isSynthetic())) + to_chat(user, "You don't know how to use this!") + return 0 if(user.silent) - return + return 0 if(spamcheck) - user << "\The [src] needs to recharge!" - return + to_chat(user, "\The [src] needs to recharge!") + return 0 + return 1 - var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text) - if(!message) - return - message = capitalize(message) +/obj/item/device/megaphone/proc/do_broadcast(var/mob/living/user, var/message) if ((src.loc == user && usr.stat == 0)) if(emagged) if(insults) - for(var/mob/O in (viewers(user))) - O.show_message("[user] broadcasts, \"[pick(insultmsg)]\"",2) // 2 stands for hearable message + user.audible_message("[user] broadcasts, \"[pick(insultmsg)]\"") insults-- else - user << "*BZZZZzzzzzt*" + to_chat(user, "*BZZZZzzzzzt*") else - for(var/mob/O in (viewers(user))) - O.show_message("[user] broadcasts, \"[message]\"",2) // 2 stands for hearable message + user.audible_message("[user] broadcasts, \"[message]\"") spamcheck = 1 spawn(20) spamcheck = 0 return +/obj/item/device/megaphone/attack_self(mob/living/user as mob) + if(!can_broadcast(user)) + return + + var/message = sanitize(input(user, "Shout a message?", "Megaphone", null) as text) + if(!message) + return + message = capitalize(message) + + do_broadcast(user, message) + /obj/item/device/megaphone/emag_act(var/remaining_charges, var/mob/user) if(!emagged) - user << "You overload \the [src]'s voice synthesizer." + to_chat(user, "You overload \the [src]'s voice synthesizer.") emagged = 1 - insults = rand(1, 3)//to prevent dickflooding + insults = rand(1, 3)//to prevent caps spam. return 1 + +/obj/item/device/megaphone/super + name = "gigaphone" + desc = "A device used to project your voice. Loudly-er." + icon_state = "gigaphone" + + var/broadcast_font = "verdana" + var/broadcast_size = 3 + var/broadcast_color = "#000000" //Black by default. + var/list/volume_options = list(2, 3, 4) + var/list/font_options = list("times new roman", "times", "verdana", "sans-serif", "serif", "georgia") + var/list/color_options= list("#000000", "#ff0000", "#00ff00", "#0000ff") + + insultmsg = list("HONK?!", "HONK!", "HOOOOOOOONK!", "...!", "HUNK.", "Honk?") + +/obj/item/device/megaphone/super/emag_act(var/remaining_charges, var/mob/user) + ..() + if(emagged) + if(!(11 in volume_options)) + volume_options = list(11) + broadcast_size = 11 + if(!("comic sans ms" in font_options)) + font_options = list("comic sans ms") + broadcast_font = "comic sans ms" + to_chat(user, "\The [src] emits a silly sound.") + if(!("#ff69b4" in color_options)) + color_options = list("#ff69b4") + broadcast_color = "#ff69b4" + if(insults <= 0) + insults = rand(1,3) + to_chat(user, "You re-scramble \the [src]'s voice synthesizer.") + return 1 + +/obj/item/device/megaphone/super/verb/turn_volume_dial(mob/living/user) + set name = "Change Volume" + set desc = "Allows you to change the megaphone's volume." + set category = "Object" + + adjust_volume(user) + +/obj/item/device/megaphone/super/proc/adjust_volume(var/mob/living/user) + var/new_volume = input(user, "Set Volume") as null|anything in volume_options + + if(new_volume && Adjacent(user)) + broadcast_size = new_volume + +/obj/item/device/megaphone/super/verb/change_font(mob/living/user) + set name = "Change... Pronunciation?" + set desc = "Allows you to change the megaphone's font." + set category = "Object" + + adjust_font(user) + +/obj/item/device/megaphone/super/proc/adjust_font(var/mob/living/user) + var/new_font = input(user, "Set Volume") as null|anything in font_options + + if(new_font && Adjacent(user)) + broadcast_font = new_font + +/obj/item/device/megaphone/super/verb/change_color(mob/living/user) + set name = "Change... Tune?" + set desc = "Allows you to change the megaphone's color." + set category = "Object" + + adjust_color(user) + +/obj/item/device/megaphone/super/proc/adjust_color(var/mob/living/user) + var/new_color = input(user, "Set Volume") as null|anything in color_options + + if(new_color && Adjacent(user)) + broadcast_color = new_color + +/obj/item/device/megaphone/super/do_broadcast(var/mob/living/user, var/message) + if ((src.loc == user && usr.stat == 0)) + if(emagged) + if(insults) + user.audible_message("[user] broadcasts, \"[pick(insultmsg)]\"") + if(broadcast_size >= 11) + var/turf/T = get_turf(user) + playsound(T, 'sound/items/AirHorn.ogg', 100, 1) + for(var/mob/living/carbon/M in oviewers(4, T)) + if(M.get_ear_protection() >= 2) + continue + M.sleeping = 0 + M.stuttering += 20 + M.ear_deaf += 30 + M.Weaken(3) + if(prob(30)) + M.Stun(10) + M.Paralyse(4) + else + M.make_jittery(50) + insults-- + else + user.audible_message("*BZZZZzzzzzt*") + if(prob(40) && insults <= 0) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, get_turf(user)) + s.start() + user.visible_message("\The [src] sparks violently!") + spawn(30) + explosion(get_turf(src), -1, -1, 1, 3, adminlog = 1) + qdel(src) + return + else + user.audible_message("[user] broadcasts, \"[message]\"") + + spamcheck = 1 + spawn(20) + spamcheck = 0 + return diff --git a/html/changelogs/Mechoid - Gigaphone.yml b/html/changelogs/Mechoid - Gigaphone.yml new file mode 100644 index 0000000000..4b4822f36f --- /dev/null +++ b/html/changelogs/Mechoid - Gigaphone.yml @@ -0,0 +1,7 @@ + +author: Mechoid + +delete-after: True + +changes: + - rscadd: "Added the Gigaphone. Currently unused in any PoIs or elsewhere." diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 9a8adaeae0..c02abf60c8 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index d2b58c3297..0e16db099e 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index cb78fa2263..1b834792bd 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ