Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://gcoulby.github.io/IronswornCompanion/
Ironsworn Companion is a digital toolkit for playing the tabletop roleplaying game Ironsworn.
https://gcoulby.github.io/IronswornCompanion/
Last synced: about 2 months ago
JSON representation
Ironsworn Companion is a digital toolkit for playing the tabletop roleplaying game Ironsworn.
- Host: GitHub
- URL: https://gcoulby.github.io/IronswornCompanion/
- Owner: gcoulby
- License: other
- Created: 2021-03-16T11:56:29.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-15T20:11:08.000Z (8 months ago)
- Last Synced: 2024-08-02T06:11:47.030Z (5 months ago)
- Language: JavaScript
- Size: 49.6 MB
- Stars: 53
- Watchers: 6
- Forks: 24
- Open Issues: 4
-
Metadata Files:
- Readme: README.html
- License: LICENSE
Awesome Lists containing this project
- awesome-ironsworn - Ironsworn Companion - Digital companion for the tabletop RPG Ironsworn (Tools / Ironsworn)
README
READMEhtml {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
body.typora-export { padding-left: 0px; padding-right: 0px; }
#write { padding-left: 20px; padding-right: 20px; }
.CodeMirror-sizer { margin-left: 0px !important; }
.CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
#write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
.typora-export * { -webkit-print-color-adjust: exact; }
.typora-export #write { break-after: avoid; }
.typora-export #write::after { height: 0px; }
.is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
.md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
.md-toc-h4 .md-toc-inner { margin-left: 5em; }
.md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
.md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
.typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }:root {
--side-bar-bg-color: #fafafa;
--control-text-color: #777;
}@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);
/* open-sans-regular - latin-ext_latin */
/* open-sans-italic - latin-ext_latin */
/* open-sans-700 - latin-ext_latin */
/* open-sans-700italic - latin-ext_latin */
html {
font-size: 16px;
}body {
font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: rgb(51, 51, 51);
line-height: 1.6;
}#write {
max-width: 860px;
margin: 0 auto;
padding: 30px;
padding-bottom: 100px;
}@media only screen and (min-width: 1400px) {
#write {
max-width: 1024px;
}
}@media only screen and (min-width: 1800px) {
#write {
max-width: 1200px;
}
}#write > ul:first-child,
#write > ol:first-child{
margin-top: 30px;
}a {
color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
position: relative;
margin-top: 1rem;
margin-bottom: 1rem;
font-weight: bold;
line-height: 1.4;
cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
text-decoration: none;
}
h1 tt,
h1 code {
font-size: inherit;
}
h2 tt,
h2 code {
font-size: inherit;
}
h3 tt,
h3 code {
font-size: inherit;
}
h4 tt,
h4 code {
font-size: inherit;
}
h5 tt,
h5 code {
font-size: inherit;
}
h6 tt,
h6 code {
font-size: inherit;
}
h1 {
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
h2 {
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}/*@media print {
.typora-export h1,
.typora-export h2 {
border-bottom: none;
padding-bottom: initial;
}.typora-export h1::after,
.typora-export h2::after {
content: "";
display: block;
height: 100px;
margin-top: -96px;
border-top: 1px solid #eee;
}
}*/h3 {
font-size: 1.5em;
line-height: 1.43;
}
h4 {
font-size: 1.25em;
}
h5 {
font-size: 1em;
}
h6 {
font-size: 1em;
color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
margin: 0.8em 0;
}
li>ol,
li>ul {
margin: 0 0;
}
hr {
height: 2px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
overflow: hidden;
box-sizing: content-box;
}li p.first {
display: inline-block;
}
ul,
ol {
padding-left: 30px;
}
ul:first-child,
ol:first-child {
margin-top: 0;
}
ul:last-child,
ol:last-child {
margin-bottom: 0;
}
blockquote {
border-left: 4px solid #dfe2e5;
padding: 0 15px;
color: #777777;
}
blockquote blockquote {
padding-right: 0;
}
table {
padding: 0;
word-break: initial;
}
table tr {
border-top: 1px solid #dfe2e5;
margin: 0;
padding: 0;
}
table tr:nth-child(2n),
thead {
background-color: #f8f8f8;
}
table th {
font-weight: bold;
border: 1px solid #dfe2e5;
border-bottom: 0;
margin: 0;
padding: 6px 13px;
}
table td {
border: 1px solid #dfe2e5;
margin: 0;
padding: 6px 13px;
}
table th:first-child,
table td:first-child {
margin-top: 0;
}
table th:last-child,
table td:last-child {
margin-bottom: 0;
}.CodeMirror-lines {
padding-left: 4px;
}.code-tooltip {
box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
border-top: 1px solid #eef2f2;
}.md-fences,
code,
tt {
border: 1px solid #e7eaed;
background-color: #f8f8f8;
border-radius: 3px;
padding: 0;
padding: 2px 4px 0px 4px;
font-size: 0.9em;
}code {
background-color: #f3f4f4;
padding: 0 2px 0 2px;
}.md-fences {
margin-bottom: 15px;
margin-top: 15px;
padding-top: 8px;
padding-bottom: 6px;
}.md-task-list-item > input {
margin-left: -1.3em;
}@media print {
html {
font-size: 13px;
}
table,
pre {
page-break-inside: avoid;
}
pre {
word-wrap: break-word;
}
}.md-fences {
background-color: #f8f8f8;
}
#write pre.md-meta-block {
padding: 1rem;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border: 0;
border-radius: 3px;
color: #777777;
margin-top: 0 !important;
}.mathjax-block>.code-tooltip {
bottom: .375rem;
}.md-mathjax-midline {
background: #fafafa;
}#write>h3.md-focus:before{
left: -1.5625rem;
top: .375rem;
}
#write>h4.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h5.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h6.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
.md-image>.md-meta {
/*border: 1px solid #ddd;*/
border-radius: 3px;
padding: 2px 0px 0px 4px;
font-size: 0.9em;
color: inherit;
}.md-tag {
color: #a7a7a7;
opacity: 1;
}.md-toc {
margin-top:20px;
padding-bottom:20px;
}.sidebar-tabs {
border-bottom: none;
}#typora-quick-open {
border: 1px solid #ddd;
background-color: #f8f8f8;
}#typora-quick-open-item {
background-color: #FAFAFA;
border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
border-style: solid;
border-width: 1px;
}/** focus mode */
.on-focus-mode blockquote {
border-left-color: rgba(85, 85, 85, 0.12);
}header, .context-menu, .megamenu-content, footer{
font-family: "Segoe UI", "Arial", sans-serif;
}.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
visibility: visible;
}.mac-seamless-mode #typora-sidebar {
background-color: #fafafa;
background-color: var(--side-bar-bg-color);
}.md-lang {
color: #b4654d;
}.html-for-mac .context-menu {
--item-hover-bg-color: #E6F0FE;
}#md-notification .btn {
border: 0;
}.dropdown-menu .divider {
border-color: #e5e5e5;
}.ty-preferences .window-content {
background-color: #fafafa;
}.ty-preferences .nav-group-item.active {
color: white;
background: #999;
}
Ironsworn Companion
Introduction
What is Ironsworn?Ironsworn is a tabletop RPG created by Shawn Tomkin. What makes Ironsworn unique is that unlike traditional tabletop RPGs, Ironsworn enables solo/ small-group play, as its unique game mechanics remove the need for a traditional game master.
What is even more fascinating about Ironsworn is the distribution methods. When reading the game, you realise the care, effort and devotion that has gone in to creating this game and yet, the game is released as open-source under the creative commons 4.0
Ironsworn truly is a labour of love and is available for free at https://www.ironswornrpg.com/
What is the Ironsworn Companion?First and foremost, this application is not an official Ironsworn product, instead it leverages the CC4.0 license to provide a digital toolkit for playing the game.
I used to use platforms such as Roll20 for playing campaigns with a remote group of friends. I wanted a similar experience from Ironsworn, e.g. a digital companion app that could aid, automate and track my game to reduce on paper waste and also provide quick and easy ways to exploit mechanics such as
The Oracle
(a roll-based game mechanic to spark ideas during game play).While there are various companions out there, I was disappointed with the features and felt they didn't match my view of what the companion should be like. That's not to say the other apps are bad, but many just felt like lightweight tools to support pen and paper play, which is great, if that is what you want.
This app is not designed to replace the rules, though it may clear your desk of progress tracks and asset cards.
Using the appThe following sections will provide instruction on how to use the individual components in the app.
SectionsKey areas such as a pages will be shown like this throughout the documentation:
Characters
,Background
etc.At times the documentation will refer to sections. There are three main sections to this app:
Header
,Sidebar
andFooter
. These are fairly self explanatory.
HeaderThe
Header
refers to the top of the page where theCharacter Selector
andStat Overview
exists.
SidebarThe
Sidebar
refers to the side navigation menu. This section is used for navigating around the app.
FooterThe
Footer
contains a quick dice roller. This can be used to roll on stats with an action dice vs two challenge dice. When you clickRoll
a box will appear that will state eitherMiss
,Weak Hit
, orStrong Hit
. Hovering over this box will make a breakdown of the roll appear in a popup. Progression tracks also make use of this, which we will explore later.
OraclesBefore discussing the features of the app its important to understand how the oracle works. Throughout the companion you will see the following roll icon in various places:
This icon denotes that you can consult the oracle. Each implementation of the oracle differs between pages. For example, by consulting the oracle during character creation, a random Ironlander name will be generated. On the other hand, by consulting the oracle during world creation, a number of world truths will be defined. As with everything in Ironsworn, if the Oracle's insights are not inline with your version of the Ironlands or provides some contradiction, you can either roll again or carve your own path. You should definitely consult the rules on how exactly to use the Oracle, this app merely takes away the need to cross reference a comprehensive list of roll tables.
Oracle PageTo supplement the oracle implementations on each page, there is also a page dedicated to oracles. The Oracles page provides the ability to roll on any oracle table and get a random result. Since there are no dice involved here, the oracle tables can be any size you like. After rolling an oracle table you can click on the result and it will automatically copy to clipboard.
Oracle CreationNew Oracle tables can be created using the form at the top of the page. Simply enter the Oracle Table name and press
+ Add Oracle Table
Editing Oracle TablesOnce you have added an oracle table you can edit the tables using the left hand column. Simply select an oracle table from the drop down box and start typing in the box below. Every line represents 1 row in the oracle table. For this reason, long oracles will cause a scroll bar to appear along the bottom of the text box... Do not press Enter to make the box look pretty as this will split your oracle in two.
CharactersMost of the functionality of the the companion app will not work unless you create and select a character. Characters represent players and multiple characters can be created. However, only 1 character can be selected at a time. This will mean a degree of micro management will be needed in coop games.
Create a characterTo create a character go to the
Characters
page and either enter the details into the form manually or roll the individual fields against the respective oracle tables.For more information on Character creation consult Chapter 2 of the Ironsworn rulebook.
StatsThere are five stats in total. Each is given a value from 1 to 3. To start, arrange these bonuses across your five stats in any order: 3, 2, 2, 1, 1. You can also roll on the oracle to leave your primary stat choice down to fate. The
Roll Primary Stat
button will choose 1 of the stats at random to be your primary statvalue=3
. You can then enter two 1s and two 2s into the remaining stats.
Selected characterOnce you have created a character it will appear under the
CHARACTER SELECTION
heading. This will show a card for each character, which will all contain aSelect
andDelete
button. Delete button will completely delete your character and Select will make your character theSelected Character
. To use all of the functionality of the companion there must always be oneSelected Character
.Characters can also be selected from the dropdown box in the
Header
. Once a character is a selected, their stats will be shown across the top of the pages, which provide 2 purposes. Firstly, they provide a persistent view of character stats, regardless of where you at the app. Secondly, the stats are buttons and can be clicked to take you to yourCharacter Sheet
.After selecting a character you are automatically taken to the
Stats
page, which shows a character sheet for theSelected Character
.
LogsThere are two logs in the companion
Campaign Log
andBackground
. These logs are used to add fiction or metagame information to your campaign. TheCampaign Log
is for adding information about events, plot, story or anything related to the campaign that is not character specific. TheBackground
page is for adding information specific to theSelected Character
Adding LogsTo add a log enter text into the text box at the bottom of a log page and press
SHIFT + ENTER
to enter fiction (this information should be in character/roleplay). Alternatively pressCTRL + ENTER
to enter metagame information (This information can be out of character/roleplay).
Viewing and Deleting LogsOnce logs are added they will appear in the box above the input box. They will appear in chronological order and are all timestamped with the date/time they were added. The box will auto scroll to the bottom of the page on refresh, or when a new log item is added.
World TruthsAs the name suggests, the
World Truths
page is for selecting the truths of your world. In short, there are a various categories under theWorld Truths
page such asThe Old World
orReligion
. Under each category there are 3 truths. You should choose a truth from each page this will define the parameters of your world. For example, theMysticism
tab is for choosing the truth about the prevalence of magic, the three options define whether magic is a myth, a rarity or commonplace.
Selecting a TruthTo select a truth, simply click on the card. Once selected, a checkmark (
✔
) will appear on the right hand side of the card and the card will be surrounded with a black border.
Changing TruthsAs your story unfolds you may find out that you were wrong about your truth selection, i.e. you may go into your world with the idea that there is no magic, but then you meet a ancient mystic who shows you that magic is not a myth, but is rare, dangerous and part of an underground movement. For this reason, you can change your truths at any time.
Rolling a Random WorldYou have the option to
Roll a Random World
. Clicking this box will randomly choose a truth for each category to add more randomness to your world.
Custom World Truths.The custom tab contains two text boxes. One for a custom quest starter and the other for custom world details. Be descriptive here. You can use this box to define an entirely custom world or provide modifiers to existing truths from other categories. It is your world so get creative.
For more information on World Truths consult Chapter 4 of the Ironsworn rulebook.
NPCsThe NPCs page is for creating Non-Player Characters. Creation of NPCs is functionally similar to character creation except there are more options to roll on. Each oracle roll will work the same way as character creation, except for
Name
. If you roll onName
, before choosing aRace
, a race will be selected for you as this will determine which oracle table the name is chosen from.
Story HelpersNPCs have more options to roll on that characters to provide more flavour to your NPCs that can drive your story.
Dispositions
help drive the narrative as NPCs could behelpful
orcurious
, alternatively they could bethreatening
orderisive
NPC Conversation
will tell you the nature of their conversations topics; for example, they may tell you about their heritage or about the leadership of their settlement.NPC Knowledge
will inform you about what information they know about.
Last LocationIf you have created locations (See Locations and Settlements) you will be able to specify the NPC's last know location. Simply select a location from the dropdown box either during NPC creation, or from their NPC card.
BondsIf you have a character selected a
Bond
Track will appear on the NPC card once it is created. Increasing the bond track of an NPC. will increase the NPCs track by1 Tick
. It will also increase the bond track of theSelected Character
by1 Tick
. If you need to addbonds
to multiple characters (for co-op), this will not be done automatically, instead you should use the character select drop down in theHeader
to switch to other character sheets and manually enter those bonds to other characters.
Locations and SettlementsLocations and settlements can be added to an interactive map under the
Locations and Settlements
page.
Adding a locationThe
Add Location
form is also used to edit existing locations. Consequently, when you click on the map the form will be reset. Therefore, to add a location you must click on the map first to choose the location of the new settlement. This will add the XY coordinates to the input form. From there, you can then manually enter details about the settlement or roll on the oracle to generate random location details. The additional information can be used to provide flavour and context to your location.Once you have completed the form, click
Save Location
this will add a marker to the map.
Editing a LocationClicking on a map marker will populate the form with details on the location. If any NPCs have their
Last Location
set to this location/settlement they will appear in a list on this screen. Abond
track is also available, which works the same way as an NPCbond
track. Each progression adds1 Tick
to the location and also1 Tick
to the selected player.When you have finished editing the location click
Save Location
Delete LocationYou can Delete locations by clicking on their map marker and then clicking
Delete
Enter the FrayEnter the fray describes the action of combat.
To enter combat, create
Active Foes
by either selecting from theCategory
andType
drop boxes or clickRoll Random Foe
. MultipleActive Foes
can be added and each Foe will have an individualcombat track
.
Foe CardThe
Foe Card
provides information and context about your foes:
The title bar of each
Foe Card
contains theFoe Type
andRank
of each Foe. The rank determines how much harm a foe can inflict on a player and also determines the combat progression per harm done. TheFoe Card
also contains the page number of the Foe and the source so you can refer to the books for more information.
Roll ProgressAt any point you can
Roll Progress
. However, this is dangerous early in the fight, Rolling progress involves rolling the value of the progression track against the challenge dice. If yourCombat Progress
is only 2, you will essentially roll 2 against two D10s. This strongly increases the chance of a Miss, which has consequences. When you clickRoll Progress
the Foe is selected in theFooter
and you must then clickRoll
in theFooter
to determine the outcome.If the roll is successful you can delete the character and move on. If it is not you must
Pay the Price
For information about Combat see Chapter 3 of the Ironsworn rulebook
Foe PacksThe Ironsworn rules allows you to form packs of NPCs that have a single track. This app does not yet implement packs, but the functionality can be easily achieved. Simply, create a single
Dangerous
orFormidable
opponent and treat that opponent as a pack.For information about NPC Packs see Chapter 5 of the Ironsworn rulebook
StatsThe stats page is your digital character sheet. Here you can track
Experience
,Core Stats
,Health
,Spirit
,Supply
andMomentum
tracks, as well asDebilities
ExperienceExperience is changed manually after
Fulling a Vow
. You increase experience with the[+]
button and decrease with the[-]
button. The[>>]
button is for advancing experience when it is spent onAssets
(See Assets)
DebilitiesTo add a debility simply click on one of the words. When done, they will be highlighted black. Momentum is automatically affected by
Debilities
; reducing theMomentum Reset
and theMax Momentum
values.For more information on Character Stats consult Chapter 2 of the Ironsworn rulebook.
Vows, Quests and JourneysVows quests and Journeys are functionally identical to each other. They are created with the form at the topic where a
description
anddifficulty
are defined. A card will be created with aProgress Track
, which will work the same way as a FoeCombat Track
. When you roll toFulfill a Vow
,Complete Your Quest
orReach Your Destination
, theProgress
will be selected in theFooter
and you can roll on the value.
DifferencesThe only difference between these progressions is what happens at completion. When you complete a
Vow
you gain experience. However, when you complete quests or journeys you do not. Journeys and Quests are here to add more fictional context. As the rules suggest: Let the fiction drive this. Your Journey may be toSail to the Barrier Islands to Deliver a message to the leader Highcairn
. Completing this journey may get you a reward or increase yourbond
with the Highcairn settlement. Your quest may be tofind the mystical staff of Charrak
completing this quest would add this staff to your equipment and grant you whatever powers you envision it having.
AssetsAssets screen allows you add assets to your character and make live changes to the asset card. If assets have tracks an interactive track will appear, with the same paper clip user experience found on the stats page.
There a few controls to this page. The leftmost drop down allows you to select and an asset to you character. Whereas the rightmost allows you to select and remove an asset from your character.
Once an asset is added you can input text into the Input Fields, modify tracks, upgrade the assets (but remember to spend your experience when you do)
Asset Builder
Asset CreationThe asset builder allows you to create, copy, edit and delete assets.
Assets with (Core) in the name cannot be edited or deleted. They are centrally maintained by the Data Management page. To update assets got to the Data Management page and press Update Core Assets
To create a new Asset either fill out the various fields and press Save Asset or select an existing asset, make the required changes and press Save Asset. As you make changes, those changes will be reflect live on the card nearest the input form. Use this to ensure your content fits inside the card (so that it will display/print correctly).
Assets MUST have a unique name. Therefore you will be unable to click Save Asset. unless a unique name is chosen.
ButtonsThe buttons on this page are dynamic. A button will only appear if an action is allowed. For example, since you can't delete or modify a core asset. When a core asset is selected, the only button available to you is
Save as Copy
. However, this button only appears when the name is unique. Similarly, if you're creating a new asset, then theDelete
,Save as Copy
andSave Changes
button are hidden.There are four buttons in total:
ButtonActionRulesAdd AssetAdds a new AssetIs not shown if existing asset is selected
Name cannot be blankSave ChangesSaves changes to an existing assetCannot add if Name is blank,
Can only save changes if the selected assets is not a core asset,
The asset Name cannot be different to the previous version.
At least one other field must be different to the previous version.Save as a CopyCreates a new Asset based on previous assetCannot add if Name is blank,
Cannot add asset if selected asset is core asset.
Cannot add if an asset exists with same name
cannot add if the asset is same as default asset (ie no changes)
cannot add if asset with same id already exists
add button is not shown when modifying an existing asset (copy shown instead)DeleteDelete an Existing AssetExisting asset cannot be a core asset
Cannot be an asset that is not yet created
Asset DeckAt the bottom of the Asset Builder page, all the existing assets can be viewed on the page. At the top of the Asset Deck, there is a
Print Cards
button, which will modify the page and hide non essential visual elements to create an automated printable page. This process will also automatically generate card backs and place them in order so that they print correctly on double sided printers. (if you don't want card backs you can select those pages not to print in the printer options)
KNOWN ISSUE: The way the page is generate the last page always generates an almost blank page. This should be removed in the printer settings.
RollThe
Roll
button in theSidebar
takes you to a simple Dice Roller. This uses the same Dice Roller that drives the tables, but allows you to specify a series of dice and roll them. The dice roller in theFooter
is functionally more useful to Ironsworn, but this was added for those that want to roll on some dice for whatever reason.
Data ManagementThis companion has a persistent state meaning that you can move between pages and your textboxes wont clear when you return. This is done through your browser's
local storage
. TheData Management
page allows you toReset
,Load
orSave
your gamestate at any point.
Saving and Loading the Game StateThe
Save
Button allows you to download your gamestate to a JSON file that you can store on your computer. If you not a programmer/unaware of what JSON is, don't worry. You don't need to know what the file is, except that it is a text file that contains all of the information to maintain your game save. It also allows your to move your game between browsers or computers.JSON files can be loaded using the
Load
button to replace the current gamestate with the gamestate from the save file.The
Reset
button wipes the gamestate back to defaults. This cannot be reversed so ensure you save your game before doing this.
Updating Core AssetsThis platform makes use of RSEK's datasworn assets. If your assets fall behind RSEKs datasworn assets, you can use the update button to bring them up to date.
AcknowledgementsThe acknowledgement page provides the following information, but it is also here to make the documentation more complete.
LicenseTo honour the labour of love created by Shawn, this companion is distributed (for free) under the same International Attribution-NonCommercial-ShareAlike 4.0 license as the official Ironsworn game. This companion could not exist without Shawn's work and since his game is distributed for free it seemed only right to do the same with the companion. The images, icons and maps used in this companion are provided from different authors (See Contributors below). Consequently, they are NOT covered by the same ShareAlike 4.0 license
As part of the Attribution-NonCommercial-ShareAlike 4.0 license: any forks of this application must only build upon this page. No attributions may be taken away from this page without expressed written permission. This page must be included in any derivative works and may not be 'hidden' from view.
ContributorsThere were several content developers from the Ironsworn community that deserve an honourable mention here. During the creation of this companion the following people provided direct or indirect support to this app.
ContributorContributionURLSHAWN TOMKINWithout Shawn's work none of this could be possible. When reading the game, you realise the care, effort and devotion that has gone in to creating this game and yet, the game is released as open-source under the creative commons 4.0. True Legend!https://www.ironswornrpg.com/JOSIAH VAN EGMONDThe coloured version of the map was created by Josiah Van Egmond from Black Hawk Cartography (who make some amazing maps I might add). Additional thanks to Shawn Tomkin for providing me with explicit permission to use this image outside of the CC4.0 license.https://www.blackhawkcartography.com/RSEKRSEK provided continued support and feedback throughout development and their Datasworn repository was used to build the core assets in this companion.https://github.com/rsekERIC BRIGHTTo provide more variety and options when rolling on oracle tables, Eric's expanded oracles were used to populate the core oracle tableshttps://www.drivethrurpg.com/browse/pub/8584/Eric-BrightDELAPOUITE & LORCThe icons used at Game-Icons.net are fundamental for achieving the Ironsworn look-and-feel. Therefore the icon selector for asset creation is driven by Game-Icons.net fonts.https://game-icons.net/KYLE KEMPTo integrate the Game-Icons.net icons into the application, Kyle's game-icons.net web-font was used, which was evidently inspired by FontAwesome.https://seiyria.com/gameicons-font/GHOST225Ghost provided continued support, feedback, feature suggestions and testing throughout the developmenthttps://github.com/ghost225NOMADSOUL1Credit goes to NOMADSOUL1 from freepik for the homepage image. The colour image was filtered to get the same look and feel as the Ironsworn book.https://www.freepik.com/nomadsoul1ONLINE WEB FONTSModesto font made from Online Web Fonts licensed by CC BY 3.0http://www.onlinewebfonts.com
DeveloperThis app was created by Graham Coulby to serve as a holistic digital companion for the Ironsworn tabletop RPG. This app was not designed to replace the official rules nor was it designed to supersede the work done by Shawn Tomkin.