diff --git a/code/__DEFINES/devices.dm b/code/__DEFINES/devices.dm
index de17154df5c..1a17c488d71 100644
--- a/code/__DEFINES/devices.dm
+++ b/code/__DEFINES/devices.dm
@@ -7,13 +7,12 @@
#define CART_CLOWN (1<<5)
#define CART_MIME (1<<6)
#define CART_REAGENT_SCANNER (1<<7)
-#define CART_NEWSCASTER (1<<8)
-#define CART_REMOTE_DOOR (1<<9)
-#define CART_STATUS_DISPLAY (1<<10)
-#define CART_QUARTERMASTER (1<<11)
-#define CART_HYDROPONICS (1<<12)
-#define CART_DRONEPHONE (1<<13)
-#define CART_DRONEACCESS (1<<14)
+#define CART_REMOTE_DOOR (1<<8)
+#define CART_STATUS_DISPLAY (1<<9)
+#define CART_QUARTERMASTER (1<<10)
+#define CART_HYDROPONICS (1<<11)
+#define CART_DRONEPHONE (1<<12)
+#define CART_DRONEACCESS (1<<13)
/// PDA ui menu defines
#define PDA_UI_HUB 0
@@ -40,8 +39,6 @@
#define PDA_UI_BOTS_ACCESS 48
#define PDA_UI_EMOJI_GUIDE 49
#define PDA_UI_SIGNALER 50
-#define PDA_UI_NEWSCASTER 51
-#define PDA_UI_NEWSCASTER_ERROR 52
// Used by PDA and cartridge code to reduce repetitiveness of spritesheets
diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm
index c7c3f04a8b6..d0bc740c304 100644
--- a/code/game/machinery/newscaster/newscaster_machine.dm
+++ b/code/game/machinery/newscaster/newscaster_machine.dm
@@ -105,7 +105,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30)
. = ..()
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
- ui = new(user, src, "Newscaster", name)
+ ui = new(user, src, "PhysicalNewscaster", name)
ui.open()
alert = FALSE //We're checking our messages!
update_icon()
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 7feee44b75c..62a7c09e324 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -346,8 +346,6 @@ GLOBAL_LIST_EMPTY(PDAs)
dat += "
[PDAIMG(emoji)]Emoji Guidebook"
if (istype(cartridge.radio))
dat += "[PDAIMG(signaler)]Signaler System"
- if (cartridge.access & CART_NEWSCASTER)
- dat += "[PDAIMG(notes)]Newscaster Access "
if (cartridge.access & CART_REAGENT_SCANNER)
dat += "[PDAIMG(reagent)][scanmode == 3 ? "Disable" : "Enable"] Reagent Scanner"
if (cartridge.access & CART_ATMOS)
diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm
index f64e650eeaf..e4db41d2841 100644
--- a/code/game/objects/items/devices/PDA/PDA_types.dm
+++ b/code/game/objects/items/devices/PDA/PDA_types.dm
@@ -217,7 +217,6 @@
icon_alert = "pda-r-library"
icon_pai = "pai_overlay_library"
icon_inactive_pai = "pai_off_overlay_library"
- default_cartridge = /obj/item/cartridge/curator
insert_type = /obj/item/pen/fountain
desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a WGW-11 series e-reader."
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 324d2889ca3..cbd3b856b36 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -92,11 +92,6 @@
access = CART_SECURITY
spam_enabled = 1
-/obj/item/cartridge/curator
- name = "\improper Lib-Tweet cartridge"
- icon_state = "cart-s"
- access = CART_NEWSCASTER
-
/obj/item/cartridge/roboticist
name = "\improper B.O.O.P. Remote Control cartridge"
desc = "Packed with heavy duty quad-bot interlink!"
@@ -140,7 +135,7 @@
/obj/item/cartridge/hop
name = "\improper HumanResources9001 cartridge"
icon_state = "cart-h"
- access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY | CART_NEWSCASTER | CART_QUARTERMASTER | CART_DRONEPHONE
+ access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY | CART_QUARTERMASTER | CART_DRONEPHONE
bot_access = list(
MULE_BOT,
CLEAN_BOT,
@@ -476,28 +471,6 @@
menu += "No ore silo detected!"
menu = jointext(menu, "")
- if (PDA_UI_NEWSCASTER)
- menu = "[PDAIMG(notes)] Newscaster Access
"
- menu += "
Current Newsfeed: [current_channel ? current_channel : "None"]
"
- var/datum/feed_channel/current
- for(var/datum/feed_channel/chan in GLOB.news_network.network_channels)
- if (chan.channel_name == current_channel)
- current = chan
- if(!current)
- menu += " ERROR : NO CHANNEL FOUND
"
- return menu
- var/i = 1
- for(var/datum/feed_message/msg in current.messages)
- menu +="-[msg.return_body(-1)]
\[Story by [msg.return_author(-1)]\]
"
- menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""]
"
- if(msg.img)
- user << browse_rsc(msg.img, "tmp_photo[i].png")
- menu +="
"
- i++
- for(var/datum/feed_comment/comment in msg.comments)
- menu +="[comment.body]
[comment.author] [comment.time_stamp]
"
- menu += "
Post Message"
-
if (PDA_UI_BOTS_ACCESS)
menu = "[PDAIMG(medbot)] Bots Interlink
"
bot_control()
@@ -517,9 +490,6 @@
menu += "
To use an emoji in a pda message, refer to the guide and add \":\" around the emoji. Your PDA supports the following emoji:
"
menu += emoji_table
- if (PDA_UI_NEWSCASTER_ERROR) //Newscaster message permission error
- menu = " ERROR : NOT AUTHORIZED [host_pda.id ? "" : "- ID SLOT EMPTY"]
"
-
return menu
/obj/item/cartridge/Topic(href, href_list)
@@ -582,29 +552,6 @@
if("Supply Orders")
host_pda.ui_mode = PDA_UI_SUPPLY_RECORDS
- if("Newscaster Access")
- host_pda.ui_mode = PDA_UI_NEWSCASTER
-
- if("Newscaster Message")
- var/host_pda_owner_name = host_pda.id ? "[host_pda.id.registered_name] ([host_pda.id.assignment])" : "Unknown"
- var/message = host_pda.msg_input()
- var/datum/feed_channel/current
- for(var/datum/feed_channel/chan in GLOB.news_network.network_channels)
- if (chan.channel_name == current_channel)
- current = chan
- if(current.locked && current.author != host_pda_owner_name)
- host_pda.ui_mode = PDA_UI_NEWSCASTER_ERROR
- host_pda.Topic(null,list("choice"="Refresh"))
- return
- GLOB.news_network.submit_article(message,host_pda.owner,current_channel)
- host_pda.Topic(null,list("choice"=num2text(host_pda.ui_mode)))
- return
-
- if("Newscaster Switch Channel")
- current_channel = host_pda.msg_input()
- host_pda.Topic(null,list("choice"=num2text(host_pda.ui_mode)))
- return
-
//emoji previews
if(href_list["emoji"])
var/parse = emoji_parse(":[href_list["emoji"]]:")
diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm
index 921104ae5e9..5fe32960a7f 100644
--- a/code/modules/admin/verbs/admin_newscaster.dm
+++ b/code/modules/admin/verbs/admin_newscaster.dm
@@ -45,7 +45,7 @@
/datum/newspanel/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
- ui = new(user, src, "Newscaster")
+ ui = new(user, src, "PhysicalNewscaster")
ui.open()
/datum/newspanel/ui_static_data(mob/user)
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index 599daa2d672..4b00fab0e5d 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -35,6 +35,7 @@
id_trim = /datum/id_trim/job/curator
uniform = /obj/item/clothing/under/rank/civilian/curator
backpack_contents = list(
+ /obj/item/modular_computer/tablet/preset/advanced/curator = 1,
/obj/item/barcodescanner = 1,
/obj/item/choice_beacon/hero = 1,
)
diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm
index 2fb140be35d..bbde8533364 100644
--- a/code/modules/modular_computers/computers/item/tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/tablet_presets.dm
@@ -64,6 +64,11 @@
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
hard_drive.store_file(new /datum/computer_file/program/radar/custodial_locator)
+/obj/item/modular_computer/tablet/preset/advanced/curator/Initialize(mapload)
+ . = ..()
+ var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
+ hard_drive.store_file(new /datum/computer_file/program/newscaster)
+
/obj/item/modular_computer/tablet/preset/advanced/engineering/Initialize(mapload)
. = ..()
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm
new file mode 100644
index 00000000000..dd3fcb8d5fe
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm
@@ -0,0 +1,37 @@
+/datum/computer_file/program/newscaster
+ filename = "newscasterapp"
+ filedesc = "Newscaster"
+ required_access = list(ACCESS_LIBRARY)
+ category = PROGRAM_CATEGORY_CREW
+ program_icon_state = "computer"
+ extended_desc = "This program allows any user to access the Newscaster network from anywhere."
+ size = 2
+ requires_ntnet = TRUE
+ available_on_ntnet = TRUE
+ tgui_id = "NtosNewscaster"
+ program_icon = "newspaper"
+ ///The UI we use for the newscaster
+ var/obj/machinery/newscaster/newscaster_ui
+
+/datum/computer_file/program/newscaster/New()
+ newscaster_ui = new()
+ return ..()
+
+/datum/computer_file/program/newscaster/Destroy()
+ QDEL_NULL(newscaster_ui)
+ return ..()
+
+/datum/computer_file/program/newscaster/ui_data(mob/user)
+ var/list/data = get_header_data()
+ data += newscaster_ui.ui_data(user)
+ return data
+
+/datum/computer_file/program/newscaster/ui_static_data(mob/user)
+ var/list/data = newscaster_ui.ui_static_data(user)
+ return data
+
+/datum/computer_file/program/newscaster/ui_act(action, params, datum/tgui/ui)
+ . = ..()
+ if(.)
+ return
+ return newscaster_ui.ui_act(action, params, ui)
diff --git a/tgstation.dme b/tgstation.dme
index de4055ae3b2..c1ce38d6f07 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3512,6 +3512,7 @@
#include "code\modules\modular_computers\file_system\programs\crewmanifest.dm"
#include "code\modules\modular_computers\file_system\programs\file_browser.dm"
#include "code\modules\modular_computers\file_system\programs\jobmanagement.dm"
+#include "code\modules\modular_computers\file_system\programs\newscasterapp.dm"
#include "code\modules\modular_computers\file_system\programs\ntdownloader.dm"
#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm"
#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm"
diff --git a/tgui/packages/tgui/interfaces/Newscaster.js b/tgui/packages/tgui/interfaces/Newscaster.js
index b279b8ead9f..d94a1641e36 100644
--- a/tgui/packages/tgui/interfaces/Newscaster.js
+++ b/tgui/packages/tgui/interfaces/Newscaster.js
@@ -10,7 +10,6 @@ import { useBackend, useSharedState, useLocalState } from '../backend';
import { BountyBoardContent } from './BountyBoard';
import { UserDetails } from './Vending';
import { BlockQuote, Box, Button, Divider, LabeledList, Modal, Section, Stack, Tabs, TextArea } from '../components';
-import { Window } from '../layouts';
import { marked } from 'marked';
import { sanitizeText } from "../sanitize";
@@ -23,41 +22,37 @@ export const Newscaster = (props, context) => {
const BOUNTYBOARD_SCREEN = 2;
const [screenmode, setScreenmode] = useSharedState(context, 'tab_main', NEWSCASTER_SCREEN);
return (
-
+ <>
-
-
-
-
-
- setScreenmode(NEWSCASTER_SCREEN)}>
- Newscaster
-
- setScreenmode(BOUNTYBOARD_SCREEN)}>
- Bounty Board
-
-
-
-
- {screenmode === NEWSCASTER_SCREEN && (
-
- )}
- {screenmode === BOUNTYBOARD_SCREEN && (
-
- )}
-
-
-
-
+
+
+
+
+ setScreenmode(NEWSCASTER_SCREEN)}>
+ Newscaster
+
+ setScreenmode(BOUNTYBOARD_SCREEN)}>
+ Bounty Board
+
+
+
+
+ {screenmode === NEWSCASTER_SCREEN && (
+
+ )}
+ {screenmode === BOUNTYBOARD_SCREEN && (
+
+ )}
+
+
+ >
);
};
diff --git a/tgui/packages/tgui/interfaces/NtosNewscaster.js b/tgui/packages/tgui/interfaces/NtosNewscaster.js
new file mode 100644
index 00000000000..3d21bc5463a
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/NtosNewscaster.js
@@ -0,0 +1,12 @@
+import { NtosWindow } from '../layouts';
+import { Newscaster } from './Newscaster';
+
+export const NtosNewscaster = (props, context) => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/PhysicalNewscaster.js b/tgui/packages/tgui/interfaces/PhysicalNewscaster.js
new file mode 100644
index 00000000000..74d016e2a80
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/PhysicalNewscaster.js
@@ -0,0 +1,14 @@
+import { Newscaster } from "../interfaces/Newscaster";
+import { Window } from "../layouts";
+
+export const PhysicalNewscaster = (props, context) => {
+ return (
+
+
+
+
+
+ );
+};