diff --git a/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm b/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm index 6614272d33..1d7a727232 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm @@ -67,3 +67,7 @@ #define COMSIG_HUMAN_SURGERY_APPLY_MODIFIERS "human_surgery_apply_modifiers" /// From /mob/living/carbon/human/proc/get_flags_cold_protection() #define COMSIG_HUMAN_COLD_PROTECTION_APPLY_MODIFIERS "human_cold_protection_apply_modifiers" + +/// From /mob/living/carbon/human/UnarmedAttack() +#define COMSIG_HUMAN_BEFORE_ATTACK_HAND "human_before_attack_hand" + #define COMPONENT_CANCEL_HUMAN_ATTACK_HAND (1<<0) diff --git a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm index bab6064cfd..b9e89bf441 100644 --- a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm +++ b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm @@ -128,3 +128,7 @@ /// From /obj/item/proc/pickup() : (obj/item/picked_up) #define COMSIG_MOB_PICKUP_ITEM "mob_pickup_item" + +/// From /mob/proc/say_dead(message) +#define COMSIG_DEAD_SPEAK "comsig_dead_speak" + #define COMPONENT_OVERRIDE_DEAD_SPEAK (1<<0) diff --git a/code/__DEFINES/dcs/signals/atom/signals_atom.dm b/code/__DEFINES/dcs/signals/atom/signals_atom.dm index 7431c5593b..01e1533189 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_atom.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_atom.dm @@ -45,3 +45,23 @@ ///When the transform or an atom is varedited through vv topic. #define COMSIG_ATOM_VV_MODIFY_TRANSFORM "atom_vv_modify_transform" + +/// From /mob/living/carbon/human/UnarmedAttack() +#define COMSIG_ATOM_BEFORE_HUMAN_ATTACK_HAND "atom_before_human_attack_hand" + #define COMPONENT_CANCEL_ATTACK_HAND (1<<0) + +/// From /mob/proc/click_adjacent() +#define COMSIG_ATOM_MOB_ATTACKBY "atom_mob_attackby" + #define COMPONENT_CANCEL_ATTACKBY (1<<0) + +/// From /atom/proc/attack_hand() +#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" + +/// From /datum/component/phone/proc/picked_up_call() and /datum/component/phone/proc/post_call_phone() +#define COMSIG_ATOM_PHONE_PICKED_UP "atom_phone_picked_up" +/// From /datum/component/phone/proc/recall_handset() +#define COMSIG_ATOM_PHONE_HUNG_UP "atom_phone_hung_up" +/// From /datum/component/phone/proc/call_phone() +#define COMSIG_ATOM_PHONE_RINGING "atom_phone_ringing" +/// From /datum/component/phone/proc/reset_call() +#define COMSIG_ATOM_PHONE_STOPPED_RINGING "atom_phone_stopped_ringing" diff --git a/code/__DEFINES/dcs/signals/atom/signals_movable.dm b/code/__DEFINES/dcs/signals/atom/signals_movable.dm index ba889d0b52..923c2cc60f 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_movable.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_movable.dm @@ -4,11 +4,15 @@ /// From /atom/movable/proc/launch_towards #define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" #define COMPONENT_CANCEL_THROW (1<<0) + ///from base of atom/movable/Moved(): (/atom, dir, forced) #define COMSIG_MOVABLE_MOVED "movable_moved" /// From /atom/movable/Move(): (atom/NewLoc) #define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move" #define COMPONENT_CANCEL_MOVE (1<<0) +/// From /atom/movable/proc/forceMove(): (atom/NewLoc) +#define COMSIG_MOVABLE_FORCEMOVED "movable_forcemove" + /// From /turf/open/gm/river/Entered(): (turf/open/gm/river/river, covered) #define COMSIG_MOVABLE_ENTERED_RIVER "movable_entered_river" @@ -29,3 +33,4 @@ #define COMSIG_MOVABLE_UPDATE_GLIDE_SIZE "movable_glide_size" #define COMSIG_MOVABLE_TURF_ENTER "movable_turf_enter" + diff --git a/code/__DEFINES/dcs/signals/atom/signals_obj.dm b/code/__DEFINES/dcs/signals/atom/signals_obj.dm index aebd0d09d0..7e4436b3cf 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_obj.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_obj.dm @@ -22,9 +22,6 @@ #define COMSIG_SENTRY_EMPTY_AMMO_ALERT "signal_sentry_empty_ammo" #define COMSIG_SENTRY_DESTROYED_ALERT "signal_sentry_destroyed" -/// from /obj/structure/transmitter/update_icon() -#define COMSIG_TRANSMITTER_UPDATE_ICON "transmitter_update_icon" - #define COMSIG_TENT_COLLAPSING "tent_collapsing" /// from /obj/proc/afterbuckle() diff --git a/code/__DEFINES/dcs/signals/atom/signals_turf.dm b/code/__DEFINES/dcs/signals/atom/signals_turf.dm index 6a0788bcf8..b59e9d60b4 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_turf.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_turf.dm @@ -15,7 +15,7 @@ /// From /turf/closed/wall/resin/attackby(): (obj/item/I, mob/M) #define COMSIG_WALL_RESIN_ATTACKBY "wall_resin_attackby" - #define COMPONENT_CANCEL_ATTACKBY (1<<0) + #define COMPONENT_CANCEL_RESIN_ATTACKBY (1<<0) ///from /turf/closed/wall/proc/place_poster #define COMSIG_POSTER_PLACED "poster_placed" diff --git a/code/__DEFINES/equipment.dm b/code/__DEFINES/equipment.dm index 5f8f27a657..96c0fc3738 100644 --- a/code/__DEFINES/equipment.dm +++ b/code/__DEFINES/equipment.dm @@ -552,7 +552,11 @@ var/global/list/uniform_categories = list( #define PHONE_UPP_SOLDIER "Soldier" #define PHONE_IO "IO" -#define PHONE_DND_FORCED 2 -#define PHONE_DND_ON 1 -#define PHONE_DND_OFF 0 -#define PHONE_DND_FORBIDDEN -1 +#define PHONE_DO_NOT_DISTURB_FORCED 2 +#define PHONE_DO_NOT_DISTURB_ON 1 +#define PHONE_DO_NOT_DISTURB_OFF 0 +#define PHONE_DO_NOT_DISTURB_FORBIDDEN -1 + +#define PHONE_ON_BASE_UNIT_ICON_STATE "[initial(icon_state)]" +#define PHONE_OFF_BASE_UNIT_ICON_STATE "[initial(icon_state)]_ear" +#define PHONE_RINGING_ICON_STATE "[initial(icon_state)]_ring" diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 21f3fcafd9..fe0c9e7b72 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -149,6 +149,9 @@ if(W.attack_speed && !src.contains(A)) //Not being worn or carried in the user's inventory somewhere, including internal storages. next_move += W.attack_speed + if(SEND_SIGNAL(A, COMSIG_ATOM_MOB_ATTACKBY, W, src) & COMPONENT_CANCEL_ATTACKBY) + return + if(!A.attackby(W, src, mods) && A && !QDELETED(A)) // in case the attackby slept if(!W) diff --git a/code/_onclick/human.dm b/code/_onclick/human.dm index cb71e27f9d..0bfba04070 100644 --- a/code/_onclick/human.dm +++ b/code/_onclick/human.dm @@ -80,12 +80,16 @@ to_chat(src, SPAN_NOTICE("You try to move your [temp.display_name], but cannot!")) return + if(SEND_SIGNAL(A, COMSIG_ATOM_BEFORE_HUMAN_ATTACK_HAND, src, click_parameters) & COMPONENT_CANCEL_HUMAN_ATTACK_HAND) + return + A.attack_hand(src, click_parameters) /datum/proc/handle_click(mob/living/carbon/human/user, atom/A, params) //Heres our handle click relay proc thing. return HANDLE_CLICK_PASS_THRU /atom/proc/attack_hand(mob/user) + SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user) return /mob/living/carbon/human/MouseDrop_T(atom/dropping, mob/user) diff --git a/code/datums/components/phone.dm b/code/datums/components/phone.dm new file mode 100644 index 0000000000..5a069678c4 --- /dev/null +++ b/code/datums/components/phone.dm @@ -0,0 +1,631 @@ + +/// Holds all of our phone components +GLOBAL_LIST_EMPTY_TYPED(phones, /datum/component/phone) + +/datum/component/phone + + /// Our phone category which sorts us into tabs in the phone menu TGUI + var/phone_category = "Uncategorised" + + /// Color of phone displayed in the phone menu + var/phone_color = "white" + + /// The id of our phone which shows up when we talk + var/phone_id = "Telephone" + + /// Our phone icon that is displayed in the phone menu TGUI + var/phone_icon + + /// Our connected handset + var/obj/item/handset/phone_handset + + /// What actually holds our phone, defaults to parent but may be set differently + var/atom/holder + + /// A phone we are calling or has called us + var/datum/component/phone/calling_phone + + /// Whether or not the phone is receiving calls or not. Varies between on/off or forcibly on/off. + var/do_not_disturb = PHONE_DO_NOT_DISTURB_OFF + + /// The ID of our timer to cancel an attempted call and "go to voicemail" + var/timeout_timer_id + + /// The time it takes for our timer to end to cancel an attempted call and "go to voicemail" + var/timeout_duration = 30 SECONDS + + /// Networks that this phone can take calls from + var/list/networks_receive = list() + + /// Networks that this phone can call + var/list/networks_transmit = list() + + /// The looping ringing sound when the phone is called + var/datum/looping_sound/phone_ringing/ringing_loop + + /// Whether the phone is able to be called or not + var/enabled = TRUE + +/datum/component/phone/Initialize(phone_category, phone_color, phone_id, phone_icon, do_not_disturb, list/networks_receive, list/networks_transmit, holder) + . = ..() + + if(!istype(parent, /atom)) + return COMPONENT_INCOMPATIBLE + + if(!handle_initial_variables(arglist(args))) + return COMPONENT_INCOMPATIBLE + + GLOB.phones += src + +/datum/component/phone/Destroy() + if(phone_handset) + if(!phone_handset.loc) + UnregisterSignal(phone_handset, COMSIG_PARENT_PREQDELETED) + qdel(phone_handset) + else + phone_handset.phone_component = null + phone_handset = null + + networks_receive = null + networks_transmit = null + QDEL_NULL(ringing_loop) + + GLOB.phones -= src + SStgui.close_uis(src) + + reset_call() + return ..() + +/// Handles all of our variables usually set in Initialize(), needs to be a proc so virtual phones don't get incorrect signals or a handset +/datum/component/phone/proc/handle_initial_variables(phone_category, phone_color, phone_id, phone_icon, do_not_disturb, list/networks_receive, list/networks_transmit, holder) + src.phone_category = isnull(phone_category) ? src.phone_category : phone_category + src.phone_color = isnull(phone_color) ? src.phone_color : phone_color + src.phone_id = isnull(phone_id) ? src.phone_id : phone_id + src.phone_icon = isnull(phone_icon) ? src.phone_icon : phone_icon + src.do_not_disturb = isnull(do_not_disturb) ? src.do_not_disturb : do_not_disturb + src.networks_receive = isnull(networks_receive) ? src.networks_receive : networks_receive.Copy() + src.networks_transmit = isnull(networks_transmit) ? src.networks_transmit : networks_transmit.Copy() + src.holder = holder ? holder : parent + + phone_handset = new(null, src, src.holder) + RegisterSignal(phone_handset, COMSIG_PARENT_PREQDELETED, PROC_REF(override_delete)) + + RegisterSignal(src.holder, COMSIG_ATOM_MOB_ATTACKBY, PROC_REF(item_used_on_phone)) + RegisterSignal(src.holder, COMSIG_ATOM_BEFORE_HUMAN_ATTACK_HAND, PROC_REF(use_phone)) + + if(istype(src.holder, /obj/item)) + RegisterSignal(src.holder, COMSIG_ITEM_PICKUP, PROC_REF(holder_picked_up)) + RegisterSignal(src.holder, COMSIG_ITEM_DROPPED, PROC_REF(holder_dropped)) + enabled = FALSE + + RegisterSignal(src.holder, COMSIG_MOVABLE_FORCEMOVED, PROC_REF(holder_forcemoved)) + + ringing_loop = new(src.holder) + + return TRUE + +/// Handles bringing our handset back in case something tries to delete it +/datum/component/phone/proc/override_delete() + SIGNAL_HANDLER + recall_handset() + return COMPONENT_ABORT_QDEL + +/// Handles any attackbys on our holder so we can hang up the phone +/datum/component/phone/proc/item_used_on_phone(atom/phone, obj/item/attacking_item, mob/user) + SIGNAL_HANDLER + + if(attacking_item == phone_handset) + recall_handset() + return COMPONENT_CANCEL_ATTACKBY + +/// When we initially interact with the phone, whether opening the menu to call someone or picking up the phone being called +/datum/component/phone/proc/use_phone(atom/phone, mob/living/carbon/human/user, click_parameters) + SIGNAL_HANDLER + + if(!calling_phone) + INVOKE_ASYNC(src, PROC_REF(tgui_interact), user) + + if(enabled) + return COMPONENT_CANCEL_HUMAN_ATTACK_HAND + return + + if(!phone_handset) + return + + if(phone_handset.loc) + return + + picked_up_call(user) + calling_phone.other_phone_picked_up_call() + + return COMPONENT_CANCEL_HUMAN_ATTACK_HAND + +/// Handles what we want to do when we pick up a phone +/datum/component/phone/proc/picked_up_call(mob/living/carbon/human/user) + to_chat(user, SPAN_PURPLE("[icon2html(holder, user)] Picked up a call from [calling_phone.phone_id].")) + playsound(get_turf(user), "rtb_handset") + + user.put_in_active_hand(phone_handset) + SEND_SIGNAL(holder, COMSIG_ATOM_PHONE_PICKED_UP) + ringing_loop.stop() + +/// Handles what we want to do when a phone we are calling picks up +/datum/component/phone/proc/other_phone_picked_up_call() + if(!calling_phone) + return + + if(!phone_handset) + return + + if(timeout_timer_id) + deltimer(timeout_timer_id) + timeout_timer_id = null + + if(!ismob(phone_handset.loc)) + return + + var/mob/phone_user = phone_handset.loc + to_chat(phone_user, SPAN_PURPLE("[icon2html(calling_phone.holder, phone_user)] [calling_phone.phone_id] has picked up.")) + +/// Handles setting a specific phone ID and enabling the phone when the holder is picked up +/datum/component/phone/proc/holder_picked_up(obj/item/picked_up_holder, mob/user) + SIGNAL_HANDLER + + enabled = TRUE + + if(!ishuman(user)) + phone_id = "[user]" + return + + var/mob/living/carbon/human/human_user = user + if(human_user.comm_title) + phone_id = "[human_user.comm_title] [human_user]" + else if(human_user.job) + phone_id = "[human_user.job] [human_user]" + else + phone_id = "[human_user]" + + if(human_user.assigned_squad) + phone_id += " ([human_user.assigned_squad.name])" + +/// Handles disabling the phone when the holder is dropped +/datum/component/phone/proc/holder_dropped(obj/item/dropped_hold, mob/user) + SIGNAL_HANDLER + + enabled = FALSE + phone_id = "[holder]" + +/// Tells our phone_handset that the holder has been forcemoved so the tether can be updated if need be +/datum/component/phone/proc/holder_forcemoved(atom/movable/moving_atom, atom/destination) + SIGNAL_HANDLER + + if(!phone_handset) + return + + phone_handset.reset_tether() + +/// Gathers all phones that we can call from our phone, returns a list of those phones +/datum/component/phone/proc/get_phones() + var/list/phone_list = list() + + for(var/possible_phone in GLOB.phones) + var/datum/component/phone/target_phone = possible_phone + + if(!target_phone.phone_available()) + continue + + var/net_link = FALSE + for(var/network in networks_transmit) + if(network in target_phone.networks_receive) + net_link = TRUE + continue + if(!net_link) + continue + + var/id = target_phone.phone_id + var/num_id = 1 + while(id in phone_list) + id = "[target_phone.phone_id] [num_id]" + num_id++ + + target_phone.phone_id = id + phone_list[id] = target_phone + + return phone_list + +/// Whether or not our phone is available to be called from other phones, returns TRUE if callable, otherwise FALSE. Note: this does not account for network compatability +/datum/component/phone/proc/phone_available() + if(calling_phone) + return FALSE + + if(!phone_handset) + return FALSE + + if(!enabled) + return FALSE + + if(phone_handset.loc) + return FALSE + + if(do_not_disturb == PHONE_DO_NOT_DISTURB_ON) + return FALSE + + if(do_not_disturb == PHONE_DO_NOT_DISTURB_FORCED) + return FALSE + + return TRUE + +/// Whether or not clicking on our phone will bring up the phone menu, returns TRUE if it will, otherwise FALSE +/datum/component/phone/proc/phone_menu_usable() + if(calling_phone) + return FALSE + + if(!phone_handset) + return FALSE + + if(!enabled) + return FALSE + + if(phone_handset.loc) + return + + return TRUE + +/// Starts calling another phone, sets up connection between the phones +/datum/component/phone/proc/call_phone(mob/user, calling_phone_id) + var/list/phones = get_phones() + phones -= phone_id + + if(!length(phones) || !(calling_phone_id in phones)) + to_chat(user, SPAN_PURPLE("[icon2html(holder, user)] No phones could be located to call!")) + return + + calling_phone = phones[calling_phone_id] + if(!istype(calling_phone) || QDELETED(calling_phone)) + calling_phone = null + CRASH("Qdelled/improper atom inside phones list! (istype returned: [istype(calling_phone)], QDELETED returned: [QDELETED(calling_phone)])") + + if(!calling_phone.phone_available()) + calling_phone = null + return + + calling_phone.getting_call(src) + + post_call_phone(user, calling_phone_id) + +/// What we do when our phone is receiving a call, called from incoming_call's call_phone() +/datum/component/phone/proc/getting_call(datum/component/phone/incoming_call) + calling_phone = incoming_call + SEND_SIGNAL(holder, COMSIG_ATOM_PHONE_RINGING) + ringing_loop.start() + +/// What we do after our call is set up from call_phone() +/datum/component/phone/proc/post_call_phone(mob/user, calling_phone_id) + to_chat(user, SPAN_PURPLE("[icon2html(holder, user)] Dialing [calling_phone_id]..")) + timeout_timer_id = addtimer(CALLBACK(src, PROC_REF(reset_call), TRUE), timeout_duration, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + playsound(get_turf(user), "rtb_handset") + + user.put_in_active_hand(phone_handset) + SEND_SIGNAL(holder, COMSIG_ATOM_PHONE_PICKED_UP) + +/// Resets this phone's connection as well as anything we are connected to's connection, calls itself on any other connections +/datum/component/phone/proc/reset_call(timeout = FALSE, recursed = FALSE) + if(timeout_timer_id) + deltimer(timeout_timer_id) + timeout_timer_id = null + + if(!calling_phone) + return + + if(!recursed) + calling_phone.reset_call(timeout, recursed = TRUE) + + SEND_SIGNAL(holder, COMSIG_ATOM_PHONE_STOPPED_RINGING) + + ringing_loop?.stop() + + handle_reset_call_message(timeout, recursed) + + calling_phone = null + +/// Handles any messaging we want when a call is reset +/datum/component/phone/proc/handle_reset_call_message(timeout = FALSE, recursed = FALSE) + if(!phone_handset) + return + + if(!ismob(phone_handset.loc)) + return + + var/mob/handset_user = phone_handset.loc + if(recursed) + to_chat(handset_user, SPAN_PURPLE("[icon2html(holder, handset_user)] [calling_phone.phone_id] has hung up on you.")) + else if(timeout) + to_chat(handset_user, SPAN_PURPLE("[icon2html(holder, handset_user)] Your call to [calling_phone.phone_id] has reached voicemail, you immediately disconnect the line.")) + else + to_chat(handset_user, SPAN_PURPLE("[icon2html(holder, handset_user)] You have hung up on [calling_phone.phone_id].")) + +/// Recalls our handset back to holder and calls reset_call() +/datum/component/phone/proc/recall_handset() + if(ismob(phone_handset.loc)) + var/mob/M = phone_handset.loc + M.drop_held_item(phone_handset) + playsound(get_turf(M), "rtb_handset", 100, FALSE, 7) + + phone_handset.moveToNullspace() + reset_call() + + SEND_SIGNAL(holder, COMSIG_ATOM_PHONE_HUNG_UP) + +/// Handles any messages that our handset 'hears' and passes to us. Passes the message to this phone and any connected phone via handle_hear() +/datum/component/phone/proc/handle_speak(message, datum/language/message_language, mob/speaker, direct_talking = TRUE) + if(message_language?.flags & SIGNLANG) + return + + if(!calling_phone) + return + + if(direct_talking) + handle_hear(message, message_language, speaker, direct_talking) + + log_say("TELEPHONE: [key_name(speaker)] on Phone '[phone_id]' to '[calling_phone.phone_id]' said '[message]'") + + var/comm_paygrade = "" + + if (ishuman(speaker)) + var/mob/living/carbon/human/human_speaker = speaker + comm_paygrade = human_speaker.get_paygrade() + + for(var/mob/dead/observer/cycled_observer in GLOB.player_list) + if((cycled_observer.client) && (cycled_observer.client.prefs) && (cycled_observer.client.prefs.toggles_chat & CHAT_GHOSTRADIO)) + var/ghost_message = "[comm_paygrade][speaker] (F) on '[phone_id]' to '[calling_phone.phone_id]': \"[message]\"" + cycled_observer.show_message(ghost_message, SHOW_MESSAGE_AUDIBLE) + + calling_phone.handle_hear(message, message_language, speaker, direct_talking) + +/// Handles any messages passed from handle_speak() and serves them to the user +/datum/component/phone/proc/handle_hear(message, datum/language/message_language, mob/speaker, direct_talking) + if(!phone_handset) + return + + if(!calling_phone) + return + + if(!ismob(phone_handset.loc)) + return + + var/loudness = 0 + if(phone_handset.raised) + loudness = 3 + + var/mob/hearing_mob = phone_handset.loc + var/name_override = calling_phone.phone_id + + if(hearing_mob == speaker && direct_talking) + name_override = phone_id + + hearing_mob.hear_radio(message, "says", message_language, part_a = "", part_b = " ", vname = name_override, speaker = speaker, command = loudness, no_paygrade = TRUE) + +/// Toggles do not disturb on or off, does not handle forced or unable do_not_disturb variables +/datum/component/phone/proc/toggle_do_not_disturb(mob/user) + switch(do_not_disturb) + if(PHONE_DO_NOT_DISTURB_ON) + do_not_disturb = PHONE_DO_NOT_DISTURB_OFF + to_chat(user, SPAN_NOTICE("Do Not Disturb has been disabled. You can now receive calls.")) + if(PHONE_DO_NOT_DISTURB_OFF) + do_not_disturb = PHONE_DO_NOT_DISTURB_ON + to_chat(user, SPAN_WARNING("Do Not Disturb has been enabled. No calls will be received.")) + else + return FALSE + return TRUE + + + +//TGUI section + +/datum/component/phone/ui_status(mob/user, datum/ui_state/state) + . = ..() + if(phone_menu_usable()) + return UI_INTERACTIVE + +/datum/component/phone/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("call_phone") + if(calling_phone) + return TRUE + call_phone(ui.user, params["phone_id"]) + return TRUE + + if("toggle_do_not_disturb") + toggle_do_not_disturb(ui.user) + return TRUE + +/datum/component/phone/ui_data(mob/user) + var/list/data = list() + + data["do_not_disturb"] = do_not_disturb + + return data + +/datum/component/phone/ui_static_data(mob/user) + . = list() + + .["available_phones"] = get_phones() - list(phone_id) + var/list/phones = list() + for(var/datum/component/phone/cycled_phone as anything in GLOB.phones) + phones += list(list( + "phone_category" = cycled_phone.phone_category, + "phone_color" = cycled_phone.phone_color, + "phone_id" = cycled_phone.phone_id, + "phone_icon" = cycled_phone.phone_icon + )) + + .["phones"] = phones + +/datum/component/phone/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PhoneMenu", phone_id) + ui.open() + + +// Virtual phone section + +/// Virtual phone used for situations where you want to be able to use a phone without a handset +/datum/component/phone/virtual + /// If it is a virtual phone we need a virtual user + var/client/virtual_user + +/datum/component/phone/virtual/Destroy() + virtual_user = null + + return ..() + +/datum/component/phone/virtual/handle_initial_variables(phone_category, phone_color, phone_id, phone_icon, do_not_disturb, list/networks_receive, list/networks_transmit, holder, virtual_user) + src.phone_category = isnull(phone_category) ? src.phone_category : phone_category + src.phone_color = isnull(phone_color) ? src.phone_color : phone_color + src.phone_id = isnull(phone_id) ? src.phone_id : phone_id + src.phone_icon = isnull(phone_icon) ? src.phone_icon : phone_icon + src.do_not_disturb = isnull(do_not_disturb) ? src.do_not_disturb : do_not_disturb + src.networks_receive = isnull(networks_receive) ? src.networks_receive : networks_receive.Copy() + src.networks_transmit = isnull(networks_transmit) ? src.networks_transmit : networks_transmit.Copy() + src.holder = holder ? holder : parent + + if(!virtual_user) + return FALSE + src.virtual_user = virtual_user + + RegisterSignal(src.holder, COMSIG_ATOM_ATTACK_HAND, PROC_REF(use_phone)) + + return TRUE + +/datum/component/phone/virtual/use_phone(atom/phone, mob/living/carbon/human/user, click_parameters) + INVOKE_ASYNC(src, PROC_REF(tgui_interact), user) + +/datum/component/phone/virtual/picked_up_call(mob/living/carbon/human/user) + to_chat(user, SPAN_PURPLE("[icon2html(holder, user)] Picked up a call from [calling_phone.phone_id].")) + + RegisterSignal(virtual_user.mob, COMSIG_DEAD_SPEAK, PROC_REF(handle_virtual_speak)) + +/datum/component/phone/virtual/other_phone_picked_up_call() + if(!calling_phone) + return + + if(timeout_timer_id) + deltimer(timeout_timer_id) + timeout_timer_id = null + + RegisterSignal(virtual_user.mob, COMSIG_DEAD_SPEAK, PROC_REF(handle_virtual_speak)) + to_chat(virtual_user, SPAN_PURPLE("[icon2html(calling_phone.holder, virtual_user)] [calling_phone.phone_id] has picked up.")) + +/datum/component/phone/virtual/phone_available() + if(calling_phone) + return FALSE + + if(do_not_disturb == PHONE_DO_NOT_DISTURB_ON) + return FALSE + + if(do_not_disturb == PHONE_DO_NOT_DISTURB_FORCED) + return FALSE + + return TRUE + +/datum/component/phone/virtual/reset_call(timeout = FALSE, recursed = FALSE) + . = ..() + UnregisterSignal(virtual_user.mob, COMSIG_DEAD_SPEAK) + +/datum/component/phone/virtual/handle_reset_call_message(timeout = FALSE, recursed = FALSE) + if(recursed) + to_chat(virtual_user, SPAN_PURPLE("[icon2html(holder, virtual_user)] [calling_phone.phone_id] has hung up on you.")) + else if(timeout) + to_chat(virtual_user, SPAN_PURPLE("[icon2html(holder, virtual_user)] Your call to [calling_phone.phone_id] has reached voicemail, you immediately disconnect the line.")) + else + to_chat(virtual_user, SPAN_PURPLE("[icon2html(holder, virtual_user)] You have hung up on [calling_phone.phone_id].")) + +/datum/component/phone/virtual/getting_call(datum/component/phone/incoming_call) + calling_phone = incoming_call + SEND_SIGNAL(holder, COMSIG_ATOM_PHONE_RINGING) + playsound_client(virtual_user, 'sound/machines/telephone/telephone_ring.ogg', vol = 50) + addtimer(CALLBACK(src, PROC_REF(delayed_client_sound)), (10 SECONDS)) + +/datum/component/phone/virtual/proc/delayed_client_sound() + if(!calling_phone || !calling_phone.timeout_timer_id) + return + + playsound_client(virtual_user, 'sound/machines/telephone/telephone_ring.ogg', vol = 50) + +/datum/component/phone/virtual/post_call_phone(mob/user, calling_phone_id) + to_chat(user, SPAN_PURPLE("[icon2html(holder, user)] Dialing [calling_phone_id]..")) + timeout_timer_id = addtimer(CALLBACK(src, PROC_REF(reset_call), TRUE), timeout_duration, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + + playsound_client(user.client, "rtb_handset") + +/datum/component/phone/virtual/recall_handset() + reset_call() // I don't think this will be possible given like... we don't have a handset but just in case + return + +/datum/component/phone/virtual/handle_hear(message, datum/language/message_language, mob/speaker, direct_talking) + if(!calling_phone) + return + + var/name_override = calling_phone.phone_id + + if(virtual_user == speaker) + name_override = phone_id + + if(!virtual_user.mob) + return + + virtual_user.mob.hear_radio(message, "says", message_language, part_a = "", part_b = " ", vname = name_override, speaker = speaker, command = 3, no_paygrade = TRUE) + +/// Used to fake the other side of our phone connection as a virtual user +/datum/component/phone/virtual/proc/handle_virtual_speak(mob/speaker, message) + SIGNAL_HANDLER + + if(!calling_phone) + return + + handle_hear(message, null, speaker, TRUE) + + log_say("TELEPHONE: [key_name(speaker)] on Phone '[phone_id]' to '[calling_phone.phone_id]' said '[message]'") + + for(var/mob/dead/observer/cycled_observer in GLOB.player_list) + if((cycled_observer.client) && (cycled_observer.client.prefs) && (cycled_observer.client.prefs.toggles_chat & CHAT_GHOSTRADIO)) + var/ghost_message = "Game Master on '[phone_id]' to '[calling_phone.phone_id]': \"[message]\"" + cycled_observer.show_message(ghost_message, SHOW_MESSAGE_AUDIBLE) + + calling_phone.handle_hear(message, null, speaker, TRUE) + + return COMPONENT_OVERRIDE_DEAD_SPEAK + +// TGUI section + +/datum/component/phone/virtual/ui_status(mob/user, datum/ui_state/state) + return UI_INTERACTIVE + +/datum/component/phone/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("hang_up") + reset_call() + return TRUE + if("pick_up") + if(!calling_phone) + return + picked_up_call(ui.user) + calling_phone.other_phone_picked_up_call() + return TRUE + +/datum/component/phone/virtual/ui_data(mob/user) + . = ..() + + .["virtual_phone"] = TRUE + .["being_called"] = calling_phone?.timeout_timer_id ? TRUE : FALSE + .["active_call"] = calling_phone ? TRUE : FALSE + .["calling_phone_id"] = "[calling_phone?.phone_id]" diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index a2aa2fb5b6..5382ad2f42 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -2,3 +2,11 @@ mid_sounds = list('sound/items/taperecorder/taperecorder_hiss_mid.ogg' = 1) start_sound = list('sound/items/taperecorder/taperecorder_hiss_start.ogg' = 1) volume = 10 + +/datum/looping_sound/phone_ringing + start_sound = list('sound/machines/telephone/telephone_ring.ogg' = 1) + mid_sounds = list('sound/machines/telephone/telephone_ring.ogg' = 1) + volume = 25 + extra_range = 14 + mid_length = (3 SECONDS) + max_loops = 10 diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 3b65811b05..95c5f181cd 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -487,115 +487,41 @@ desc = "A heavy-duty chestrig used by some USCM technicians." icon_state = "marinesatch_techi" -GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/rto) - /obj/item/storage/backpack/marine/satchel/rto name = "\improper USCM Radio Telephone Pack" desc = "A heavy-duty pack, used for telecommunications between central command. Commonly carried by RTOs." icon_state = "rto_backpack" item_state = "rto_backpack" has_gamemode_skin = FALSE - actions_types = list(/datum/action/item_action/rto_pack/use_phone) flags_item = ITEM_OVERRIDE_NORTHFACE - var/obj/structure/transmitter/internal/internal_transmitter - var/phone_category = PHONE_MARINE var/list/networks_receive = list(FACTION_MARINE) var/list/networks_transmit = list(FACTION_MARINE) - var/base_icon - -/datum/action/item_action/rto_pack/use_phone/New(mob/living/user, obj/item/holder) - ..() - name = "Use Phone" - button.name = name - button.overlays.Cut() - var/image/IMG = image('icons/obj/items/misc.dmi', button, "rpb_phone") - button.overlays += IMG - -/datum/action/item_action/rto_pack/use_phone/action_activate() - for(var/obj/item/storage/backpack/marine/satchel/rto/radio_backpack in owner) - radio_backpack.use_phone(owner) - return - -/obj/item/storage/backpack/marine/satchel/rto/post_skin_selection() - base_icon = icon_state /obj/item/storage/backpack/marine/satchel/rto/Initialize() . = ..() - internal_transmitter = new(src) - internal_transmitter.relay_obj = src - internal_transmitter.phone_category = phone_category - internal_transmitter.enabled = FALSE - internal_transmitter.networks_receive = networks_receive - internal_transmitter.networks_transmit = networks_transmit - RegisterSignal(internal_transmitter, COMSIG_TRANSMITTER_UPDATE_ICON, PROC_REF(check_for_ringing)) - GLOB.radio_packs += src - -/obj/item/storage/backpack/marine/satchel/rto/proc/check_for_ringing() - SIGNAL_HANDLER - update_icon() - -/obj/item/storage/backpack/marine/satchel/rto/update_icon() - . = ..() - if(!internal_transmitter) - return - - if(!internal_transmitter.attached_to \ - || internal_transmitter.attached_to.loc != internal_transmitter) - icon_state = "[base_icon]_ear" - return - - if(internal_transmitter.caller) - icon_state = "[base_icon]_ring" - else - icon_state = base_icon - -/obj/item/storage/backpack/marine/satchel/rto/forceMove(atom/dest) - . = ..() - if(isturf(dest)) - internal_transmitter.set_tether_holder(src) - else - internal_transmitter.set_tether_holder(loc) -/obj/item/storage/backpack/marine/satchel/rto/Destroy() - GLOB.radio_packs -= src - qdel(internal_transmitter) - return ..() + AddComponent(/datum/component/phone, phone_category = phone_category, networks_receive = networks_receive, networks_transmit = networks_transmit) + RegisterSignal(src, COMSIG_ATOM_PHONE_PICKED_UP, PROC_REF(phone_picked_up)) + RegisterSignal(src, COMSIG_ATOM_PHONE_HUNG_UP, PROC_REF(phone_hung_up)) + RegisterSignal(src, COMSIG_ATOM_PHONE_RINGING, PROC_REF(phone_ringing)) + RegisterSignal(src, COMSIG_ATOM_PHONE_STOPPED_RINGING, PROC_REF(phone_stopped_ringing)) -/obj/item/storage/backpack/marine/satchel/rto/pickup(mob/user) - . = ..() - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.comm_title) - internal_transmitter.phone_id = "[H.comm_title] [H]" - else if(H.job) - internal_transmitter.phone_id = "[H.job] [H]" - else - internal_transmitter.phone_id = "[H]" +/obj/item/storage/backpack/marine/satchel/rto/proc/phone_picked_up() + icon_state = PHONE_OFF_BASE_UNIT_ICON_STATE - if(H.assigned_squad) - internal_transmitter.phone_id += " ([H.assigned_squad.name])" - else - internal_transmitter.phone_id = "[user]" - - internal_transmitter.enabled = TRUE - -/obj/item/storage/backpack/marine/satchel/rto/dropped(mob/user) - . = ..() - internal_transmitter.phone_id = "[src]" - internal_transmitter.enabled = FALSE +/obj/item/storage/backpack/marine/satchel/rto/proc/phone_hung_up() + icon_state = PHONE_ON_BASE_UNIT_ICON_STATE -/obj/item/storage/backpack/marine/satchel/rto/proc/use_phone(mob/user) - internal_transmitter.attack_hand(user) +/obj/item/storage/backpack/marine/satchel/rto/proc/phone_ringing() + icon_state = PHONE_RINGING_ICON_STATE - -/obj/item/storage/backpack/marine/satchel/rto/attackby(obj/item/W, mob/user) - if(internal_transmitter && internal_transmitter.attached_to == W) - internal_transmitter.attackby(W, user) - else - . = ..() +/obj/item/storage/backpack/marine/satchel/rto/proc/phone_stopped_ringing() + if(icon_state == PHONE_OFF_BASE_UNIT_ICON_STATE) + return + icon_state = PHONE_ON_BASE_UNIT_ICON_STATE /obj/item/storage/backpack/marine/satchel/rto/upp_net name = "\improper UPP Radio Telephone Pack" @@ -606,7 +532,6 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r name = "\improper USCM Small Radio Telephone Pack" max_storage_space = 10 - /obj/item/storage/backpack/marine/satchel/rto/small/upp_net name = "\improper UPP Radio Telephone Pack" networks_receive = list(FACTION_UPP) diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index 22979858ce..d968b8d72f 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -1219,7 +1219,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) to_chat(user, SPAN_WARNING("You scrape ineffectively at \the [src].")) /turf/closed/wall/resin/attackby(obj/item/W, mob/living/user) - if(SEND_SIGNAL(src, COMSIG_WALL_RESIN_ATTACKBY, W, user) & COMPONENT_CANCEL_ATTACKBY) + if(SEND_SIGNAL(src, COMSIG_WALL_RESIN_ATTACKBY, W, user) & COMPONENT_CANCEL_RESIN_ATTACKBY) return if(!(W.flags_item & NOBLUDGEON)) diff --git a/code/modules/admin/game_master/game_master.dm b/code/modules/admin/game_master/game_master.dm index 45f3750ff3..d97fe8aedb 100644 --- a/code/modules/admin/game_master/game_master.dm +++ b/code/modules/admin/game_master/game_master.dm @@ -75,23 +75,33 @@ GLOBAL_VAR_INIT(radio_communication_clarity, 100) /// End Objective Stuff + + /// Communication stuff + + var/atom/movable/game_master_phone + + /// End Communication stuff + /// Holds what type of click intercept we are using var/current_click_intercept_action /datum/game_master/New(client/using_client) . = ..() - if(using_client.mob) - tgui_interact(using_client.mob) + tgui_interact(using_client.mob) current_submenus = list() + game_master_phone = new(null) + game_master_phone.AddComponent(/datum/component/phone/virtual, "Game Master", "white", "Company Command", null, PHONE_DO_NOT_DISTURB_ON, list(FACTION_MARINE, FACTION_COLONIST, FACTION_WY), list(FACTION_MARINE, FACTION_COLONIST, FACTION_WY), null, using_client) + using_client.click_intercept = src /datum/game_master/Destroy(force, ...) . = ..() submenu_types = null current_submenus = null + QDEL_NULL(game_master_phone) /datum/game_master/ui_data(mob/user) . = ..() @@ -166,6 +176,9 @@ GLOBAL_VAR_INIT(radio_communication_clarity, 100) return //Communication Section + if("use_game_master_phone") + game_master_phone.attack_hand(ui.user) + if("set_communication_clarity") var/new_clarity = text2num(params["clarity"]) if(!isnum(new_clarity)) diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index 73ced80994..b1fe57d55d 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -752,7 +752,7 @@ /obj/effect/alien/resin/resin_pillar/proc/handle_attackby(turf/T, obj/item/I, mob/M) SIGNAL_HANDLER attackby(I, M) - return COMPONENT_CANCEL_ATTACKBY + return COMPONENT_CANCEL_RESIN_ATTACKBY /obj/effect/alien/resin/resin_pillar/proc/handle_hitby(turf/T, atom/movable/AM) SIGNAL_HANDLER diff --git a/code/modules/cm_phone/handset.dm b/code/modules/cm_phone/handset.dm new file mode 100644 index 0000000000..66ecdeb0d0 --- /dev/null +++ b/code/modules/cm_phone/handset.dm @@ -0,0 +1,179 @@ + +#define HANDSET_RANGE 7 + +/obj/item/handset + name = "telephone" + icon = 'icons/obj/items/misc.dmi' + icon_state = "rpb_phone" + + w_class = SIZE_LARGE + + flags_atom = FPRINT|USES_HEARING + + var/datum/component/phone/phone_component + + var/atom/holder + + var/datum/effects/tethering/tether_effect + + var/raised = FALSE + var/zlevel_transfer = FALSE + var/zlevel_transfer_timer = TIMER_ID_NULL + var/zlevel_transfer_timeout = 5 SECONDS + +/obj/item/handset/Initialize(mapload, phone_component, holder) + . = ..() + + src.phone_component = phone_component + src.holder = holder + attach_to(src.holder) + +/obj/item/handset/Destroy() + phone_component = null + holder = null + remove_attached() + return ..() + +/obj/item/handset/hear_talk(mob/living/talker, message, verb="says", datum/language/message_language, italics = 0) + . = ..() + + if(talker == loc) + phone_component.handle_speak(message, message_language, talker, direct_talking = TRUE) + return + + var/distance = get_dist(src, talker) + + if(distance > 1) + return + + message = stars(message, (100 - (distance * 40 + rand(-15, 15)))) + + phone_component.handle_speak(message, message_language, talker, direct_talking = FALSE) + +/obj/item/handset/proc/attach_to(atom/to_attach) + if(!istype(to_attach)) + return + + remove_attached() + + holder = to_attach + +/obj/item/handset/proc/remove_attached() + holder = null + reset_tether() + +/obj/item/handset/proc/reset_tether() + SIGNAL_HANDLER + if (tether_effect) + UnregisterSignal(tether_effect, COMSIG_PARENT_QDELETING) + if(!QDESTROYING(tether_effect)) + qdel(tether_effect) + tether_effect = null + if(!do_zlevel_check()) + on_beam_removed() + +/obj/item/handset/attack_hand(mob/user) + if(holder && get_dist(user, holder) > HANDSET_RANGE) + return FALSE + return ..() + +/obj/item/handset/proc/on_beam_removed() + if(!holder) + return + + if(!loc) + return + + if(get_dist(holder, src) > HANDSET_RANGE) + phone_component.recall_handset() + + var/atom/tether_to = get_atom_on_turf(src) + + var/atom/tether_from = get_atom_on_turf(holder) + + if(tether_from == tether_to) + return + + var/list/tether_effects = apply_tether(tether_from, tether_to, range = HANDSET_RANGE, icon = "wire", always_face = FALSE) + tether_effect = tether_effects["tetherer_tether"] + RegisterSignal(tether_effect, COMSIG_PARENT_QDELETING, PROC_REF(reset_tether)) + +/obj/item/handset/attack_self(mob/user) + ..() + + if(raised) + set_raised(FALSE, user) + to_chat(user, SPAN_NOTICE("You lower [src].")) + else + set_raised(TRUE, user) + to_chat(user, SPAN_NOTICE("You raise [src] to your ear.")) + +/obj/item/handset/proc/set_raised(to_raise, mob/living/carbon/human/user) + if(!istype(user)) + return + + if(!to_raise) + raised = FALSE + item_state = "rpb_phone" + else + raised = TRUE + item_state = "rpb_phone_ear" + + user.update_inv_r_hand() + user.update_inv_l_hand() + +/obj/item/handset/dropped(mob/user) + . = ..() + set_raised(FALSE, user) + reset_tether() + +/obj/item/handset/on_enter_storage(obj/item/storage/S) + . = ..() + if(phone_component) + phone_component.recall_handset() + +/obj/item/handset/forceMove(atom/dest) + . = ..() + if(.) + reset_tether() + +/obj/item/handset/moveToNullspace() + . = ..() + if(.) + reset_tether() + +/obj/item/handset/proc/do_zlevel_check() + if(!holder || !loc?.z || !holder.z) + return FALSE + + if(zlevel_transfer) + if(loc.z == holder.z) + zlevel_transfer = FALSE + if(zlevel_transfer_timer) + deltimer(zlevel_transfer_timer) + UnregisterSignal(holder, COMSIG_MOVABLE_MOVED) + return FALSE + return TRUE + + if(holder && loc.z != holder.z) + zlevel_transfer = TRUE + zlevel_transfer_timer = addtimer(CALLBACK(src, PROC_REF(try_doing_tether)), zlevel_transfer_timeout, TIMER_UNIQUE|TIMER_STOPPABLE) + RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(transmitter_move_handler)) + return TRUE + return FALSE + +/obj/item/handset/proc/transmitter_move_handler(datum/source) + SIGNAL_HANDLER + zlevel_transfer = FALSE + if(zlevel_transfer_timer) + deltimer(zlevel_transfer_timer) + UnregisterSignal(holder, COMSIG_MOVABLE_MOVED) + reset_tether() + +/obj/item/handset/proc/try_doing_tether() + zlevel_transfer_timer = TIMER_ID_NULL + zlevel_transfer = FALSE + UnregisterSignal(holder, COMSIG_MOVABLE_MOVED) + reset_tether() + +#undef HANDSET_RANGE diff --git a/code/modules/cm_phone/internal_phone.dm b/code/modules/cm_phone/internal_phone.dm deleted file mode 100644 index 96530503aa..0000000000 --- a/code/modules/cm_phone/internal_phone.dm +++ /dev/null @@ -1,15 +0,0 @@ -/obj/structure/transmitter/internal - name = "\improper internal telephone receiver" - - phone_type = /obj/item/phone - - var/atom/relay_obj - -/obj/structure/transmitter/internal/ui_host(mob/user, datum/tgui/ui) - if(!relay_obj) - return ..() - return relay_obj - -/obj/structure/transmitter/internal/Destroy() - relay_obj = null - return ..() diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm deleted file mode 100644 index fd9c8aa02d..0000000000 --- a/code/modules/cm_phone/phone.dm +++ /dev/null @@ -1,623 +0,0 @@ -GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) - -/obj/structure/transmitter - name = "telephone receiver" - icon = 'icons/obj/structures/structures.dmi' - icon_state = "wall_phone" - desc = "It is a wall mounted telephone. The fine text reads: To log your details with the mainframe please insert your keycard into the slot below. Unfortunately the slot is jammed. You can still use the phone, however." - - var/phone_category = "Uncategorised" - var/phone_color = "white" - var/phone_id = "Telephone" - var/phone_icon - - var/obj/item/phone/attached_to - var/atom/tether_holder - - var/obj/structure/transmitter/calling - var/obj/structure/transmitter/caller - - var/next_ring = 0 - - var/phone_type = /obj/item/phone - - var/range = 7 - - var/enabled = TRUE - /// Whether or not the phone is receiving calls or not. Varies between on/off or forcibly on/off. - var/do_not_disturb = PHONE_DND_OFF - - var/base_icon_state - - var/timeout_timer_id - var/timeout_duration = 30 SECONDS - - var/list/networks_receive = list(FACTION_MARINE) - var/list/networks_transmit = list(FACTION_MARINE) - -/obj/structure/transmitter/hidden - do_not_disturb = PHONE_DND_FORCED - -/obj/structure/transmitter/Initialize(mapload, ...) - . = ..() - base_icon_state = icon_state - - attached_to = new phone_type(src) - RegisterSignal(attached_to, COMSIG_PARENT_PREQDELETED, PROC_REF(override_delete)) - update_icon() - - if(!get_turf(src)) - return - - GLOB.transmitters += src - -/obj/structure/transmitter/update_icon() - . = ..() - SEND_SIGNAL(src, COMSIG_TRANSMITTER_UPDATE_ICON) - if(attached_to.loc != src) - icon_state = "[base_icon_state]_ear" - return - - if(caller) - icon_state = "[base_icon_state]_ring" - else - icon_state = base_icon_state - -/obj/structure/transmitter/proc/override_delete() - SIGNAL_HANDLER - recall_phone() - return COMPONENT_ABORT_QDEL - - -#define TRANSMITTER_UNAVAILABLE(T) (\ - T.get_calling_phone() \ - || !T.attached_to \ - || T.attached_to.loc != T \ - || !T.enabled\ -) - -/obj/structure/transmitter/proc/get_transmitters() - var/list/phone_list = list() - - for(var/possible_phone in GLOB.transmitters) - var/obj/structure/transmitter/target_phone = possible_phone - var/current_dnd = FALSE - switch(target_phone.do_not_disturb) - if(PHONE_DND_ON, PHONE_DND_FORCED) - current_dnd = TRUE - if(TRANSMITTER_UNAVAILABLE(target_phone) || current_dnd) // Phone not available - continue - var/net_link = FALSE - for(var/network in networks_transmit) - if(network in target_phone.networks_receive) - net_link = TRUE - continue - if(!net_link) - continue - - var/id = target_phone.phone_id - var/num_id = 1 - while(id in phone_list) - id = "[target_phone.phone_id] [num_id]" - num_id++ - - target_phone.phone_id = id - phone_list[id] = target_phone - - return phone_list - -/obj/structure/transmitter/ui_status(mob/user, datum/ui_state/state) - . = ..() - if(TRANSMITTER_UNAVAILABLE(src)) - return UI_CLOSE - -/obj/structure/transmitter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - if(TRANSMITTER_UNAVAILABLE(src)) - return - - if(!ishuman(usr)) - return - - var/mob/living/carbon/human/user = usr - - switch(action) - if("call_phone") - call_phone(user, params["phone_id"]) - . = TRUE - SStgui.close_uis(src) - if("toggle_dnd") - toggle_dnd(user) - - update_icon() - -/obj/structure/transmitter/ui_data(mob/user) - var/list/data = list() - - data["availability"] = do_not_disturb - - return data - -/obj/structure/transmitter/ui_static_data(mob/user) - . = list() - - .["available_transmitters"] = get_transmitters() - list(phone_id) - var/list/transmitters = list() - for(var/i in GLOB.transmitters) - var/obj/structure/transmitter/T = i - transmitters += list(list( - "phone_category" = T.phone_category, - "phone_color" = T.phone_color, - "phone_id" = T.phone_id, - "phone_icon" = T.phone_icon - )) - - .["transmitters"] = transmitters - -/obj/structure/transmitter/proc/call_phone(mob/living/carbon/human/user, calling_phone_id) - var/list/transmitters = get_transmitters() - transmitters -= phone_id - - if(!length(transmitters) || !(calling_phone_id in transmitters)) - to_chat(user, SPAN_PURPLE("[icon2html(src, user)] No transmitters could be located to call!")) - return - - var/obj/structure/transmitter/T = transmitters[calling_phone_id] - if(!istype(T) || QDELETED(T)) - transmitters -= T - CRASH("Qdelled/improper atom inside transmitters list! (istype returned: [istype(T)], QDELETED returned: [QDELETED(T)])") - - if(TRANSMITTER_UNAVAILABLE(T)) - return - - calling = T - T.caller = src - T.update_icon() - - to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Dialing [calling_phone_id]..")) - playsound(get_turf(user), "rtb_handset") - timeout_timer_id = addtimer(CALLBACK(src, PROC_REF(reset_call), TRUE), timeout_duration, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) - - START_PROCESSING(SSobj, src) - START_PROCESSING(SSobj, T) - - user.put_in_hands(attached_to) - -/obj/structure/transmitter/proc/toggle_dnd(mob/living/carbon/human/user) - switch(do_not_disturb) - if(PHONE_DND_ON) - do_not_disturb = PHONE_DND_OFF - to_chat(user, SPAN_NOTICE("Do Not Disturb has been disabled. You can now receive calls.")) - if(PHONE_DND_OFF) - do_not_disturb = PHONE_DND_ON - to_chat(user, SPAN_WARNING("Do Not Disturb has been enabled. No calls will be received.")) - else - return FALSE - return TRUE - -/obj/structure/transmitter/attack_hand(mob/user) - . = ..() - - if(!attached_to || attached_to.loc != src) - return - - if(!ishuman(user)) - return - - if(!enabled) - return - - if(!get_calling_phone()) - tgui_interact(user) - return - - var/obj/structure/transmitter/T = get_calling_phone() - - if(T.attached_to && ismob(T.attached_to.loc)) - var/mob/M = T.attached_to.loc - to_chat(M, SPAN_PURPLE("[icon2html(src, M)] [phone_id] has picked up.")) - if(T.timeout_timer_id) - deltimer(T.timeout_timer_id) - T.timeout_timer_id = null - - to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Picked up a call from [T.phone_id].")) - playsound(get_turf(user), "rtb_handset") - - user.put_in_active_hand(attached_to) - update_icon() - - -#undef TRANSMITTER_UNAVAILABLE - -/obj/structure/transmitter/tgui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "PhoneMenu", phone_id) - ui.open() - -/obj/structure/transmitter/proc/set_tether_holder(atom/A) - tether_holder = A - - if(attached_to) - attached_to.reset_tether() - -/obj/structure/transmitter/proc/reset_call(timeout = FALSE) - var/obj/structure/transmitter/T = get_calling_phone() - if(T) - if(T.attached_to && ismob(T.attached_to.loc)) - var/mob/M = T.attached_to.loc - to_chat(M, SPAN_PURPLE("[icon2html(src, M)] [phone_id] has hung up on you.")) - - if(attached_to && ismob(attached_to.loc)) - var/mob/M = attached_to.loc - if(timeout) - to_chat(M, SPAN_PURPLE("[icon2html(src, M)] Your call to [T.phone_id] has reached voicemail, you immediately disconnect the line.")) - else - to_chat(M, SPAN_PURPLE("[icon2html(src, M)] You have hung up on [T.phone_id].")) - - if(calling) - calling.caller = null - calling = null - - if(caller) - caller.calling = null - caller = null - - if(timeout_timer_id) - deltimer(timeout_timer_id) - timeout_timer_id = null - - if(T) - if(T.timeout_timer_id) - deltimer(T.timeout_timer_id) - T.timeout_timer_id = null - - T.update_icon() - STOP_PROCESSING(SSobj, T) - - STOP_PROCESSING(SSobj, src) - -/obj/structure/transmitter/process() - if(caller) - if(!attached_to) - STOP_PROCESSING(SSobj, src) - return - - if(attached_to.loc == src) - if(next_ring < world.time) - playsound(loc, 'sound/machines/telephone/telephone_ring.ogg', 75) - visible_message(SPAN_WARNING("[src] rings vigorously!")) - next_ring = world.time + 3 SECONDS - - else if(calling) - var/obj/structure/transmitter/T = get_calling_phone() - if(!T) - STOP_PROCESSING(SSobj, src) - return - - var/obj/item/phone/P = T.attached_to - - if(P && attached_to.loc == src && P.loc == T && next_ring < world.time) - playsound(get_turf(attached_to), 'sound/machines/telephone/telephone_ring.ogg', 20, FALSE, 14) - visible_message(SPAN_WARNING("[src] rings vigorously!")) - next_ring = world.time + 3 SECONDS - - else - STOP_PROCESSING(SSobj, src) - return - - -/obj/structure/transmitter/proc/recall_phone() - if(ismob(attached_to.loc)) - var/mob/M = attached_to.loc - M.drop_held_item(attached_to) - playsound(get_turf(M), "rtb_handset", 100, FALSE, 7) - - attached_to.forceMove(src) - reset_call() - - update_icon() - -/obj/structure/transmitter/proc/get_calling_phone() - if(calling) - return calling - else if(caller) - return caller - - return - -/obj/structure/transmitter/proc/handle_speak(message, datum/language/L, mob/speaking) - if(L.flags & SIGNLANG) return - - var/obj/structure/transmitter/T = get_calling_phone() - if(!istype(T)) - return - - var/obj/item/phone/P = T.attached_to - - if(!P || !attached_to) - return - - P.handle_hear(message, L, speaking) - attached_to.handle_hear(message, L, speaking) - log_say("TELEPHONE: [key_name(speaking)] on Phone '[phone_id]' to '[T.phone_id]' said '[message]'") - -/obj/structure/transmitter/attackby(obj/item/W, mob/user) - if(W == attached_to) - recall_phone() - else - . = ..() - -/obj/structure/transmitter/Destroy() - if(attached_to) - if(attached_to.loc == src) - UnregisterSignal(attached_to, COMSIG_PARENT_PREQDELETED) - qdel(attached_to) - else - attached_to.attached_to = null - attached_to = null - - GLOB.transmitters -= src - SStgui.close_uis(src) - - reset_call() - return ..() - -/obj/item/phone - name = "telephone" - icon = 'icons/obj/items/misc.dmi' - icon_state = "rpb_phone" - - w_class = SIZE_LARGE - - var/obj/structure/transmitter/attached_to - var/datum/effects/tethering/tether_effect - - var/raised = FALSE - var/zlevel_transfer = FALSE - var/zlevel_transfer_timer = TIMER_ID_NULL - var/zlevel_transfer_timeout = 5 SECONDS - -/obj/item/phone/Initialize(mapload) - . = ..() - if(istype(loc, /obj/structure/transmitter)) - attach_to(loc) - -/obj/item/phone/Destroy() - remove_attached() - return ..() - -/obj/item/phone/proc/handle_speak(mob/speaking, message, datum/language/L) - SIGNAL_HANDLER - - if(!attached_to || loc == attached_to) - UnregisterSignal(speaking, COMSIG_LIVING_SPEAK) - return - - attached_to.handle_speak(message, L, speaking) - -/obj/item/phone/proc/handle_hear(message, datum/language/L, mob/speaking) - if(!attached_to) - return - - var/obj/structure/transmitter/T = attached_to.get_calling_phone() - - if(!T) - return - - if(!ismob(loc)) - return - - var/loudness = 0 - if(raised) - loudness = 3 - - var/mob/M = loc - var/vname = T.phone_id - - if(M == speaking) - vname = attached_to.phone_id - - M.hear_radio( - message, "says", L, part_a = "", - part_b = " ", vname = vname, - speaker = speaking, command = loudness, no_paygrade = TRUE) - -/obj/item/phone/proc/attach_to(obj/structure/transmitter/to_attach) - if(!istype(to_attach)) - return - - remove_attached() - - attached_to = to_attach - - -/obj/item/phone/proc/remove_attached() - attached_to = null - reset_tether() - -/obj/item/phone/proc/reset_tether() - SIGNAL_HANDLER - if (tether_effect) - UnregisterSignal(tether_effect, COMSIG_PARENT_QDELETING) - if(!QDESTROYING(tether_effect)) - qdel(tether_effect) - tether_effect = null - if(!do_zlevel_check()) - on_beam_removed() - -/obj/item/phone/attack_hand(mob/user) - if(attached_to && get_dist(user, attached_to) > attached_to.range) - return FALSE - return ..() - - -/obj/item/phone/proc/on_beam_removed() - if(!attached_to) - return - - if(loc == attached_to) - return - - if(get_dist(attached_to, src) > attached_to.range) - attached_to.recall_phone() - - var/atom/tether_to = src - - if(loc != get_turf(src)) - tether_to = loc - if(tether_to.loc != get_turf(tether_to)) - attached_to.recall_phone() - return - - var/atom/tether_from = attached_to - - if(attached_to.tether_holder) - tether_from = attached_to.tether_holder - - if(tether_from == tether_to) - return - - var/list/tether_effects = apply_tether(tether_from, tether_to, range = attached_to.range, icon = "wire", always_face = FALSE) - tether_effect = tether_effects["tetherer_tether"] - RegisterSignal(tether_effect, COMSIG_PARENT_QDELETING, PROC_REF(reset_tether)) - -/obj/item/phone/attack_self(mob/user) - ..() - if(raised) - set_raised(FALSE, user) - to_chat(user, SPAN_NOTICE("You lower [src].")) - else - set_raised(TRUE, user) - to_chat(user, SPAN_NOTICE("You raise [src] to your ear.")) - - -/obj/item/phone/proc/set_raised(to_raise, mob/living/carbon/human/H) - if(!istype(H)) - return - - if(!to_raise) - raised = FALSE - item_state = "rpb_phone" - - var/obj/item/device/radio/R = H.get_type_in_ears(/obj/item/device/radio) - R?.on = TRUE - else - raised = TRUE - item_state = "rpb_phone_ear" - - var/obj/item/device/radio/R = H.get_type_in_ears(/obj/item/device/radio) - R?.on = FALSE - - H.update_inv_r_hand() - H.update_inv_l_hand() - -/obj/item/phone/dropped(mob/user) - . = ..() - UnregisterSignal(user, COMSIG_LIVING_SPEAK) - - set_raised(FALSE, user) - -/obj/item/phone/on_enter_storage(obj/item/storage/S) - . = ..() - if(attached_to) - attached_to.recall_phone() - -/obj/item/phone/pickup(mob/user) - . = ..() - RegisterSignal(user, COMSIG_LIVING_SPEAK, PROC_REF(handle_speak)) - -/obj/item/phone/forceMove(atom/dest) - . = ..() - if(.) - reset_tether() - -/obj/item/phone/proc/do_zlevel_check() - if(!attached_to || !loc.z || !attached_to.z) - return FALSE - - if(zlevel_transfer) - if(loc.z == attached_to.z) - zlevel_transfer = FALSE - if(zlevel_transfer_timer) - deltimer(zlevel_transfer_timer) - UnregisterSignal(attached_to, COMSIG_MOVABLE_MOVED) - return FALSE - return TRUE - - if(attached_to && loc.z != attached_to.z) - zlevel_transfer = TRUE - zlevel_transfer_timer = addtimer(CALLBACK(src, PROC_REF(try_doing_tether)), zlevel_transfer_timeout, TIMER_UNIQUE|TIMER_STOPPABLE) - RegisterSignal(attached_to, COMSIG_MOVABLE_MOVED, PROC_REF(transmitter_move_handler)) - return TRUE - return FALSE - -/obj/item/phone/proc/transmitter_move_handler(datum/source) - SIGNAL_HANDLER - zlevel_transfer = FALSE - if(zlevel_transfer_timer) - deltimer(zlevel_transfer_timer) - UnregisterSignal(attached_to, COMSIG_MOVABLE_MOVED) - reset_tether() - -/obj/item/phone/proc/try_doing_tether() - zlevel_transfer_timer = TIMER_ID_NULL - zlevel_transfer = FALSE - UnregisterSignal(attached_to, COMSIG_MOVABLE_MOVED) - reset_tether() - -/obj/structure/transmitter/no_dnd - do_not_disturb = PHONE_DND_FORBIDDEN - -//rotary desk phones (need a touch tone handset at some point) -/obj/structure/transmitter/rotary - name = "rotary telephone" - icon_state = "rotary_phone" - desc = "The finger plate is a little stiff." - -/obj/structure/transmitter/rotary/no_dnd - do_not_disturb = PHONE_DND_FORBIDDEN - -/obj/structure/transmitter/touchtone - name = "touch-tone telephone" - icon_state = "rotary_phone"//placeholder - desc = "Ancient aliens, it's all true. I'm an expert just like you!" - -/obj/structure/transmitter/colony_net - networks_receive = list(FACTION_COLONIST) - networks_transmit = list(FACTION_COLONIST) - -/obj/structure/transmitter/colony_net/rotary - name = "rotary telephone" - icon_state = "rotary_phone" - desc = "The finger plate is a little stiff." - -/obj/structure/transmitter/upp_net - networks_receive = list(FACTION_UPP) - networks_transmit = list(FACTION_UPP) - -/obj/structure/transmitter/upp_net/rotary - name = "rotary telephone" - icon_state = "rotary_phone" - desc = "The finger plate is a little stiff." - -/obj/structure/transmitter/clf_net - networks_receive = list(FACTION_CLF) - networks_transmit = list(FACTION_CLF) - -/obj/structure/transmitter/clf_net/rotary - name = "rotary telephone" - icon_state = "rotary_phone" - desc = "The finger plate is a little stiff." - -/obj/structure/transmitter/wy_net - networks_receive = list(FACTION_WY) - networks_transmit = list(FACTION_WY) - -/obj/structure/transmitter/wy_net/rotary - name = "rotary telephone" - icon_state = "rotary_phone" - desc = "The finger plate is a little stiff." diff --git a/code/modules/cm_phone/phone_base.dm b/code/modules/cm_phone/phone_base.dm new file mode 100644 index 0000000000..4b74262b9e --- /dev/null +++ b/code/modules/cm_phone/phone_base.dm @@ -0,0 +1,100 @@ +/obj/structure/phone_base + name = "telephone receiver" + icon = 'icons/obj/structures/structures.dmi' + icon_state = "wall_phone" + desc = "It is a wall mounted telephone. The fine text reads: To log your details with the mainframe please insert your keycard into the slot below. Unfortunately the slot is jammed. You can still use the phone, however." + + var/phone_category = "Uncategorised" + var/phone_color = "white" + var/phone_id = "Telephone" + var/phone_icon + + /// Whether or not the phone is receiving calls or not. Varies between on/off or forcibly on/off. + var/do_not_disturb = PHONE_DO_NOT_DISTURB_OFF + + var/list/networks_receive = list(FACTION_MARINE) + var/list/networks_transmit = list(FACTION_MARINE) + +/obj/structure/phone_base/Initialize(mapload, ...) + . = ..() + + AddComponent(/datum/component/phone, phone_category, phone_color, phone_id, phone_icon, do_not_disturb, networks_receive, networks_transmit) + RegisterSignal(src, COMSIG_ATOM_PHONE_PICKED_UP, PROC_REF(phone_picked_up)) + RegisterSignal(src, COMSIG_ATOM_PHONE_HUNG_UP, PROC_REF(phone_hung_up)) + RegisterSignal(src, COMSIG_ATOM_PHONE_RINGING, PROC_REF(phone_ringing)) + RegisterSignal(src, COMSIG_ATOM_PHONE_STOPPED_RINGING, PROC_REF(phone_stopped_ringing)) + +/obj/structure/phone_base/Destroy() + networks_receive = null + networks_transmit = null + return ..() + +/obj/structure/phone_base/proc/phone_picked_up() + icon_state = PHONE_OFF_BASE_UNIT_ICON_STATE + +/obj/structure/phone_base/proc/phone_hung_up() + icon_state = PHONE_ON_BASE_UNIT_ICON_STATE + +/obj/structure/phone_base/proc/phone_ringing() + icon_state = PHONE_RINGING_ICON_STATE + +/obj/structure/phone_base/proc/phone_stopped_ringing() + if(icon_state == PHONE_OFF_BASE_UNIT_ICON_STATE) + return + icon_state = PHONE_ON_BASE_UNIT_ICON_STATE + +/obj/structure/phone_base/hidden + do_not_disturb = PHONE_DO_NOT_DISTURB_FORCED + +/obj/structure/phone_base/no_dnd + do_not_disturb = PHONE_DO_NOT_DISTURB_FORBIDDEN + +//rotary desk phones (need a touch tone handset at some point) +/obj/structure/phone_base/rotary + name = "rotary telephone" + icon_state = "rotary_phone" + desc = "The finger plate is a little stiff." + +/obj/structure/phone_base/rotary/no_dnd + do_not_disturb = PHONE_DO_NOT_DISTURB_FORBIDDEN + +/obj/structure/phone_base/touchtone + name = "touch-tone telephone" + icon_state = "rotary_phone"//placeholder + desc = "Ancient aliens, it's all true. I'm an expert just like you!" + +/obj/structure/phone_base/colony_net + networks_receive = list(FACTION_COLONIST) + networks_transmit = list(FACTION_COLONIST) + +/obj/structure/phone_base/colony_net/rotary + name = "rotary telephone" + icon_state = "rotary_phone" + desc = "The finger plate is a little stiff." + +/obj/structure/phone_base/upp_net + networks_receive = list(FACTION_UPP) + networks_transmit = list(FACTION_UPP) + +/obj/structure/phone_base/upp_net/rotary + name = "rotary telephone" + icon_state = "rotary_phone" + desc = "The finger plate is a little stiff." + +/obj/structure/phone_base/clf_net + networks_receive = list(FACTION_CLF) + networks_transmit = list(FACTION_CLF) + +/obj/structure/phone_base/clf_net/rotary + name = "rotary telephone" + icon_state = "rotary_phone" + desc = "The finger plate is a little stiff." + +/obj/structure/phone_base/wy_net + networks_receive = list(FACTION_WY) + networks_transmit = list(FACTION_WY) + +/obj/structure/phone_base/wy_net/rotary + name = "rotary telephone" + icon_state = "rotary_phone" + desc = "The finger plate is a little stiff." diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 8cd5b148a1..fc62c076c7 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -65,6 +65,9 @@ if(!src.client) //Somehow return + if(SEND_SIGNAL(src, COMSIG_DEAD_SPEAK, message) & COMPONENT_OVERRIDE_DEAD_SPEAK) + return + if(!src.client.admin_holder || !(client.admin_holder.rights & R_MOD)) if(!dsay_allowed) to_chat(src, SPAN_DANGER("Deadchat is globally muted")) diff --git a/code/modules/movement/movement.dm b/code/modules/movement/movement.dm index da0c76cba9..4645756e29 100644 --- a/code/modules/movement/movement.dm +++ b/code/modules/movement/movement.dm @@ -102,11 +102,14 @@ /atom/movable/proc/forceMove(atom/destination) . = FALSE + if(destination) . = doMove(destination) else CRASH("No valid destination passed into forceMove") + if(SEND_SIGNAL(src, COMSIG_MOVABLE_FORCEMOVED, destination)) + return /atom/movable/proc/moveToNullspace() return doMove(null) diff --git a/code/modules/tents/equipment.dm b/code/modules/tents/equipment.dm index 0d47c7e3ce..bf9a76fc2d 100644 --- a/code/modules/tents/equipment.dm +++ b/code/modules/tents/equipment.dm @@ -44,9 +44,10 @@ return ..() /// Telephone -/obj/structure/transmitter/tent +/obj/structure/phone_base/tent layer = INTERIOR_WALLMOUNT_LAYER -/obj/structure/transmitter/tent/Initialize(mapload, ...) + +/obj/structure/phone_base/tent/Initialize(mapload, ...) AddComponent(/datum/component/tent_supported_object) return ..() diff --git a/code/modules/vehicles/interior/interior_landmarks.dm b/code/modules/vehicles/interior/interior_landmarks.dm index 90284682d2..eb62e50243 100644 --- a/code/modules/vehicles/interior/interior_landmarks.dm +++ b/code/modules/vehicles/interior/interior_landmarks.dm @@ -216,18 +216,18 @@ color = "yellow" /obj/effect/landmark/interior/spawn/telephone/on_load(datum/interior/I) - var/obj/structure/transmitter/Phone = new(loc) - - Phone.icon = icon - Phone.icon_state = icon_state - Phone.layer = layer - Phone.setDir(dir) - Phone.alpha = alpha - Phone.update_icon() - Phone.pixel_x = pixel_x - Phone.pixel_y = pixel_y - Phone.phone_category = "Vehicles" - Phone.phone_id = I.exterior.name + var/obj/structure/phone_base/phone = new(loc) + + phone.icon = icon + phone.icon_state = icon_state + phone.layer = layer + phone.setDir(dir) + phone.alpha = alpha + phone.update_icon() + phone.pixel_x = pixel_x + phone.pixel_y = pixel_y + phone.phone_category = "Vehicles" + phone.phone_id = I.exterior.name qdel(src) diff --git a/colonialmarines.dme b/colonialmarines.dme index 5228c4e0dd..dfab961be2 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -388,6 +388,7 @@ s// DM Environment file for colonialmarines.dme. #include "code\datums\components\label.dm" #include "code\datums\components\orbiter.dm" #include "code\datums\components\overlay_lighting.dm" +#include "code\datums\components\phone.dm" #include "code\datums\components\rename.dm" #include "code\datums\components\speed_modifier.dm" #include "code\datums\components\toxin_buildup.dm" @@ -1585,8 +1586,8 @@ s// DM Environment file for colonialmarines.dme. #include "code\modules\cm_marines\equipment\weapons.dm" #include "code\modules\cm_marines\equipment\mortar\mortar_shells.dm" #include "code\modules\cm_marines\equipment\mortar\mortars.dm" -#include "code\modules\cm_phone\internal_phone.dm" -#include "code\modules\cm_phone\phone.dm" +#include "code\modules\cm_phone\handset.dm" +#include "code\modules\cm_phone\phone_base.dm" #include "code\modules\cm_preds\_yaut_defines.dm" #include "code\modules\cm_preds\falcon.dm" #include "code\modules\cm_preds\huntdata.dm" diff --git a/maps/interiors/tank.dmm b/maps/interiors/tank.dmm index 75da1e24f7..8dc0bf1419 100644 --- a/maps/interiors/tank.dmm +++ b/maps/interiors/tank.dmm @@ -6,7 +6,7 @@ name = "back entrance marker"; tag = "back" }, -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 8; layer = 3.1; name = "Tank Telephone"; diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 6439378dba..e9b77c1ca9 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -1328,7 +1328,7 @@ /obj/structure/machinery/computer/telecomms/monitor{ req_one_access_txt = "19;200" }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "Solaris Ridge"; phone_color = "yellow"; @@ -2958,7 +2958,7 @@ "aiG" = ( /obj/structure/surface/table, /obj/item/handcuffs, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_color = "red"; phone_id = "Marshal Office" @@ -7964,7 +7964,7 @@ "awB" = ( /obj/structure/surface/table/holotable/wood, /obj/item/reagent_container/food/drinks/coffee, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lambda Labs"; phone_color = "blue"; phone_id = "Administration" @@ -9835,7 +9835,7 @@ /obj/item/device/healthanalyzer, /obj/structure/pipes/vents/pump, /obj/item/reagent_container/spray/cleaner, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Solaris Ridge"; phone_color = "green"; phone_id = "Clinic"; @@ -11088,7 +11088,7 @@ "aFl" = ( /obj/structure/surface/table, /obj/effect/spawner/random/technology_scanner, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "Eta Labs"; phone_id = "Observation"; @@ -14186,7 +14186,7 @@ dir = 4; health = 80 }, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_color = "blue"; phone_id = "Administration" @@ -14648,7 +14648,7 @@ /area/bigredv2/caves/eta/storage) "aOQ" = ( /obj/structure/surface/table, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Eta Labs"; phone_color = "Blue"; phone_id = "Director" @@ -14778,7 +14778,7 @@ /area/bigredv2/outside/hydroponics) "aPf" = ( /obj/structure/surface/table, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Eta Labs"; phone_id = "Workshop" }, @@ -15068,7 +15068,7 @@ dir = 4; health = 80 }, -/obj/item/phone, +/obj/item/handset, /turf/open/floor{ dir = 4; icon_state = "warnwhite" @@ -17370,7 +17370,7 @@ /obj/structure/bed/chair/office/dark{ dir = 4 }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Solaris Ridge"; phone_color = "blue"; phone_id = "Operations"; @@ -22512,7 +22512,7 @@ dir = 4 }, /obj/structure/surface/table/reinforced, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lambda Labs"; phone_id = "Virology" }, @@ -22833,7 +22833,7 @@ /area/bigredv2/outside/filtration_plant) "boY" = ( /obj/structure/machinery/cm_vending/sorted/tech/tool_storage, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Solaris Ridge"; phone_color = "yellow"; phone_id = "Filtration"; @@ -23347,7 +23347,7 @@ /obj/structure/surface/table, /obj/effect/spawner/random/technology_scanner, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Solaris Ridge"; phone_color = "yellow"; phone_id = "Engineering"; @@ -24065,7 +24065,7 @@ "bwr" = ( /obj/structure/machinery/light, /obj/structure/surface/table, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_color = "green"; phone_id = "Virology Lab" @@ -24158,7 +24158,7 @@ "bwQ" = ( /obj/structure/surface/table, /obj/item/tool/screwdriver, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Eta Labs"; phone_color = "yellow"; phone_id = "Robotics" @@ -25169,7 +25169,7 @@ "bzF" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tech_supply, -/obj/item/phone, +/obj/item/handset, /turf/open/floor{ dir = 1; icon_state = "darkblue2" @@ -27603,7 +27603,7 @@ /area/bigredv2/caves_sw) "daB" = ( /obj/structure/surface/table/reinforced, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lambda Labs"; phone_id = "Xenobiology" }, @@ -28788,7 +28788,7 @@ }, /area/bigredv2/caves/eta/living) "fyO" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Solaris Ridge"; phone_color = "green"; phone_id = "Clinic Labs"; @@ -28898,7 +28898,7 @@ /obj/structure/machinery/light{ dir = 4 }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lambda Labs"; phone_id = "Surgery"; pixel_y = 24 @@ -29563,7 +29563,7 @@ }, /area/bigredv2/outside/filtration_plant) "htp" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ do_not_disturb = 1; dir = 4; phone_category = "Lambda Labs"; @@ -31175,7 +31175,7 @@ }, /area/bigredv2/caves/eta/xenobiology) "kyz" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "Eta Labs"; phone_id = "Observation"; @@ -32691,7 +32691,7 @@ /area/bigredv2/caves/mining) "ofJ" = ( /obj/structure/surface/table, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Eta Labs"; phone_color = "red"; phone_id = "Security" @@ -36454,7 +36454,7 @@ /area/bigredv2/caves_research) "vBT" = ( /obj/structure/surface/table/reinforced, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_id = "Clinic Reception" }, @@ -36812,7 +36812,7 @@ /area/bigredv2/outside/w) "wry" = ( /obj/structure/surface/table, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_color = "blue"; phone_id = "Space Port" diff --git a/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm b/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm index 8907ab630f..ec219d07b9 100644 --- a/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm +++ b/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm @@ -69,7 +69,7 @@ /area/bigredv2/outside/filtration_cave_cas) "kd" = ( /obj/structure/surface/table/almayer, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_color = "red"; phone_id = "Filtration Checkpoint" diff --git a/maps/map_files/BigRed/standalone/medbay-v3.dmm b/maps/map_files/BigRed/standalone/medbay-v3.dmm index 2e89ccc9f4..ae681377cb 100644 --- a/maps/map_files/BigRed/standalone/medbay-v3.dmm +++ b/maps/map_files/BigRed/standalone/medbay-v3.dmm @@ -1729,7 +1729,7 @@ /area/bigredv2/outside/medical) "eD" = ( /obj/structure/surface/table/reinforced, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Solaris Ridge"; phone_id = "Clinic Reception" }, @@ -2055,7 +2055,7 @@ }, /area/bigredv2/outside/medical) "Xh" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Solaris Ridge"; phone_color = "green"; phone_id = "Clinic Labs"; diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm index e265184172..c95caf2a9b 100644 --- a/maps/map_files/CORSAT/Corsat.dmm +++ b/maps/map_files/CORSAT/Corsat.dmm @@ -16467,7 +16467,7 @@ /turf/open/floor/wood, /area/corsat/gamma/administration) "aTJ" = ( -/obj/item/phone, +/obj/item/handset, /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/surface/table/woodentable/fancy, /turf/open/floor{ @@ -25672,7 +25672,7 @@ /area/corsat/omega/offices) "bug" = ( /obj/structure/surface/table/almayer, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ dir = 8; icon_state = "bluegrey" @@ -29328,7 +29328,7 @@ /area/corsat/omega/hangar/security) "bEt" = ( /obj/structure/surface/table/reinforced, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ dir = 8; icon_state = "red" @@ -36395,7 +36395,7 @@ /area/corsat/gamma/hangar/cargo) "csM" = ( /obj/structure/surface/table/almayer, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ icon_state = "bluegreycorner" }, @@ -38369,7 +38369,7 @@ /area/corsat/sigma/biodome/gunrange) "dYh" = ( /obj/structure/surface/table/woodentable/fancy, -/obj/item/phone, +/obj/item/handset, /turf/open/floor{ dir = 8; icon_state = "carpet15-15" @@ -41794,7 +41794,7 @@ /area/corsat/theta/airlock/east/id) "gwW" = ( /obj/structure/surface/table/reinforced, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ dir = 10; icon_state = "red" @@ -48246,7 +48246,7 @@ /area/corsat/gamma/biodome/complex) "lnW" = ( /obj/structure/surface/table/reinforced, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ dir = 4; icon_state = "purplewhite" @@ -48818,7 +48818,7 @@ /area/corsat/sigma/south/complex) "lIX" = ( /obj/structure/surface/table/reinforced, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ icon_state = "purplewhite" }, @@ -54498,7 +54498,7 @@ dir = 4; health = 80 }, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/corsat{ icon_state = "blue" }, @@ -64466,7 +64466,7 @@ /obj/item/ashtray/plastic{ pixel_x = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -4; pixel_y = 4 }, diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 17a02d24ce..d7a3cd48f8 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -8246,7 +8246,7 @@ "ayG" = ( /obj/structure/surface/table, /obj/effect/spawner/random/tech_supply, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/prison{ dir = 1; icon_state = "blue" diff --git a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm index 0fd8b269d3..9cd11760c2 100644 --- a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm +++ b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm @@ -17167,7 +17167,7 @@ }, /area/prison/security/checkpoint/highsec/n) "aWF" = ( -/obj/item/phone, +/obj/item/handset, /obj/structure/surface/table/reinforced, /turf/open/floor/prison{ dir = 9; @@ -18315,7 +18315,7 @@ /turf/open/floor/prison, /area/prison/kitchen) "bag" = ( -/obj/item/phone, +/obj/item/handset, /obj/structure/surface/table/reinforced, /turf/open/floor{ icon_state = "hydrofloor" @@ -20844,7 +20844,7 @@ }, /area/prison/cellblock/vip) "bhq" = ( -/obj/item/phone, +/obj/item/handset, /obj/structure/surface/table/reinforced, /turf/open/floor/prison{ icon_state = "cell_stripe" @@ -23437,7 +23437,7 @@ }, /area/prison/cellblock/vip) "boR" = ( -/obj/item/phone, +/obj/item/handset, /obj/structure/surface/table/reinforced, /turf/open/floor/prison{ dir = 1; @@ -37320,7 +37320,7 @@ /turf/open/floor/prison, /area/prison/recreation/medsec) "cgm" = ( -/obj/item/phone, +/obj/item/handset, /obj/structure/surface/table/reinforced, /turf/open/floor/prison, /area/prison/recreation/medsec) diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index 660c219af5..fd4c360e7e 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -2035,7 +2035,7 @@ /area/fiorina/station/botany) "bck" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_y = 7 }, /turf/open/floor/prison{ @@ -11656,7 +11656,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -11946,7 +11946,7 @@ }, /area/fiorina/station/lowsec) "hob" = ( -/obj/item/phone{ +/obj/item/handset{ pixel_y = 7 }, /turf/open/floor/plating/prison, @@ -12421,11 +12421,11 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 7; pixel_y = -16 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -3; pixel_y = 16 }, @@ -16569,11 +16569,11 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 6; pixel_y = -15 }, -/obj/item/phone{ +/obj/item/handset{ pixel_y = 7 }, /turf/open/floor/prison{ @@ -17733,7 +17733,7 @@ /area/fiorina/station/transit_hub) "kLX" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/prison{ dir = 10; icon_state = "sterile_white" @@ -19893,7 +19893,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -3; pixel_y = 13 }, @@ -21789,7 +21789,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -3; pixel_y = 13 }, @@ -31826,7 +31826,7 @@ /turf/open/floor/plating/prison, /area/fiorina/station/medbay) "tER" = ( -/obj/item/phone{ +/obj/item/handset{ pixel_x = 9; pixel_y = -10 }, @@ -34510,11 +34510,11 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -3; pixel_y = 10 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 9; pixel_y = -10 }, @@ -36440,10 +36440,10 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_y = -4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 7; pixel_y = 10 }, diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/20.medicalhold.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/20.medicalhold.dmm index 0043ae9f1c..368d8e5faa 100644 --- a/maps/map_files/FOP_v3_Sciannex/sprinkles/20.medicalhold.dmm +++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/20.medicalhold.dmm @@ -494,7 +494,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -3; pixel_y = 13 }, diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm index d777aaf2e7..0332274d42 100644 --- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm +++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm @@ -11183,7 +11183,7 @@ pixel_y = 5 }, /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = -12; pixel_y = 7 }, diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index fdc0fdea32..f82f8bc42d 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -3336,7 +3336,7 @@ /turf/open/floor/almayer/research/containment/floor2, /area/kutjevo/interior/power) "ewF" = ( -/obj/item/phone{ +/obj/item/handset{ pixel_x = 1; pixel_y = 4 }, @@ -8059,7 +8059,7 @@ dir = 8 }, /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 5; pixel_y = -4 }, diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm index e798127468..7559e07353 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -1367,7 +1367,7 @@ }, /area/lv522/indoors/a_block/dorms) "aNn" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Colony Corporate"; @@ -2377,7 +2377,7 @@ /area/lv522/indoors/c_block/garage) "bny" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Reactor Garage"; @@ -8838,7 +8838,7 @@ /area/lv522/oob) "ebR" = ( /obj/structure/surface/table/almayer, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 1; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -11205,7 +11205,7 @@ /obj/structure/platform{ dir = 8 }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "LZ1 Service Tunnel"; @@ -11478,7 +11478,7 @@ /area/lv522/landing_zone_2) "ffO" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 8; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -17534,7 +17534,7 @@ "huX" = ( /obj/structure/surface/table/almayer, /obj/effect/decal/cleanable/dirt, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 1; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -18627,7 +18627,7 @@ "hPQ" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "LV522 Chances Claim"; phone_id = "Chief Engineer Office"; pixel_x = -2; @@ -19659,7 +19659,7 @@ /area/lv522/landing_zone_1/tunnel) "ike" = ( /obj/item/prop/alien/hugger, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -22663,7 +22663,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -23515,7 +23515,7 @@ /turf/closed/wall/r_wall/biodome/biodome_unmeltable, /area/lv522/oob) "jEF" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Reactor Meeting Room"; @@ -29654,7 +29654,7 @@ /area/lv522/landing_zone_2) "lSP" = ( /obj/structure/surface/table/almayer, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "LV522 Chances Claim"; phone_id = "Colony Operations Centre"; pixel_y = 6 @@ -30067,7 +30067,7 @@ "mbw" = ( /obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/dirt, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Colony Dining"; @@ -31010,7 +31010,7 @@ /turf/open/floor/grass, /area/lv522/indoors/a_block/garden) "mtM" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -31032,7 +31032,7 @@ "muO" = ( /obj/structure/surface/table/almayer, /obj/effect/decal/cleanable/dirt, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 1; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -32905,7 +32905,7 @@ /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/security) "nem" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Colony Northern Dorms"; @@ -34187,7 +34187,7 @@ /turf/open/floor/prison, /area/lv522/indoors/c_block/mining) "nDS" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Colony Dorms"; @@ -36356,7 +36356,7 @@ }, /area/lv522/outdoors/colony_streets/north_west_street) "osm" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Reactor Sewer"; @@ -37068,7 +37068,7 @@ }, /area/lv522/indoors/a_block/admin) "oHR" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 4; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -37219,7 +37219,7 @@ }, /area/lv522/atmos/east_reactor/south) "oKN" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Reactor Central Office"; @@ -41954,7 +41954,7 @@ }, /area/lv522/indoors/a_block/dorms) "qyp" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Reactor Eastern Reactor Control"; @@ -42387,7 +42387,7 @@ /turf/open/asphalt/cement, /area/lv522/outdoors/colony_streets/central_streets) "qGh" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Colony Fitness"; @@ -44203,7 +44203,7 @@ "rjl" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /obj/effect/decal/cleanable/blood, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "LV522 Chances Claim"; phone_color = "red"; phone_id = "Reactor Entrance Office"; @@ -47074,7 +47074,7 @@ /area/lv522/landing_zone_2) "slt" = ( /obj/structure/surface/table/almayer, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "LV522 Chances Claim"; phone_id = "Reactor Control"; pixel_y = 6 @@ -55594,7 +55594,7 @@ /obj/structure/bed/chair{ dir = 8 }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 8; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -59282,7 +59282,7 @@ /area/lv522/indoors/a_block/admin) "wDu" = ( /obj/structure/pipes/standard/simple/hidden/green, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 8; phone_category = "LV522 Chances Claim"; phone_color = "red"; @@ -60553,7 +60553,7 @@ /area/lv522/outdoors/colony_streets/north_street) "xfS" = ( /obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ dir = 1; phone_category = "LV522 Chances Claim"; phone_color = "red"; diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index 20757954b5..80da4a7381 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -4750,7 +4750,7 @@ /obj/structure/machinery/light{ dir = 8 }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_id = "Research Dome"; pixel_y = 24 @@ -5744,7 +5744,7 @@ /area/lv624/lazarus/sleep_female) "aBe" = ( /obj/structure/surface/table, -/obj/item/phone, +/obj/item/handset, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, /turf/open/floor{ dir = 9; @@ -8068,7 +8068,7 @@ }, /area/lv624/lazarus/main_hall) "aJC" = ( -/obj/item/phone{ +/obj/item/handset{ desc = "A model of an ancient Earth communication device."; force = 8 }, @@ -8640,7 +8640,7 @@ pixel_x = 6; pixel_y = 14 }, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lazarus Landing"; phone_color = "red"; phone_id = "Marshal Office" @@ -11548,7 +11548,7 @@ "aXt" = ( /obj/structure/surface/rack, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_color = "yellow"; phone_id = "Engineering"; @@ -11861,7 +11861,7 @@ "aYJ" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/trash/chips, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lazarus Landing"; phone_color = "blue"; phone_id = "Director's Office" @@ -14986,7 +14986,7 @@ /turf/open/gm/river, /area/lv624/ground/river/central_river) "hXt" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_id = "Lakeside Bar"; pixel_y = 32 @@ -17005,7 +17005,7 @@ }, /area/lv624/ground/barrens/west_barrens) "nrP" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_id = "Cargo"; pixel_y = 24 @@ -18086,7 +18086,7 @@ /obj/structure/machinery/light{ dir = 4 }, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lazarus Landing"; phone_id = "Medbay" }, @@ -18254,7 +18254,7 @@ pixel_x = 25; pixel_y = -5 }, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_color = "blue"; phone_id = "Corporate Office"; @@ -19042,7 +19042,7 @@ /turf/open/gm/dirtgrassborder/south, /area/lv624/ground/colony/north_tcomms_road) "rVH" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_color = "yellow"; phone_id = "Communications"; @@ -20048,7 +20048,7 @@ }, /area/lv624/ground/caves/sand_temple) "ulp" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_color = "red"; phone_id = "Secure Storage"; diff --git a/maps/map_files/LV624/armory/10.cheese.dmm b/maps/map_files/LV624/armory/10.cheese.dmm index af57be0474..b16499db31 100644 --- a/maps/map_files/LV624/armory/10.cheese.dmm +++ b/maps/map_files/LV624/armory/10.cheese.dmm @@ -17,7 +17,7 @@ }, /area/lv624/lazarus/main_hall) "d" = ( -/obj/item/phone{ +/obj/item/handset{ desc = "A model of an ancient Earth communication device."; force = 8 }, diff --git a/maps/map_files/LV624/armory/10.extra.dmm b/maps/map_files/LV624/armory/10.extra.dmm index 6ac8be8435..e407d06c85 100644 --- a/maps/map_files/LV624/armory/10.extra.dmm +++ b/maps/map_files/LV624/armory/10.extra.dmm @@ -17,7 +17,7 @@ }, /area/lv624/lazarus/main_hall) "d" = ( -/obj/item/phone{ +/obj/item/handset{ desc = "A model of an ancient Earth communication device."; force = 8 }, diff --git a/maps/map_files/LV624/armory/10.looted.dmm b/maps/map_files/LV624/armory/10.looted.dmm index cf9c2d141a..40e2637415 100644 --- a/maps/map_files/LV624/armory/10.looted.dmm +++ b/maps/map_files/LV624/armory/10.looted.dmm @@ -18,7 +18,7 @@ }, /area/lv624/lazarus/main_hall) "d" = ( -/obj/item/phone{ +/obj/item/handset{ desc = "A model of an ancient Earth communication device."; force = 8 }, diff --git a/maps/map_files/LV624/medbay/10.destroyed.dmm b/maps/map_files/LV624/medbay/10.destroyed.dmm index bf310be7dd..d0f71603dd 100644 --- a/maps/map_files/LV624/medbay/10.destroyed.dmm +++ b/maps/map_files/LV624/medbay/10.destroyed.dmm @@ -129,7 +129,7 @@ /obj/structure/machinery/light{ dir = 4 }, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lazarus Landing"; phone_id = "Medbay" }, diff --git a/maps/map_files/LV624/medbay/30.larvasurgery.dmm b/maps/map_files/LV624/medbay/30.larvasurgery.dmm index 613b76c3e2..7a773c4c6d 100644 --- a/maps/map_files/LV624/medbay/30.larvasurgery.dmm +++ b/maps/map_files/LV624/medbay/30.larvasurgery.dmm @@ -515,7 +515,7 @@ /obj/structure/machinery/light{ dir = 4 }, -/obj/structure/transmitter/colony_net/rotary{ +/obj/structure/phone_base/colony_net/rotary{ phone_category = "Lazarus Landing"; phone_id = "Medbay" }, diff --git a/maps/map_files/LV624/science/10.yautja.dmm b/maps/map_files/LV624/science/10.yautja.dmm index 7c8df9531d..52130f95fc 100644 --- a/maps/map_files/LV624/science/10.yautja.dmm +++ b/maps/map_files/LV624/science/10.yautja.dmm @@ -172,7 +172,7 @@ dir = 8 }, /obj/effect/landmark/crap_item, -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_id = "Research Dome"; pixel_y = 24 diff --git a/maps/map_files/LV624/science/40.fullylocked.dmm b/maps/map_files/LV624/science/40.fullylocked.dmm index 1957d6fef0..b6124474f9 100644 --- a/maps/map_files/LV624/science/40.fullylocked.dmm +++ b/maps/map_files/LV624/science/40.fullylocked.dmm @@ -409,7 +409,7 @@ }, /area/lv624/lazarus/research) "oe" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ phone_category = "Lazarus Landing"; phone_id = "Research Dome"; pixel_y = 24 diff --git a/maps/map_files/LV624/standalone/clfship.dmm b/maps/map_files/LV624/standalone/clfship.dmm index e69c2de5bc..2700593a2a 100644 --- a/maps/map_files/LV624/standalone/clfship.dmm +++ b/maps/map_files/LV624/standalone/clfship.dmm @@ -161,7 +161,7 @@ }, /area/lv624/lazarus/crashed_ship) "fA" = ( -/obj/structure/transmitter/clf_net{ +/obj/structure/phone_base/clf_net{ phone_category = "CR-116"; phone_id = "Armoury"; pixel_y = 32 @@ -664,7 +664,7 @@ "sI" = ( /obj/structure/surface/table/reinforced/prison, /obj/effect/spawner/random/toolbox, -/obj/structure/transmitter/clf_net/rotary{ +/obj/structure/phone_base/clf_net/rotary{ phone_category = "CR-116"; phone_color = "yellow"; phone_id = "Engineering" @@ -1657,7 +1657,7 @@ /area/lv624/lazarus/crashed_ship) "Qj" = ( /obj/structure/machinery/body_scanconsole, -/obj/structure/transmitter/clf_net{ +/obj/structure/phone_base/clf_net{ phone_category = "CR-116"; phone_color = "green"; phone_id = "Medical Bay"; @@ -1987,7 +1987,7 @@ }, /area/lv624/lazarus/crashed_ship) "XM" = ( -/obj/structure/transmitter/clf_net{ +/obj/structure/phone_base/clf_net{ phone_category = "CR-116"; phone_id = "Cargo Bay"; pixel_y = 32 diff --git a/maps/map_files/LV624/standalone/laststand.dmm b/maps/map_files/LV624/standalone/laststand.dmm index 43201f92cb..ebdb595397 100644 --- a/maps/map_files/LV624/standalone/laststand.dmm +++ b/maps/map_files/LV624/standalone/laststand.dmm @@ -404,7 +404,7 @@ /turf/open/floor/wood, /area/lv624/ground/caves/north_central_caves) "Yc" = ( -/obj/structure/transmitter/colony_net{ +/obj/structure/phone_base/colony_net{ pixel_y = 32; phone_category = "Lazarus Landing"; phone_id = "Lakeside Bar" diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index 328e450fba..d34d18de84 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -1306,7 +1306,7 @@ /area/strata/ug/interior) "adR" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -4512,7 +4512,7 @@ /area/strata/ag/interior/research_decks/security) "anv" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -4540,7 +4540,7 @@ /area/strata/ag/exterior/research_decks) "anz" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -4819,7 +4819,7 @@ /area/strata/ag/interior/outpost/security) "aoD" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -6165,7 +6165,7 @@ /area/strata/ag/interior/outpost/security) "asB" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -6252,7 +6252,7 @@ /area/strata/ag/interior/outpost/canteen/lower_cafeteria) "asP" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -7055,7 +7055,7 @@ "avj" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/device/flashlight/lamp, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -7274,7 +7274,7 @@ dir = 8 }, /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -8812,7 +8812,7 @@ /area/strata/ag/interior/outpost/security) "aAC" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -8842,7 +8842,7 @@ "aAG" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/device/flashlight/lamp, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -12599,7 +12599,7 @@ pixel_x = -10 }, /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -14807,7 +14807,7 @@ /area/strata/ag/interior/outpost/admin) "aTN" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -15826,7 +15826,7 @@ /area/strata/ag/interior/mountain) "aXH" = ( /obj/structure/surface/table, -/obj/item/phone, +/obj/item/handset, /turf/open/floor/strata, /area/strata/ag/interior/dorms/south) "aXI" = ( @@ -17987,7 +17987,7 @@ /area/strata/ag/exterior/paths/adminext) "bfF" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -20087,7 +20087,7 @@ "bnI" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/paper_bin, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -21469,7 +21469,7 @@ /area/strata/ag/interior/outpost/admin) "bsH" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -23500,7 +23500,7 @@ /area/strata/ag/interior/outpost/med) "bBY" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -23736,7 +23736,7 @@ /obj/item/paper_bin, /obj/item/tool/pen/blue, /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -24098,7 +24098,7 @@ /area/strata/ag/interior/outpost/med) "bGx" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -24569,7 +24569,7 @@ /area/strata/ag/interior/outpost/med) "bJW" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -27900,7 +27900,7 @@ /obj/structure/surface/table/reinforced/prison, /obj/item/paper_bin, /obj/item/tool/pen/blue, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -28071,7 +28071,7 @@ /area/strata/ag/interior/outpost/engi/drome/shuttle) "clr" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -29755,7 +29755,7 @@ dir = 1 }, /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -31540,7 +31540,7 @@ /obj/structure/surface/table/reinforced/prison, /obj/item/paper_bin, /obj/item/tool/pen/blue, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -31654,7 +31654,7 @@ "gkA" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/device/flashlight/lamp, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -32113,7 +32113,7 @@ /area/strata/ag/exterior/research_decks) "haw" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, @@ -37528,7 +37528,7 @@ /area/strata/ag/interior/mountain) "qzf" = ( /obj/structure/surface/table/reinforced/prison, -/obj/item/phone{ +/obj/item/handset{ pixel_x = 8; pixel_y = 6 }, diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 91450070b8..c1cd06182d 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -1576,7 +1576,7 @@ /area/almayer/shipboard/starboard_missiles) "afb" = ( /obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 4; name = "Starboard Railgun Control Telephone"; phone_category = "Command"; @@ -5561,7 +5561,7 @@ /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 }, -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 8; name = "OT Telephone"; phone_category = "Almayer"; @@ -6983,7 +6983,7 @@ unacidable = 1; unslashable = 1 }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "AI Reception Telephone"; phone_category = "ARES"; phone_color = "blue"; @@ -10373,7 +10373,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "S" }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Researcher Office Telephone"; phone_category = "Almayer"; phone_id = "Research"; @@ -12001,7 +12001,7 @@ /turf/closed/wall/almayer, /area/almayer/hallways/starboard_umbilical) "aQy" = ( -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 8; name = "RO Office Telephone"; phone_category = "Offices"; @@ -19162,14 +19162,14 @@ pixel_x = -17 }, /obj/structure/surface/table/almayer, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Telephone"; phone_category = "Almayer"; phone_id = "Auxiliary Support Office Second Line"; pixel_x = -5; pixel_y = 3 }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Telephone"; phone_category = "Almayer"; phone_id = "Auxiliary Support Office"; @@ -25705,7 +25705,7 @@ pixel_x = -6; pixel_y = -5 }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Flight Deck Telephone"; phone_category = "Almayer"; phone_id = "Flight Deck"; @@ -30126,7 +30126,7 @@ }, /obj/item/reagent_container/food/condiment/enzyme, /obj/item/reagent_container/food/condiment/enzyme, -/obj/structure/transmitter{ +/obj/structure/phone_base{ name = "Kitchen Telephone"; phone_category = "Almayer"; phone_id = "Kitchen"; @@ -34010,7 +34010,7 @@ /area/almayer/medical/medical_science) "eSJ" = ( /obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Captain's Office"; phone_category = "Offices"; phone_id = "Captain's Office"; @@ -34626,7 +34626,7 @@ "ffV" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/crew/alt, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Brig Cells Telephone"; phone_category = "Almayer"; phone_id = "Brig Cells"; @@ -36627,7 +36627,7 @@ department = "AI Core"; pixel_y = 8 }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "AI Core Telephone"; phone_category = "ARES"; phone_color = "blue"; @@ -37479,7 +37479,7 @@ /area/almayer/command/cichallway) "gtA" = ( /obj/structure/surface/table/reinforced/prison, -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 8; name = "Medical Telephone"; phone_category = "Almayer"; @@ -39952,7 +39952,7 @@ pixel_x = 5 }, /obj/structure/surface/table/reinforced/black, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "CIC Reception Telephone"; phone_category = "Command"; phone_id = "CIC Reception"; @@ -41307,7 +41307,7 @@ }, /area/almayer/medical/lower_medical_medbay) "hZU" = ( -/obj/structure/transmitter{ +/obj/structure/phone_base{ name = "Brig Offices Telephone"; phone_category = "Almayer"; phone_id = "Brig Main Offices"; @@ -41764,7 +41764,7 @@ pixel_x = 8; pixel_y = -4 }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Senior Enlisted Advisor Office Telephone"; phone_category = "Almayer"; phone_id = "Senior Enlisted Advisor's Office"; @@ -43988,7 +43988,7 @@ /obj/structure/surface/table/almayer, /obj/effect/landmark/map_item, /obj/item/folder/red, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Brig CMP's Office Telephone"; phone_category = "Offices"; phone_id = "Brig CMP's Office"; @@ -45990,7 +45990,7 @@ unacidable = 1; unslashable = 1 }, -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 1; name = "Brig Warden's Office Telephone"; phone_category = "Offices"; @@ -46299,7 +46299,7 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 }, -/obj/structure/transmitter{ +/obj/structure/phone_base{ name = "CMO Office Telephone"; phone_category = "Offices"; phone_id = "CMO Office"; @@ -48101,7 +48101,7 @@ }, /area/almayer/hallways/aft_hallway) "kSU" = ( -/obj/structure/transmitter/no_dnd{ +/obj/structure/phone_base/no_dnd{ name = "Requisition Telephone"; phone_category = "Almayer"; phone_id = "Requisition"; @@ -50677,7 +50677,7 @@ pixel_x = -17; pixel_y = 16 }, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Alpha Overwatch Telephone"; phone_category = "Command"; phone_id = "Alpha Overwatch" @@ -54503,7 +54503,7 @@ }, /area/almayer/hull/lower_hull/l_f_s) "nDh" = ( -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "CL Office Telephone"; phone_category = "Almayer"; phone_id = "CL Office" @@ -58707,7 +58707,7 @@ pixel_y = 28 }, /obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Intelligence Center Telephone"; phone_category = "Almayer"; phone_id = "Intelligence Center Telephone" @@ -65440,7 +65440,7 @@ pixel_x = -17; pixel_y = -17 }, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Delta Overwatch Telephone"; phone_category = "Command"; phone_id = "Delta Overwatch" @@ -66792,7 +66792,7 @@ /obj/structure/machinery/light{ dir = 1 }, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Charlie Overwatch Telephone"; phone_category = "Command"; phone_id = "Charlie Overwatch" @@ -67587,7 +67587,7 @@ dir = 4; layer = 3.25 }, -/obj/structure/transmitter{ +/obj/structure/phone_base{ name = "CE Office Telephone"; phone_category = "Offices"; phone_id = "CE Office"; @@ -69696,7 +69696,7 @@ pixel_y = 15 }, /obj/structure/machinery/light, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Bravo Overwatch Telephone"; phone_category = "Command"; phone_id = "Bravo Overwatch" @@ -73872,7 +73872,7 @@ pixel_y = -5; req_one_access_txt = "1;4" }, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Combat Information Center Telephone"; phone_category = "Command"; phone_id = "Combat Information Center"; @@ -75727,7 +75727,7 @@ pixel_x = 7; pixel_y = 29 }, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Reporter Telephone"; phone_category = "Almayer"; phone_id = "Reporter"; @@ -80027,7 +80027,7 @@ /area/almayer/hull/lower_hull/l_a_s) "ybZ" = ( /obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/transmitter{ +/obj/structure/phone_base{ dir = 4; name = "Port Railgun Control Telephone"; phone_category = "Command"; diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm index 43b3d26ec3..88182faf3b 100644 --- a/maps/map_files/generic/Admin_level.dmm +++ b/maps/map_files/generic/Admin_level.dmm @@ -662,7 +662,7 @@ /turf/open/space/transit/east/shuttlespace_ew8, /area/space) "qu" = ( -/obj/structure/transmitter/hidden{ +/obj/structure/phone_base/hidden{ dir = 8; name = "Station Telephone"; phone_id = "Unknown Signal"; diff --git a/maps/map_files/golden_arrow/golden_arrow.dmm b/maps/map_files/golden_arrow/golden_arrow.dmm index babbc40c63..9ee3a232d1 100644 --- a/maps/map_files/golden_arrow/golden_arrow.dmm +++ b/maps/map_files/golden_arrow/golden_arrow.dmm @@ -6787,7 +6787,7 @@ pixel_x = -17; pixel_y = 16 }, -/obj/structure/transmitter/rotary/no_dnd{ +/obj/structure/phone_base/rotary/no_dnd{ name = "Alpha Overwatch Telephone"; phone_category = "Command"; phone_id = "Alpha Overwatch" diff --git a/maps/shuttles/dropship_alamo.dmm b/maps/shuttles/dropship_alamo.dmm index 7c49edfdd0..ea14641a75 100644 --- a/maps/shuttles/dropship_alamo.dmm +++ b/maps/shuttles/dropship_alamo.dmm @@ -382,7 +382,7 @@ /area/shuttle/drop1/sulaco) "Ho" = ( /obj/structure/machinery/computer/dropship_weapons/dropship1, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Alamo Telephone"; phone_category = "Dropship"; phone_id = "Alamo"; diff --git a/maps/shuttles/dropship_normandy.dmm b/maps/shuttles/dropship_normandy.dmm index f1595cd97d..55d07883e3 100644 --- a/maps/shuttles/dropship_normandy.dmm +++ b/maps/shuttles/dropship_normandy.dmm @@ -156,7 +156,7 @@ /area/shuttle/drop2/sulaco) "lH" = ( /obj/structure/machinery/computer/dropship_weapons/dropship2, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "Normandy Telephone"; phone_category = "Dropship"; phone_id = "Normandy"; diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/clf_ert_station.dmm index 7347be914d..aa48ff8d9f 100644 --- a/maps/templates/clf_ert_station.dmm +++ b/maps/templates/clf_ert_station.dmm @@ -1654,7 +1654,7 @@ /obj/item/spacecash/c1, /obj/item/storage/box/matches, /obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "CLF Outpost"; phone_category = "CLF"; phone_id = "CLF Outpost"; diff --git a/maps/templates/upp_ert_station.dmm b/maps/templates/upp_ert_station.dmm index ae2a8ad40c..6db27a83e6 100644 --- a/maps/templates/upp_ert_station.dmm +++ b/maps/templates/upp_ert_station.dmm @@ -876,7 +876,7 @@ /area/adminlevel/ert_station/upp_station) "mG" = ( /obj/structure/surface/table/reinforced/black, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ name = "UPP Station"; phone_category = "UPP"; phone_id = "UPP Station"; diff --git a/maps/templates/weyland_ert_station.dmm b/maps/templates/weyland_ert_station.dmm index 1937aa6a61..82fe23c5bc 100644 --- a/maps/templates/weyland_ert_station.dmm +++ b/maps/templates/weyland_ert_station.dmm @@ -2794,7 +2794,7 @@ /area/adminlevel/ert_station/weyland_station) "Js" = ( /obj/structure/surface/table/reinforced/black, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ do_not_disturb = 2; name = "Weyland-Yutani Station CiC"; phone_category = "W-Y"; @@ -3587,7 +3587,7 @@ /area/adminlevel/ert_station/weyland_station) "SE" = ( /obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/rotary{ +/obj/structure/phone_base/rotary{ do_not_disturb = 2; name = "Weyland-Yutani Station Meeting Room"; phone_category = "W-Y"; diff --git a/maps/tents/tent_cmd.dmm b/maps/tents/tent_cmd.dmm index 0dbd6a6ef3..2349142770 100644 --- a/maps/tents/tent_cmd.dmm +++ b/maps/tents/tent_cmd.dmm @@ -21,7 +21,7 @@ dir = 1 }, /obj/structure/surface/table, -/obj/structure/transmitter/tent{ +/obj/structure/phone_base/tent{ phone_category = "Command"; phone_id = "Ground Command"; pixel_x = -2; diff --git a/maps/tents/tent_reqs.dmm b/maps/tents/tent_reqs.dmm index 2dc47531ed..d5dcd1d51a 100644 --- a/maps/tents/tent_reqs.dmm +++ b/maps/tents/tent_reqs.dmm @@ -53,7 +53,7 @@ dir = 8 }, /obj/structure/bed/chair, -/obj/structure/transmitter/tent{ +/obj/structure/phone_base/tent{ pixel_y = 30; pixel_x = 16; phone_category = "Command"; diff --git a/tgui/packages/tgui/interfaces/GameMaster.js b/tgui/packages/tgui/interfaces/GameMaster.js index 815e37dd05..13b12f5cbc 100644 --- a/tgui/packages/tgui/interfaces/GameMaster.js +++ b/tgui/packages/tgui/interfaces/GameMaster.js @@ -81,7 +81,7 @@ export const GameMaster = (props, context) => {