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