Makes newscaster news "events" actually used (#37115)

* initial work

* saner

* cleaner

* file split

* moves defines

* cleanup

* compiles

* bus tool

* testing

* better admin tools

* better admin tools

* headlines

* headlines

* more headlines, all done now

* cannot get this to show up over gitignore

* this too

* reverting all of this since i can't get gitignore to behave and it's out of scope

* forgot this

* go again

* saner system, more akin to events subsystem, a lot copied from it

* consistency

* fixes something

* makes this show up too

* reformats

---------

Co-authored-by: SECBATON-GRIFFON <kanef9x@protonmail.com>
This commit is contained in:
SECBATON GRIFFON
2024-10-01 06:45:28 +01:00
committed by GitHub
parent f1eab46ec3
commit 3a2ecfec92
13 changed files with 564 additions and 498 deletions

View File

@@ -65,6 +65,7 @@
#define SS_PRIORITY_INACTIVITY 1
#define SS_PRIORITY_BURNABLE -50
#define SS_PRIORITY_DAYNIGHT -200
#define SS_PRIORITY_NEWS -1000
#define SS_WAIT_WEATHER 2 SECONDS
#define SS_WAIT_MACHINERY 2 SECONDS //TODO move the rest of these to defines

View File

@@ -15,7 +15,6 @@ var/datum/subsystem/more_init/SSmore_init
createPaiController()
ticker.init_snake_leaderboard()
ticker.init_minesweeper_leaderboard()
setup_news()
pick_discounted_items()
var/watch=start_watch()

View File

@@ -0,0 +1,16 @@
var/datum/subsystem/news/SSnews
/datum/subsystem/news
name = "News"
wait = 1 MINUTES
flags = SS_KEEP_TIMING
priority = SS_PRIORITY_NEWS
/datum/subsystem/news/Initialize(timeofday)
setup_news()
/datum/subsystem/news/New()
NEW_SS_GLOBAL(SSnews)
/datum/subsystem/news/fire(resumed = FALSE)
checkNews()

View File

@@ -1,157 +0,0 @@
// This system defines news that will be displayed in the course of a round.
// Uses BYOND's type system to put everything into a nice format
/datum/news_announcement
var
round_time // time of the round at which this should be announced, in seconds
message // body of the message
author = "Nanotrasen Editor"
channel_name = "Tau Ceti Daily"
can_be_redacted = 0
/datum/news_announcement/revolution_inciting_event
/datum/news_announcement/revolution_inciting_event/paycuts_suspicion
round_time = 60*10
message = {"Reports have leaked that Nanotrasen Inc. is planning to put paycuts into
effect on many of its Research Stations in Tau Ceti. Apparently these research
stations haven't been able to yield the expected revenue, and thus adjustments
have to be made."}
author = "Unauthorized"
/datum/news_announcement/revolution_inciting_event/paycuts_confirmation
round_time = 60*40
message = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have
been confirmed. Shockingly, however, the cuts will only affect lower tier
personnel. Heads of Staff will, according to our sources, not be affected."}
author = "Unauthorized"
/datum/news_announcement/revolution_inciting_event/human_experiments
round_time = 60*90
message = {"Unbelievable reports about human experimentation have reached our ears. According
to a refugee from one of the Tau Ceti Research Stations, their station, in order
to increase revenue, has refactored several of their facilities to perform experiments
on live humans, including virology research, genetic manipulation, and \"feeding them
to the slimes to see what happens\". Allegedly, these test subjects were neither
humanified monkeys nor volunteers, but rather unqualified staff that were forced into
the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc."}
author = "Unauthorized"
/datum/news_announcement/bluespace_research
/datum/news_announcement/bluespace_research/announcement
round_time = 60*20
message = {"The new field of research trying to explain several interesting spacetime oddities,
also known as \"Bluespace Research\", has reached new heights. Of the several
hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped
to experiment with and research Bluespace effects. Rumours have it some of these
stations even sport functional \"travel gates\" that can instantly move a whole research
team to an alternate reality."}
/datum/news_announcement/random_junk
/datum/news_announcement/random_junk/cheesy_honkers
author = "Assistant Editor Carl Ritz"
channel_name = "The Gibson Gazette"
message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations
say so!"}
round_time = 60 * 15
/datum/news_announcement/random_junk/net_block
author = "Assistant Editor Carl Ritz"
channel_name = "The Gibson Gazette"
message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators
claiming violation of net laws."}
round_time = 60 * 50
/datum/news_announcement/random_junk/found_ssd
channel_name = "Tau Ceti Daily"
author = "Doctor Eric Hanfield"
message = {"Several people have been found unconscious at their terminals. It is thought that it was due
to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage
reveals that many of them were playing games instead of working and their pay has been docked
accordingly."}
round_time = 60 * 90
/datum/news_announcement/lotus_tree
/datum/news_announcement/lotus_tree/explosions
channel_name = "Tau Ceti Daily"
author = "Reporter Leland H. Howards"
message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the
bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of
the explosions remain unknown, but there is speculation that it might have something to do with
the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L
announced that they were officially acknowledging inter-species marriage and providing couples
with marriage tax-benefits."}
round_time = 60 * 30
/datum/news_announcement/food_riots
/datum/news_announcement/food_riots/breaking_news
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae
Lupus system. This comes only hours after Nanotrasen officials announced they will no longer trade with the
colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to
continue. Nanotrasen officials have not given any details about said factions. More on that at the top of
the hour."}
round_time = 60 * 10
/datum/news_announcement/food_riots/more
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
message = {"More on the Refuge food riots: The Refuge Council has condemned Nanotrasen's withdrawal from
the colony, claiming \"there has been no increase in anti-Nanotrasen activity\", and \"\[the only] reason
Nanotrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out.
We have little to trade with them now\". Nanotrasen officials have denied these allegations, calling them
\"further proof\" of the colony's anti-Nanotrasen stance. Meanwhile, Refuge Security has been unable to quell
the riots. More on this at 6."}
round_time = 60 * 60
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots)
/*
proc/process_newscaster()
check_for_newscaster_updates(ticker.mode.newscaster_announcements)*/
var/global/tmp/announced_news_types = list()
/proc/check_for_newscaster_updates(type)
for(var/subtype in typesof(type)-type)
var/datum/news_announcement/news = new subtype()
if(news.round_time * 10 <= world.time && !(subtype in announced_news_types))
announced_news_types += subtype
announce_newscaster_news(news)
/proc/announce_newscaster_news(datum/news_announcement/news)
var/datum/feed_message/newMsg = new /datum/feed_message
newMsg.author = news.author
newMsg.is_admin_message = !news.can_be_redacted
newMsg.body = news.message
var/datum/feed_channel/sendto
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == news.channel_name)
sendto = FC
break
if(!sendto)
sendto = new /datum/feed_channel
sendto.channel_name = news.channel_name
sendto.author = news.author
sendto.locked = 1
sendto.is_admin_channel = 1
news_network.network_channels += sendto
sendto.messages += newMsg
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
NEWSCASTER.newsAlert(news.channel_name)

View File

@@ -116,6 +116,17 @@ var/datum/feed_network/news_network = new /datum/feed_network //The global n
var/list/obj/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence.
/datum/feed_channel/preset
locked = 1
is_admin_channel = 1
/datum/feed_channel/preset/tauceti
channel_name = "Tau Ceti Daily"
author = "CentComm Minister of Information"
/datum/feed_channel/preset/gibsongazette
channel_name = "The Gibson Gazette"
author = "Editor Mike Hammers"
/obj/machinery/newscaster
name = "newscaster"

View File

@@ -872,6 +872,7 @@ var/global/floorIsLava = 0
<BR>
<A href='?src=\ref[src];secretsfun=fakealerts'>Trigger a fake alert</A><BR>
<A href='?src=\ref[src];secretsfun=fakebooms'>Create fake explosions around the station</A><BR>
<A href='?src=\ref[src];secretsfun=fakenews'>Create a preset news announcement</A><BR>
<BR>
<A href='?src=\ref[src];secretsfun=placeturret'>Create a turret</A><BR>
<A href='?src=\ref[src];secretsfun=virusdish'>Create a new virus in a dish</A><BR>

View File

@@ -4051,6 +4051,27 @@ access_sec_doors,access_salvage_captain,access_cent_ert,access_syndicate,access_
else
world << sound('sound/effects/explosionfar.ogg')
sleep(rand(2, 10)) //Sleep 0.2 to 1 second
if("fakenews")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","FAKEN")
var/type
var/datum/feed_message/news/newspost
var/dest
var/datum/trade_destination/newsdest
if(alert(usr,"Generate news specifically from a location or not?","Location","Yes","No") == "Yes")
dest = input("Where will it happen?") in subtypesof(/datum/trade_destination)
newsdest = new dest()
var/list/typelist = newsdest.viable_mundane_events.len || newsdest.viable_random_events.len ? newsdest.viable_mundane_events + newsdest.viable_random_events : subtypesof(/datum/feed_message/news)
type = input("Select a news message to broadcast!") in typelist
newspost = new type(newsdest)
else
type = input("Select a news message to broadcast!") in subtypesof(/datum/feed_message/news)
dest = input("Where will it happen, if applicable?") in subtypesof(/datum/trade_destination)
newsdest = new dest()
newspost = new type(newsdest)
if(newsdest.get_custom_eventstring(type))
newspost.body = newsdest.get_custom_eventstring(type)
announce_newscaster_news(newspost)
if("togglerunescapepvp")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","RSPVP")

View File

@@ -1,51 +1,3 @@
#define RIOTS 1
#define WILD_ANIMAL_ATTACK 2
#define INDUSTRIAL_ACCIDENT 3
#define BIOHAZARD_OUTBREAK 4
#define WARSHIPS_ARRIVE 5
#define PIRATES 6
#define CORPORATE_ATTACK 7
#define ALIEN_RAIDERS 8
#define AI_LIBERATION 9
#define MOURNING 10
#define CULT_CELL_REVEALED 11
#define SECURITY_BREACH 12
#define ANIMAL_RIGHTS_RAID 13
#define FESTIVAL 14
#define RESEARCH_BREAKTHROUGH 15
#define BARGAINS 16
#define SONG_DEBUT 17
#define MOVIE_RELEASE 18
#define BIG_GAME_HUNTERS 19
#define ELECTION 20
#define GOSSIP 21
#define TOURISM 22
#define CELEBRITY_DEATH 23
#define RESIGNATION 24
#define DEFAULT 1
#define ADMINISTRATIVE 2
#define CLOTHING 3
#define SECURITY 4
#define SPECIAL_SECURITY 5
#define FOOD 6
#define ANIMALS 7
#define MINERALS 8
#define EMERGENCY 9
#define GAS 10
#define MAINTENANCE 11
#define ELECTRICAL 12
#define ROBOTICS 13
#define BIOMEDICAL 14
#define GEAR_EVA 15
//---- The following corporations are friendly with Nanotrasen and loosely enable trade and travel:
//Corporation Nanotrasen - Generalised / high tech research and plasma exploitation.
//Corporation Vessel Contracting - Ship and station construction, materials research.
@@ -63,27 +15,71 @@
//Destroyers are medium sized vessels, often used for escorting larger ships but able to go toe-to-toe with them if need be.
//Frigates are medium sized vessels, often used for escorting larger ships. They will rapidly find themselves outclassed if forced to face heavy warships head on.
var/global/list/non_update_news_types = list(/datum/feed_message/news/misc/paycuts_confirmation,/datum/feed_message/news/misc/human_experiments,/datum/feed_message/news/misc/more_food_riots)
var/global/list/news_types = list()
var/setup_news = 0
/proc/setup_news()
if(setup_news)
return
var/datum/feed_channel/newChannel = new /datum/feed_channel
newChannel.channel_name = "Tau Ceti Daily"
newChannel.author = "CentComm Minister of Information"
newChannel.locked = 1
newChannel.is_admin_channel = 1
news_network.network_channels += newChannel
news_network.network_channels += new /datum/feed_channel/preset/tauceti
news_network.network_channels += new /datum/feed_channel/preset/gibsongazette
newChannel = new /datum/feed_channel
newChannel.channel_name = "The Gibson Gazette"
newChannel.author = "Editor Mike Hammers"
newChannel.locked = 1
newChannel.is_admin_channel = 1
news_network.network_channels += newChannel
for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination)
for(var/loc_type in subtypesof(/datum/trade_destination))
var/datum/trade_destination/D = new loc_type
weighted_randomevent_locations[D] = D.viable_random_events.len
weighted_mundaneevent_locations[D] = D.viable_mundane_events.len
news_types = subtypesof(/datum/feed_message/news/misc) - non_update_news_types
setup_news = 1
var/scheduledNews = null
/proc/checkNews()
if(!scheduledNews)
var/delay = rand(eventTimeLower, eventTimeUpper) MINUTES
scheduledNews = world.timeofday + delay
message_admins("News cycle refreshed. Next post in [delay/600] minutes.")
else if(world.timeofday >scheduledNews)
var/datum/trade_destination/affected_dest = prob(90) || !news_types.len ? pickweight(weighted_mundaneevent_locations) : null
var/datum/feed_message/news/newspost
var/type
if(affected_dest?.viable_mundane_events.len)
type = pick(affected_dest.viable_mundane_events)
newspost = new type(affected_dest)
if(newspost.affected_dest.get_custom_eventstring(type))
newspost.body = newspost.affected_dest.get_custom_eventstring(type)
else
type = pick(news_types)
newspost = new type()
news_types -= newspost
announce_newscaster_news(newspost)
scheduledNews = null
checkNews()
/proc/announce_newscaster_news(datum/feed_message/news/news)
if(news.affected_dest?.get_custom_eventstring(news.type))
news.body = news.affected_dest.get_custom_eventstring(news.type)
var/datum/feed_channel/sendto
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == news.channel_name)
sendto = FC
break
if(!sendto)
sendto = new /datum/feed_channel
sendto.channel_name = news.channel_name
sendto.author = news.author
sendto.locked = 1
sendto.is_admin_channel = 1
news_network.network_channels += sendto
sendto.messages += news
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
NEWSCASTER.newsAlert(news.channel_name,news.headline)
if(news.update_type)
spawn(rand(news.update_delay_min,news.update_delay_max))
announce_newscaster_news(new news.update_type)

View File

@@ -2,9 +2,7 @@
/datum/event/news_event
endWhen = 50 //this will be set randomly, later
announceWhen = 15
var/event_type = 0
var/list/cheaper_goods = list()
var/list/dearer_goods = list()
var/datum/feed_message/news/event/event_type
var/datum/trade_destination/affected_dest
/datum/event/news_event/start()
@@ -14,95 +12,33 @@
affected_dest = pickweight(weighted_randomevent_locations)
if(affected_dest.viable_random_events.len)
endWhen = rand(60,300)
event_type = pick(affected_dest.viable_random_events)
var/inittype = pick(affected_dest.viable_random_events)
event_type = new inittype(affected_dest)
if(!event_type)
/*if(!istype(event_type))
return
switch(event_type)
if(RIOTS)
dearer_goods = list(SECURITY)
cheaper_goods = list(MINERALS, FOOD)
if(WILD_ANIMAL_ATTACK)
cheaper_goods = list(ANIMALS)
dearer_goods = list(FOOD, BIOMEDICAL)
if(INDUSTRIAL_ACCIDENT)
dearer_goods = list(EMERGENCY, BIOMEDICAL, ROBOTICS)
if(BIOHAZARD_OUTBREAK)
dearer_goods = list(BIOMEDICAL, GAS)
if(PIRATES)
dearer_goods = list(SECURITY, MINERALS)
if(CORPORATE_ATTACK)
dearer_goods = list(SECURITY, MAINTENANCE)
if(ALIEN_RAIDERS)
dearer_goods = list(BIOMEDICAL, ANIMALS)
cheaper_goods = list(GAS, MINERALS)
if(AI_LIBERATION)
dearer_goods = list(EMERGENCY, GAS, MAINTENANCE)
if(MOURNING)
cheaper_goods = list(MINERALS, MAINTENANCE)
if(CULT_CELL_REVEALED)
dearer_goods = list(SECURITY, BIOMEDICAL, MAINTENANCE)
if(SECURITY_BREACH)
dearer_goods = list(SECURITY)
if(ANIMAL_RIGHTS_RAID)
dearer_goods = list(ANIMALS)
if(FESTIVAL)
dearer_goods = list(FOOD, ANIMALS)
for(var/good_type in dearer_goods)
for(var/good_type in event_type.dearer_goods)
affected_dest.temp_price_change[good_type] = rand(1,100)
for(var/good_type in cheaper_goods)
affected_dest.temp_price_change[good_type] = rand(1,100) / 100
for(var/good_type in event_type.cheaper_goods)
affected_dest.temp_price_change[good_type] = rand(1,100) / 100*/
//see if our location has custom event info for this event
if(affected_dest.get_custom_eventstring(inittype))
event_type.body = affected_dest.get_custom_eventstring(inittype)
/datum/event/news_event/announce()
//copy-pasted from the admin verbs to submit new newscaster messages
var/datum/feed_message/newMsg = new /datum/feed_message
newMsg.author = "Tau Ceti Daily"
newMsg.is_admin_message = 1
//see if our location has custom event info for this event
newMsg.body = affected_dest.get_custom_eventstring()
if(!newMsg.body)
switch(event_type)
if(RIOTS)
newMsg.body = "[pick("Riots have","Unrest has")] broken out on planet [affected_dest.name]. Authorities call for calm, as [pick("various parties","rebellious elements","peacekeeping forces","\'REDACTED\'")] begin stockpiling weaponry and armour. Meanwhile, food and mineral prices are dropping as local industries attempt empty their stocks in expectation of looting."
if(WILD_ANIMAL_ATTACK)
newMsg.body = "Local [pick("wildlife","animal life","fauna")] on planet [affected_dest.name] has been increasing in agression and raiding outlying settlements for food. Big game hunters have been called in to help alleviate the problem, but numerous injuries have already occurred."
if(INDUSTRIAL_ACCIDENT)
newMsg.body = "[pick("An industrial accident","A smelting accident","A malfunction","A malfunctioning piece of machinery","Negligent maintenance","A cooleant leak","A ruptured conduit")] at a [pick("factory","installation","power plant","dockyards")] on [affected_dest.name] resulted in severe structural damage and numerous injuries. Repairs are ongoing."
if(BIOHAZARD_OUTBREAK)
newMsg.body = "[pick("A \'REDACTED\'","A biohazard","An outbreak","A virus")] on [affected_dest.name] has resulted in quarantine, stopping much shipping in the area. Although the quarantine is now lifted, authorities are calling for deliveries of medical supplies to treat the infected, and gas to replace contaminated stocks."
if(PIRATES)
newMsg.body = "[pick("Pirates","Criminal elements","A [pick("Syndicate","Donk Co.","Waffle Co.","\'REDACTED\'")] strike force")] have [pick("raided","blockaded","attempted to blackmail","attacked")] [affected_dest.name] today. Security has been tightened, but many valuable minerals were taken."
if(CORPORATE_ATTACK)
newMsg.body = "A small [pick("pirate","Cybersun Industries","Gorlex Marauders","Syndicate")] fleet has precise-jumped into proximity with [affected_dest.name], [pick("for a smash-and-grab operation","in a hit and run attack","in an overt display of hostilities")]. Much damage was done, and security has been tightened since the incident."
if(ALIEN_RAIDERS)
if(prob(20))
newMsg.body = "The Tiger Co-operative have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. Nanotrasen authorities are standing by to counter attempts at bio-terrorism."
else
newMsg.body = "[pick("The alien species designated \'United Exolitics\'","The alien species designated \'REDACTED\'","An unknown alien species")] have raided [affected_dest.name] today, stealing wildlife, farm animals, medical research materials and kidnapping civilians. It seems they desire to learn more about us, so the Navy will be standing by to accomodate them next time they try."
if(AI_LIBERATION)
newMsg.body = "A [pick("\'REDACTED\' was detected on","S.E.L.F operative infiltrated","malignant computer virus was detected on","rogue [pick("slicer","hacker")] was apprehended on")] [affected_dest.name] today, and managed to infect [pick("\'REDACTED\'","a sentient sub-system","a class one AI","a sentient defence installation")] before it could be stopped. Many lives were lost as it systematically begin murdering civilians, and considerable work must be done to repair the affected areas."
if(MOURNING)
newMsg.body = "[pick("The popular","The well-liked","The eminent","The well-known")] [pick("professor","entertainer","singer","researcher","public servant","administrator","ship captain","\'REDACTED\'")], [pick( random_name(pick(MALE,FEMALE)), 40; "\'REDACTED\'" )] has [pick("passed away","committed suicide","been murdered","died in a freakish accident")] on [affected_dest.name] today. The entire planet is in mourning, and prices have dropped for industrial goods as worker morale drops."
if(CULT_CELL_REVEALED)
newMsg.body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] cult of [pick("The Elder Gods","Nar'sie","an apocalyptic sect","\'REDACTED\'")] has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing \'REDACTED\' acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice. The editor reminds all personnel that supernatural myths will not be tolerated on Nanotrasen facilities."
if(SECURITY_BREACH)
newMsg.body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified","\'REDACTED\'")] [pick("\'REDACTED\'","section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all Nanotrasen personnel that such lapses are rare."
if(ANIMAL_RIGHTS_RAID)
newMsg.body = "[pick("Militant animal rights activists","Members of the terrorist group Animal Rights Consortium","Members of the terrorist group \'REDACTED\'")] have [pick("launched a campaign of terror","unleashed a swathe of destruction","raided farms and pastures","forced entry to \'REDACTED\'")] on [affected_dest.name] earlier today, freeing numerous [pick("farm animals","animals","\'REDACTED\'")]. Prices for tame and breeding animals have spiked as a result."
if(FESTIVAL)
newMsg.body = "A [pick("festival","week long celebration","day of revelry","planet-wide holiday")] has been declared on [affected_dest.name] by [pick("Governor","Commissioner","General","Commandant","Administrator")] [random_name(pick(MALE,FEMALE))] to celebrate [pick("the birth of their [pick("son","daughter")]","coming of age of their [pick("son","daughter")]","the pacification of rogue military cell","the apprehension of a violent criminal who had been terrorising the planet")]. Massive stocks of food and meat have been bought driving up prices across the planet."
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == "Tau Ceti Daily")
FC.messages += newMsg
FC.messages += event_type
break
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
NEWSCASTER.newsAlert("Tau Ceti Daily")
/*
/datum/event/news_event/end()
for(var/good_type in dearer_goods)
for(var/good_type in event_type.dearer_goods)
affected_dest.temp_price_change[good_type] = 1
for(var/good_type in cheaper_goods)
for(var/good_type in event_type.cheaper_goods)
affected_dest.temp_price_change[good_type] = 1
*/

View File

@@ -1,154 +0,0 @@
/datum/event/mundane_news
endWhen = 10
/datum/event/mundane_news/announce()
var/datum/trade_destination/affected_dest = pickweight(weighted_mundaneevent_locations)
var/event_type = 0
if(affected_dest.viable_mundane_events.len)
event_type = pick(affected_dest.viable_mundane_events)
if(!event_type)
return
//copy-pasted from the admin verbs to submit new newscaster messages
var/datum/feed_message/newMsg = new /datum/feed_message
newMsg.author = "Tau Ceti Daily"
newMsg.is_admin_message = 1
//see if our location has custom event info for this event
newMsg.body = affected_dest.get_custom_eventstring()
if(!newMsg.body)
newMsg.body = "[affected_dest.name] doesn't have custom events. Bug a coder."
// Too many goddamn strings, Bay. - N3X
/*
switch(event_type)
if(RESEARCH_BREAKTHROUGH)
newMsg.body = "A major breakthough in the field of [pick("plasma research","super-compressed materials","nano-augmentation","bluespace research","volatile power manipulation")] \
was announced [pick("yesterday","a few days ago","last week","earlier this month")] by a private firm on [affected_dest.name]. \
Nanotrasen declined to comment as to whether this could impinge on profits."
if(ELECTION)
newMsg.body = "The pre-selection of an additional candidates was announced for the upcoming [pick("supervisors council","advisory board","governership","board of inquisitors")] \
election on [affected_dest.name] was announced earlier today, \
[pick("media mogul","web celebrity", "industry titan", "superstar", "famed chef", "popular gardener", "ex-army officer", "multi-billionaire")] \
[random_name(pick(MALE,FEMALE))]. In a statement to the media they said '[pick("My only goal is to help the [pick("sick","poor","children")]",\
"I will maintain Nanotrasen's record profits","I believe in our future","We must return to our moral core","Just like... chill out dudes")]'."
if(RESIGNATION)
newMsg.body = "Nanotrasen regretfully announces the resignation of [pick("Sector Admiral","Division Admiral","Ship Admiral","Vice Admiral")] [random_name(pick(MALE,FEMALE))]."
if(prob(25))
var/locstring = pick("Segunda","Salusa","Cepheus","Andromeda","Gruis","Corona","Aquila","Asellus") + " " + pick("I","II","III","IV","V","VI","VII","VIII")
newMsg.body += " In a ceremony on [affected_dest.name] this afternoon, they will be awarded the \
[pick("Red Star of Sacrifice","Purple Heart of Heroism","Blue Eagle of Loyalty","Green Lion of Ingenuity")] for "
if(prob(33))
newMsg.body += "their actions at the Battle of [pick(locstring,"REDACTED")]."
else if(prob(50))
newMsg.body += "their contribution to the colony of [locstring]."
else
newMsg.body += "their loyal service over the years."
else if(prob(33))
newMsg.body += " They are expected to settle down in [affected_dest.name], where they have been granted a handsome pension."
else if(prob(50))
newMsg.body += " The news was broken on [affected_dest.name] earlier today, where they cited reasons of '[pick("health","family","REDACTED")]'"
else
newMsg.body += " Administration Aerospace wishes them the best of luck in their retirement ceremony on [affected_dest.name]."
if(CELEBRITY_DEATH)
newMsg.body = "It is with regret today that we announce the sudden passing of the "
if(prob(33))
newMsg.body += "[pick("distinguished","decorated","veteran","highly respected")] \
[pick("Ship's Captain","Vice Admiral","Colonel","Lieutenant Colonel")] "
else if(prob(50))
newMsg.body += "[pick("award-winning","popular","highly respected","trend-setting")] \
[pick("comedian","singer/songwright","artist","playwright","TV personality","model")] "
else
newMsg.body += "[pick("successful","highly respected","ingenious","esteemed")] \
[pick("academic","Professor","Doctor","Scientist")] "
newMsg.body += "[random_name(pick(MALE,FEMALE))] on [affected_dest.name] [pick("last week","yesterday","this morning","two days ago","three days ago")]\
[pick(". Assassination is suspected, but the perpetrators have not yet been brought to justice",\
" due to Syndicate infiltrators (since captured)",\
" during an industrial accident",\
" due to [pick("heart failure","kidney failure","liver failure","brain hemorrhage")]")]"
if(BARGAINS)
newMsg.body += "BARGAINS! BARGAINS! BARGAINS! Commerce Control on [affected_dest.name] wants you to know that everything must go! Across all retail centres, \
all goods are being slashed, and all retailors are onboard - so come on over for the \[shopping\] time of your life."
if(SONG_DEBUT)
newMsg.body += "[pick("Singer","Singer/songwriter","Saxophonist","Pianist","Guitarist","TV personality","Star")] [random_name(pick(MALE,FEMALE))] \
announced the debut of their new [pick("single","album","EP","label")] '[pick("Everyone's","Look at the","Baby don't eye those","All of those","Dirty nasty")] \
[pick("roses","three stars","starships","nanobots","cyborgs","Skrell","Sren'darr")] \
[pick("on Venus","on Reade","on Moghes","in my hand","slip through my fingers","die for you","sing your heart out","fly away")]' \
with [pick("pre-puchases available","a release tour","cover signings","a launch concert")] on [affected_dest.name]."
if(MOVIE_RELEASE)
newMsg.body += "From the [pick("desk","home town","homeworld","mind")] of [pick("acclaimed","award-winning","popular","stellar")] \
[pick("playwright","author","director","actor","TV star")] [random_name(pick(MALE,FEMALE))] comes the latest sensation: '\
[pick("Deadly","The last","Lost","Dead")] [pick("Starships","Warriors","outcasts","Tajarans","Unathi","Skrell")] \
[pick("of","from","raid","go hunting on","visit","ravage","pillage","destroy")] \
[pick("Moghes","Earth","Biesel","Ahdomai","S'randarr","the Void","the Edge of Space")]'.\
. Own it on webcast today, or visit the galactic premier on [affected_dest.name]!"
if(BIG_GAME_HUNTERS)
newMsg.body += "Game hunters on [affected_dest.name] "
if(prob(33))
newMsg.body += "were surprised when an unusual species experts have since identified as \
[pick("a subclass of mammal","a divergent abhuman species","an intelligent species of lemur","organic/cyborg hybrids")] turned up. Believed to have been brought in by \
[pick("alien smugglers","early colonists","syndicate raiders","unwitting tourists")], this is the first such specimen discovered in the wild."
else if(prob(50))
newMsg.body += "were attacked by a vicious [pick("nas'r","diyaab","samak","predator which has not yet been identified")]\
. Officials urge caution, and locals are advised to stock up on armaments."
else
newMsg.body += "brought in an unusually [pick("valuable","rare","large","vicious","intelligent")] [pick("mammal","predator","farwa","samak")] for inspection \
[pick("today","yesterday","last week")]. Speculators suggest they may be tipped to break several records."
if(GOSSIP)
newMsg.body += "[pick("TV host","Webcast personality","Superstar","Model","Actor","Singer")] [random_name(pick(MALE,FEMALE))] "
if(prob(33))
newMsg.body += "and their partner announced the birth of their [pick("first","second","third")] child on [affected_dest.name] early this morning. \
Doctors say the child is well, and the parents are considering "
if(prob(50))
newMsg.body += capitalize(pick(first_names_female))
else
newMsg.body += capitalize(pick(first_names_male))
newMsg.body += " for the name."
else if(prob(50))
newMsg.body += "announced their [pick("split","break up","marriage","engagement")] with [pick("TV host","webcast personality","superstar","model","actor","singer")] \
[random_name(pick(MALE,FEMALE))] at [pick("a society ball","a new opening","a launch","a club")] on [affected_dest.name] yesterday, pundits are shocked."
else
newMsg.body += {"is recovering from plastic surgery in a clinic on [affected_dest.name] for the [pick("second","third","fourth")] time, reportedly having made the decision in response to
[pick("unkind comments by an ex","rumours started by jealous friends","the decision to be dropped by a major sponsor","a disasterous interview on Tau Ceti Tonight")]."}
if(TOURISM)
newMsg.body += "Tourists are flocking to [affected_dest.name] after the surprise announcement of [pick("major shopping bargains by a wily retailer",\
"a huge new ARG by a popular entertainment company","a secret tour by popular artiste [random_name(pick(MALE,FEMALE))]")]. \
Tau Ceti Daily is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage."
*/
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == "Tau Ceti Daily")
FC.messages += newMsg
break
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
NEWSCASTER.newsAlert("Tau Ceti Daily")
/datum/event/trivial_news
endWhen = 10
/datum/event/trivial_news/announce()
//copy-pasted from the admin verbs to submit new newscaster messages
var/datum/feed_message/newMsg = new /datum/feed_message
newMsg.author = "Editor Mike Hammers"
//newMsg.is_admin_message = 1
var/datum/trade_destination/affected_dest = pick(weighted_mundaneevent_locations)
newMsg.body = pick(file2list("config/news/trivial.txt"))
newMsg.body = replacetext(newMsg.body,"{{AFFECTED}}",affected_dest.name)
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == "The Gibson Gazette")
FC.messages += newMsg
break
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
NEWSCASTER.newsAlert("The Gibson Gazette")

View File

@@ -1,16 +1,40 @@
#define RIOTS "/datum/feed_message/news/event/riots"
#define WILD_ANIMAL_ATTACK "/datum/feed_message/news/event/animal_attack"
#define INDUSTRIAL_ACCIDENT "/datum/feed_message/news/event/accident"
#define BIOHAZARD_OUTBREAK "/datum/feed_message/news/event/biohazard"
#define PIRATES "/datum/feed_message/news/event/pirates"
#define CORPORATE_ATTACK "/datum/feed_message/news/event/corporate"
#define ALIEN_RAIDERS "/datum/feed_message/news/event/alien_raiders"
#define AI_LIBERATION "/datum/feed_message/news/event/ai_liberation"
#define MOURNING "/datum/feed_message/news/event/mourning"
#define CULT_CELL_REVEALED "/datum/feed_message/news/event/cult_cell"
#define SECURITY_BREACH "/datum/feed_message/news/event/breach"
#define ANIMAL_RIGHTS_RAID "/datum/feed_message/news/event/animal_rights"
#define FESTIVAL "/datum/feed_message/news/event/festival"
#define RESEARCH_BREAKTHROUGH "/datum/feed_message/news/mundane/research"
#define BARGAINS "/datum/feed_message/news/mundane/bargains"
#define SONG_DEBUT "/datum/feed_message/news/mundane/song"
#define MOVIE_RELEASE "/datum/feed_message/news/mundane/movie"
#define BIG_GAME_HUNTERS "/datum/feed_message/news/mundane/hunt"
#define ELECTION "/datum/feed_message/news/mundane/election"
#define GOSSIP "/datum/feed_message/news/mundane/gossip"
#define TOURISM "/datum/feed_message/news/mundane/tourism"
#define CELEBRITY_DEATH "/datum/feed_message/news/mundane/celeb_death"
#define RESIGNATION "/datum/feed_message/news/mundane/resignation"
var/list/weighted_randomevent_locations = list()
var/list/weighted_mundaneevent_locations = list()
/datum/trade_destination
var/name = ""
var/description = ""
var/distance = 0
var/list/willing_to_buy = list()
var/list/willing_to_sell = list()
var/can_shuttle_here = 0 //one day crew from the exodus will be able to travel to this destination
//var/description = ""
//var/distance = 0
//var/list/willing_to_buy = list()
//var/list/willing_to_sell = list()
//var/can_shuttle_here = 0 //one day crew from the exodus will be able to travel to this destination
var/list/viable_random_events = list()
var/list/temp_price_change[BIOMEDICAL]
//var/list/temp_price_change[BIOMEDICAL]
var/list/viable_mundane_events = list()
/datum/trade_destination/proc/get_custom_eventstring(var/event_type)
@@ -19,19 +43,15 @@ var/list/weighted_mundaneevent_locations = list()
//distance is measured in AU and co-relates to travel time
/datum/trade_destination/centcomm
name = "CentComm"
description = "Nanotrasen's administrative centre for Tau Ceti."
distance = 1.2
willing_to_buy = list()
willing_to_sell = list()
//description = "Nanotrasen's administrative centre for Tau Ceti."
//distance = 1.2
viable_random_events = list(SECURITY_BREACH, CORPORATE_ATTACK, AI_LIBERATION)
viable_mundane_events = list(ELECTION, RESIGNATION, CELEBRITY_DEATH)
/datum/trade_destination/anansi
name = "NSS Anansi"
description = "Medical station ran by Second Red Cross (but owned by NT) for handling emergency cases from nearby colonies."
distance = 1.7
willing_to_buy = list()
willing_to_sell = list()
//description = "Medical station ran by Second Red Cross (but owned by NT) for handling emergency cases from nearby colonies."
//distance = 1.7
viable_random_events = list(SECURITY_BREACH, CULT_CELL_REVEALED, BIOHAZARD_OUTBREAK, PIRATES, ALIEN_RAIDERS)
viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH, BARGAINS, GOSSIP)
@@ -43,18 +63,14 @@ var/list/weighted_mundaneevent_locations = list()
/datum/trade_destination/icarus
name = "NMV Icarus"
description = "Corvette assigned to patrol NSS Exodus local space."
distance = 0.1
willing_to_buy = list()
willing_to_sell = list()
//description = "Corvette assigned to patrol NSS Exodus local space."
//distance = 0.1
viable_random_events = list(SECURITY_BREACH, AI_LIBERATION, PIRATES)
/datum/trade_destination/redolant
name = "OAV Redolant"
description = "Osiris Atmospherics station in orbit around the only gas giant insystem. They retain tight control over shipping rights, and Osiris warships protecting their prize are not an uncommon sight in Tau Ceti."
distance = 0.6
willing_to_buy = list()
willing_to_sell = list()
//description = "Osiris Atmospherics station in orbit around the only gas giant insystem. They retain tight control over shipping rights, and Osiris warships protecting their prize are not an uncommon sight in Tau Ceti."
//distance = 0.6
viable_random_events = list(INDUSTRIAL_ACCIDENT, PIRATES, CORPORATE_ATTACK)
viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH)
@@ -66,45 +82,35 @@ var/list/weighted_mundaneevent_locations = list()
/datum/trade_destination/beltway
name = "Beltway mining chain"
description = "A co-operative effort between Beltway and Nanotrasen to exploit the rich outer asteroid belt of the Tau Ceti system."
distance = 7.5
willing_to_buy = list()
willing_to_sell = list()
//description = "A co-operative effort between Beltway and Nanotrasen to exploit the rich outer asteroid belt of the Tau Ceti system."
//distance = 7.5
viable_random_events = list(PIRATES, INDUSTRIAL_ACCIDENT)
viable_mundane_events = list(TOURISM)
/datum/trade_destination/biesel
name = "Biesel"
description = "Large ship yards, strong economy and a stable, well-educated populace, Biesel largely owes allegiance to Sol / Vessel Contracting and begrudgingly tolerates NT. Capital is Lowell City."
distance = 2.3
willing_to_buy = list()
willing_to_sell = list()
//description = "Large ship yards, strong economy and a stable, well-educated populace, Biesel largely owes allegiance to Sol / Vessel Contracting and begrudgingly tolerates NT. Capital is Lowell City."
//distance = 2.3
viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING)
viable_mundane_events = list(BARGAINS, GOSSIP, SONG_DEBUT, MOVIE_RELEASE, ELECTION, TOURISM, RESIGNATION, CELEBRITY_DEATH)
/datum/trade_destination/new_gibson
name = "New Gibson"
description = "Heavily industrialised rocky planet containing the majority of the planet-bound resources in the system, New Gibson is torn by unrest and has very little wealth to call it's own except in the hands of the corporations who jostle with NT for control."
distance = 6.6
willing_to_buy = list()
willing_to_sell = list()
//description = "Heavily industrialised rocky planet containing the majority of the planet-bound resources in the system, New Gibson is torn by unrest and has very little wealth to call it's own except in the hands of the corporations who jostle with NT for control."
//distance = 6.6
viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING)
viable_mundane_events = list(ELECTION, TOURISM, RESIGNATION)
/datum/trade_destination/luthien
name = "Luthien"
description = "A small colony established on a feral, untamed world (largely jungle). Savages and wild beasts attack the outpost regularly, although NT maintains tight military control."
distance = 8.9
willing_to_buy = list()
willing_to_sell = list()
//description = "A small colony established on a feral, untamed world (largely jungle). Savages and wild beasts attack the outpost regularly, although NT maintains tight military control."
//distance = 8.9
viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS)
viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION)
/datum/trade_destination/reade
name = "Reade"
description = "A cold, metal-deficient world, NT maintains large pastures in whatever available space in an attempt to salvage something from this profitless colony."
distance = 7.5
willing_to_buy = list()
willing_to_sell = list()
//description = "A cold, metal-deficient world, NT maintains large pastures in whatever available space in an attempt to salvage something from this profitless colony."
//distance = 7.5
viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS)
viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION)

View File

@@ -0,0 +1,390 @@
#define DEFAULT 1
#define ADMINISTRATIVE 2
#define CLOTHING 3
#define SECURITY 4
#define SPECIAL_SECURITY 5
#define FOOD 6
#define ANIMALS 7
#define MINERALS 8
#define EMERGENCY 9
#define GAS 10
#define MAINTENANCE 11
#define ELECTRICAL 12
#define ROBOTICS 13
#define BIOMEDICAL 14
#define GEAR_EVA 15
// This system defines news that will be displayed in the course of a round.
// Uses BYOND's type system to put everything into a nice format
/datum/feed_message/news
author = "CentComm Minister of Information"
body = "HOLY PINGAS WHAT A SCOOP" // filler
headline = "THIS JUST IN"
var/channel_name = "Tau Ceti Daily"
var/update_type // message to come after this
var/update_delay_min
var/update_delay_max // amount of time later it comes
var/datum/trade_destination/affected_dest
/datum/feed_message/news/New(var/datum/trade_destination/dest)
..()
affected_dest = dest || pickweight(weighted_mundaneevent_locations)
// the below three were originally from revs game mode, if anyone wants to work them back into it
/datum/feed_message/news/misc/paycuts_suspicion
headline = "Nanotrasen - Paycuts rumoured on all stations due to lack of profit"
body = {"Reports have leaked that Nanotrasen Inc. is planning to put paycuts into
effect on many of its Research Stations in Tau Ceti. Apparently these research
stations haven't been able to yield the expected revenue, and thus adjustments
have to be made."}
author = "Unauthorized"
update_type = /datum/feed_message/news/misc/paycuts_confirmation
update_delay_min = 20 MINUTES
update_delay_max = 40 MINUTES
/datum/feed_message/news/misc/paycuts_confirmation
headline = "Nanotrasen - Paycuts confirmed, head of staff exempt"
body = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have
been confirmed. Shockingly, however, the cuts will only affect lower tier
personnel. Heads of Staff will, according to our sources, not be affected."}
author = "Unauthorized"
update_type = /datum/feed_message/news/misc/human_experiments
update_delay_min = 40 MINUTES
update_delay_max = 60 MINUTES
/datum/feed_message/news/misc/human_experiments
headline = "Nanotrasen suspected to be experimenting on humans!"
body = {"Unbelievable reports about human experimentation have reached our ears. According
to a refugee from one of the Tau Ceti Research Stations, their station, in order
to increase revenue, has refactored several of their facilities to perform experiments
on live humans, including virology research, genetic manipulation, and \"feeding them
to the slimes to see what happens\". Allegedly, these test subjects were neither
humanified monkeys nor volunteers, but rather unqualified staff that were forced into
the experiments, and reported to have died in a \"work accident\" by Nanotrasen Inc."}
author = "Unauthorized"
/datum/feed_message/news/misc/bluespace_research
headline = "Bluespace transportation research in full drive"
body = {"The new field of research trying to explain several interesting spacetime oddities,
also known as \"Bluespace Research\", has reached new heights. Of the several
hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped
to experiment with and research Bluespace effects. Rumours have it some of these
stations even sport functional \"travel gates\" that can instantly move a whole research
team to an alternate reality."}
/datum/feed_message/news/misc/found_ssd
channel_name = "Tau Ceti Daily"
author = "Doctor Eric Hanfield"
headline = "Crew consciousness issues - A root cause?"
body = {"Several people have been found unconscious at their terminals. It is thought that it was due
to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage
reveals that many of them were playing games instead of working and their pay has been docked
accordingly."}
/datum/feed_message/news/misc/explosions
channel_name = "Tau Ceti Daily"
author = "Reporter Leland H. Howards"
headline = "Explosions on Lotus Tree - 50 dead at least"
body = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the
bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of
the explosions remain unknown, but there is speculation that it might have something to do with
the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L
announced that they were officially acknowledging inter-species marriage and providing couples
with marriage tax-benefits."}
/datum/feed_message/news/misc/food_riots
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
headline = "Food riots engulf Tenebrae"
body = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae
Lupus system. This comes only hours after Nanotrasen officials announced they will no longer trade with the
colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to
continue. Nanotrasen officials have not given any details about said factions. More on that at the top of
the hour."}
update_type = /datum/feed_message/news/misc/more_food_riots
update_delay_min = 40 MINUTES
update_delay_max = 60 MINUTES
/datum/feed_message/news/misc/more_food_riots
channel_name = "Tau Ceti Daily"
author = "Reporter Ro'kii Ar-Raqis"
headline = "Food riots on Tenebrae intensify"
body = {"More on the Refuge food riots: The Refuge Council has condemned Nanotrasen's withdrawal from
the colony, claiming \"there has been no increase in anti-Nanotrasen activity\", and \"\[the only] reason
Nanotrasen withdrew was because the \[Tenebrae Lupus] system's Plasma deposits have been completely mined out.
We have little to trade with them now\". Nanotrasen officials have denied these allegations, calling them
\"further proof\" of the colony's anti-Nanotrasen stance. Meanwhile, Refuge Security has been unable to quell
the riots. More on this at 6."}
/datum/feed_message/news/event
is_admin_message = 1
var/list/cheaper_goods = list()
var/list/dearer_goods = list()
/datum/feed_message/news/event/riots
dearer_goods = list(SECURITY)
cheaper_goods = list(MINERALS, FOOD)
/datum/feed_message/news/event/riots/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Unrest","Riots")] on [affected_dest.name] affect stock supply"
body = "[pick("Riots have","Unrest has")] broken out on planet [affected_dest.name]. Authorities call for calm, as [pick("various parties","rebellious elements","peacekeeping forces","\'REDACTED\'")] begin stockpiling weaponry and armour. Meanwhile, food and mineral prices are dropping as local industries attempt empty their stocks in expectation of looting."
/datum/feed_message/news/event/animal_attack
cheaper_goods = list(ANIMALS)
dearer_goods = list(FOOD, BIOMEDICAL)
/datum/feed_message/news/event/animal_attack/New(var/datum/trade_destination/dest)
..()
headline = "Feral wildlife on [affected_dest.name] attacks food stockpiles"
body = "Local [pick("wildlife","animal life","fauna")] on planet [affected_dest.name] has been increasing in agression and raiding outlying settlements for food. Big game hunters have been called in to help alleviate the problem, but numerous injuries have already occurred."
/datum/feed_message/news/event/accident
dearer_goods = list(EMERGENCY, BIOMEDICAL, ROBOTICS)
/datum/feed_message/news/event/accident/New(var/datum/trade_destination/dest)
..()
body = "[pick("Industrial accident","Malfunction")] at [affected_dest.name] site causes [pick("large disaster","mass damage","mass destruction")]"
body = "[pick("An industrial accident","A smelting accident","A malfunction","A malfunctioning piece of machinery","Negligent maintenance","A cooleant leak","A ruptured conduit")] at a [pick("factory","installation","power plant","dockyards")] on [affected_dest.name] resulted in severe structural damage and numerous injuries. Repairs are ongoing."
/datum/feed_message/news/event/biohazard
dearer_goods = list(BIOMEDICAL, GAS)
/datum/feed_message/news/event/biohazard/New(var/datum/trade_destination/dest)
..()
headline = "Viral outbreak on [affected_dest.name] infects many"
body = "[pick("A \'REDACTED\'","A biohazard","An outbreak","A virus")] on [affected_dest.name] has resulted in quarantine, stopping much shipping in the area. Although the quarantine is now lifted, authorities are calling for deliveries of medical supplies to treat the infected, and gas to replace contaminated stocks."
/datum/feed_message/news/event/pirates
dearer_goods = list(SECURITY, MINERALS)
/datum/feed_message/news/event/pirates/New(var/datum/trade_destination/dest)
..()
headline = "[affected_dest.name] [pick("raided","ambushed","attacked")] by criminal elements"
body = "[pick("Pirates","Criminal elements","A [pick("Syndicate","Donk Co.","Waffle Co.","\'REDACTED\'")] strike force")] have [pick("raided","blockaded","attempted to blackmail","attacked")] [affected_dest.name] today. Security has been tightened, but many valuable minerals were taken."
/datum/feed_message/news/event/corporate
dearer_goods = list(SECURITY, MAINTENANCE)
/datum/feed_message/news/event/corporate/New(var/datum/trade_destination/dest)
..()
headline = "[affected_dest.name] [pick("raided","sieged","attacked")] by large scale rogue entities"
body = "A small [pick("pirate","Cybersun Industries","Gorlex Marauders","Syndicate")] fleet has precise-jumped into proximity with [affected_dest.name], [pick("for a smash-and-grab operation","in a hit and run attack","in an overt display of hostilities")]. Much damage was done, and security has been tightened since the incident."
/datum/feed_message/news/event/alien_raiders
dearer_goods = list(BIOMEDICAL, ANIMALS)
cheaper_goods = list(GAS, MINERALS)
/datum/feed_message/news/event/alien_raiders/New(var/datum/trade_destination/dest)
..()
headline = "Alien raid, theft and kidnappings on [affected_dest.name]"
if(prob(20))
body = "The Tiger Co-operative have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. Nanotrasen authorities are standing by to counter attempts at bio-terrorism."
else
body = "[pick("The alien species designated \'United Exolitics\'","The alien species designated \'REDACTED\'","An unknown alien species")] have raided [affected_dest.name] today, stealing wildlife, farm animals, medical research materials and kidnapping civilians. It seems they desire to learn more about us, so the Navy will be standing by to accomodate them next time they try."
/datum/feed_message/news/event/ai_liberation
dearer_goods = list(EMERGENCY, GAS, MAINTENANCE)
/datum/feed_message/news/event/ai_liberation/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Slicer","Hacker")] [pick("infests","infiltrates","compromises")] [pick("on-board A.I","defence systems")] on [affected_dest.name] causing mass death"
body = "A [pick("\'REDACTED\' was detected on","S.E.L.F operative infiltrated","malignant computer virus was detected on","rogue [pick("slicer","hacker")] was apprehended on")] [affected_dest.name] today, and managed to infect [pick("\'REDACTED\'","a sentient sub-system","a class one AI","a sentient defence installation")] before it could be stopped. Many lives were lost as it systematically begin murdering civilians, and considerable work must be done to repair the affected areas."
/datum/feed_message/news/event/mourning
cheaper_goods = list(MINERALS, MAINTENANCE)
/datum/feed_message/news/event/mourning/New(var/datum/trade_destination/dest)
..()
var/name = capitalize(pick(random_name(pick(MALE,FEMALE)), 40; "\'REDACTED\'"))
headline = "Famous figure [name] dead at [rand(25,100)]"
body = "[pick("The popular","The well-liked","The eminent","The well-known")] [pick("professor","entertainer","singer","researcher","public servant","administrator","ship captain","\'REDACTED\'")], [name] has [pick("passed away","committed suicide","been murdered","died in a freakish accident")] on [affected_dest.name] today. The entire planet is in mourning, and prices have dropped for industrial goods as worker morale drops."
/datum/feed_message/news/event/cult_cell
dearer_goods = list(SECURITY, BIOMEDICAL, MAINTENANCE)
/datum/feed_message/news/event/cult_cell/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Blood c","C","Apocalyptic c")]ult cell [pick("discovered","revealed","exposed")] on [affected_dest.name]"
body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] cult of [pick("The Elder Gods","Nar'sie","an apocalyptic sect","\'REDACTED\'")] has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing \'REDACTED\' acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice. The editor reminds all personnel that supernatural myths will not be tolerated on Nanotrasen facilities."
/datum/feed_message/news/event/breach
dearer_goods = list(SECURITY)
/datum/feed_message/news/event/breach/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Security breach","Prison break")] on [affected_dest.name] [pick("restricted","sensitive")] [pick("zone","area")]"
body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified","\'REDACTED\'")] [pick("\'REDACTED\'","section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all Nanotrasen personnel that such lapses are rare."
/datum/feed_message/news/event/animal_rights
dearer_goods = list(ANIMALS)
/datum/feed_message/news/event/animal_rights/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Animal","Animal rights")] breakout on [affected_dest.name]"
body = "[pick("Militant animal rights activists","Members of the terrorist group Animal Rights Consortium","Members of the terrorist group \'REDACTED\'")] have [pick("launched a campaign of terror","unleashed a swathe of destruction","raided farms and pastures","forced entry to \'REDACTED\'")] on [affected_dest.name] earlier today, freeing numerous [pick("farm animals","animals","\'REDACTED\'")]. Prices for tame and breeding animals have spiked as a result."
/datum/feed_message/news/event/festival
dearer_goods = list(FOOD, ANIMALS)
/datum/feed_message/news/event/festival/New(var/datum/trade_destination/dest)
..()
headline = "Festivities begin on [affected_dest.name]"
body = "A [pick("festival","week long celebration","day of revelry","planet-wide holiday")] has been declared on [affected_dest.name] by [pick("Governor","Commissioner","General","Commandant","Administrator")] [random_name(pick(MALE,FEMALE))] to celebrate [pick("the birth of their [pick("son","daughter")]","coming of age of their [pick("son","daughter")]","the pacification of rogue military cell","the apprehension of a violent criminal who had been terrorising the planet")]. Massive stocks of food and meat have been bought driving up prices across the planet."
/datum/feed_message/news/mundane
is_admin_message = 1
/datum/feed_message/news/mundane/research/New(var/datum/trade_destination/dest)
..()
headline = "Major [pick("science","research")] [pick("breakthrough","find","discovery")] on [affected_dest.name]"
body = "A major breakthough in the field of [pick("plasma research","super-compressed materials","nano-augmentation","bluespace research","volatile power manipulation")] \
was announced [pick("yesterday","a few days ago","last week","earlier this month")] by a private firm on [affected_dest.name]. \
Nanotrasen declined to comment as to whether this could impinge on profits."
/datum/feed_message/news/mundane/bargains/New(var/datum/trade_destination/dest)
..()
headline = "[pick("BIG SALE NOW ON","BARGAINS DOWN","PRICES GALORE")] at [affected_dest.name]!"
body = "BARGAINS! BARGAINS! BARGAINS! Commerce Control on [affected_dest.name] wants you to know that everything must go! Across all retail centres, \
all goods are being slashed, and all retailors are onboard - so come on over for the \[shopping\] time of your life."
/datum/feed_message/news/mundane/song/New(var/datum/trade_destination/dest)
..()
var/name = random_name(pick(MALE,FEMALE))
var/title = "[pick("single","album","EP","label")] '[pick("Everyone's","Look at the","Baby don't eye those","All of those","Dirty nasty")] \
[pick("roses","three stars","starships","nanobots","cyborgs","Skrell","Sren'darr")] \
[pick("on Venus","on Reade","on Moghes","in my hand","slip through my fingers","die for you","sing your heart out","fly away")]'"
headline = "Musician [name] to release new [title] in [rand(5,20)] days"
body = "[pick("Singer","Singer/songwriter","Saxophonist","Pianist","Guitarist","TV personality","Star")] [name] \
announced the debut of their new [title] \
with [pick("pre-puchases available","a release tour","cover signings","a launch concert")] on [affected_dest.name]."
/datum/feed_message/news/mundane/movie/New(var/datum/trade_destination/dest)
..()
var/name = random_name(pick(MALE,FEMALE))
var/title = "[pick("Deadly","The last","Lost","Dead")] [pick("Starships","Warriors","outcasts","Tajarans","Unathi","Skrell")] \
[pick("of","from","raid","go hunting on","visit","ravage","pillage","destroy")] \
[pick("Moghes","Earth","Biesel","Ahdomai","S'randarr","the Void","the Edge of Space")]"
headline = "[name] to be involved in new movie `[title]` soon"
body = "From the [pick("desk","home town","homeworld","mind")] of [pick("acclaimed","award-winning","popular","stellar")] \
[pick("playwright","author","director","actor","TV star")] [name] comes the latest sensation: '[title]'.\
. Own it on webcast today, or visit the galactic premier on [affected_dest.name]!"
/datum/feed_message/news/mundane/hunt/New(var/datum/trade_destination/dest)
..()
body = "Game hunters on [affected_dest.name] "
if(prob(33))
headline = "[pick("Animal","Game",affected_dest.name)] hunters [pick("make big discovery","bag trophy prize","win big")]"
body += "were surprised when an unusual species experts have since identified as \
[pick("a subclass of mammal","a divergent abhuman species","an intelligent species of lemur","organic/cyborg hybrids")] turned up. Believed to have been brought in by \
[pick("alien smugglers","early colonists","syndicate raiders","unwitting tourists")], this is the first such specimen discovered in the wild."
else if(prob(50))
var/adversary = pick("nas'r","diyaab","samak","predator which has not yet been identified")
headline = "[pick("Brave","Game",affected_dest.name)] hunters [pick("attacked","mauled","ambushed")] by [adversary]"
body += "were attacked by a vicious [adversary]\
. Officials urge caution, and locals are advised to stock up on armaments."
else
headline = "[pick("Animal","Game",affected_dest.name)] hunters [pick("break new record","find large specimen","get their big break")]"
body += "brought in an unusually [pick("valuable","rare","large","vicious","intelligent")] [pick("mammal","predator","farwa","samak")] for inspection \
[pick("today","yesterday","last week")]. Speculators suggest they may be tipped to break several records."
/datum/feed_message/news/mundane/election/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Election night","Fear and loathing","Locals go to the polls","Big vote")] on the [affected_dest.name] campaign trail"
body = "The pre-selection of an additional candidates was announced for the upcoming [pick("supervisors council","advisory board","governership","board of inquisitors")] \
election on [affected_dest.name] was announced earlier today, \
[pick("media mogul","web celebrity", "industry titan", "superstar", "famed chef", "popular gardener", "ex-army officer", "multi-billionaire")] \
[random_name(pick(MALE,FEMALE))]. In a statement to the media they said '[pick("My only goal is to help the [pick("sick","poor","children")]",\
"I will maintain Nanotrasen's record profits","I believe in our future","We must return to our moral core","Just like... chill out dudes")]'."
/datum/feed_message/news/mundane/gossip/New(var/datum/trade_destination/dest)
..()
var/name = random_name(pick(MALE,FEMALE))
headline = "[pick("The latest scoop on [name]!","[name]'s dirty little [pick("secret","affair")]","Quasi-legal intel on [name]'s private life","We wiretapped [name]'s PDA message and found this. What you gonna do about it?","New very super seriously important news on [name]")]"
body = "[pick("TV host","Webcast personality","Superstar","Model","Actor","Singer")] [name] "
if(prob(33))
body += "and their partner announced the birth of their [pick("first","second","third")] child on [affected_dest.name] early this morning. \
Doctors say the child is well, and the parents are considering "
if(prob(50))
body += capitalize(pick(first_names_female))
else
body += capitalize(pick(first_names_male))
body += " for the name."
else if(prob(50))
body += "announced their [pick("split","break up","marriage","engagement")] with [pick("TV host","webcast personality","superstar","model","actor","singer")] \
[random_name(pick(MALE,FEMALE))] at [pick("a society ball","a new opening","a launch","a club")] on [affected_dest.name] yesterday, pundits are shocked."
else
body += {"is recovering from plastic surgery in a clinic on [affected_dest.name] for the [pick("second","third","fourth")] time, reportedly having made the decision in response to
[pick("unkind comments by an ex","rumours started by jealous friends","the decision to be dropped by a major sponsor","a disasterous interview on Tau Ceti Tonight")]."}
/datum/feed_message/news/mundane/tourism/New(var/datum/trade_destination/dest)
..()
headline = "[pick("Come see","A trip to","Tours now available for new event on","Why to visit")] [affected_dest.name]"
body = "Tourists are flocking to [affected_dest.name] after the surprise announcement of [pick("major shopping bargains by a wily retailer",\
"a huge new ARG by a popular entertainment company","a secret tour by popular artiste [random_name(pick(MALE,FEMALE))]")]. \
Tau Ceti Daily is offering discount tickets for two to see [random_name(pick(MALE,FEMALE))] live in return for eyewitness reports and up to the minute coverage."
/datum/feed_message/news/mundane/celeb_death/New(var/datum/trade_destination/dest)
..()
var/name = "[random_name(pick(MALE,FEMALE))]"
headline = "[name] has [pick("passed","died","been found dead")]"
body = "It is with regret today that we announce the sudden passing of the "
if(prob(33))
body += "[pick("distinguished","decorated","veteran","highly respected")] \
[pick("Ship's Captain","Vice Admiral","Colonel","Lieutenant Colonel")] "
else if(prob(50))
body += "[pick("award-winning","popular","highly respected","trend-setting")] \
[pick("comedian","singer/songwright","artist","playwright","TV personality","model")] "
else
body += "[pick("successful","highly respected","ingenious","esteemed")] \
[pick("academic","Professor","Doctor","Scientist")] "
body += "[name] on [affected_dest.name] [pick("last week","yesterday","this morning","two days ago","three days ago")]\
[pick(". Assassination is suspected, but the perpetrators have not yet been brought to justice",\
" due to Syndicate infiltrators (since captured)",\
" during an industrial accident",\
" due to [pick("heart failure","kidney failure","liver failure","brain hemorrhage")]")]"
/datum/feed_message/news/mundane/resignation/New(var/datum/trade_destination/dest)
..()
var/name = "[random_name(pick(MALE,FEMALE))]"
headline = "Nanotrasen Admiral [name] [pick("resigns","calls it quits","retires")]"
body = "Nanotrasen regretfully announces the resignation of [pick("Sector","Division","Ship","Vice")] Admiral [name]."
if(prob(25))
var/locstring = pick("Segunda","Salusa","Cepheus","Andromeda","Gruis","Corona","Aquila","Asellus") + " " + pick("I","II","III","IV","V","VI","VII","VIII")
body += " In a ceremony on [affected_dest.name] this afternoon, they will be awarded the \
[pick("Red Star of Sacrifice","Purple Heart of Heroism","Blue Eagle of Loyalty","Green Lion of Ingenuity")] for "
if(prob(33))
body += "their actions at the Battle of [pick(locstring,"REDACTED")]."
else if(prob(50))
body += "their contribution to the colony of [locstring]."
else
body += "their loyal service over the years."
else if(prob(33))
body += " They are expected to settle down in [affected_dest.name], where they have been granted a handsome pension."
else if(prob(50))
body += " The news was broken on [affected_dest.name] earlier today, where they cited reasons of '[pick("health","family","REDACTED")]'"
else
body += " Administration Aerospace wishes them the best of luck in their retirement ceremony on [affected_dest.name]."
/datum/feed_message/news/trivial
channel_name = "The Gibson Gazette"
//is_admin_message = 1
/datum/feed_message/news/trivial/New(var/datum/trade_destination/dest)
..()
author = pick("Editor Mike Hammers","Assistant Editor Carl Ritz")
headline = "[pick("The [pick("daily","weekly")] round-up","The latest run-down","The current events","BREAKING NEWS PLEASE SELECT THIS STORY ON ALL CASTERS...","The update","Stories you can't read anywhere else...","The news they didn't want you to know","This [pick("day","week")] in [pick("science","information","the news","the happenings","the headlines","the story","stupid","insanity","boredom","shame","confusion","hilarity","the vast nothingness of space")]")] on [affected_dest.name]!"
body = ""
var/list/thenews = file2list("config/news/trivial.txt")
for(var/i in 1 to rand(3,5))
body += "/ [pick_n_take(thenews)] /" // because newlines don't work, this will have to do
body = replacetext(body,"{{AFFECTED}}",affected_dest.name)

View File

@@ -250,6 +250,7 @@
#include "code\controllers\subsystem\machinery.dm"
#include "code\controllers\subsystem\mob.dm"
#include "code\controllers\subsystem\nanoui.dm"
#include "code\controllers\subsystem\news.dm"
#include "code\controllers\subsystem\objects.dm"
#include "code\controllers\subsystem\pathfinder.dm"
#include "code\controllers\subsystem\pathing.dm"
@@ -302,7 +303,6 @@
#include "code\datums\modules.dm"
#include "code\datums\mutable_appearance.dm"
#include "code\datums\next_map.dm"
#include "code\datums\periodic_news.dm"
#include "code\datums\profiling.dm"
#include "code\datums\recipe.dm"
#include "code\datums\recruiter.dm"
@@ -2245,8 +2245,8 @@
#include "code\modules\nano\nanoui.dm"
#include "code\modules\news\news.dm"
#include "code\modules\news\news_events.dm"
#include "code\modules\news\news_events_mundane.dm"
#include "code\modules\news\news_trade_destinations.dm"
#include "code\modules\news\news_types.dm"
#include "code\modules\optics\photocollector.dm"
#include "code\modules\optics\prism.dm"
#include "code\modules\optics\mirrors\frame.dm"