diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index d9aa42dbd1f1..96e1635bb0b8 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -1,742 +1,12 @@
-//##############################################
-//################### NEWSCASTERS BE HERE! ####
-//###-Agouri###################################
-
-/datum/feed_message
- var/author =""
- var/body =""
- var/message_type ="Story"
- //var/parent_channel
- var/backup_body =""
- var/backup_author =""
- var/is_admin_message = 0
- var/icon/img = null
- var/icon/backup_img
-
-/datum/feed_channel
- var/channel_name=""
- var/list/datum/feed_message/messages = list()
- //var/message_count = 0
- var/locked=0
- var/author=""
- var/backup_author=""
- var/censored=0
- var/is_admin_channel=0
- //var/page = null //For newspapers
-
-/datum/feed_message/proc/clear()
- src.author = ""
- src.body = ""
- src.backup_body = ""
- src.backup_author = ""
- src.img = null
- src.backup_img = null
-
-/datum/feed_channel/proc/clear()
- src.channel_name = ""
- src.messages = list()
- src.locked = 0
- src.author = ""
- src.backup_author = ""
- src.censored = 0
- src.is_admin_channel = 0
-
-/datum/feed_network
- var/list/datum/feed_channel/network_channels = list()
- var/datum/feed_message/wanted_issue
-
-GLOBAL_DATUM_INIT(news_network, /datum/feed_network, new()) //The global news-network, which is coincidentally a global list.
-
-GLOBAL_LIST_INIT_TYPED(allCasters, /obj/structure/machinery/newscaster, list()) //Global list that will contain reference to all newscasters in existence.
-
/obj/structure/machinery/newscaster
name = "newscaster"
desc = "A standard Weyland-Yutani-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!"
icon = 'icons/obj/structures/machinery/terminals.dmi'
icon_state = "newscaster_normal"
- var/isbroken = FALSE //1 if someone banged it with something heavy
- var/ispowered = TRUE //starts powered, changes with power_change()
- //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored.
- //OBSOLETE: We're now using a global news network
- var/screen = 0 //Or maybe I'll make it into a list within a list afterwards... whichever I prefer, go fuck yourselves :3
- // 0 = welcome screen - main menu
- // 1 = view feed channels
- // 2 = create feed channel
- // 3 = create feed story
- // 4 = feed story submited sucessfully
- // 5 = feed channel created successfully
- // 6 = ERROR: Cannot create feed story
- // 7 = ERROR: Cannot create feed channel
- // 8 = print newspaper
- // 9 = viewing channel feeds
- // 10 = censor feed story
- // 11 = censor feed channel
- //Holy shit this is outdated, made this when I was still starting newscasters :3
- var/paper_remaining = 0
- var/securityCaster = 0
- // 0 = Caster cannot be used to issue wanted posters
- // 1 = the opposite
- var/unit_no = 0 //Each newscaster has a unit number
- //var/datum/feed_message/wanted //We're gonna use a feed_message to store data of the wanted person because fields are similar
- //var/wanted_issue = 0 //OBSOLETE
- // 0 = there's no WANTED issued, we don't need a special icon_state
- // 1 = Guess what.
- var/alert_delay = 500
- var/alert = 0
- // 0 = there hasn't been a news/wanted update in the last alert_delay
- // 1 = there has
- var/scanned_user = "Unknown" //Will contain the name of the person who currently uses the newscaster
- var/msg = ""; //Feed message
- var/obj/item/photo/photo = null
- var/channel_name = ""; //the feed channel which will be receiving the feed, or being created
- var/c_locked=0; //Will our new channel be locked to public submissions?
- var/hitstaken = 0 //Death at 3 hits from an item with force>=15
- var/datum/feed_channel/viewing_channel = null
anchored = TRUE
-
-/obj/structure/machinery/newscaster/security_unit //Security unit
+/obj/structure/machinery/newscaster/security_unit
name = "Security Newscaster"
- securityCaster = 1
-
-/obj/structure/machinery/newscaster/security_unit/New() //Constructor, ho~
- GLOB.allCasters += src
- src.paper_remaining = 15 // Will probably change this to something better
- for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters) // Let's give it an appropriate unit number
- src.unit_no++
- src.update_icon() //for any custom ones on the map...
- ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
-
-/obj/structure/machinery/newscaster/security_unit/Destroy()
- GLOB.allCasters -= src
- return ..()
-
-/obj/structure/machinery/newscaster/update_icon()
- if(!ispowered || isbroken)
- icon_state = "newscaster_off"
- if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
- src.overlays.Cut()
- src.overlays += image(src.icon, "crack3")
- return
-
- src.overlays.Cut() //reset overlays
-
- if(GLOB.news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
- icon_state = "newscaster_wanted"
- return
-
- if(alert) //new message alert overlay
- src.overlays += "newscaster_alert"
-
- if(hitstaken > 0) //Cosmetic damage overlay
- src.overlays += image(src.icon, "crack[hitstaken]")
-
- icon_state = "newscaster_normal"
- return
-
-/obj/structure/machinery/newscaster/power_change()
- if(isbroken) //Broken shit can't be powered.
- return
- ..()
- if( !(stat & NOPOWER) )
- src.ispowered = TRUE
- src.update_icon()
- else
- spawn(rand(0, 15))
- src.ispowered = FALSE
- src.update_icon()
-
-
-/obj/structure/machinery/newscaster/ex_act(severity)
- switch(severity)
- if(0 to EXPLOSION_THRESHOLD_LOW)
- if(prob(50))
- src.isbroken=1
- src.update_icon()
- return
- if(EXPLOSION_THRESHOLD_LOW to EXPLOSION_THRESHOLD_MEDIUM)
- src.isbroken=1
- if(prob(50))
- deconstruct(FALSE)
- else
- src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
- return
- if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
- deconstruct(FALSE)
- return
- return
-
-/obj/structure/machinery/newscaster/attack_remote(mob/user as mob)
- return src.attack_hand(user)
-
-/obj/structure/machinery/newscaster/attack_hand(mob/user as mob) //########### THE MAIN BEEF IS HERE! And in the proc below this...############
- if(!src.ispowered || src.isbroken)
- return
- if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) )
- var/mob/living/human_or_robot_user = user
- var/dat
- dat = text("
NewscasterNewscaster Unit #[src.unit_no]
")
-
- src.scan_user(human_or_robot_user) //Newscaster scans you
-
- switch(screen)
- if(0)
- dat += "Welcome to Newscasting Unit #[src.unit_no].
Interface & News networks Operational."
- dat += "
Property of Weyland-Yutani"
- if(GLOB.news_network.wanted_issue)
- dat+= "
Read Wanted Issue"
- dat+= "
Create Feed Channel"
- dat+= "
View Feed Channels"
- dat+= "
Submit new Feed story"
- dat+= "
Print newspaper"
- dat+= "
Re-scan User"
- dat+= "
Exit"
- if(src.securityCaster)
- var/wanted_already = 0
- if(GLOB.news_network.wanted_issue)
- wanted_already = 1
-
- dat+="
Feed Security functions:
"
- dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue"
- dat+="
Censor Feed Stories"
- dat+="
Mark Feed Channel with Weyland-Yutani D-Notice"
- dat+="
The newscaster recognises you as: [src.scanned_user]"
- if(1)
- dat+= "Station Feed Channels
"
- if(!length(GLOB.news_network.network_channels) )
- dat+="No active channels found..."
- else
- for(var/datum/feed_channel/CHANNEL in GLOB.news_network.network_channels)
- if(CHANNEL.is_admin_channel)
- dat+="[CHANNEL.channel_name]
"
- else
- dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
"
- /*for(var/datum/feed_channel/CHANNEL in src.channel_list)
- dat+="[CHANNEL.channel_name]:
\[created by: [CHANNEL.author]\]
"
- if(!length(CHANNEL.messages) )
- dat+="No feed messages found in channel...
"
- else
- for(var/datum/feed_message/MESSAGE in CHANNEL.messages)
- dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]
"*/
-
- dat+="
Refresh"
- dat+="
Back"
- if(2)
- dat+="Creating new Feed Channel..."
- dat+="
Channel Name: [src.channel_name]
"
- dat+="Channel Author: [src.scanned_user]
"
- dat+="Will Accept Public Feeds: [(src.c_locked) ? ("NO") : ("YES")]
"
- dat+="
Submit
Cancel
"
- if(3)
- dat+="Creating new Feed Message..."
- dat+="
Receiving Channel: [src.channel_name]
" //MARK
- dat+="Message Author: [src.scanned_user]
"
- dat+="Message Body: [src.msg]
"
- dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]"
- dat+="
Submit
Cancel
"
- if(4)
- dat+="Feed story successfully submitted to [src.channel_name].
"
- dat+="
Return
"
- if(5)
- dat+="Feed Channel [src.channel_name] created successfully.
"
- dat+="
Return
"
- if(6)
- dat+="ERROR: Could not submit Feed story to Network.
"
- if(src.channel_name=="")
- dat+="�Invalid receiving channel name.
"
- if(src.scanned_user=="Unknown")
- dat+="�Channel author unverified.
"
- if(src.msg == "" || src.msg == "\[REDACTED\]")
- dat+="�Invalid message body.
"
-
- dat+="
Return
"
- if(7)
- dat+="ERROR: Could not submit Feed Channel to Network.
"
- //var/list/existing_channels = list() //Let's get dem existing channels - OBSOLETE
- var/list/existing_authors = list()
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- //existing_channels += FC.channel_name //OBSOLETE
- if(FC.author == "\[REDACTED\]")
- existing_authors += FC.backup_author
- else
- existing_authors += FC.author
- if(src.scanned_user in existing_authors)
- dat+="�There already exists a Feed channel under your name.
"
- if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
- dat+="�Invalid channel name.
"
- var/check = 0
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- if(FC.channel_name == src.channel_name)
- check = 1
- break
- if(check)
- dat+="�Channel name already in use.
"
- if(src.scanned_user=="Unknown")
- dat+="�Channel author unverified.
"
- dat+="
Return
"
- if(8)
- var/total_num=length(GLOB.news_network.network_channels)
- var/active_num=total_num
- var/message_num=0
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- if(!FC.censored)
- message_num += length(FC.messages) //Dont forget, datum/feed_channel's var messages is a list of datum/feed_message
- else
- active_num--
- dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." //TODO: CONTINUE
- dat+="
Liquid Paper remaining: [(src.paper_remaining) *100 ] cm^3"
- dat+="
Print Paper"
- dat+="
Cancel"
- if(9)
- dat+="[src.viewing_channel.channel_name]: \[created by: [src.viewing_channel.author]\]
"
- if(src.viewing_channel.censored)
- dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Weyland-Yutani D-Notice.
"
- dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
- else
- if(!length(src.viewing_channel.messages) )
- dat+="No feed messages found in channel...
"
- else
- var/i = 0
- for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
- i++
- dat+="-[MESSAGE.body]
"
- if(MESSAGE.img)
- usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
- dat+="
"
- dat+="\[[MESSAGE.message_type] by [MESSAGE.author]\]
"
- dat+="
Refresh"
- dat+="
Back"
- if(10)
- dat+="Weyland-Yutani Feed Censorship Tool
"
- dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
"
- dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it."
- dat+="
Select Feed channel to get Stories from:
"
- if(!length(GLOB.news_network.network_channels))
- dat+="No feed channels found active...
"
- else
- for(var/datum/feed_channel/CHANNEL in GLOB.news_network.network_channels)
- dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
"
- dat+="
Cancel"
- if(11)
- dat+="Weyland-Yutani D-Notice Handler
"
- dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
- dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
- dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
"
- if(!length(GLOB.news_network.network_channels))
- dat+="No feed channels found active...
"
- else
- for(var/datum/feed_channel/CHANNEL in GLOB.news_network.network_channels)
- dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : null]
"
-
- dat+="
Back"
- if(12)
- dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
"
- dat+="[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
"
-
-
- if(!length(src.viewing_channel.messages) )
- dat+="No feed messages found in channel...
"
- else
- for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
- dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]
"
- dat+="[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]
"
- dat+="
Back"
- if(13)
- dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
"
- dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
"
- if(src.viewing_channel.censored)
- dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Weyland-Yutani D-Notice.
"
- dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
- else
- if(!length(src.viewing_channel.messages) )
- dat+="No feed messages found in channel...
"
- else
- for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
- dat+="-[MESSAGE.body]
\[[MESSAGE.message_type] by [MESSAGE.author]\]
"
-
- dat+="
Back"
- if(14)
- dat+="Wanted Issue Handler:"
- var/wanted_already = 0
- var/end_param = 1
- if(GLOB.news_network.wanted_issue)
- wanted_already = 1
- end_param = 2
-
- if(wanted_already)
- dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below."
- dat+="
"
- dat+="Criminal Name: [src.channel_name]
"
- dat+="Description: [src.msg]
"
- dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]"
- if(wanted_already)
- dat+="Wanted Issue created by: [GLOB.news_network.wanted_issue.backup_author]
"
- else
- dat+="Wanted Issue will be created under prosecutor: [src.scanned_user]
"
- dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]"
- if(wanted_already)
- dat+="
Take down Issue"
- dat+="
Cancel"
- if(15)
- dat+="Wanted issue for [src.channel_name] is now in Network Circulation.
"
- dat+="
Return
"
- if(16)
- dat+="ERROR: Wanted Issue rejected by Network.
"
- if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
- dat+="�Invalid name for person wanted.
"
- if(src.scanned_user=="Unknown")
- dat+="�Issue author unverified.
"
- if(src.msg == "" || src.msg == "\[REDACTED\]")
- dat+="�Invalid description.
"
- dat+="
Return
"
- if(17)
- dat+="Wanted Issue successfully deleted from Circulation
"
- dat+="
Return
"
- if(18)
- dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.backup_author]\]
"
- dat+="Criminal: [GLOB.news_network.wanted_issue.author]
"
- dat+="Description: [GLOB.news_network.wanted_issue.body]
"
- dat+="Photo:: "
- if(GLOB.news_network.wanted_issue.img)
- usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png")
- dat+="
"
- else
- dat+="None"
- dat+="
Back
"
- if(19)
- dat+="Wanted issue for [src.channel_name] successfully edited.
"
- dat+="
Return
"
- if(20)
- dat+="Printing successful. Please receive your newspaper from the bottom of the machine.
"
- dat+="Return"
- if(21)
- dat+="Unable to print newspaper. Insufficient paper. Please notify maintenance personnel to refill machine storage.
"
- dat+="Return"
- else
- dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
-
-
- human_or_robot_user << browse(dat, "window=newscaster_main;size=400x600")
- onclose(human_or_robot_user, "newscaster_main")
-
- /*if(src.isbroken) //debugging shit
- return
- src.hitstaken++
- if(src.hitstaken==3)
- src.isbroken = TRUE
- src.update_icon()*/
-
-
-/obj/structure/machinery/newscaster/Topic(href, href_list)
- if(..())
- return
- if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (isRemoteControlling(usr)))
- usr.set_interaction(src)
- if(href_list["set_channel_name"])
- src.channel_name = strip_html(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""))
- while (findtext(src.channel_name," ") == 1)
- src.channel_name = copytext(src.channel_name,2,length(src.channel_name)+1)
- src.updateUsrDialog()
- //src.update_icon()
-
- else if(href_list["set_channel_lock"])
- src.c_locked = !src.c_locked
- src.updateUsrDialog()
- //src.update_icon()
-
- else if(href_list["submit_new_channel"])
- //var/list/existing_channels = list() //OBSOLETE
- var/list/existing_authors = list()
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- //existing_channels += FC.channel_name
- if(FC.author == "\[REDACTED\]")
- existing_authors += FC.backup_author
- else
- existing_authors +=FC.author
- var/check = 0
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- if(FC.channel_name == src.channel_name)
- check = 1
- break
- if(src.channel_name == "" || src.channel_name == "\[REDACTED\]" || src.scanned_user == "Unknown" || check || (src.scanned_user in existing_authors) )
- src.screen=7
- else
- var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel")
- if(choice=="Confirm")
- var/datum/feed_channel/newChannel = new /datum/feed_channel
- newChannel.channel_name = src.channel_name
- newChannel.author = src.scanned_user
- newChannel.locked = c_locked
- GLOB.news_network.network_channels += newChannel //Adding channel to the global network
- src.screen=5
- src.updateUsrDialog()
- //src.update_icon()
-
- else if(href_list["set_channel_receiving"])
- //var/list/datum/feed_channel/available_channels = list()
- var/list/available_channels = list()
- for(var/datum/feed_channel/F in GLOB.news_network.network_channels)
- if( (!F.locked || F.author == scanned_user) && !F.censored)
- available_channels += F.channel_name
- src.channel_name = strip_html(tgui_input_list(usr, "Choose receiving Feed Channel", "Network Channel Handler", available_channels ))
- src.updateUsrDialog()
-
- else if(href_list["set_new_message"])
- src.msg = strip_html(input(usr, "Write your Feed story", "Network Channel Handler", ""))
- while (findtext(src.msg," ") == 1)
- src.msg = copytext(src.msg,2,length(src.msg)+1)
- src.updateUsrDialog()
-
- else if(href_list["set_attachment"])
- AttachPhoto(usr)
- src.updateUsrDialog()
-
- else if(href_list["submit_new_message"])
- if(src.msg =="" || src.msg=="\[REDACTED\]" || src.scanned_user == "Unknown" || src.channel_name == "" )
- src.screen=6
- else
- var/datum/feed_message/newMsg = new /datum/feed_message
- newMsg.author = src.scanned_user
- newMsg.body = src.msg
- if(photo)
- newMsg.img = photo.img
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- if(FC.channel_name == src.channel_name)
- FC.messages += newMsg //Adding message to the network's appropriate feed_channel
- break
- src.screen=4
- for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
- NEWSCASTER.newsAlert(src.channel_name)
-
- src.updateUsrDialog()
-
- else if(href_list["create_channel"])
- src.screen=2
- src.updateUsrDialog()
-
- else if(href_list["create_feed_story"])
- src.screen=3
- src.updateUsrDialog()
-
- else if(href_list["menu_paper"])
- src.screen=8
- src.updateUsrDialog()
- else if(href_list["print_paper"])
- if(!src.paper_remaining)
- src.screen=21
- else
- src.print_paper()
- src.screen = 20
- src.updateUsrDialog()
-
- else if(href_list["menu_censor_story"])
- src.screen=10
- src.updateUsrDialog()
-
- else if(href_list["menu_censor_channel"])
- src.screen=11
- src.updateUsrDialog()
-
- else if(href_list["menu_wanted"])
- var/already_wanted = 0
- if(GLOB.news_network.wanted_issue)
- already_wanted = 1
-
- if(already_wanted)
- src.channel_name = GLOB.news_network.wanted_issue.author
- src.msg = GLOB.news_network.wanted_issue.body
- src.screen = 14
- src.updateUsrDialog()
-
- else if(href_list["set_wanted_name"])
- src.channel_name = strip_html(input(usr, "Provide the name of the Wanted person", "Network Security Handler", ""))
- while (findtext(src.channel_name," ") == 1)
- src.channel_name = copytext(src.channel_name,2,length(src.channel_name)+1)
- src.updateUsrDialog()
-
- else if(href_list["set_wanted_desc"])
- src.msg = strip_html(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", ""))
- while (findtext(src.msg," ") == 1)
- src.msg = copytext(src.msg,2,length(src.msg)+1)
- src.updateUsrDialog()
-
- else if(href_list["submit_wanted"])
- var/input_param = text2num(href_list["submit_wanted"])
- if(src.msg == "" || src.channel_name == "" || src.scanned_user == "Unknown")
- src.screen = 16
- else
- var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel")
- if(choice=="Confirm")
- if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below
- var/datum/feed_message/WANTED = new /datum/feed_message
- WANTED.author = src.channel_name
- WANTED.body = src.msg
- WANTED.backup_author = src.scanned_user //I know, a bit wacky
- if(photo)
- WANTED.img = photo.img
- GLOB.news_network.wanted_issue = WANTED
- for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
- NEWSCASTER.newsAlert()
- NEWSCASTER.update_icon()
- src.screen = 15
- else
- if(GLOB.news_network.wanted_issue.is_admin_message)
- alert("The wanted issue has been distributed by a Weyland-Yutani higherup. You cannot edit it.","Ok")
- return
- GLOB.news_network.wanted_issue.author = src.channel_name
- GLOB.news_network.wanted_issue.body = src.msg
- GLOB.news_network.wanted_issue.backup_author = src.scanned_user
- if(photo)
- GLOB.news_network.wanted_issue.img = photo.img
- src.screen = 19
-
- src.updateUsrDialog()
-
- else if(href_list["cancel_wanted"])
- if(GLOB.news_network.wanted_issue.is_admin_message)
- alert("The wanted issue has been distributed by a Weyland-Yutani higherup. You cannot take it down.","Ok")
- return
- var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
- if(choice=="Confirm")
- GLOB.news_network.wanted_issue = null
- for(var/obj/structure/machinery/newscaster/NEWSCASTER in GLOB.allCasters)
- NEWSCASTER.update_icon()
- src.screen=17
- src.updateUsrDialog()
-
- else if(href_list["view_wanted"])
- src.screen=18
- src.updateUsrDialog()
- else if(href_list["censor_channel_author"])
- var/datum/feed_channel/FC = locate(href_list["censor_channel_author"])
- if(FC.is_admin_channel)
- alert("This channel was created by a Weyland-Yutani Officer. You cannot censor it.","Ok")
- return
- if(FC.author != "\[REDACTED\]")
- FC.backup_author = FC.author
- FC.author = "\[REDACTED\]"
- else
- FC.author = FC.backup_author
- src.updateUsrDialog()
-
- else if(href_list["censor_channel_story_author"])
- var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"])
- if(MSG.is_admin_message)
- alert("This message was created by a Weyland-Yutani Officer. You cannot censor its author.","Ok")
- return
- if(MSG.author != "\[REDACTED\]")
- MSG.backup_author = MSG.author
- MSG.author = "\[REDACTED\]"
- else
- MSG.author = MSG.backup_author
- src.updateUsrDialog()
-
- else if(href_list["censor_channel_story_body"])
- var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"])
- if(MSG.is_admin_message)
- alert("This channel was created by a Weyland-Yutani Officer. You cannot censor it.","Ok")
- return
- if(MSG.img != null)
- MSG.backup_img = MSG.img
- MSG.img = null
- else
- MSG.img = MSG.backup_img
- if(MSG.body != "\[REDACTED\]")
- MSG.backup_body = MSG.body
- MSG.body = "\[REDACTED\]"
- else
- MSG.body = MSG.backup_body
- src.updateUsrDialog()
-
- else if(href_list["pick_d_notice"])
- var/datum/feed_channel/FC = locate(href_list["pick_d_notice"])
- src.viewing_channel = FC
- src.screen=13
- src.updateUsrDialog()
-
- else if(href_list["toggle_d_notice"])
- var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"])
- if(FC.is_admin_channel)
- alert("This channel was created by a Weyland-Yutani Officer. You cannot place a D-Notice upon it.","Ok")
- return
- FC.censored = !FC.censored
- src.updateUsrDialog()
-
- else if(href_list["view"])
- src.screen=1
- src.updateUsrDialog()
-
- else if(href_list["setScreen"]) //Brings us to the main menu and resets all fields~
- src.screen = text2num(href_list["setScreen"])
- if (src.screen == 0)
- src.scanned_user = "Unknown";
- msg = "";
- src.c_locked=0;
- channel_name="";
- src.viewing_channel = null
- src.updateUsrDialog()
-
- else if(href_list["show_channel"])
- var/datum/feed_channel/FC = locate(href_list["show_channel"])
- src.viewing_channel = FC
- src.screen = 9
- src.updateUsrDialog()
-
- else if(href_list["pick_censor_channel"])
- var/datum/feed_channel/FC = locate(href_list["pick_censor_channel"])
- src.viewing_channel = FC
- src.screen = 12
- src.updateUsrDialog()
-
- else if(href_list["refresh"])
- src.updateUsrDialog()
-
-
-/obj/structure/machinery/newscaster/attackby(obj/item/I as obj, mob/user as mob)
-
- if (src.isbroken)
- playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 25, 1)
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] further abuses the shattered [src.name].", SHOW_MESSAGE_VISIBLE)
- else
- if(!(I.flags_item & NOBLUDGEON) && I.force)
- if(I.force <15)
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] hits the [src.name] with the [I.name] with no visible effect.", SHOW_MESSAGE_VISIBLE)
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 25, 1)
- else
- src.hitstaken++
- if(src.hitstaken==3)
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] smashes the [src.name]!", SHOW_MESSAGE_VISIBLE)
- src.isbroken=1
- playsound(src.loc, 'sound/effects/Glassbr3.ogg', 50, 1)
- else
- for (var/mob/O in hearers(5, src.loc))
- O.show_message("[user.name] forcefully slams the [src.name] with the [I.name]!", SHOW_MESSAGE_VISIBLE)
- playsound(src.loc, 'sound/effects/Glasshit.ogg', 25, 1)
- else
- to_chat(user, "This does nothing.")
- src.update_icon()
-
-/obj/structure/machinery/newscaster/attack_remote(mob/user as mob)
- return src.attack_hand(user) //or maybe it'll have some special functions? No idea.
-
-/obj/structure/machinery/newscaster/proc/AttachPhoto(mob/user as mob)
- if(photo)
- if(!isRemoteControlling(user))
- photo.forceMove(loc)
- user.put_in_inactive_hand(photo)
- photo = null
- var/obj/item/photo/PH = user.get_active_hand()
- if(istype(PH))
- if(user.drop_inv_item_to_loc(photo, src))
- photo = PH
-
-
-//########################################################################################################################
-//###################################### NEWSPAPER! ######################################################################
-//########################################################################################################################
/obj/item/newspaper
name = "newspaper"
@@ -745,191 +15,3 @@ GLOBAL_LIST_INIT_TYPED(allCasters, /obj/structure/machinery/newscaster, list())
icon_state = "newspaper"
w_class = SIZE_TINY //Let's make it fit in trashbags!
attack_verb = list("bapped")
- var/screen = 0
- var/pages = 0
- var/curr_page = 0
- var/list/datum/feed_channel/news_content = list()
- var/datum/feed_message/important_message = null
- var/scribble=""
- var/scribble_page = null
-
-/obj/item/newspaper/attack_self(mob/user as mob)
- ..()
- if(!ishuman(user))
- to_chat(user, "The paper is full of intelligible symbols!")
- return
-
- var/mob/living/carbon/human/human_user = user
- var/dat
- src.pages = 0
- switch(screen)
- if(0) //Cover
- dat+="The Griffon
"
- dat+="Weyland-Yutani-standard newspaper, for use on Weyland-Yutani� Space Facilities
"
- if(!length(src.news_content))
- if(src.important_message)
- dat+="Contents:
**Important Security Announcement** \[page [src.pages+2]\]
"
- else
- dat+="Other than the title, the rest of the newspaper is unprinted..."
- else
- dat+="Contents:
"
- for(var/datum/feed_channel/NP in src.news_content)
- src.pages++
- if(src.important_message)
- dat+="**Important Security Announcement** \[page [src.pages+2]\]
"
- var/temp_page=0
- for(var/datum/feed_channel/NP in src.news_content)
- temp_page++
- dat+="[NP.channel_name] \[page [temp_page+1]\]
"
- dat+="
"
- if(scribble_page==curr_page)
- dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\""
- dat+= "
"
- if(1) // X channel pages inbetween.
- for(var/datum/feed_channel/NP in src.news_content)
- src.pages++ //Let's get it right again.
- var/datum/feed_channel/C = src.news_content[src.curr_page]
- dat+="[C.channel_name] \[created by: [C.author]\]
"
- if(C.censored)
- dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice. Its contents were not transferred to the newspaper at the time of printing."
- else
- if(!length(C.messages))
- dat+="No Feed stories stem from this channel..."
- else
- dat+=""
- var/i = 0
- for(var/datum/feed_message/MESSAGE in C.messages)
- i++
- dat+="-[MESSAGE.body]
"
- if(MESSAGE.img)
- user << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
- dat+="
"
- dat+="\[[MESSAGE.message_type] by [MESSAGE.author]\]
"
- dat+="
"
- if(scribble_page==curr_page)
- dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\""
- dat+= "
"
- if(2) //Last page
- for(var/datum/feed_channel/NP in src.news_content)
- src.pages++
- if(src.important_message!=null)
- dat+="Wanted Issue:
"
- dat+="Criminal name: [important_message.author]
"
- dat+="Description: [important_message.body]
"
- dat+="Photo:: "
- if(important_message.img)
- user << browse_rsc(important_message.img, "tmp_photow.png")
- dat+="
"
- else
- dat+="None"
- else
- dat+="Apart from some uninteresting Classified ads, there's nothing on this page..."
- if(scribble_page==curr_page)
- dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\""
- dat+= "
"
- else
- dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
-
- dat+="
[src.curr_page+1]
"
- human_user << browse(dat, "window=newspaper_main;size=300x400")
- onclose(human_user, "newspaper_main")
-
-
-/obj/item/newspaper/Topic(href, href_list)
- var/mob/living/U = usr
- ..()
- if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ))
- U.set_interaction(src)
- if(href_list["next_page"])
- if(curr_page==src.pages+1)
- return //Don't need that at all, but anyway.
- if(src.curr_page == src.pages) //We're at the middle, get to the end
- src.screen = 2
- else
- if(curr_page == 0) //We're at the start, get to the middle
- src.screen=1
- src.curr_page++
- playsound(src.loc, "pageturn", 15, 1)
-
- else if(href_list["prev_page"])
- if(curr_page == 0)
- return
- if(curr_page == 1)
- src.screen = 0
-
- else
- if(curr_page == src.pages+1) //we're at the end, let's go back to the middle.
- src.screen = 1
- src.curr_page--
- playsound(src.loc, "pageturn", 15, 1)
-
- if (istype(src.loc, /mob))
- src.attack_self(src.loc)
-
-
-/obj/item/newspaper/attackby(obj/item/W as obj, mob/user as mob)
- if(HAS_TRAIT(W, TRAIT_TOOL_PEN))
- if(src.scribble_page == src.curr_page)
- to_chat(user, "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?")
- else
- var/s = strip_html( input(user, "Write something", "Newspaper", "") )
- s = strip_html(s)
- if (!s)
- return
- if (!in_range(src, usr) && src.loc != usr)
- return
- src.scribble_page = src.curr_page
- src.scribble = s
- src.attack_self(user)
- return
-
-
-////////////////////////////////////helper procs
-
-
-/obj/structure/machinery/newscaster/proc/scan_user(mob/living/user as mob)
- if(istype(user,/mob/living/carbon/human)) //User is a human
- var/mob/living/carbon/human/human_user = user
- if(human_user.wear_id) //Newscaster scans you
- if(istype(human_user.wear_id, /obj/item/card/id) )
- var/obj/item/card/id/ID = human_user.wear_id
- src.scanned_user ="[ID.registered_name] ([ID.assignment])"
- else
- src.scanned_user ="Unknown"
- else
- src.scanned_user ="Unknown"
- else
- var/mob/living/silicon/ai_user = user
- src.scanned_user = "[ai_user.name] ([ai_user.job])"
-
-
-/obj/structure/machinery/newscaster/proc/print_paper()
- var/obj/item/newspaper/NEWSPAPER = new /obj/item/newspaper
- for(var/datum/feed_channel/FC in GLOB.news_network.network_channels)
- NEWSPAPER.news_content += FC
- if(GLOB.news_network.wanted_issue)
- NEWSPAPER.important_message = GLOB.news_network.wanted_issue
- NEWSPAPER.forceMove(get_turf(src))
- src.paper_remaining--
- return
-
-//Removed for now so these aren't even checked every tick. Left this here in-case Agouri needs it later.
-///obj/structure/machinery/newscaster/process() //Was thinking of doing the icon update through process, but multiple iterations per second does not
-// return //bode well with a newscaster network of 10+ machines. Let's just return it, as it's added in the machines list.
-
-/obj/structure/machinery/newscaster/proc/newsAlert(channel) //This isn't Agouri's work, for it is ugly and vile.
- var/turf/T = get_turf(src) //Who the fuck uses spawn(600) anyway, jesus christ
- if(channel)
- for(var/mob/O in hearers(GLOB.world_view_size-1, T))
- O.show_message(SPAN_NEWSCASTER("[src.name] beeps, \"Breaking news from [channel]!\""), SHOW_MESSAGE_AUDIBLE)
- src.alert = 1
- src.update_icon()
- spawn(30 SECONDS)
- src.alert = 0
- src.update_icon()
- playsound(src.loc, 'sound/machines/twobeep.ogg', 25, 1)
- else
- for(var/mob/O in hearers(GLOB.world_view_size-1, T))
- O.show_message(SPAN_NEWSCASTER("[src.name] beeps, \"Attention! Wanted issue distributed!\""), SHOW_MESSAGE_AUDIBLE)
- playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 25, 1)
- return
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 82f25a6ebe3e..3a3ce661e231 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -10,11 +10,6 @@ GLOBAL_PROTECT(href_token)
var/rights = 0
var/fakekey = null
- var/admincaster_screen = 0 //See newscaster.dm under machinery for a full description
- var/datum/feed_message/admincaster_feed_message = new /datum/feed_message //These two will act as admin_holders.
- var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel
- var/admincaster_signature //What you'll sign the newsfeeds as
-
var/href_token
var/datum/marked_datum
@@ -31,7 +26,6 @@ GLOBAL_PROTECT(href_token)
error("Admin datum created without a ckey argument. Datum has been deleted")
qdel(src)
return
- admincaster_signature = "Weyland-Yutani Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
rank = initial_rank
rights = initial_rights
href_token = GenerateToken()
diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm
index a5f061e1a727..6e22fd12d58a 100644
--- a/code/modules/economy/economy_misc.dm
+++ b/code/modules/economy/economy_misc.dm
@@ -75,27 +75,6 @@ GLOBAL_VAR_INIT(economy_init, FALSE)
if(GLOB.economy_init)
return 2
- var/datum/feed_channel/newChannel = new /datum/feed_channel
- newChannel.channel_name = "Public Station Announcements"
- newChannel.author = "Automated Announcement Listing"
- newChannel.locked = 1
- newChannel.is_admin_channel = 1
- GLOB.news_network.network_channels += newChannel
-
- newChannel = new /datum/feed_channel
- newChannel.channel_name = "Nyx Daily"
- newChannel.author = "CentComm Minister of Information"
- newChannel.locked = 1
- newChannel.is_admin_channel = 1
- GLOB.news_network.network_channels += newChannel
-
- newChannel = new /datum/feed_channel
- newChannel.channel_name = "The Gibson Gazette"
- newChannel.author = "Editor Mike Hammers"
- newChannel.locked = 1
- newChannel.is_admin_channel = 1
- GLOB.news_network.network_channels += newChannel
-
for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination)
var/datum/trade_destination/D = new loc_type
GLOB.weighted_randomevent_locations[D] = D.viable_random_events.len