mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-24 05:07:18 +01:00
requires #6644 Entirely replaces how (most) belts perform insertion checks. This pretty much allows belts to hold most things. Armor vests are next. Trashbags will also use the systems we use on main. Closes #7256 and #7435 --------- Co-authored-by: silicons <silicons@silicons.dev>
177 lines
5.7 KiB
Plaintext
177 lines
5.7 KiB
Plaintext
/obj/item/megaphone
|
|
name = "megaphone"
|
|
desc = "A device used to project your voice. Loudly."
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "megaphone"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
|
|
belt_storage_class = BELT_CLASS_SMALL
|
|
|
|
var/spamcheck = 0
|
|
var/emagged = 0
|
|
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/megaphone/proc/can_broadcast(var/mob/living/user)
|
|
if (user.client)
|
|
if(user.client.prefs.muted & MUTE_IC)
|
|
to_chat(user, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
|
return 0
|
|
if(!(ishuman(user) || user.isSynthetic()))
|
|
to_chat(user, "<span class='warning'>You don't know how to use this!</span>")
|
|
return 0
|
|
if(user.silent)
|
|
return 0
|
|
if(spamcheck)
|
|
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
|
|
return 0
|
|
return 1
|
|
|
|
/obj/item/megaphone/proc/do_broadcast(var/mob/living/user, var/message)
|
|
if ((src.loc == user && usr.stat == 0))
|
|
if(emagged)
|
|
if(insults)
|
|
user.audible_message("<B>[user]</B> broadcasts, <FONT size=3>\"[pick(insultmsg)]\"</FONT>")
|
|
insults--
|
|
else
|
|
to_chat(user, "<span class='warning'>*BZZZZzzzzzt*</span>")
|
|
else
|
|
user.audible_message("<B>[user]</B> broadcasts, <FONT size=3>\"[message]\"</FONT>")
|
|
|
|
spamcheck = 1
|
|
spawn(20)
|
|
spamcheck = 0
|
|
return
|
|
|
|
/obj/item/megaphone/attack_self(mob/user, datum/event_args/actor/actor)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
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/megaphone/emag_act(var/remaining_charges, var/mob/user)
|
|
if(!emagged)
|
|
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
|
emagged = 1
|
|
insults = rand(1, 3)//to prevent caps spam.
|
|
return 1
|
|
|
|
/obj/item/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, 8)
|
|
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/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, "<span class='notice'>\The [src] emits a <font face='comic sans ms' color='#ff69b4'>silly</font> sound.</span>")
|
|
if(!("#ff69b4" in color_options))
|
|
color_options = list("#ff69b4")
|
|
broadcast_color = "#ff69b4"
|
|
if(insults <= 0)
|
|
insults = rand(1,3)
|
|
to_chat(user, "<span class='warning'>You re-scramble \the [src]'s voice synthesizer.</span>")
|
|
return 1
|
|
|
|
/obj/item/megaphone/super/verb/turn_volume_dial()
|
|
set name = "Change Volume"
|
|
set desc = "Allows you to change the megaphone's volume."
|
|
set category = VERB_CATEGORY_OBJECT
|
|
|
|
adjust_volume(usr)
|
|
|
|
/obj/item/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/megaphone/super/verb/change_font()
|
|
set name = "Change... Pronunciation?"
|
|
set desc = "Allows you to change the megaphone's font."
|
|
set category = VERB_CATEGORY_OBJECT
|
|
|
|
adjust_font(usr)
|
|
|
|
/obj/item/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/megaphone/super/verb/change_color()
|
|
set name = "Change... Tune?"
|
|
set desc = "Allows you to change the megaphone's color."
|
|
set category = VERB_CATEGORY_OBJECT
|
|
|
|
adjust_color(usr)
|
|
|
|
/obj/item/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/megaphone/super/do_broadcast(var/mob/living/user, var/message)
|
|
if ((src.loc == user && usr.stat == 0))
|
|
if(emagged)
|
|
if(insults)
|
|
user.audible_message("<B>[user]</B> broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[pick(insultmsg)]\"</FONT>")
|
|
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.set_sleeping(0)
|
|
M.stuttering += 20
|
|
M.ear_deaf += 30
|
|
M.afflict_paralyze(20 * 3)
|
|
if(prob(30))
|
|
M.afflict_stun(20 * 10)
|
|
M.afflict_unconscious(20 * 4)
|
|
else
|
|
M.make_jittery(50)
|
|
insults--
|
|
else
|
|
user.audible_message("<span class='critical'>*BZZZZzzzzzt*</span>")
|
|
if(prob(40) && insults <= 0)
|
|
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
|
s.set_up(2, 1, get_turf(user))
|
|
s.start()
|
|
user.visible_message("<span class='warning'>\The [src] sparks violently!</span>")
|
|
spawn(30)
|
|
explosion(get_turf(src), -1, -1, 1, 3, adminlog = 1)
|
|
qdel(src)
|
|
return
|
|
else
|
|
user.audible_message("<B>[user]</B> broadcasts, <FONT size=[broadcast_size] face='[broadcast_font]' color='[broadcast_color]'>\"[message]\"</FONT>")
|
|
|
|
spamcheck = 1
|
|
spawn(20)
|
|
spamcheck = 0
|
|
return
|