viktor_haag: (Default)
[personal profile] viktor_haag
For the past few days, I've been monkeying around with graphviz, a suite of graph modelling tools. I stumbled across them (again) when I was installing a graphviz plug-in for the wiki I'm building, and I thought it would be good at this point to get a better handle on how the modelling tools actually work. The answer is that they work quite nicely, thank-you very much.

Soon, I'm going to be starting to play through Paizo's Pathfinder adventure path series, and since the first arc starts out in a town that's supposed to act as a home-base for the players for some time, I thought it would be useful to have a sort of relationship map (not purist) to help myself through the first half of the series. I figured that the graphviz tools could help me build this map without much hassle. Learning the DOT description language understood by the tools was not difficult at all, and after a day or two, I have a complete catalogue of the town inhabitants described in the first instalment of the series.

The relationships are sufficiently complex to cause one of graphviz's layout algorithms to throw up all over itself, but I was able to get useful diagrams from two others (neato and twopi).


Energy minimized graph (includes overlapping subgraph clusters which are not really optimal, but has minimal edge or cluster overlap, which is nice):
Sandpoint Relationship Map (neato)

Radial graph (notice that the subgraph clusters are not rendered):
Sandpoint Relationship Map (twopi)

Here's a scrap (not the whole file) of the source for these graphs so you can see how relatively simple the DOT language is:
graph sandpointRelMap
{
    //
    /* Major families */
    //
    subgraph clusterKaijutsu {
        label="Kaijutsu family\n(glass and jewels - a49)";
        fontcolor=blue;
        Lonjiku [label="Lonjiku\n(noble father)",fillcolor=lightblue,style=filled];
        Tsuto [label="Tsuto Kaijutsu\n(maniac rogue son - a20)",shape=box,style=filled,color=red,fontcolor=yellow];
        Lonjiku -- Tsuto [label="blackmail",color="red"];
        Lonjiku -- Ameiko [label="estranged",color="red"]; // see a37
        { rank=same; Tsuto -- Ameiko [label="kidnap",color="red"];}
    }
    subgraph clusterScarnetti {
        label="Scarnetti family\n(lumber - a48)";
        fontcolor=blue;
        Alamon [label="Alamon Scarnetti\n(deceased noble)",style=dotted];
        Titus [label="Titus Scarnetti\n(noble)",fillcolor=lightblue,style=filled];
        Alamon -- Titus;
    }
    subgraph clusterDeverin {
        label="Deverin family\n(brewing - a50)";
        fontcolor=blue;
        Amos [label="Amos Deverin\n(deceased noble)",style=dotted];
        Fenchus [label="Fenchus Deverin\n(deceased noble)",style=dotted];
        Kendra [label="Kendra Deverin\n(mayor - a11)",fillcolor=lightblue,style=filled,pos="0,0"];
        Vana [label="Vana Deverin\n(widow)"];
        Amos -- Kendra;
        Amos -- Fenchus;
        {rank=same; Fenchus -- Vana;}
        Kendra -- Vana [label="tense"];
        Gaven [label="Gaven Deverin\n(brewer - a39)"];
        Wade [label="Wade Deverin\n(brewer)",style=dotted];
        {rank=same; Kendra; Gaven; Wade;}
        Gaven -- Wade [label="brother"];
        Kendra -- Gaven [label="cousin"];
    }
    subgraph clusterValdemar {
        label="Valdemar family\n(shipbuilding) - a47";
        fontcolor=blue;
        Ethraim [label="Ethraim Valdemar\n(noble)",fillcolor=lightblue,style=filled];
        Ethraim -- Belvin; // see a46
    }
    subgraph clusterTobyn {
	label="Tobyn family";
        fontcolor=blue;
        Ezakien [label="Exakien Tobyn\n(priest)",style=dotted];
        Nualia [label="Nualia\n(foundling aasimar\ndevotee of Lamashtu)",shape=box,style=filled,color=red,fontcolor=yellow];
        Nualia -- Ezakien [label="loathes",color="red",style=dotted];
    }
    subgraph clusterSczarni {
        label="Sczarni gang";
        fontcolor=blue;
        Jubrayl [label="Jubrayl Vhiski\n(crime boss)",fillcolor=grey,style=filled];
        Jubrayl -- Gressel [label="controls"];
    }
    //
    /* Important plot relationships independent of location*/
    //
    Nualia -- Tsuto [label="controls"];
    Jasper -- Cyrdak [label=lovers,color=pink];
    Belor -- Kaye [label=lovers,color=pink];
    Kendra -- Titus [label="rivals",color=red];
    Kendra -- Casp [label="lovers",color=pink];
.
.
.




I recommend anyone wanting to build relationship maps for games use these tools, especially if you want to maintain your maps over a stretch of playing time to document the changing structure play (since the source language is just a text file, you can use a simple version control utility to catalog all the changes to the maps over time).

Date: 2008-03-26 02:13 (UTC)
From: [identity profile] briandorion.livejournal.com
Hey Viktor,

Flickr says the pictures are private.

Date: 2008-03-26 12:45 (UTC)
From: [identity profile] viktor-haag.livejournal.com
That should fix things...

Date: 2008-03-26 03:57 (UTC)
From: [identity profile] doc-mystery.livejournal.com
Very interesting. I remember coming up with similar hand-drawn relationship maps using graph paper and plastic computer programming templates back in HS, and this looks like a more elegant and dynamic solution.

::B::

Date: 2008-03-26 12:48 (UTC)
From: [identity profile] viktor-haag.livejournal.com
The great thing about it is, all you have to do is document the connections, abstractly. You can also add node and edge formatting, as you can see from the source, but at its simplest, all you need is something like this:
graph Foo {
  a -- b;
  b -- c;
  c -- a;
}

All that worry about "how to best fit it on the page" can be placed at the proper time -- at the end. For really fine and flexible layout control, I can just import the source into OmniGraffle and then twiddle as much as I'd like.


Date: 2008-03-27 00:11 (UTC)
From: [identity profile] doc-mystery.livejournal.com
You use OmniGraffle for gaming? How?

::B::

Date: 2008-03-27 02:54 (UTC)
From: [identity profile] viktor-haag.livejournal.com
Oh; no, I use it at work. I could use it for anything that would require diagramming. I thought about using it for maps, but after much consideration, hand-drawn is still the best technique for me and most of my purposes. And when I absolutely have to have an e-copy of a map, I use a drawing tablet and illustration software. I did try to use Illustrator once, and some templates created for making Harn-style maps, but frankly the amount of time required to get everything just so was burdensome.

Profile

viktor_haag: (Default)
viktor_haag

April 2011

S M T W T F S
     12
3456789
1011121314 1516
1718 1920212223
24252627282930

Most Popular Tags

Expand Cut Tags

No cut tags
Page generated Jul. 3rd, 2025 18:51
Powered by Dreamwidth Studios