Add a build system to generate the HTML
Getty Ritter
5 years ago
1 | build/guenashk.html: txt/dogs.md build/template.html | |
2 | mkdir -p build | |
3 | pandoc --template=build/template <txt/dogs.md >build/guenashk.html | |
4 | ||
5 | build/icon-%.svg: diagrams/icon-%.svg | |
6 | inkscape --export-plain-svg=$@ $< | |
7 | sed -i -e 's/height=[^>]*/height="1em"/g' $@ | |
8 | sed -i -e 's/width=[^>]*/width="1em"/g' $@ | |
9 | ||
10 | build/payload.json: build/icon-heart.svg build/icon-relationship.svg | |
11 | bin/b64-payload \ | |
12 | --raleway=/usr/share/fonts/TTF/Raleway-Medium.ttf \ | |
13 | --trait-icon=build/icon-heart.svg \ | |
14 | --relationship-icon=build/icon-relationship.svg \ | |
15 | >build/payload.json | |
16 | ||
17 | build/template.html: txt/template.mustache build/payload.json | |
18 | pystache txt/template.mustache build/payload.json >build/template.html | |
19 | ||
20 | clean: | |
21 | rm -f build/* |
1 | #!/usr/bin/env python3 | |
2 | ||
3 | import base64 | |
4 | import json | |
5 | import sys | |
6 | ||
7 | USAGE=''' | |
8 | {0} --key1=file1 --key2=file2 ... | |
9 | ''' | |
10 | ||
11 | def main(args): | |
12 | result = {} | |
13 | for key, filename in args.items(): | |
14 | with open(filename, 'rb') as f: | |
15 | contents = f.read() | |
16 | result[key] = base64.b64encode(contents).decode('utf-8') | |
17 | json.dump(result, sys.stdout) | |
18 | ||
19 | if __name__ == '__main__': | |
20 | if '--help' in sys.argv[1:]: | |
21 | print(USAGE.format(sys.argv[0])) | |
22 | sys.exit(0) | |
23 | ||
24 | args = dict((arg.strip('--').split('=') for arg in sys.argv[1:])) | |
25 | main(args) |
1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
3 | ||
4 | <svg | |
5 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
6 | xmlns:cc="http://creativecommons.org/ns#" | |
7 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
8 | xmlns:svg="http://www.w3.org/2000/svg" | |
9 | xmlns="http://www.w3.org/2000/svg" | |
10 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
11 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
12 | width="75pt" | |
13 | height="75pt" | |
14 | viewBox="0 0 26.458333 26.458334" | |
15 | version="1.1" | |
16 | id="svg8" | |
17 | inkscape:version="" | |
18 | sodipodi:docname="icon-heart.svg"> | |
19 | <defs | |
20 | id="defs2" /> | |
21 | <sodipodi:namedview | |
22 | id="base" | |
23 | pagecolor="#ffffff" | |
24 | bordercolor="#666666" | |
25 | borderopacity="1.0" | |
26 | inkscape:pageopacity="0.0" | |
27 | inkscape:pageshadow="2" | |
28 | inkscape:zoom="5.6" | |
29 | inkscape:cx="21.262725" | |
30 | inkscape:cy="43.443214" | |
31 | inkscape:document-units="mm" | |
32 | inkscape:current-layer="layer1" | |
33 | showgrid="true" | |
34 | units="pt" | |
35 | inkscape:window-width="1920" | |
36 | inkscape:window-height="1080" | |
37 | inkscape:window-x="0" | |
38 | inkscape:window-y="0" | |
39 | inkscape:window-maximized="0"> | |
40 | <inkscape:grid | |
41 | type="xygrid" | |
42 | id="grid815" /> | |
43 | </sodipodi:namedview> | |
44 | <metadata | |
45 | id="metadata5"> | |
46 | <rdf:RDF> | |
47 | <cc:Work | |
48 | rdf:about=""> | |
49 | <dc:format>image/svg+xml</dc:format> | |
50 | <dc:type | |
51 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
52 | <dc:title></dc:title> | |
53 | </cc:Work> | |
54 | </rdf:RDF> | |
55 | </metadata> | |
56 | <g | |
57 | inkscape:label="Layer 1" | |
58 | inkscape:groupmode="layer" | |
59 | id="layer1" | |
60 | transform="translate(0,-270.54165)"> | |
61 | <path | |
62 | style="opacity:1;fill:#802020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.8973664;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |
63 | d="M 27.5,5 C 15.073593,5 4.9999995,16.192881 5,30 c 4e-7,35.000013 30,60.000001 45,60 15.000001,-10e-7 45,-24.999987 45,-60 C 95,16.192881 84.926407,5 72.5,5 60.073593,5 50.000001,11.192881 50.000001,25 50.000001,11.192881 39.926407,5 27.5,5 Z" | |
64 | transform="matrix(0.26458333,0,0,0.26458333,0,270.54165)" | |
65 | id="path817" | |
66 | inkscape:connector-curvature="0" | |
67 | sodipodi:nodetypes="ssssscs" /> | |
68 | </g> | |
69 | </svg> |
1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
3 | ||
4 | <svg | |
5 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
6 | xmlns:cc="http://creativecommons.org/ns#" | |
7 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
8 | xmlns:svg="http://www.w3.org/2000/svg" | |
9 | xmlns="http://www.w3.org/2000/svg" | |
10 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
11 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
12 | width="75pt" | |
13 | height="75pt" | |
14 | viewBox="0 0 26.458333 26.458334" | |
15 | version="1.1" | |
16 | id="svg8" | |
17 | inkscape:version="" | |
18 | sodipodi:docname="icon-relationship.svg"> | |
19 | <defs | |
20 | id="defs2" /> | |
21 | <sodipodi:namedview | |
22 | id="base" | |
23 | pagecolor="#ffffff" | |
24 | bordercolor="#666666" | |
25 | borderopacity="1.0" | |
26 | inkscape:pageopacity="0.0" | |
27 | inkscape:pageshadow="2" | |
28 | inkscape:zoom="3.959798" | |
29 | inkscape:cx="-13.737275" | |
30 | inkscape:cy="43.443214" | |
31 | inkscape:document-units="mm" | |
32 | inkscape:current-layer="layer1" | |
33 | showgrid="true" | |
34 | units="pt" | |
35 | inkscape:window-width="1920" | |
36 | inkscape:window-height="1080" | |
37 | inkscape:window-x="0" | |
38 | inkscape:window-y="0" | |
39 | inkscape:window-maximized="0"> | |
40 | <inkscape:grid | |
41 | type="xygrid" | |
42 | id="grid815" /> | |
43 | </sodipodi:namedview> | |
44 | <metadata | |
45 | id="metadata5"> | |
46 | <rdf:RDF> | |
47 | <cc:Work | |
48 | rdf:about=""> | |
49 | <dc:format>image/svg+xml</dc:format> | |
50 | <dc:type | |
51 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
52 | <dc:title /> | |
53 | </cc:Work> | |
54 | </rdf:RDF> | |
55 | </metadata> | |
56 | <g | |
57 | inkscape:label="Layer 1" | |
58 | inkscape:groupmode="layer" | |
59 | id="layer1" | |
60 | transform="translate(0,-270.54165)"> | |
61 | <circle | |
62 | style="opacity:1;fill:#802020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |
63 | id="path814" | |
64 | cx="13.229167" | |
65 | cy="278.47916" | |
66 | r="5.953125" /> | |
67 | <path | |
68 | style="opacity:1;fill:#802020;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.54773951;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | |
69 | d="m 13.229167,283.10935 a 9.9218751,9.2604168 0 0 0 -9.921875,9.26042 v 2.64583 h 19.84375 v -2.64583 a 9.9218751,9.2604168 0 0 0 -9.921875,-9.26042 z" | |
70 | id="path816" | |
71 | inkscape:connector-curvature="0" /> | |
72 | </g> | |
73 | </svg> |
1 | 1 | % The Emissaries of Guenašk |
2 | 2 | |
3 | 3 | > The senator from the Ultaian delegation tries to look nonplussed, but the coloration of their neck fronds betrays a frantic nervousness. The Expeditionite pirate pushes her blaster hard against the Ultaian's scaled back, twists its cold barrel, and growls at you. |
4 | ||
4 | > | |
5 | 5 | > "Please, I've done nothing, I'm a senator," they say with a quavering voice, their alien vocal tract elongating vowels and nearly dropping consonants. "Please—" |
6 | ||
6 | > | |
7 | 7 | > "You've been harvesting from our bio-stations for years now," she says. "Your synthdrones, twice every cycle. It ends now." She nods towards you. "You, Guenaški. You tell them." |
8 | ||
8 | > | |
9 | 9 | > The Ultaian's three eyes widen, and both theirs and hers turn towards you. What do you do? |
10 | 10 | |
11 | **The Emissaries of Guenašk** | |
12 | ||
13 | _A Role-Playing Game_ | |
14 | ||
15 | 11 | The Emissaries of Guenašk is a game about space, the peoples who have set out to explore and live in it, and those individuals who are tasked with mediating peace between those people. These individuals, the Guenaški, travel from planet to planet, station to station, star to star, equipped with the uneasy and contingent trust of an interplanetary coalition, and attempt to serve as peacekeepers, healers, mediators, and explorers to those they find, sometimes to their joy and sometimes to their chagrin. |
16 | 12 | |
17 | 13 | The stars are limitless and varied, and the Guenaški are tasked by both convention and conviction to help keep them stable and avoid another war like the Last War. Sometimes they travel to the Shining Core and mediate political debates among the hundreds of thousands of political entities that exist in the galaxy, and other times they provide humanitarian aid to colonies or outposts in crisis, and yet other times they shut down smugglers or free political prisoners from the very edges of known space. |
22 | 18 | |
23 | 19 | ## Creating a Character |
24 | 20 | |
25 |
1. **Choose a |
|
21 | 1. **Choose a [](#background).** Your [](#background) will give you dice that you can use in subsequent steps: in particular, it tells you the dice you can use for your **Stats**, your **Traits**, and your **Relationships**. | |
26 | 22 | |
27 | 23 | 2. **Select your Stats.** Your Background specified a number of _stat dice_: take these and divide them up among your four **Stats**. The minimum value for a stat is 2d6, and there is no maximum beyond what your stat dice allow. |
28 | 24 | |
29 | 25 | Your four stats are **Body**, **Mind**, **Soft**, and **Hard**. |
30 | 26 | |
31 |
3. **Decide on your |
|
27 | 3. **Decide on your [](#trait)s.** Your Background specified a number of _trait dice_: divide these up to give your character **Traits**. A **Trait** is a phrase or sentence that describes a feature of character's personality, acumen, or history that is interesting to your character's story. Assigning dice to a trait means that you think that the trait in question is important in a way that will affect the outcome of a conflict. | |
32 | 28 | |
33 | 29 | As a player, you have a lot of leeway in how to frame your traits. For example, you might want to phrase them: |
34 | 30 | |
39 | 35 | |
40 | 36 | Assign each **trait** at least one die. You can assign more than one die to a trait, but each trait must have a consistent die size: you can assign *2d6* to a trait, but you can't assign *1d4 1d6* to a trait. |
41 | 37 | |
42 |
4. **Decide on a few of your |
|
38 | 4. **Decide on a few of your [](#relationship)s.** Your Background specified a number of _relationship dice_: use a few of these to give your character **Relationships**. A **Relationship** represents your character's relationship and history with another person and how important that history is to your character's story, but doesn't necessarily need to reflect your character's feelings or a breadth of history. You can, for example, assign *1d4* to your character's spouse and *2d8* to a stranger whom your character met in Adullar Station: this doesn't mean that your character loves the stranger more than their spouse, but it does mean that you think the stranger is more interesting to your character's story. | |
43 | 39 | |
44 | 40 | Unlike with your _trait dice_, your _relationship dice_ don't need to be—and shouldn't be!—all assigned at the beginning. Keep some unassigned and then choose to assign them as events progress. |
45 | 41 |
1 | <!DOCTYPE html> | |
2 | <html xmlns="http://www.w3.org/1999/xhtml"> | |
3 | <head> | |
4 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |
5 | <meta http-equiv="Content-Style-Type" content="text/css" /> | |
6 | <meta name="generator" content="pandoc" />$for(author-meta)$ | |
7 | <meta name="author" content="$author-meta$" /> | |
8 | $endfor$ | |
9 | $if(date-meta)$ | |
10 | <meta name="date" content="$date-meta$" /> | |
11 | $endif$ | |
12 | $if(keywords)$ | |
13 | <meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" /> | |
14 | $endif$ | |
15 | <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title> | |
16 | <style type="text/css"> | |
17 | @font-face { | |
18 | font-family: raleway; | |
19 | src: url(data:application/x-font-truetype;base64,{{raleway}}); | |
20 | } | |
21 | body { font-family: "Fira Sans", sans-serif; } | |
22 | code{white-space: pre;} | |
23 | .main { | |
24 | width: 80%; | |
25 | text-align: justify; | |
26 | margin-left: auto; | |
27 | margin-right: auto; | |
28 | font-size: 18px; | |
29 | line-height: 150%; | |
30 | } | |
31 | h1 { | |
32 | font-family: raleway; | |
33 | font-weight: normal; | |
34 | color: #822; | |
35 | } | |
36 | h2 { | |
37 | font-family: raleway; | |
38 | font-weight: normal; | |
39 | color: #822; | |
40 | } | |
41 | h3 { | |
42 | font-family: raleway; | |
43 | font-weight: normal; | |
44 | color: #822; | |
45 | } | |
46 | .footer { | |
47 | text-align: center; | |
48 | } | |
49 | blockquote { | |
50 | background-color: #f5f5f5; | |
51 | padding-left: 30px; | |
52 | padding-right: 30px; | |
53 | padding-top: 5px; | |
54 | padding-bottom: 5px; | |
55 | border-left: 2px solid black; | |
56 | } | |
57 | p { margin-left: 20pt; margin-right: 20pt; } | |
58 | a { text-decoration: none; color: #822; } | |
59 | a[href="#background"]::after { | |
60 | content: "Background"; | |
61 | } | |
62 | a[href="#trait"]::before { | |
63 | content: url(data:image/svg+xml;base64,{{trait-icon}}); | |
64 | } | |
65 | a[href="#trait"]::after { | |
66 | content: " Trait"; | |
67 | } | |
68 | a[href="#relationship"]::before { | |
69 | content: url(data:image/svg+xml;base64,{{relationship-icon}}); | |
70 | } | |
71 | a[href="#relationship"]::after { | |
72 | content: " Relationship"; | |
73 | } | |
74 | </style> | |
75 | </head> | |
76 | <body> | |
77 | <div class="main" > | |
78 | <div class="header"> | |
79 | <h1 id="if-the-sky-were-crooked">$if(title)$ $title$ $endif$</h1> | |
80 | </div> | |
81 | $body$ | |
82 | <div class="footer"> | |
83 | $for(author)$ $author$ $endfor$<br/> | |
84 | $if(date)$ $date$ $endif$ | |
85 | </div> | |
86 | </div> | |
87 | </body> | |
88 | </html> |