diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 1b28a7b707e..1c12213010c 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -5,30 +5,45 @@ anchored = 1 w_class = 4.0 canhear_range = 2 - flags = CONDUCT | NOBLOODY var/number = 0 var/anyai = 1 + var/circuitry_installed=1 var/mob/living/silicon/ai/ai = list() var/last_tick //used to delay the powercheck + var/buildstage = 0 -/obj/item/device/radio/intercom/New() +/obj/item/device/radio/intercom/universe/New() + tag = "UNIVERSE" + return ..() + +/obj/item/device/radio/intercom/New(turf/loc, var/ndir = 0, var/building = 3) ..() - processing_objects += src + buildstage = building + if(buildstage) + processing_objects.Add(src) + else + pixel_x = (ndir & 3)? 0 : (ndir == 4 ? 28 : -28) + pixel_y = (ndir & 3)? (ndir ==1 ? 28 : -28) : 0 + dir=ndir + b_stat=1 + on = 0 + update_icon() -/obj/item/device/radio/intercom/Del() - processing_objects -= src +/obj/item/device/radio/intercom/Destroy() + processing_objects.Remove(src) ..() /obj/item/device/radio/intercom/attack_ai(mob/user as mob) - src.add_fingerprint(user) + add_hiddenprint(user) + add_fingerprint(user) spawn (0) attack_self(user) - + /obj/item/device/radio/intercom/attack_paw(mob/user as mob) - return src.attack_hand(user) + return attack_hand(user) /obj/item/device/radio/intercom/attack_hand(mob/user as mob) - src.add_fingerprint(user) + add_fingerprint(user) spawn (0) attack_self(user) @@ -41,32 +56,107 @@ return -1 if (!src.listening) return -1 - if(freq in ANTAG_FREQS) + if(freq == SYND_FREQ) if(!(src.syndie)) return -1//Prevents broadcast of messages over devices lacking the encryption return canhear_range -/obj/item/device/radio/intercom/hear_talk(mob/M as mob, msg) - if(!src.anyai && !(M in src.ai)) +/obj/item/device/radio/intercom/hear_talk(message, atom/movable/speaker, message_langs, raw_message, radio_freq) + if(!src.anyai && !(speaker in src.ai)) return ..() +/obj/item/device/radio/intercom/attackby(obj/item/weapon/W as obj, mob/user as mob) + switch(buildstage) + if(3) + if(iswirecutter(W) && b_stat && wires.IsAllCut()) + user << "You cut out the intercoms wiring and disconnect its electronics." + playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) + if(do_after(user, 10)) + new /obj/item/stack/cable_coil(get_turf(src),5) + on = 0 + b_stat = 1 + buildstage = 1 + update_icon() + processing_objects.Remove(src) + return 1 + else return ..() + if(2) + if(isscrewdriver(W)) + playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 10)) + update_icon() + on = 1 + b_stat = 0 + buildstage = 3 + user << "You secure the electronics!" + update_icon() + processing_objects.Add(src) + for(var/i, i<= 5, i++) + wires.UpdateCut(i,1) + return 1 + if(1) + if(iscoil(W)) + var/obj/item/stack/cable_coil/coil = W + if(coil.amount < 5) + user << "You need more cable for this!" + return + if(do_after(user, 10)) + coil.use(5) + user << "You wire \the [src]!" + buildstage = 2 + return 1 + if(iscrowbar(W)) + user << "You begin removing the electronics..." + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 10)) + new /obj/item/weapon/intercom_electronics(get_turf(src)) + user << "The circuitboard pops out!" + buildstage = 0 + return 1 + if(0) + if(istype(W,/obj/item/weapon/intercom_electronics)) + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 10)) + qdel(W) + user << "You insert \the [W] into \the [src]!" + buildstage = 1 + return 1 + if(iswelder(W)) + var/obj/item/weapon/weldingtool/WT=W + playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + if(!WT.remove_fuel(3, user)) + user << "You're out of welding fuel." + return 1 + if(do_after(user, 10)) + user << "You cut the intercom frame from the wall!" + new /obj/item/mounted/frame/intercom(get_turf(src)) + qdel(src) + return 1 + +/obj/item/device/radio/intercom/update_icon() + if(!circuitry_installed) + icon_state="intercom-frame" + return + icon_state = "intercom[!on?"-p":""][b_stat ? "-open":""]" + /obj/item/device/radio/intercom/process() if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) last_tick = world.timeofday - - if(!src.loc) + if(!areaMaster) on = 0 - else - var/area/A = src.loc.loc - if(!A || !isarea(A) || !A.master) - on = 0 - else - on = A.master.powered(EQUIP) // set "on" to the power status + update_icon() + return + on = areaMaster.powered(EQUIP) // set "on" to the power status + update_icon() - if(!on) - icon_state = "intercom-p" - else - icon_state = "intercom" +/obj/item/weapon/intercom_electronics + name = "intercom electronics" + icon = 'icons/obj/doors/door_assembly.dmi' + icon_state = "door_electronics" + desc = "Looks like a circuit. Probably is." + w_class = 2.0 + m_amt = 50 + g_amt = 50 \ No newline at end of file diff --git a/code/game/objects/items/mountable_frames/intercom.dm b/code/game/objects/items/mountable_frames/intercom.dm new file mode 100644 index 00000000000..3b0f95f927a --- /dev/null +++ b/code/game/objects/items/mountable_frames/intercom.dm @@ -0,0 +1,10 @@ +/obj/item/mounted/frame/intercom + name = "Intercom Frame" + desc = "Used for building intercoms" + icon = 'icons/obj/monitors.dmi' + icon_state = "intercom_f" + mount_reqs = list("simfloor", "nospace") + +/obj/item/mounted/frame/intercom/do_build(turf/on_wall, mob/user) + new /obj/item/device/radio/intercom(get_turf(src), get_dir(on_wall, user), 0) + qdel(src) \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 1ee4f4c642c..316731af4cd 100644 --- a/paradise.dme +++ b/paradise.dme @@ -617,6 +617,7 @@ #include "code\game\objects\items\mountable_frames\apc_frame.dm" #include "code\game\objects\items\mountable_frames\fire_alarm.dm" #include "code\game\objects\items\mountable_frames\frames.dm" +#include "code\game\objects\items\mountable_frames\intercom.dm" #include "code\game\objects\items\mountable_frames\lights.dm" #include "code\game\objects\items\mountable_frames\mountables.dm" #include "code\game\objects\items\mountable_frames\newscaster_frame.dm"