I have a loosely interconnected world where news travel slowly, but steadily so when a trader from a far off place comes visiting your place, what does he know? Whats his latest perspective on that far away place?

So, I'm not looking for a system for calculating the rate at which any given news item travels so much as a system for keeping track of all the news items used in your campaign, in a way that allows you to quickly work out which news items in the list you need to look at in particular circumstances.


I have a world in ruins, we play in the eastern outskirts of what would today be Russia. In a post-apocalyptic scenario with >99% of humanity gone. Its been ~70 years since the last new factories were build.

There are various factions that war about local leadership. The group already has met some of them but not all of them. There are some traders (working the Trans-Sib Railway) that ship the goods from the few factories that are still operating to the various cities that are still there.

My goal is to check what goes on in the various groups with a random chart (I can do that myself) and then keep track of each of the factions. I need a way to manage that consistently somehow.

I need to have a way to structure connections between key actors (Mayor of the city, some major traders, etc.) and a way to structure connections between places.

Examples and what I have so far

Please note that the examples look very "computeric" that's because I'm a software dev and look at the world this way. I am open to other ways of managing this. Especially non-computer ways so that I don't need my laptop all the time.

I have a "diary" where I keep the events like:

  • 01.st day Traveller Caravan starts move from City A to City B.
  • 14.th day Mayor of City B got shot, currently warring factions within the city.
  • 16.th day Playergroup had fight with biker gang, nobody won. Disengaged after serious harm on both sides.
  • 16.th day New faction! Biker Gang, roaming outskirts of City A. Plots against Playergroup.
  • 28.th day City C is struck by Tornado, old skyscrapers topple and destroy market.
  • ...

Think of the following situation: The players meet a long-distance traveller that has visited ten cities in the last year that are important to the players. I need to know what happened until the point where the traveller was last in that town. So I have the "Traveller" Sheet where I write down where he is when. Then I have one "City" Sheet for each of the cities where I have to look up the history up to the point where that traveller was last in the city.

What I am looking for

Now I would want to have different ways of looking at this info, even more as the world goes on and the amount of stuff that happened increases.

I need to manage ~50 factions / places / people with about 1 news entry every two months, so after a year there are (50*0,5*12) ~300 news entries that this trader might have. Currently it takes up way too much time to look that all up.

Why is that important

My Group is the front runner division of an upcoming new faction in the world and needs to know what they have to expect from the various other factions in the world. Some goods have to be transported VERY LONG distances (6 - 12 months) from the last place that can still produce them to the outskirts, so faction leaders need to know what happens in other places. I also want to produce a rich world where its clear to the players that other places have their own agendas, struggles, etc. and can (and should) react to that.

Solutions I thought about

As a software dev, I considered writing a program for that but I'd prefer a less work intense way.

I also thought about handling all the info on paper and maintain that on a wall of my flat with post-its and string.

But I am open to all kinds of suggestions for this problem.

I asked a similar question with more focus on software on Software Recommendations.SE.


2 Answers 2


Create a Wiki

Being a webdesigner and programmer myself, a MediaWiki solution comes to mind. The general concept is that it allows you to set up documents for each individual object (city, character, timeline event, item) and connect them together.

Setting up a Wiki for your campaign can be as easy as signing up for a free Obsidian Portal account. OP is heavily geared towards (table-top) RPGs and supports a Wiki, Adventure Log and Character management right off the bat. You can keep it a secret, or you can share the portal with your players, who can then contribute to your wiki to share the workload.

You can go a step further and create a 'proper' Wiki from scratch, using MediaWiki software and installing it on your own (local) webserver. It's a CMS (Content Management System) that works, looks and feels exactly like popular Wikis such as Wikipedia. You write documents that link to other documents to create an interconnected web of documents. If you link to a non-existing document, it quickly allows you to follow that link anyways and create a new document on that location. This principle applies to the Obsidian Portal Wiki as well, by the way.

Setting up the Wiki for your goals

You have prepared quite a complex web of documents which need to be accessible through the Wiki. I suggest you create the following top-level documents. They are basically lists of links to other, more specific documents. They will allow you to jump to whatever you need quickly and efficiently:

All links inside the examples below are for visual representation only, clicking them will just make this page jump a bit.

Main Wiki page
This document only lists the 4 top-level documents described below, and it serves as your jumping-off point when you need to look up something.

Main Page

Important stuff happening in your world (or "The Timeline")
This document lists all important events. Each item in this list links to an "Event" document. The key here is to list them in (anti-)chronological order (or another order that makes sense to your campaign). In other document types you'd refer to The Timeline dates to understand when that thing is happening, whether it's a Place document, Person document or Event document.

The Timeline

Areas that make up your world (or "Places")
This document lists all places to which you refer in other documents. You can order them alphabetically, by size or importance. If you have many places, you could group them together in regions. Each of those items link to a "Place" document. In a Place document, you should of course write what that place is about (Is it a city? What does the place look like? What can you do here?), but also keep track of important events happening in this location, using links to Event documents. Other good content would be a list of prominent people that live here, using links to Person documents.


NPCs your players can meet (or "People")
This document is a list of links to Person documents. Like the other top-level documents, the People document would do best if you group Person documents together by their importance, faction affiliation or by geographical location.


The organizations that occupy your world (or "Factions")
This top-level document lists the factions in your world. Similar to the previous documents, you can group and sort them in whatever way makes sense to your campaign: geographical location, alliances, purpose, alignment, etc.


Using your example

The players meet a long-distance traveller that has visited ten cities in the last year that are important to the players. I need to know what happened until the point where the traveller was last in that town. So I have the "Traveller" Sheet where I write down where he is when. Then I have one "City" Sheet for each of the cities where I have to look up the history up to the point where that traveller was last in the city.

You have three interconnected concepts here:

  • One Person document
  • Ten Place documents
  • One or more Event documents

Person document
You have one document for your traveling merchant, on which you keep a description and a list of goods he has. You also keep track of his whereabouts. Each link to a Place document will give you more information about that location.

Vladimir, traveling merchant

Skinny looking man with a characteristic mustache. Has traveled far and wide, and has eyes and ears in every location.


  • Currently in City 10.
  • Year 2097 Day 217-235, traveling to City 10
  • Year 2097 Day 188-217, staying in City 9
  • Year 2097 Day 160-188, traveling to City 9
  • Year 2097 Day 148-160, staying in City 8
  • Year 2097 Day 113-148, traveling to City 8
  • Year 2097 Day 91-113, staying in City 7

Present at these important events

Place document
You have 10 of these (for the purpose of your example), one for each important city the traveling merchant came through. The Place document itself should describe the location, but also list any important things that happened there. These will link to Event documents, which I describe after this.

City 7

The only settlement for miles in an otherwise bleak expanse known as the Gray Desert, west of Some Region. Is an important location for those in need of fuel but has a constant shortage of water, making it not a very attractive place to stay for a long time. The city is currently occupied by Another Faction

Important inhabitants


Important events

Event document
For each important event you create one of these documents. It can contain information in a news article style for you to use in your campaign, but it can also describe the location of the event and who were present to witness it. Present people don't necessarily influence the event itself, but they may at least know about it because they were there.

Year 2097 Day 112: Water spillage at City 7

During a refill of the city's water supplies, one of the tank trucks' pumps blew out, taking down one of the depot's major water cells. Locals estimate this caused roughly a quarter of this month's water supply to be lost. People may have to ration water until the next refill.

Important people who witnessed the event

Using the Wiki

Now, using your example, if you want to figure out what the traveling merchant has been up to, you can go to his Person document. On it you will find many links to places he has visited and people he interacted with, complete with date information. Dates may be linked to events, and you can see a list of important events he directly witnessed (or caused). Opening any of these linked documents will give you much more detailed information about it, but for most of the time, his Person document will give you enough clues.

Now the same applies to your players visiting a new city they have never been in before. That city has already built a history, and it may have people or events that your players do know about. It immediately gives the sense of a breathing, living world. One that continues to live even in the absence of your players.

  • \$\begingroup\$ When going this route (I've been toying with this myself; it seems like a fabulous idea, so +1), the wiki software does matter. MediaWiki is more complicated to set up than others, but it's the way to go - other wiki platforms lack some of the crosslinking and embedding features that can really make this shine. \$\endgroup\$
    – T.J.L.
    Commented Feb 26, 2016 at 14:43
  • \$\begingroup\$ I've tried a wiki and it didn't work out. The amount of manual bookkeeping did not decrease significantly. \$\endgroup\$ Commented Apr 15, 2016 at 7:23

My website Scabard, an RPG Campaign Manager, is backed by a graph database called Neo4j, a flavor of NoSQL. This allows me to easily write fairly complex graph-based queries with their query language, called Cypher.

Your "rumor engine" idea is the type of thing graph searches are good at. And since the idea intrigued me, I gave it a go.

I created a Query Rumors page to test out the functionality.

Since you're a developer, I'll get a bit technical on how it works.

The cypher query I used was:

START corg=node({id})
MATCH (camp:Campaign)-[:CAMPAIGN_OF]-(e2:Event)<-[:SETTING_OF]-(p:Place)-[:SETTING_OF]->(e:Event)<-[:PARTICIPANT_OF]-corg<-[:CONCEPT_OF]-(con:Concept)
RETURN DISTINCT e.name as visit, id(e) as visitId, '/campaign/' + id(camp) + '/event/' + id(e) as visitUri, e.customDateBegin as visitDateBegin, e.customDateEnd as visitDateEnd, e2.name as rumor, e2.customDateBegin as rumorDateBegin, e2.customDateEnd as rumorDateEnd, id(e2) as rumorId, '/campaign/' + id(camp) + '/event/' + id(e2) as rumorUri, con.name as visitorConcept, corg.name as visitor, id(corg) as visitorId, '/campaign/' + id(camp) + '/' + LOWER(con.name) + '/' + id(corg) as visitorUri, p.name as place, id(p) as placeId, '/campaign/' +id(camp) + '/place/' + id(p) as placeUri
ORDER BY p.name

visitor is a Character or Group in your campaign. Let's say that it's a NPC for sake of argument.

The query finds all the places (place) the NPC's been based on what events they've participated in (visit). It then looks at all other events that have taken place at the same location (rumor) and considers those as possible rumors that the NPC has heard.

Here are the first 3 JSON rows returned by the above query using Ilma (an NPC) from my campaign:

{"rows": [
        "place": "Inn of the Shackled Sailor",
        "placeId": 11547,
        "placeUri": "/campaign/121/place/11547",
        "rumor": "Betrayed By Bulacan",
        "rumorDateBegin": "{\"month\":3,\"year\":502}",
        "rumorId": 11546,
        "rumorUri": "/campaign/121/event/11546",
        "visit": "Adventure 10: Revenge against Bulacan",
        "visitDateBegin": "{\"year\":502}",
        "visitDateEnd": "{\"year\":502}",
        "visitId": 19064,
        "visitUri": "/campaign/121/event/19064",
        "visitor": "Ilma",
        "visitorConcept": "Character",
        "visitorId": 157,
        "visitorUri": "/campaign/121/character/157"
        "place": "Invidia",
        "placeId": 158,
        "placeUri": "/campaign/121/place/158",
        "rumor": "Assassination attempt on King Kedibard",
        "rumorDateBegin": "{\"year\":502}",
        "rumorDateEnd": "{\"year\":502}",
        "rumorId": 20639,
        "rumorUri": "/campaign/121/event/20639",
        "visit": "Trysts and Trumps",
        "visitId": 18299,
        "visitUri": "/campaign/121/event/18299",
        "visitor": "Ilma",
        "visitorConcept": "Character",
        "visitorId": 157,
        "visitorUri": "/campaign/121/character/157"
        "place": "Invidia",
        "placeId": 158,
        "placeUri": "/campaign/121/place/158",
        "rumor": "Rescue of Gledrip's Father",
        "rumorDateBegin": "{\"year\":505}",
        "rumorDateEnd": "{\"year\":505}",
        "rumorId": 20638,
        "rumorUri": "/campaign/121/event/20638",
        "visit": "Trysts and Trumps",
        "visitId": 18299,
        "visitUri": "/campaign/121/event/18299",
        "visitor": "Ilma",
        "visitorConcept": "Character",
        "visitorId": 157,
        "visitorUri": "/campaign/121/character/157"

I also wrote some Javascript to parse that JSON and produce human readable text:

While participating in Adventure 10: Revenge against Bulacan (Event), Ilma (Character) was at/in Inn of the Shackled Sailor (Place) on {"year":502}(Date). May have heard a rumor about Betrayed By Bulacan (Event) which happened on {"month":3,"year":502} (Date).

While participating in Trysts and Trumps (Event), Ilma (Character) was at/in Invidia (Place) on undefined(Date). May have heard a rumor about Assassination attempt on King Kedibard (Event) which happened on {"year":502} (Date).

While participating in Trysts and Trumps (Event), Ilma (Character) was at/in Invidia (Place) on undefined(Date). May have heard a rumor about Rescue of Gledrip's Father (Event) which happened on {"year":505} (Date).

Note that the page doesn't really check only for rumors that happened while or before the NPC was there. But I could add that fairly easily in a future iteration. But it seems most GM's, including myself, don't usually assign campaign dates to things.

  • \$\begingroup\$ I tried Scabard, but it lacked the amount of detail and connections that I required. It came close, though. \$\endgroup\$ Commented Apr 15, 2016 at 7:31
  • \$\begingroup\$ Now I'm curious! So I'm working on a cypher query that will get close to what you want (I think). I'll update my answer when I have something. Something like this: MATCH (e2:Event)<-[:SETTING_OF]-(p:Place)-[:SETTING_OF]->(e:Event)<-[:PARTICIPANT_OF]-(corg)<-[:CAMPAIGN_OF]-(c:Campaign {name:'Eraven'}) RETURN e2.name, p.name, e.name, corg.name, labels(corg) \$\endgroup\$
    – E L
    Commented Apr 15, 2016 at 14:55
  • \$\begingroup\$ It lacked recursion. So, Trader A witnessed the event on day 1, visited Town X 20 days later, Trader B visited Town X on Day 10, Trader C visited town X on Day 30. Now Trader A and C should know about the event, but Trader B should not. \$\endgroup\$ Commented Apr 17, 2016 at 10:47
  • 1
    \$\begingroup\$ RE: GM's don't assign dates to events. Well, I do. And it helps me a lot. \$\endgroup\$ Commented Apr 17, 2016 at 11:59
  • \$\begingroup\$ @AngeloFuchs - Not sure I understand the example. The event took place in some city other than X? And even though C didn't observe the event, he knows about it is because he was in Town X at the same time that A was and A presumably told him about it? Whereas B was not in X at the same time as A and therefore A couldn't have told him about the event? \$\endgroup\$
    – E L
    Commented Apr 17, 2016 at 14:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .