Git Product home page Git Product logo

shillysit / ironwriter Goto Github PK

View Code? Open in Web Editor NEW
54.0 4.0 9.0 816 KB

IronWriter is an open-source writing tool for solo playthroughs of the free tabletop RPG Ironsworn. Focus on writing your story and let IronWriter automatically manage your character sheet.

Home Page: https://alexlarioza.com/IronWriter/

License: GNU General Public License v3.0

HTML 26.19% JavaScript 67.39% CSS 6.42%
ironsworn rpg rpg-tool writing-tool fiction

ironwriter's Introduction

Overview

IronWriter is an open-source writing tool for solo playthroughs of the free tabletop RPG Ironsworn. Focus on writing your story and let IronWriter automatically manage your character sheet.

IMPORTANT NOTE: IronWriter is on an indefinte development hiatus. It also has not yet reached v1.0 and should be considered unstable, so please export and backup any data important to you. Backward compatibility is not guaranteed.

Current Features

  • Use simple markup embedded in your story to automatically update your character sheet
  • Track all stats, momentum, status, and debilities
  • Track progress on your vows, journeys, and combat
  • Editing an event will update all events that follow it
  • Remove events
  • Track bonds and overall progress track
  • Integrated dice rolls
  • Roll against oracle tables
  • Reroll oracle/dice
  • Import/Export
  • Save session to browser cache
  • Track assets
  • Track inventory items
  • Manual bookmarking of events to reference later
  • Auto-Bookmarking of events with bond and vow progress

Open Source License

IronWriter is an open-source writing tool for solo playthroughs of the free tabletop RPG Ironsworn. Copyright (C) 2019 Alex Larioza

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://github.com/SHiLLySiT/IronWriter/blob/master/LICENSE.txt.

Table of Contents

Quick start

  • Visit www.alexlarioza.com/IronWriter or clone this repo and open index.html in your browser.
  • As you write your story, progress is automatically saved to your browser's local storage so be aware that clearing site data will delete your save data.
  • Use the import/export feature to safely store the your session outside of your browser.

Keyboard Shortcuts

  • CTRL+Enter: Submit/Save event
  • CTRL+M: Toggle mode

Documentation

IronWriter represents moments or blocks of content in your stories as "events". How much content you choose to write into each card is up to you.

alt text

There are two types of events - "fiction" and "meta". Functionally there is nothing different about them, but they are visually distinct to help separate your fictional elements from your meta actions during your session such as moves, question prompts, etc.

alt text

IronWriter uses special markup (referred to as "tags") to automatically update the character sheet. These tags are case-insensitive (removeAsset is the same as removeasset) and should always be wrapped in square brackets []. This documentation will use capitalization for clarity and leave out the brackets for brevity.

alt text

[health -2][momentum -1] Blood begins to pour out of the wounds on my arm as the wolf attempts to rip it off. I reach for my dagger tucked in my belt.

I pull the dagger from its sheath and stab the wolf in its neck.[progress wolf] It finally release my arm and whimpers in pain. Just as I think I'm about to make it out of this alive, three more wolfs come running out of the forest. [progress "Wolf Pack" formidable]

For a full example, see the example session.

Tags contain parameters which are used to control how the tags change the character sheet or other event-based features like bookmarks. Parameters are separated by spaces, so if you want to include spaces wrap the parameter in double quotes e.g. rename "Brynn Tahir". In the documentation, parameters that are wrapped in carets <parameter> are required and those wrapped in curly braces {parameters} are optional.

All events are stored in a history stack so that when you edit an event, any subsequent ones that are dependent on it will be replayed on top of your changes.

alt text

IronWriter includes a bookmarking system to help you quickly traverse the history for noteworthy events. There are two types of bookmarks - those created by the system when you make/break a bond or make progress on a vow, and those you create yourself using the bookmark tag. Both types of bookmarks are saved between sessions and exist in exports.

alt text

Tags

Renaming your character

Renames your character.

rename <character name>

Parameters

  • <character name> The desired name.

Examples

  • rename Maura Sets the character name to "Maura".
  • rename "Brynn Tahir" Sets the character name to "Brynn Tahir".

Changing Stats

Changes a stat's value. Note that the first parameter is not literally "stat" but the stat that you wish to change.

<stat> {modifier}<value>

Stats

  • edge
  • heart
  • iron
  • shadow
  • wits
  • health
  • supply
  • spirit
  • momentum
  • experience
  • experienceSpent

Parameters

  • <stat> The stat you wish to change.
  • <value> The value to be applied to the specified stat.
  • {modifier} How you want the value parameter to be applied. The following options can be used:
    • + Adds the specified value.
    • - Subtracts the specified value.
    • Not specifying a modifier sets the stat to the specified value.

Examples

  • health +1 increases health by 1
  • spirit -2 decreases spirit by 2
  • iron 3 sets iron to 3

Adding and Removing Debilities

Adds and removes debilities and automatically changes max momentum and momentum reset stats.

is <debility>
not <debility>

Debilities

  • wounded
  • shaken
  • unprepared
  • encumbered
  • maimed
  • corrupted
  • cursed
  • tormented

Parameters

  • <debility> The debility that you is to add or remove.

Examples

  • is wounded Adds the wounded debility.
  • not wounded Removes the wounded debility.

Marking Progress

Starts, compeltes, or marks progress on a specific track.

progress <name> {modifier}

Parameters

  • <name> The name of the progress track.
  • {modifier} How you wish to modify the track. The following options can be used:
    • complete Removes the progress track from your character sheet.
    • challenge rank The rank of a new progress track. The following options can be used:
      • troublesome Each progress is 12 ticks.
      • dangerous Each progress is 8 ticks.
      • formidable Each progress is 4 ticks.
      • extreme Each progress is 2 ticks.
      • epic Each progress is 1 ticks.
    • {+/-}<value> The number of ticks to add, remove, or set.
      • + Adds the specified value.
      • - Subtracts the specified value.
      • Not specifying a modifier sets the number of ticks to the specified value.
    • Not passing this parameter automatically adds the number of ticks as specified by the challenge rank.

Examples

  • progress "Kill Martu" formidable Creates a new progress track called "Kill Martu" and sets it's rank to formidable
  • progress "Kill Martu" Increases the number of ticks by 4.
  • progress "Kill Martu" +1 Increases the number of ticks by 1.
  • progress "Kill Martu" -2 Decreases the number of ticks by 2.
  • progress "Kill Martu" 8 Sets the number of ticks to 8.
  • progress "Kill Martu" complete Removes the progress track called "Kill Martu".

Making Bonds

Adds a bond to your list of bonds and adds a tick to your bond progress track.

bond <name>
unbond <name>

Parameters

  • <name> Text describing the bond.

Examples

  • bond Father Adds a bond called "Father" and adds 1 tick to the bond progress track.
  • unbond Father Removes the bond called "Father" and removes 1 tick from the bond progress track.
  • bond "Mai Lucia" Adds a bond called "Mai Lucia" and adds 1 tick to the bond progress track.

Managing Assets

Adds and updates your character's assets.

asset <name> <perk>
asset <name> <property> {modifier}<value>
removeAsset <name>

You must add an asset before adding perks or properties, e.g.

[asset Ritualist] // add asset first
[asset Ritualist 1] // add first perk point

Parameters

  • <name> The name of the asset.
  • <perk> Unlocks the perk in the specified slot.
  • <property> The name of an asset property.
  • {modifier} How you want the value parameter to be applied. The following options can be used:
    • + (Number Only) Adds the specified value.
    • - (Number Only) Subtracts the specified value.
    • Not specifying a modifier sets the stat to the specified value.
  • <value> The value of the property. Can be a number or text.

Examples

  • asset Ritualist Adds an asset called "Ritualist".
  • asset Ritualist 1 Unlocks the perk in slot "1" for asset called "Ritualist".
  • asset Hawk Health 1 Sets the "Health" property to "1" for the asset called "Hawk".
  • asset Hawk Health +10 Adds "10" to the "Health" property for the asset called "Hawk".
  • asset Hawk Health -5 Subtracts "5" from the "Health" property for the asset called "Hawk".
  • asset Wright Specialty Herbalism Sets the "Specialty" property to "Herbalism" for the asset called "Wright".
  • removeAsset Wright Removes the "Wright" asset.

Managing Inventory

Adds and updates your character's inventory.

item <name> <quantity>
item <name> <property> {modifier}<value>
removeItem <name>

Parameters

  • <name> The name of the item.
  • <quantity> The value you wish to set for the "Quantity" property of the item. Defaults to 1 if not specified. The following options can be used:
    • {+/-}<value> The quantity to add, remove, or set.
      • + Adds the specified value.
      • - Subtracts the specified value.
      • Not specifying a modifier sets the "Quantity" property to the specified value.
  • <property> The name of an item property.
  • {modifier} How you want the value parameter to be applied. The following options can be used:
    • + (Number Only) Adds the specified value.
    • - (Number Only) Subtracts the specified value.
    • Not specifying a modifier sets the stat to the specified value.
  • <value> The value of the property. Can be a number or text.

Examples

  • item Dagger Adds an item called "Dagger" with the default "Quantity" property set at "1".
  • item Arrows 5 Adds an item called "Arrows" with the "Quantity" property set at "5".
  • item Dagger Condition 3 Sets the "Condition" property to "3" for the item called "Dagger".
  • item Dagger Condition +2 Adds "2" to the "Condition" property for the item called "Dagger".
  • item Dagger Condition -5 Subtracts "5" from the "Condition" property for the item called "Dagger".
  • item Waterskin Level Full Sets the "Level" property to "Full" for the item called "Waterskin".
  • removeItem Waterskin Removes "Waterskin" from the inventory.

Bookmarking Events

Adds a Bookmark to the bookmark list.

bookmark <name>

Parameters

  • <name> The name of the bookmark.

Examples

  • bookmark "Arrived at Greathill" Adds a bookmark called "Arrived at Greathill".

ironwriter's People

Contributors

cilestin avatar mako88 avatar shillysit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

ironwriter's Issues

Story export

Add a button for those who like to share their sessions that exports the data in a user friendly format. Maybe markdown or html? Add options to show/hide meta events.

Insert/reorder events

Right now you can delete existing events, but you can't insert new ones into the history. This would add a button that allows the user to insert an event in between two existing events. Could be a hidden button that appears between two events when hovered over.

Add ability to remove items and assets

As mentioned in #25, there should be a way to remove items that you no longer need e.g. ones that have 0 quantity.

Additionally assets should be removable as well as assets can be removed during normal play e.g. "Slain Companions" section in the official rulebook.

Bookmark System

Bookmark events so that you can quickly jump to them later. This should add some sort of new menu that is popup or hidden that contains a list of bookmarks. Individual events should have a new button on them that toggles a bookmark.

NPC tracker

Would be nice to have a list of NPCs with descriptions, notes, and current location.

Asset management

I could just be misunderstanding things, but even the example in the documentation of how to use Ironwriter doesn't seem to work when adding assets to your character. To my understanding, I am to add an asset using the following format [asset Ritualist 1], the 1 being to add the first little pip to the asset. I am able to add an asset using [asset Ritualist], but when I add the 1 it clears the asset from my character's info. This tool is really interesting and I'd love to use it more but it's difficult to do so at this moment.

Progress rolls

Add a dice roll button next to progress tracks to do action roll +progress. This will require refactoring the progress system a bit so that edits to progress tags update subsequent rolls correctly.

Plot call back oracle table

Add a tag that lets users add entries into a custom table that can be rolled against. Results can be used to during narrative twists to callback to a previous moment in the story.

Confirmations for destructive operations

Currently event deletion and starting a new session do not show a confirmation dialog. To prevent accidental data loss, these actions should show a prompt to confirm their actions.

Action Roll not working

Perhaps I don't know how to modify it. But when I pick a progress to roll the action die only rolls zeros. If I do not pick a progress it rolls normally.

Burn momentum

Burn momentum and automatically set momentum to reset value. Could be implemented as a tag and/or a button near the momentum stats on the character sheet.

Fix rolls showing hits when action score ties challenge dice

изображение

As shown on pp. 8 and 18 of the Ironsworn rulebook, an action score must be greater than one of the challenge dice to score a hit.
However, in the current version, this is not true.
изображение
изображение
Those results should have both been misses.

The error is in the calculation of hits in the RollAction considering a roll a Miss only if the result is LOWER than both of the challenge dice.

Interactive map

Large idea: would be great if there was an interactive map that could be opened to add pins/labels to mark locations. Could potentially also track NPC locations. Could this be affected by markup in events?

Asset management

Add the ability to track and upgrade assets. Assets and their current status should be shown on a character sheet card. Upgrading an asset only works if you have enough unspent experience and automatically spends experience. Should support any asset so that people can add custom ones. Each asset should track perk pips and meta data (companion health/name, ironclad options, etc).

Inventory management

Add a tag that tracks items/quantity in a character sheet card.

[item "Arrow"]
[item "Arrow" -1]

Add custom meta events

Currently only dice and oracle rolls are styled as "meta" events. Would be nice to allow the user to swap between these two event types when entering content so that they can add meta notes such as the choices they asked themselves on a roll, general notes, etc.

Add syntax snippets dropdown field to aide new users

Hi! I think it could be helpful to allow the Stat, Status, etc. values to be directly editable (as in a form field), as well as editable via the story input. Perhaps to keep this the same "shape" as the in-line-story-updates, these direct edit events could create a log item noting what changed. (I haven't looked at the code so I'm not sure if it's important for all events to be in the log, but I assume it is, since there re-writable history concept there).
I love a good keyboard-based workflow and really dig the way the stats change directly as a result of log items, but I think learning the syntax could be a bit of a hurdle for new users.

Perhaps another solution would be to provide clickable "syntax snippets" near the entry field such that someone could click a change health button and have a templated syntax appear in the log entry field that they can then edit. like [health +0].

To be clear, I'm referring to basically all of the values in the left sidebar.

Tag redesign

Maybe once we type the tags using the usual square-bracket syntax and submit the event. The actual event block has different stylings for the tag. Currently, the tags look kind of ugly in the events and it would look better if the tags had some kind of design when submitted.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.