From 7921013f560053c11fde274c9e284fb2772e7693 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 6 Feb 2020 00:24:55 -0700 Subject: [PATCH] news reading --- code/modules/newscaster/_news.dm | 2 + code/modules/newscaster/feed_channel.dm | 1 - code/modules/newscaster/feed_comment.dm | 1 - code/modules/newscaster/feed_message.dm | 1 - code/modules/newscaster/ghostread.dm | 49 +++++ code/modules/newscaster/news_datum.dm | 1 - .../{feed_network.dm => news_network.dm} | 0 .../{newscaster.dm => newscaster_machine.dm} | 176 ------------------ code/modules/newscaster/newspaper.dm | 173 +++++++++++++++++ tgstation.dme | 10 +- 10 files changed, 233 insertions(+), 181 deletions(-) create mode 100644 code/modules/newscaster/_news.dm create mode 100644 code/modules/newscaster/ghostread.dm delete mode 100644 code/modules/newscaster/news_datum.dm rename code/modules/newscaster/{feed_network.dm => news_network.dm} (100%) rename code/modules/newscaster/{newscaster.dm => newscaster_machine.dm} (81%) create mode 100644 code/modules/newscaster/newspaper.dm diff --git a/code/modules/newscaster/_news.dm b/code/modules/newscaster/_news.dm new file mode 100644 index 0000000000..6c6f10fdcc --- /dev/null +++ b/code/modules/newscaster/_news.dm @@ -0,0 +1,2 @@ +/datum/news + var/author = "" diff --git a/code/modules/newscaster/feed_channel.dm b/code/modules/newscaster/feed_channel.dm index 8bd639b3dc..278c9c7ad1 100644 --- a/code/modules/newscaster/feed_channel.dm +++ b/code/modules/newscaster/feed_channel.dm @@ -2,7 +2,6 @@ var/channel_name = "" var/list/datum/news/feed_message/messages = list() var/locked = FALSE - var/author = "" var/censored = 0 var/list/authorCensorTime = list() var/list/DclassCensorTime = list() diff --git a/code/modules/newscaster/feed_comment.dm b/code/modules/newscaster/feed_comment.dm index 9eba2d73dc..ff5ebac028 100644 --- a/code/modules/newscaster/feed_comment.dm +++ b/code/modules/newscaster/feed_comment.dm @@ -1,4 +1,3 @@ /datum/news/feed_comment - var/author = "" var/body = "" var/time_stamp = "" diff --git a/code/modules/newscaster/feed_message.dm b/code/modules/newscaster/feed_message.dm index f9c3da554e..573b3f772d 100644 --- a/code/modules/newscaster/feed_message.dm +++ b/code/modules/newscaster/feed_message.dm @@ -1,5 +1,4 @@ /datum/news/feed_message - var/author ="" var/body ="" var/list/authorCensorTime = list() var/list/bodyCensorTime = list() diff --git a/code/modules/newscaster/ghostread.dm b/code/modules/newscaster/ghostread.dm new file mode 100644 index 0000000000..5cf36e1164 --- /dev/null +++ b/code/modules/newscaster/ghostread.dm @@ -0,0 +1,49 @@ +/mob/dead/observer/verb/read_news() + var/datum/browser/popup = new(user, "ghost_news_list", 450, 600) + popup.set_content(render_news_channel_list()) + popup.open() + +/mob/dead/observer/Topic(href, href_list) + . = ..() + if(href_list["show_news_channel"]) + var/datum/D = locate(href_list["show_news_channel"]) + if(istype(D, /datum/news/feed_channel)) //safety + render_news_channel(D) + +/mob/dead/observer/proc/render_news_channel_list() + var/datum/news_network = GLOB.news_network() + var/list/content = list() + for(var/i in news_network.network_channels) + var/datum/news/feed_channel/FC = i + content += "[FC.name] ([length(FC.messages)] messages)[FC.locked? " (LOCKED)":""][FC.censored? " (CENSORED)":""][FC.is_admin_channel? " (ADMIN)":""]" + return content.Join("
") + +/mob/dead/observer/proc/render_news_channel(datum/news/feed_channel/FC) + var/list/content = list() + content += "[viewing_channel.channel_name]: \[created by: [viewing_channel.returnAuthor(-1)]\]
" + if(FC.censored) + content += "ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
" + content += "No further feed story additions are allowed while the D-Notice is in effect.

" + if(!length(FC.messages)) + content += "This channel is empty.
" + for(var/i in FC.messages) + var/datum/feed_message/FM = i + content += " + content += "-[FM.returnBody(-1)]
" + if(FM.img) + src << browse_rsc(FM.img, "tmp_photo[i].png") + content += "
" + if(FC.caption) + content += "[FM.caption]
" + content += "
" + content += "\[Story by [FM.returnAuthor(-1)] \] - ([FM.time_stamp])
" + content += "[FM.comments.len] comment[FM.comments.len > 1 ? "s" : ""]
" + for(var/i in FM.comments) + var/datum/news/feed_comment/FC = i + content += "[FC.body]
[FC.author] [FC.time_stamp]
" + if(FM.locked) + content += "Comments locked
" + var/datum/browser/popup = new(src, "ghost_news_channel", 450, 900) + popup.set_content(content.Join("")) + popup.open() + diff --git a/code/modules/newscaster/news_datum.dm b/code/modules/newscaster/news_datum.dm deleted file mode 100644 index 5fcf3b4551..0000000000 --- a/code/modules/newscaster/news_datum.dm +++ /dev/null @@ -1 +0,0 @@ -/datum/news diff --git a/code/modules/newscaster/feed_network.dm b/code/modules/newscaster/news_network.dm similarity index 100% rename from code/modules/newscaster/feed_network.dm rename to code/modules/newscaster/news_network.dm diff --git a/code/modules/newscaster/newscaster.dm b/code/modules/newscaster/newscaster_machine.dm similarity index 81% rename from code/modules/newscaster/newscaster.dm rename to code/modules/newscaster/newscaster_machine.dm index 88379efcf8..6328087491 100644 --- a/code/modules/newscaster/newscaster.dm +++ b/code/modules/newscaster/newscaster_machine.dm @@ -672,7 +672,6 @@ GLOBAL_LIST_EMPTY(allCasters) NEWSPAPER.creationTime = GLOB.news_network.lastAction paper_remaining-- - /obj/machinery/newscaster/proc/remove_alert() alert = FALSE update_icon() @@ -687,178 +686,3 @@ GLOBAL_LIST_EMPTY(allCasters) else say("Attention! Wanted issue distributed!") playsound(loc, 'sound/machines/warning-buzzer.ogg', 75, 1) - - -/obj/item/newspaper - name = "newspaper" - desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "newspaper" - lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("bapped") - var/screen = 0 - var/pages = 0 - var/curr_page = 0 - var/list/datum/news/feed_channel/news_content = list() - var/scribble="" - var/scribble_page = null - var/wantedAuthor - var/wantedCriminal - var/wantedBody - var/wantedPhoto - var/creationTime - -/obj/item/newspaper/suicide_act(mob/user) - user.visible_message("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization!") - user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide") - var/mob/living/carbon/human/H = user - var/obj/W = new /obj/item/reagent_containers/food/drinks/bottle/whiskey(H.loc) - playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), 1) - W.reagents.trans_to(H, W.reagents.total_volume) - user.visible_message("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!") - - return(TOXLOSS) - -/obj/item/newspaper/attack_self(mob/user) - if(ishuman(user)) - var/mob/living/carbon/human/human_user = user - var/dat - pages = 0 - switch(screen) - if(0) //Cover - dat+="
The Griffon
" - dat+="
Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities

" - if(isemptylist(news_content)) - if(wantedAuthor) - dat+="Contents:
    **Important Security Announcement** \[page [pages+2]\]
" - else - dat+="Other than the title, the rest of the newspaper is unprinted..." - else - dat+="Contents:
    " - for(var/datum/news/feed_channel/NP in news_content) - pages++ - if(wantedAuthor) - dat+="**Important Security Announcement** \[page [pages+2]\]
    " - var/temp_page=0 - for(var/datum/news/feed_channel/NP in 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: \"[scribble]\"" - dat+= "
Next Page
Done reading
" - if(1) // X channel pages inbetween. - for(var/datum/news/feed_channel/NP in news_content) - pages++ - var/datum/news/feed_channel/C = news_content[curr_page] - dat += "[C.channel_name] \[created by: [C.returnAuthor(notContent(C.authorCensorTime))]\]

" - if(notContent(C.DclassCensorTime)) - 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(isemptylist(C.messages)) - dat+="No Feed stories stem from this channel..." - else - var/i = 0 - for(var/datum/news/feed_message/MESSAGE in C.messages) - if(MESSAGE.creationTime > creationTime) - if(i == 0) - dat+="No Feed stories stem from this channel..." - break - if(i == 0) - dat+="
    " - i++ - dat+="-[MESSAGE.returnBody(notContent(MESSAGE.bodyCensorTime))]
    " - if(MESSAGE.img) - user << browse_rsc(MESSAGE.img, "tmp_photo[i].png") - dat+="
    " - dat+="\[Story by [MESSAGE.returnAuthor(notContent(MESSAGE.authorCensorTime))]\]

    " - dat+="
" - if(scribble_page==curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "

Previous Page
Next Page
" - if(2) //Last page - for(var/datum/news/feed_channel/NP in news_content) - pages++ - if(wantedAuthor!=null) - dat+="
Wanted Issue:


" - dat+="Criminal name: [wantedCriminal]
" - dat+="Description: [wantedBody]
" - dat+="Photo:: " - if(wantedPhoto) - user << browse_rsc(wantedPhoto, "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: \"[scribble]\"" - dat+= "
Previous Page
" - dat+="

[curr_page+1]
" - human_user << browse(dat, "window=newspaper_main;size=300x400") - onclose(human_user, "newspaper_main") - else - to_chat(user, "The paper is full of unintelligible symbols!") - -/obj/item/newspaper/proc/notContent(list/L) - if(!L.len) - return 0 - for(var/i=L.len;i>0;i--) - var/num = abs(L[i]) - if(creationTime <= num) - continue - else - if(L[i] > 0) - return 1 - else - return 0 - return 0 - -/obj/item/newspaper/Topic(href, href_list) - var/mob/living/U = usr - ..() - if((src in U.contents) || (isturf(loc) && in_range(src, U))) - U.set_machine(src) - if(href_list["next_page"]) - if(curr_page == pages+1) - return //Don't need that at all, but anyway. - if(curr_page == pages) //We're at the middle, get to the end - screen = 2 - else - if(curr_page == 0) //We're at the start, get to the middle - screen=1 - curr_page++ - playsound(loc, "pageturn", 50, 1) - else if(href_list["prev_page"]) - if(curr_page == 0) - return - if(curr_page == 1) - screen = 0 - else - if(curr_page == pages+1) //we're at the end, let's go back to the middle. - screen = 1 - curr_page-- - playsound(loc, "pageturn", 50, 1) - if(ismob(loc)) - attack_self(loc) - -/obj/item/newspaper/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) - if(!user.is_literate()) - to_chat(user, "You scribble illegibly on [src]!") - return - if(scribble_page == 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 = stripped_input(user, "Write something", "Newspaper") - if (!s) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - scribble_page = curr_page - scribble = s - attack_self(user) - else - return ..() diff --git a/code/modules/newscaster/newspaper.dm b/code/modules/newscaster/newspaper.dm new file mode 100644 index 0000000000..0afb36a7e7 --- /dev/null +++ b/code/modules/newscaster/newspaper.dm @@ -0,0 +1,173 @@ +/obj/item/newspaper + name = "newspaper" + desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "newspaper" + lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("bapped") + var/screen = 0 + var/pages = 0 + var/curr_page = 0 + var/list/datum/news/feed_channel/news_content = list() + var/scribble="" + var/scribble_page = null + var/wantedAuthor + var/wantedCriminal + var/wantedBody + var/wantedPhoto + var/creationTime + +/obj/item/newspaper/suicide_act(mob/user) + user.visible_message("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization!") + user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide") + var/mob/living/carbon/human/H = user + var/obj/W = new /obj/item/reagent_containers/food/drinks/bottle/whiskey(H.loc) + playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), 1) + W.reagents.trans_to(H, W.reagents.total_volume) + user.visible_message("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!") + + return(TOXLOSS) + +/obj/item/newspaper/attack_self(mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + var/dat + pages = 0 + switch(screen) + if(0) //Cover + dat+="
The Griffon
" + dat+="
Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities

" + if(isemptylist(news_content)) + if(wantedAuthor) + dat+="Contents:
    **Important Security Announcement** \[page [pages+2]\]
" + else + dat+="Other than the title, the rest of the newspaper is unprinted..." + else + dat+="Contents:
    " + for(var/datum/news/feed_channel/NP in news_content) + pages++ + if(wantedAuthor) + dat+="**Important Security Announcement** \[page [pages+2]\]
    " + var/temp_page=0 + for(var/datum/news/feed_channel/NP in 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: \"[scribble]\"" + dat+= "
Next Page
Done reading
" + if(1) // X channel pages inbetween. + for(var/datum/news/feed_channel/NP in news_content) + pages++ + var/datum/news/feed_channel/C = news_content[curr_page] + dat += "[C.channel_name] \[created by: [C.returnAuthor(notContent(C.authorCensorTime))]\]

" + if(notContent(C.DclassCensorTime)) + 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(isemptylist(C.messages)) + dat+="No Feed stories stem from this channel..." + else + var/i = 0 + for(var/datum/news/feed_message/MESSAGE in C.messages) + if(MESSAGE.creationTime > creationTime) + if(i == 0) + dat+="No Feed stories stem from this channel..." + break + if(i == 0) + dat+="
    " + i++ + dat+="-[MESSAGE.returnBody(notContent(MESSAGE.bodyCensorTime))]
    " + if(MESSAGE.img) + user << browse_rsc(MESSAGE.img, "tmp_photo[i].png") + dat+="
    " + dat+="\[Story by [MESSAGE.returnAuthor(notContent(MESSAGE.authorCensorTime))]\]

    " + dat+="
" + if(scribble_page==curr_page) + dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" + dat+= "

Previous Page
Next Page
" + if(2) //Last page + for(var/datum/news/feed_channel/NP in news_content) + pages++ + if(wantedAuthor!=null) + dat+="
Wanted Issue:


" + dat+="Criminal name: [wantedCriminal]
" + dat+="Description: [wantedBody]
" + dat+="Photo:: " + if(wantedPhoto) + user << browse_rsc(wantedPhoto, "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: \"[scribble]\"" + dat+= "
Previous Page
" + dat+="

[curr_page+1]
" + human_user << browse(dat, "window=newspaper_main;size=300x400") + onclose(human_user, "newspaper_main") + else + to_chat(user, "The paper is full of unintelligible symbols!") + +/obj/item/newspaper/proc/notContent(list/L) + if(!L.len) + return 0 + for(var/i=L.len;i>0;i--) + var/num = abs(L[i]) + if(creationTime <= num) + continue + else + if(L[i] > 0) + return 1 + else + return 0 + return 0 + +/obj/item/newspaper/Topic(href, href_list) + var/mob/living/U = usr + ..() + if((src in U.contents) || (isturf(loc) && in_range(src, U))) + U.set_machine(src) + if(href_list["next_page"]) + if(curr_page == pages+1) + return //Don't need that at all, but anyway. + if(curr_page == pages) //We're at the middle, get to the end + screen = 2 + else + if(curr_page == 0) //We're at the start, get to the middle + screen=1 + curr_page++ + playsound(loc, "pageturn", 50, 1) + else if(href_list["prev_page"]) + if(curr_page == 0) + return + if(curr_page == 1) + screen = 0 + else + if(curr_page == pages+1) //we're at the end, let's go back to the middle. + screen = 1 + curr_page-- + playsound(loc, "pageturn", 50, 1) + if(ismob(loc)) + attack_self(loc) + +/obj/item/newspaper/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/pen)) + if(!user.is_literate()) + to_chat(user, "You scribble illegibly on [src]!") + return + if(scribble_page == 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 = stripped_input(user, "Write something", "Newspaper") + if (!s) + return + if(!user.canUseTopic(src, BE_CLOSE)) + return + scribble_page = curr_page + scribble = s + attack_self(user) + else + return ..() diff --git a/tgstation.dme b/tgstation.dme index 8c578e70f0..caf364d42f 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -663,7 +663,6 @@ #include "code\game\machinery\magnet.dm" #include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\navbeacon.dm" -#include "code\game\machinery\newscaster.dm" #include "code\game\machinery\PDApainter.dm" #include "code\game\machinery\quantum_pad.dm" #include "code\game\machinery\recharger.dm" @@ -2461,6 +2460,15 @@ #include "code\modules\modular_computers\hardware\printer.dm" #include "code\modules\modular_computers\hardware\recharger.dm" #include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" +#include "code\modules\newscaster\_news.dm" +#include "code\modules\newscaster\feed_channel.dm" +#include "code\modules\newscaster\feed_comment.dm" +#include "code\modules\newscaster\feed_message.dm" +#include "code\modules\newscaster\ghostread.dm" +#include "code\modules\newscaster\news_network.dm" +#include "code\modules\newscaster\newscaster_machine.dm" +#include "code\modules\newscaster\newspaper.dm" +#include "code\modules\newscaster\wanted_message.dm" #include "code\modules\ninja\__ninjaDefines.dm" #include "code\modules\ninja\energy_katana.dm" #include "code\modules\ninja\ninja_event.dm"