From 013781c6f6f99c51f06d80a577b2cb59217fefa7 Mon Sep 17 00:00:00 2001 From: Warfan1815 <69102610+Warfan1815@users.noreply.github.com> Date: Wed, 25 Oct 2023 05:00:46 +0100 Subject: [PATCH 01/19] EPIc Epi changes (#22) Co-authored-by: Morrow --- code/__DEFINES/chemistry.dm | 1 + .../vending/vendor_types/crew/synthetic.dm | 3 --- .../machinery/vending/vendor_types/medical.dm | 1 - .../vendor_types/squad_prep/squad_medic.dm | 3 ++- .../items/reagent_containers/autoinjectors.dm | 9 +++++++++ code/game/objects/items/storage/belt.dm | 1 - .../chemistry_properties/prop_special.dm | 17 +++++++++++++++++ .../reagents/chemistry_reactions/medical.dm | 7 +++++++ .../reagents/chemistry_reagents/medical.dm | 15 ++++++++++++++- .../vehicles/interior/interactable/vendors.dm | 1 - icons/obj/items/syringe.dmi | Bin 7035 -> 7079 bytes 11 files changed, 50 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/chemistry.dm b/code/__DEFINES/chemistry.dm index 078ccbdc2d..b99013f8a0 100644 --- a/code/__DEFINES/chemistry.dm +++ b/code/__DEFINES/chemistry.dm @@ -221,6 +221,7 @@ #define PROPERTY_ANTICARCINOGENIC "anti-carcinogenic" #define PROPERTY_UNKNOWN "unknown" //just has an OD effect #define PROPERTY_HEMOSITIC "hemositic" +#define PROPERTY_REVITALIZING "revitalizing" //Property rarity diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index 8e556318c7..bf96246e92 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -49,7 +49,6 @@ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR), list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR), - list("Injector (Epinephrine)", 2, /obj/item/reagent_container/hypospray/autoinjector/adrenaline, null, VENDOR_ITEM_REGULAR), list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR), list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR), list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR), @@ -60,7 +59,6 @@ list("Autoinjector (C-M) (EMPTY)", 2, /obj/item/reagent_container/hypospray/autoinjector/empty/medium, null, VENDOR_ITEM_REGULAR), list("Autoinjector (C-L) (EMPTY)", 4, /obj/item/reagent_container/hypospray/autoinjector/empty/large, null, VENDOR_ITEM_REGULAR), - list("Emergency Defibrillator", 4, /obj/item/device/defibrillator, null, VENDOR_ITEM_MANDATORY), list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Surgical Line", 4, /obj/item/tool/surgery/surgical_line, null, VENDOR_ITEM_REGULAR), list("Synth-Graft", 4, /obj/item/tool/surgery/synthgraft, null, VENDOR_ITEM_REGULAR), @@ -348,7 +346,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Autocompressor", 15, /obj/item/clothing/suit/auto_cpr, null, VENDOR_ITEM_REGULAR), list("Backpack Firefighting Watertank", 15, /obj/item/reagent_container/glass/watertank/atmos, null, VENDOR_ITEM_REGULAR), list("Breaching Hammer", 15, /obj/item/weapon/twohanded/breacher/synth, null, VENDOR_ITEM_REGULAR), - list("Compact Defibrillator", 15, /obj/item/device/defibrillator/compact, null, VENDOR_ITEM_REGULAR), list("Compact Nailgun kit", 15, /obj/effect/essentials_set/cnailgun, null, VENDOR_ITEM_REGULAR), list("Crew Monitor", 15, /obj/item/tool/crew_monitor, null, VENDOR_ITEM_REGULAR), list("Experimental Meson Goggles", 15, /obj/item/clothing/glasses/night/experimental_mesons, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/medical.dm b/code/game/machinery/vending/vendor_types/medical.dm index 9844101cb1..6e721ec4fe 100644 --- a/code/game/machinery/vending/vendor_types/medical.dm +++ b/code/game/machinery/vending/vendor_types/medical.dm @@ -141,7 +141,6 @@ list("AUTOINJECTORS", -1, null, null), list("Autoinjector (Bicaridine)", round(scale * 5), /obj/item/reagent_container/hypospray/autoinjector/bicaridine, VENDOR_ITEM_REGULAR), list("Autoinjector (Dexalin+)", round(scale * 5), /obj/item/reagent_container/hypospray/autoinjector/dexalinp, VENDOR_ITEM_REGULAR), - list("Autoinjector (Epinephrine)", round(scale * 5), /obj/item/reagent_container/hypospray/autoinjector/adrenaline, VENDOR_ITEM_REGULAR), list("Autoinjector (Inaprovaline)", round(scale * 5), /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, VENDOR_ITEM_REGULAR), list("Autoinjector (Kelotane)", round(scale * 5), /obj/item/reagent_container/hypospray/autoinjector/kelotane, VENDOR_ITEM_REGULAR), list("Autoinjector (Oxycodone)", round(scale * 5), /obj/item/reagent_container/hypospray/autoinjector/oxycodone, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index c965b7c90e..833692b8b9 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -23,7 +23,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("AUTOINJECTORS", 0, null, null, null), list("Autoinjector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR), list("Autoinjector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR), - list("Autoinjector (Epinephrine)", 2, /obj/item/reagent_container/hypospray/autoinjector/adrenaline, null, VENDOR_ITEM_REGULAR), list("Autoinjector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR), list("Autoinjector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR), list("Autoinjector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR), @@ -214,4 +213,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list( /obj/item/storage/surgical_case/regular, /obj/item/reagent_container/blood/OMinus, /obj/item/reagent_container/blood/OMinus, + /obj/item/reagent_container/hypospray/autoinjector/adrenaline_concentrated, + /obj/item/reagent_container/hypospray/autoinjector/adrenaline_concentrated, ) diff --git a/code/game/objects/items/reagent_containers/autoinjectors.dm b/code/game/objects/items/reagent_containers/autoinjectors.dm index 46463e628c..248bdd7392 100644 --- a/code/game/objects/items/reagent_containers/autoinjectors.dm +++ b/code/game/objects/items/reagent_containers/autoinjectors.dm @@ -99,6 +99,15 @@ display_maptext = TRUE maptext_label = "Ep" +/obj/item/reagent_container/hypospray/autoinjector/adrenaline_concentrated + name = "epinephrine (concentrated) autoinjector" + chemname = "adrenaline_concentrated" + desc = "An autoinjector loaded with 3 uses of Epinephrine, better known as Adrenaline, a nerve stimulant useful in restarting the heart. In this concentrated form, it will prevent unconciousness but will cause minor suffocation." + amount_per_transfer_from_this = LOWM_REAGENTS_OVERDOSE * INJECTOR_PERCENTAGE_OF_OD + volume = (LOWM_REAGENTS_OVERDOSE * INJECTOR_PERCENTAGE_OF_OD) * INJECTOR_USES + display_maptext = TRUE + maptext_label = "Ep" + /obj/item/reagent_container/hypospray/autoinjector/dexalinp name = "dexalin plus autoinjector" chemname = "dexalinp" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 71edc21e29..d2451ff29a 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -245,7 +245,6 @@ new /obj/item/stack/medical/advanced/bruise_pack(src) new /obj/item/stack/medical/advanced/ointment(src) new /obj/item/stack/medical/advanced/ointment(src) - new /obj/item/reagent_container/hypospray/autoinjector/adrenaline(src) new /obj/item/reagent_container/hypospray/autoinjector/dexalinp(src) new /obj/item/reagent_container/hypospray/autoinjector/oxycodone(src) new /obj/item/storage/pill_bottle/bicaridine(src) diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index 640e184263..7baa66fc58 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -369,3 +369,20 @@ /datum/chem_property/special/firepenetrating/update_reagent() holder.fire_penetrating = TRUE ..() + +/datum/chem_property/special/revitalizing + name = PROPERTY_REVITALIZING + code = "REV" + description = "For a period of time, revitalizes the main systems of the body and prevents unconciousness." + rarity = PROPERTY_ADMIN + category = PROPERTY_TYPE_STIMULANT + value = 666 + +/datum/chem_property/special/revitalizing/reagent_added(mob/living/M) + if(!ishuman(M)) + return + M.status_flags &= ~CANKNOCKOUT + M.knocked_out = 0 + +/datum/chem_property/special/revitalizing/on_delete(mob/living/M) + M.status_flags |= CANKNOCKOUT diff --git a/code/modules/reagents/chemistry_reactions/medical.dm b/code/modules/reagents/chemistry_reactions/medical.dm index 2e38117134..72a491d779 100644 --- a/code/modules/reagents/chemistry_reactions/medical.dm +++ b/code/modules/reagents/chemistry_reactions/medical.dm @@ -14,6 +14,13 @@ required_reagents = list("carbon" = 1, "nitrogen" = 1, "oxygen" = 1) result_amount = 2 +/datum/chemical_reaction/adrenaline_concentrated + name = "Epinephrine (concentrated)" + id = "adrenaline_concentrated" + result = "adrenaline_concentrated" + required_reagents = list("carbon" = 1, "nitrogen" = 1, "oxygen" = 1, "phoron" = 3) + result_amount = 1 + /datum/chemical_reaction/alkysine name = "Alkysine" id = "alkysine" diff --git a/code/modules/reagents/chemistry_reagents/medical.dm b/code/modules/reagents/chemistry_reagents/medical.dm index f69d1b952c..01269a0d85 100644 --- a/code/modules/reagents/chemistry_reagents/medical.dm +++ b/code/modules/reagents/chemistry_reagents/medical.dm @@ -275,7 +275,7 @@ id = "adrenaline" description = "A natural muscle and heart stimulant. Useful for restarting the heart. Overdosing may stress the heart and cause tissue damage." reagent_state = LIQUID - color = "FFE703" // Yellow-ish + color = "#FFE703" // Yellow-ish overdose = LOWM_REAGENTS_OVERDOSE overdose_critical = LOWM_REAGENTS_OVERDOSE_CRITICAL custom_metabolism = AMOUNT_PER_TIME(1, 5 SECONDS) @@ -283,6 +283,19 @@ properties = list(PROPERTY_PAINKILLING = 1.5, PROPERTY_ELECTROGENETIC = 4, PROPERTY_INTRAVENOUS = 1) flags = REAGENT_TYPE_MEDICAL | REAGENT_SCANNABLE +/datum/reagent/medical/adrenaline_concentrated + name = "Epinephrine (concentrated)" + id = "adrenaline_concentrated" + description = "A natural muscle and heart stimulant that is in a high concerntration. Useful for restarting the heart and preventing unconciousness but in this concentrated form it will cause minor suffocation. Overdosing may stress the heart and cause tissue damage." + reagent_state = LIQUID + color = "#FFE702" // Yellow-ish + overdose = LOWM_REAGENTS_OVERDOSE + overdose_critical = LOWM_REAGENTS_OVERDOSE_CRITICAL + custom_metabolism = AMOUNT_PER_TIME(1, 10 SECONDS) + chemclass = CHEM_CLASS_COMMON + properties = list(PROPERTY_PAINKILLING = 1.5, PROPERTY_ELECTROGENETIC = 4, PROPERTY_REVITALIZING = 1, PROPERTY_HYPOXEMIC = 5, PROPERTY_INTRAVENOUS = 1) + flags = REAGENT_TYPE_MEDICAL | REAGENT_SCANNABLE + /datum/reagent/medical/ultrazine name = "Ultrazine" id = "ultrazine" diff --git a/code/modules/vehicles/interior/interactable/vendors.dm b/code/modules/vehicles/interior/interactable/vendors.dm index 6d98bc85e4..f5aef4f430 100644 --- a/code/modules/vehicles/interior/interactable/vendors.dm +++ b/code/modules/vehicles/interior/interactable/vendors.dm @@ -77,7 +77,6 @@ list("AUTOINJECTORS", -1, null, null), list("Autoinjector (Bicaridine)", round(scale * 3), /obj/item/reagent_container/hypospray/autoinjector/bicaridine, VENDOR_ITEM_REGULAR), list("Autoinjector (Dexalin+)", round(scale * 3), /obj/item/reagent_container/hypospray/autoinjector/dexalinp, VENDOR_ITEM_REGULAR), - list("Autoinjector (Epinephrine)", round(scale * 3), /obj/item/reagent_container/hypospray/autoinjector/adrenaline, VENDOR_ITEM_REGULAR), list("Autoinjector (Inaprovaline)", round(scale * 3), /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, VENDOR_ITEM_REGULAR), list("Autoinjector (Kelotane)", round(scale * 3), /obj/item/reagent_container/hypospray/autoinjector/kelotane, VENDOR_ITEM_REGULAR), list("Autoinjector (Oxycodone)", round(scale * 3), /obj/item/reagent_container/hypospray/autoinjector/oxycodone, VENDOR_ITEM_REGULAR), diff --git a/icons/obj/items/syringe.dmi b/icons/obj/items/syringe.dmi index d08b2a8c2d9f99de5a954543eb3722fcbee6c115..d54123a898efa86dcafbf7acc3661027f4371d9c 100644 GIT binary patch literal 7079 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 MDQhd0-M4)5Kbk30dH?_b literal 7035 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 Date: Wed, 25 Oct 2023 00:04:49 -0400 Subject: [PATCH 02/19] sentry ammo --- maps/map_files/golden_arrow/golden_arrow.dmm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/maps/map_files/golden_arrow/golden_arrow.dmm b/maps/map_files/golden_arrow/golden_arrow.dmm index 71575c902c..babbc40c63 100644 --- a/maps/map_files/golden_arrow/golden_arrow.dmm +++ b/maps/map_files/golden_arrow/golden_arrow.dmm @@ -4343,6 +4343,7 @@ }, /area/almayer/engineering) "Bu" = ( +/obj/item/ammo_magazine/sentry, /obj/item/defenses/handheld/sentry, /turf/open/floor/almayer{ icon_state = "plate" @@ -6343,6 +6344,7 @@ pixel_x = 14; pixel_y = 29 }, +/obj/item/ammo_magazine/sentry, /obj/item/defenses/handheld/sentry, /turf/open/floor/almayer{ icon_state = "plate" From ed17044d9e1d33c99b27b2a45c03fc7be82b1c40 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Wed, 25 Oct 2023 15:38:45 -0400 Subject: [PATCH 03/19] Update README.md discord (#28) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fced9e02c9..e02929ee4f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build Status](https://github.com/PvE-CMSS13/PvE-CMSS13/workflows/CI%20Suite/badge.svg)](https://github.com/PvE-CMSS13/PvE-CMSS13/actions?query=workflow%3A%22CI+Suite%22) * **Code:** https://github.com/PvE-CMSS13/PvE-CMSS13 -* **Discord:** https://discord.gg/v6P6wns5dN +* **Discord:** https://discord.gg/pve-cmss13 This is the codebase for the PvE CM-SS13 fork of CM-SS13 flavoured fork of SpaceStation 13 From 03505927e2025374a6c5128ac3fe0a668cf57a62 Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Wed, 25 Oct 2023 16:00:03 -0400 Subject: [PATCH 04/19] APC capacity increase (#27) --- code/modules/vehicles/apc/apc_command.dm | 2 +- code/modules/vehicles/apc/apc_medical.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/vehicles/apc/apc_command.dm b/code/modules/vehicles/apc/apc_command.dm index c5bd559283..67051cd1a6 100644 --- a/code/modules/vehicles/apc/apc_command.dm +++ b/code/modules/vehicles/apc/apc_command.dm @@ -7,7 +7,7 @@ interior_map = /datum/map_template/interior/apc_command - passengers_slots = 8 + passengers_slots = 15 var/sensor_radius = 45 //45 tiles radius diff --git a/code/modules/vehicles/apc/apc_medical.dm b/code/modules/vehicles/apc/apc_medical.dm index f8809bedaa..92813c988f 100644 --- a/code/modules/vehicles/apc/apc_medical.dm +++ b/code/modules/vehicles/apc/apc_medical.dm @@ -8,7 +8,7 @@ interior_map = /datum/map_template/interior/apc_med - passengers_slots = 8 + passengers_slots = 15 //MED APC can store additional 6 dead revivable bodies for the triage //but interior won't allow more revivable dead if passengers_taken_slots >= passengers_slots + revivable_dead_slots //to prevent infinitely growing the marine force inside of the vehicle From eda723670f0ee60e9c97143b8863c6c085ec10a9 Mon Sep 17 00:00:00 2001 From: Morrow Date: Wed, 25 Oct 2023 23:45:28 -0400 Subject: [PATCH 05/19] stops xeno strains --- code/__DEFINES/mode.dm | 2 +- code/modules/mob/living/carbon/xenomorph/Evolution.dm | 2 +- code/modules/mob/living/carbon/xenomorph/XenoMutatorSets.dm | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index ea3aef5fa4..3a3a2473ec 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -58,7 +58,7 @@ #define MODE_RANDOM_HIVE (1<<12)// Makes Join-as-Xeno choose a hive to join as burrowed larva at random rather than at user's input.. #define MODE_THUNDERSTORM (1<<13)// Enables thunderstorm effects on maps that are compatible with it. (Lit exterior tiles, rain effects) #define MODE_FACTION_CLASH (1<<14)// Disables scopes, sniper sentries, OBs, shooting corpses, dragging enemy corpses, stripping enemy corpses -#define MODE_NO_XENO_EVOLVE (1<<15) // Stops all xenos from evolving +#define MODE_NO_XENO_EVOLVE (1<<15) // Stops all xenos from evolving or straining // Gamemode Toggleable Flags #define MODE_NO_SNIPER_SENTRY (1<<0) /// Upgrade kits will no longer allow you to select long-range upgrades diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index bf46934730..467fceb360 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -202,7 +202,7 @@ to_chat(src, SPAN_WARNING("Nuh-uh.")) return FALSE - if(SSticker?.mode?.flags_round_type & MODE_NO_XENO_EVOLVE) + if(SSticker.mode?.flags_round_type & MODE_NO_XENO_EVOLVE) to_chat(src, SPAN_WARNING("This mode disallows xeno evolution.")) return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/XenoMutatorSets.dm b/code/modules/mob/living/carbon/xenomorph/XenoMutatorSets.dm index 1af6eebcf9..83c8500a1b 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoMutatorSets.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoMutatorSets.dm @@ -25,6 +25,10 @@ return FALSE /datum/mutator_set/proc/list_and_purchase_mutators() + if(SSticker.mode?.flags_round_type & MODE_NO_XENO_EVOLVE) + to_chat(usr, SPAN_WARNING("This mode disallows xeno mutators.")) + return FALSE + var/list/mutators_for_purchase = available_mutators() var/mob/living/carbon/xenomorph/Xeno = usr if(mutators_for_purchase.len == 0) From 2fa86070e5342864e505b8233d4802a0bdf7b76e Mon Sep 17 00:00:00 2001 From: Morrow Date: Wed, 25 Oct 2023 23:49:15 -0400 Subject: [PATCH 06/19] kills stasis bags --- code/game/machinery/vending/vendor_types/medical.dm | 1 - .../machinery/vending/vendor_types/squad_prep/squad_medic.dm | 1 - 2 files changed, 2 deletions(-) diff --git a/code/game/machinery/vending/vendor_types/medical.dm b/code/game/machinery/vending/vendor_types/medical.dm index 6e721ec4fe..ece0752721 100644 --- a/code/game/machinery/vending/vendor_types/medical.dm +++ b/code/game/machinery/vending/vendor_types/medical.dm @@ -173,7 +173,6 @@ list("Health Analyzer", round(scale * 5), /obj/item/device/healthanalyzer, VENDOR_ITEM_REGULAR), list("M276 Pattern Medical Storage Rig", round(scale * 2), /obj/item/storage/belt/medical, VENDOR_ITEM_REGULAR), list("Medical HUD Glasses", round(scale * 3), /obj/item/clothing/glasses/hud/health, VENDOR_ITEM_REGULAR), - list("Stasis Bag", round(scale * 2), /obj/item/bodybag/cryobag, VENDOR_ITEM_REGULAR), list("Syringe", round(scale * 7), /obj/item/reagent_container/syringe, VENDOR_ITEM_REGULAR) ) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index 833692b8b9..dd3700b3d5 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -41,7 +41,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("MEDICAL UTILITIES", 0, null, null, null), list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR), list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR), - list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR), list("Pressurized Reagent Canister Pouch (EMPTY)", 3, /obj/item/storage/pouch/pressurized_reagent_canister, null, VENDOR_ITEM_REGULAR), list("G8-A General Utility Pouch", 15, /obj/item/storage/backpack/general_belt, null, VENDOR_ITEM_REGULAR), list("MS-11 Smart Refill Tank", 6, /obj/item/reagent_container/glass/minitank, null, VENDOR_ITEM_REGULAR), From fa7d33ac93b61cb53f93478cb0edc96340fe6b33 Mon Sep 17 00:00:00 2001 From: Morrow Date: Wed, 25 Oct 2023 23:51:12 -0400 Subject: [PATCH 07/19] rail flashlights in prep --- .../game/machinery/vending/vendor_types/squad_prep/squad_prep.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index ba9606d27b..4f382a8f34 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -288,6 +288,7 @@ list("Machete Scabbard (Full)", round(scale * 5), /obj/item/storage/large_holster/machete/full, VENDOR_ITEM_REGULAR), list("Binoculars", round(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR), list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR), + list("Rail Flashlight", round(scale * 5), /obj/item/attachable/flashlight, VENDOR_ITEM_REGULAR), ) //--------------SQUAD ATTACHMENTS VENDOR-------------- From 36b9f26acca0d0bc40b8f0325c1b53670c3f3a9a Mon Sep 17 00:00:00 2001 From: Morrow Date: Wed, 25 Oct 2023 23:52:58 -0400 Subject: [PATCH 08/19] discord link --- interface/interface.dm | 2 +- interface/skin.dmf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/interface.dm b/interface/interface.dm index abbf4049e5..538bf6ed00 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -43,7 +43,7 @@ if(tgui_alert(src, "This will open the discord in your browser. Are you sure?", "Confirm", list("Yes", "No")) != "Yes") return - src << link("https://discord.gg/v6P6wns5dN") + src << link("https://discord.gg/pve-cmss13") return /client/verb/github() diff --git a/interface/skin.dmf b/interface/skin.dmf index e9a5a21557..104ce68fa5 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -297,7 +297,7 @@ window "infowindow" text-align = center font-weight = bold saved-params = "is-checked" - text = "discord.gg/v6P6wns5dN" + text = "discord.gg/pve-cmss13" command = "discord" window "outputwindow" From 8e10cca0352871273478c51efd2bb275456b9ee2 Mon Sep 17 00:00:00 2001 From: Morrow Date: Wed, 25 Oct 2023 23:55:24 -0400 Subject: [PATCH 09/19] BIG --- interface/skin.dmf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/skin.dmf b/interface/skin.dmf index 104ce68fa5..b3a762081a 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -297,7 +297,7 @@ window "infowindow" text-align = center font-weight = bold saved-params = "is-checked" - text = "discord.gg/pve-cmss13" + text = "discord.gg/PVE-CMSS13" command = "discord" window "outputwindow" From 38055c4e2adc1f0f0c1d20d2ca3ab7088b0b3282 Mon Sep 17 00:00:00 2001 From: Morrow Date: Wed, 25 Oct 2023 23:59:35 -0400 Subject: [PATCH 10/19] middle click delete xeno --- code/modules/admin/game_master/game_master.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/admin/game_master/game_master.dm b/code/modules/admin/game_master/game_master.dm index 45f3750ff3..2fce7ea630 100644 --- a/code/modules/admin/game_master/game_master.dm +++ b/code/modules/admin/game_master/game_master.dm @@ -201,6 +201,11 @@ GLOBAL_VAR_INIT(radio_communication_clarity, 100) switch(current_click_intercept_action) if(SPAWN_CLICK_INTERCEPT_ACTION) + if(LAZYACCESS(modifiers, MIDDLE_CLICK)) + if(isxeno(object)) + qdel(object) + return + var/spawning_xeno_type = RoleAuthority.get_caste_by_text(selected_xeno) if(!spawning_xeno_type) From 29b8191c7cd0e867ced2363e414fb2e6bd387653 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Thu, 26 Oct 2023 00:05:02 -0400 Subject: [PATCH 11/19] Phone overhaul (#29) --- .../signals/atom/mob/living/signals_human.dm | 4 + .../dcs/signals/atom/mob/signals_mob.dm | 4 + .../dcs/signals/atom/signals_atom.dm | 20 + .../dcs/signals/atom/signals_movable.dm | 5 + .../__DEFINES/dcs/signals/atom/signals_obj.dm | 3 - .../dcs/signals/atom/signals_turf.dm | 2 +- code/__DEFINES/equipment.dm | 12 +- code/_onclick/click.dm | 3 + code/_onclick/human.dm | 4 + code/datums/components/phone.dm | 631 ++++++++++++++++++ code/datums/looping_sounds/item_sounds.dm | 8 + code/game/objects/items/storage/backpack.dm | 105 +-- code/game/turfs/walls/wall_types.dm | 2 +- code/modules/admin/game_master/game_master.dm | 17 +- code/modules/cm_aliens/XenoStructures.dm | 2 +- code/modules/cm_phone/handset.dm | 179 +++++ code/modules/cm_phone/internal_phone.dm | 15 - code/modules/cm_phone/phone.dm | 623 ----------------- code/modules/cm_phone/phone_base.dm | 100 +++ code/modules/mob/say.dm | 3 + code/modules/movement/movement.dm | 3 + code/modules/tents/equipment.dm | 5 +- .../vehicles/interior/interior_landmarks.dm | 24 +- colonialmarines.dme | 5 +- maps/interiors/tank.dmm | 2 +- maps/map_files/BigRed/BigRed.dmm | 48 +- .../BigRed/sprinkles/70.se-checkpoint.dmm | 2 +- .../map_files/BigRed/standalone/medbay-v3.dmm | 4 +- maps/map_files/CORSAT/Corsat.dmm | 20 +- maps/map_files/DesertDam/Desert_Dam.dmm | 2 +- .../FOP_v2_Cellblocks/Prison_Station_FOP.dmm | 10 +- .../FOP_v3_Sciannex/Fiorina_SciAnnex.dmm | 30 +- .../sprinkles/20.medicalhold.dmm | 2 +- .../Ice_Colony_v3/Shivas_Snowball.dmm | 2 +- maps/map_files/Kutjevo/Kutjevo.dmm | 4 +- .../LV522_Chances_Claim.dmm | 52 +- maps/map_files/LV624/LV624.dmm | 24 +- maps/map_files/LV624/armory/10.cheese.dmm | 2 +- maps/map_files/LV624/armory/10.extra.dmm | 2 +- maps/map_files/LV624/armory/10.looted.dmm | 2 +- maps/map_files/LV624/medbay/10.destroyed.dmm | 2 +- .../LV624/medbay/30.larvasurgery.dmm | 2 +- maps/map_files/LV624/science/10.yautja.dmm | 2 +- .../LV624/science/40.fullylocked.dmm | 2 +- maps/map_files/LV624/standalone/clfship.dmm | 8 +- maps/map_files/LV624/standalone/laststand.dmm | 2 +- .../Sorokyne_Strata/Sorokyne_Strata.dmm | 54 +- maps/map_files/USS_Almayer/USS_Almayer.dmm | 60 +- maps/map_files/generic/Admin_level.dmm | 2 +- maps/map_files/golden_arrow/golden_arrow.dmm | 2 +- maps/shuttles/dropship_alamo.dmm | 2 +- maps/shuttles/dropship_normandy.dmm | 2 +- maps/templates/clf_ert_station.dmm | 2 +- maps/templates/upp_ert_station.dmm | 2 +- maps/templates/weyland_ert_station.dmm | 4 +- maps/tents/tent_cmd.dmm | 2 +- maps/tents/tent_reqs.dmm | 2 +- tgui/packages/tgui/interfaces/GameMaster.js | 2 +- tgui/packages/tgui/interfaces/PhoneMenu.js | 51 +- .../Scripts/phone-component-switch.txt | 13 + 60 files changed, 1257 insertions(+), 948 deletions(-) create mode 100644 code/datums/components/phone.dm create mode 100644 code/modules/cm_phone/handset.dm delete mode 100644 code/modules/cm_phone/internal_phone.dm delete mode 100644 code/modules/cm_phone/phone.dm create mode 100644 code/modules/cm_phone/phone_base.dm create mode 100644 tools/UpdatePaths/Scripts/phone-component-switch.txt 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 2fce7ea630..f49d127a32 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) => {