Git Product home page Git Product logo

ebshimizu / 5e-monster-maker Goto Github PK

View Code? Open in Web Editor NEW
31.0 3.0 11.0 3.18 MB

A monster stat block builder for 5th edition Dungeons and Dragons

Home Page: https://ebshimizu.github.io/5emm/

License: MIT License

JavaScript 2.06% HTML 0.24% Vue 47.28% CSS 0.11% TypeScript 50.17% SCSS 0.15%
dnd dnd-5e tools custom-monsters statblock-generator statblock-builder dungeons-and-dragons monster-builder cr-calculator

5e-monster-maker's Introduction

Falindrith's D&D Monster Maker

Formerly "5e Monster Maker"

Live site: https://ebshimizu.github.io/5emm/

A monster stat block builder for the 5th edition of Dungeons and Dragons.

Falindrith's Monster Maker Screenshot

Features

  • Fast: Quickly create stat blocks by filling in a form, rather than typesetting everything by hand
  • Reactive: Modifiers for attacks and saves are automatically calculated from core stats
  • Spellcasting Support: Create class-based lists or innate spellcasting lists. Add any spell available in the SRD.
    • Custom spells can be added, imported, and exported if you need a homebrew spell
  • Automatic CR Estimate: Simplifies CR calculations by doing them for you and updating as monster stats and traits are updated
    • Displays an explanation of each component when hovered
  • Templates: Apply attacks, traits, or other actions to a creature from a preset library
    • Add your own traits, actions, and attacks as templates for re-use
  • Import: Edit monsters from Open5e, including all of the SRD monsters and additional OGL licensed monsters hosted by Open5e.
  • Export Anywhere
    • JSON: For later editing with the 5e Monster Maker
    • Markdown: For use with Homebrewery, GMBinder, or other editors that accept that Markdown format
    • LaTeX: For use with the rpgtex system
    • PNG: For when you just want an image
    • Tarrasque.io JSON: For use with the Tarrasque.io virtual tabletop.
    • PDF: Use the standard print button on your browser to save the stat block to PDF
    • Sharable Link: Send a direct link to your monster in the 5emm app. Here's a link to the Adult Frost Dragon shown in the screenshot. The application automatically shortens these links with TinyURL before copying to clipboard.

How It Works

The best way to see what the application can do is to just try making a monster. There are a few examples of SRD monsters in the data folder of the repository. If something looks off or breaks, let me know via an issue! Here are a few things to know though:

Saving

The current monster that's being worked on in the app is automatically saved every time you make a change. To export it to a file, click on the download icon in the top right. Exporting in the .5emm.json format allows you to import it back into the app to continue work later.

Using {} Tokens in Descriptions

Every property of the monster can be accessed through tokens starting with {monster.[feature]}. A full specification of all of the available fields is in the models.ts definition. Some tokens are shortcuts to relevant properties (e.g. {action.recharge}) that only work in certain contexts. Check the text editor of the section you're editing to see what things are available.

There are also some special tokens that can be used anywhere:

  • {NAME} for the monster's name
  • {#d#} for computing a dice roll (e.g. {3d6})
  • {DC:STAT} for computing a Save DC based on the given stat. Stat must be one of: STR, DEX, CON, INT, WIS, CHA
  • {XP:[cr]} for displaying the XP of a monster with given CR (e.g. {XP:1/2} renders to 100 XP). You can put a + at the end to declare the total as additive to the monster's listed CR. These tokens mostly exist to automate part of the Mythic Actions preamble.

Calculating CR

First of all, the CR calculation displayed at the bottom of the page is just a suggestion and can be ignored entirely if you want. The app tries to compute CR as described in the 5e Dungeon Master's Guide:

  1. The damage per round is averaged over three rounds, assuming the monster uses its most damaging attacks every round. Limited use, recharge, and spellcasting abilities are used only once in these three rounds (so if you do decide to cast, say, fireball three times in a row, this will not capture that). Trait damage is applied every round. Multitarget actions are assumed to do 2x damage. All attacks and actions are assumed to hit/do full damage.
  2. An offensive CR is computed from the average damage per round.
  3. The offensive CR is adjusted based on the attack bonus or save DC of the monster, prioritizing whichever has a higher expected CR
  4. The effective HP of the monster is calculated based on the offensive CR. The offensive CR is needed to set the proper multipliers for immunities and resistances.
    • Note that there is a toggle to use the monster's specified CR instead of the estimated offensive CR.
  5. A defensive CR is computed from the effective HP
  6. The defensive CR is adjusted based on the effective AC of the monster
  7. Offensive CR and defensive CR are averaged to create the final estimate

Attacks are automatically considered in the CR calculation. Other actions and traits need annotations in order to be included. Each of the CR components can be hovered over to see a detailed explanation of the computed values.

Spellcasting

The spellcasting panel allows you to setup slot-based casting or innate spellcasting. If using slots, selecting a class and level will automatically assign the proper number of slots to the monster. These slots will not show up until a spell is added to the casting list. To edit the number of slots available and assign spells by level, click on the Show Slots button.

Innate spellcasting groups can be added by clicking the big green Add New Innate Spell List button. These groups will not display on the stat block until a spell is added.

Only SRD spells are available by default, but you can add new spells by going to the top left menu and adding a new custom spell. You'll need to provide a name, level, class list, single target damage (optional) and whether or not the spell is a multitarget spell (like fireball). Your spells are automatically saved in the app, and can be exported and imported at will.

Legendary and Mythic Actions

Legendary actions are available in the corresponding panel. In order to specify a legendary action, the action must first exist as either an Attack or Action in the builder. You can then designate any of the monsters attacks or actions as legendary. The legendary action text will not render unless the monster has at least one legendary action. If an action can only be used as a legendary action, click the "L" button in the Action's editor.

Mythic actions function similarly to Legendary actions. Designating an action as "Legendary Only" still allows it to be selected for Mythic actions. The mythic trait and preamble for the mythic actions will show up in the stat block once an action is added.

What's the difference between Traits and Actions?

Traits are assumed to be "always active" while actions must be specifically used on a monster's turn. Traits that do damage, according to the CR annotations, are assumed to apply that damage at the start of every round (no action required). Actions must be used and will not automatically apply their damage at the start of every round.

Templates

Templates will add pre-made actions, traits, attacks, etc. to a monster. Find them by clicking on the search bar up at the top of the app. Right now, there aren't too many templates available, and I eventually plan to support using custom templates.

Troubleshooting

If the app gets stuck or crashes, visit the reset page: https://ebshimizu.github.io/5emm/#/reset. This page will let you delete saved data to get the app back to a working state. Note that this is a destructive operation, and you should use the buttons on the page to make backups of your data before proceeding. If you get redirected to that page while using the application, that indicates a bug. Please attach all relevant data and submit a bug report.

FAQ

Can you make it run on mobile? Eventually, probably! I developed it primarily as a desktop app in about a week and didn't add mobile formatting yet, but there's no reason why it wouldn't work.

Why isn't the ____ trait/action/attack a template? I probably haven't gotten around to it. Feel free to contribute templates, but please try to keep them generally applicable or within the SRD. The default set of templates is intended to provide a broad set of abilities that can be mixed and matched to build new monsters.

It's broken If it's not working as expected, please file an issue so I can try to fix it!

The CR calculation seems off There could be a couple reasons for this. Before filing and issue with the core CR calculation, first check that the expected abilities are being included in the CR calculation. This can be checked by hovering over the CR calculation components. Next, validate that the CR calculation matches what you'd get by doing the calculation with the given components by hand. If there's a mismatch there, let me know and I'll try to fix it!

Developing

This project is written in Vue with Quasar and uses npm as its package manager. I'm pretty sure it'd work with yarn as well.

Clone the repository and install the Quasar cli with npm install --location=global @quasar/cli. After that, run npm install. The development server can then be started with quasar dev.

5e-monster-maker's People

Contributors

dependabot[bot] avatar ebshimizu 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

Watchers

 avatar  avatar  avatar

5e-monster-maker's Issues

Lair Actions, Regional Actions

Put at end of stat block, use generic action template.

For CR calc: have a flag to include or exclude at top of each section, use annotations, act once per round using most damaging action according to annotations.

Version 2: Two Column Stat Blocks

yeah so this was easy all along. we could have as many columns as we want. i'll have to think about if we want a toggle or a slider, probably just a toggle

Version 2: Serialization update

Save schema v4 -> v5

Just remembered to start tracking changes now so will probably have to go back and validate this later.

The schema should match the interface in model.ts

  • schema v5
  • validate export and loading of v5 monsters
  • function to update v4 -> v5 (this will also need to run on load as app will have cached data from old version)
  • validate loading of v4 monsters
  • i18n pass on the loader function
  • spell validation to avoid crashes
  • markdown exporter
  • LaTeX exporter
  • url exporter (will this still work?)

Mythical Actions do not appear.

Adding Mythical Actions does not work. It appears to open some sort of menu, but that menu is empty and nothing appears on the output sheet. This has been tested on Windows 10, on chrome, Firefox and edge. All show the same behaviour.

[2.0] clearing a CR annotation field causes validation failures when monster is saved

this might be an issue for all numeric fields.

clearing a numeric input assigns a value of "" instead of a number to the saved field. this then causes validation failures if the page is refreshed or the monster is exported and then imported back into the app. numeric types will be enforced for these fields and other fields investigated on a per-case basis

Bug: Trait deletion out of order

Unsure about replication steps right now, but sometimes when deleting a trait, the wrong trait gets deleted. Will need to check if this is also happening with attacks, actions, anything else that functions similarly.

website not working

i was making a monster on the website and it suddenly stopped working saying how something went wrong it also gave the Error code: STATUS_BREAKPOINT. sorry if this isnt how i would tell you this i dont know how this site works

add a button to show the CR table

changing this issue to just have the CR table viewable in app.
offensive cr calc was already changed to use max of attack bonus / save DC in the average.

Mythic Actions

  • Add section with text box for preamble
  • Duplicate legendary actions interface for assigning mythic actions.
  • Append mythic actions to legendary action array in CR calculation
  • Update save format
  • Update exporters

site unable to load?

was working on a monster, and when changing, if i remember correctly, legendary actions, site crashed. when reloading/restarting/etc. page keeps crashing. unsure if this is an issue on the site side or possibly with the saved file of the monster i was making.

Custom spells

required fields: name, damage, multitarget, level, classes
set custom to true for good measure.

functions that access full spell list will need to switch to the store getter that combines the custom and srd lists. will also need import/export functions for custom spell list incl. a schema.
local storage key: app.spells - snapshot to local storage on mutations that change the custom spell list

Directly Edit Statblock

Adding an option to directly edit the statblock, perhaps as an option immediately before saving it if editing it beforehand would clash with the program, would be nice. The main reason I've found that made me want to suggest this is multiattack details. There are times I want to add notes about limitations or conditions for a creature's multiattack action that I cannot add using this program at the moment. Some examples include the t-rex who cannot target the same creature with both of its bite attack and tail attack, or a creature that attacks first then uses a special action, like the Shambling Mound, instead of vice versa. Currently, if you allow a creature to use a special action and attack, it always says the creature uses the action first then attacks. Being able to directly edit the statblock would also help add details like a creature being blind beyond its blindsight and more.

Version 2: Spellcasting

bit of a tangle here

  • clean up spells.json
  • hook up editor fields for basic spellcasting stats
  • move class-specific spellcasting fields inside the class spellcasting section
  • class-specific spellcasting: spell slot entry and editing
  • class-specific spellcasting: rendering (including custom preamble)
  • innate spellcasting: list creation and editing
  • innate spellcasting: rendering (including custom preamble)
  • clean up: separate class and innate spellcasting to separate components

a button for custom spell creation will exist but actually making it do something is a different issue (#56 to be exact)

Homebrewery markdown isn't working properly

When using Copy Markdown to Clipboard (Homebrewery) feature, after pasting it into homebrewery the HP value is always too low, legendary actions section appears even if monster doesn't have one, and there is missing bracket before the cost of a legendary action.
And BTW this is the best monster maker I've managed to find so far. Great Job :))

CR Calculation explainers

  • attack bonus: show list of attacks and relevant modifiers
  • DC: same as attack, show non-zero DCs
  • effective hp: show multipliers and additive modifiers
  • effective AC: show modifiers

copy style from damage per round element

Version 2: Deployment Automation

we're almost there, time to think about updating the automation pipeline

  • experimental branch: build and deploy to other repository for staging
  • debug experimental branch deploy
  • switch experimental to live after testing

Version 2: i18n support

while i'm unable to actually do additional translations, i18n support should be added in the event that someone else would like to add support for their own languages

  • the ui itself isn't too bad, but a pass will need to be done to figure out how to efficiently handle strings for default options (speeds, skills, etc.)

[2.1+] Combat Simulator

Given a target AC and save DC we can compute a statistical analysis on how the monster would do over 3 rounds. In the future, this might extend to being able to add specific save DCs or compute an average from imported party stats.

Additional template types

  • Spellcasting presets (pull from SRD, mage, etc.)
  • Reactions
  • Immunities/Senses presets (e.g. undead, dragon, etc., use SRD)
  • entire monsters (SRD only)

Version 2: Attacks

  • port model
  • add editor features (turn damage sections into accordion tabs, have basic damage open by default)
  • default renderer + tokens
  • enable custom renderer

[2.1] stat block arrangement adjustments

WotC has updated where certain things go in official stat blocks. the upcoming changes are:

  • Display proficiency bonus
  • Move spellcasting to Actions block
  • toggle for sorting Traits alphabetically. Actions aren't always sorted by name (attacks are always first, other actions are after), but traits appear to be.
  • Bonus Actions get their own section. This requires schema change and might be delayed to 2.1, need to add a flag to Actions that'll move them to that section.

Version 2: Port Monster Model

since the current application is written in javascript, the Monster model needs to be assigned proper typing in typescript and ported into a pinia module.
If the conversion is done correctly, all data written in v1 should automatically persist in v2.

  • basics (move languages up here too)
  • basics w/ automatic stat computation
  • saves
  • speeds
  • skills
  • senses
  • damage type adjustments and condition immunities
  • traits
  • #57
  • #62
  • actions
  • multiattack (forgot that actions also interact with this)
  • legendary actions
  • mythic actions
  • reactions
  • lair actions
  • regional effects

Version 2: Port Template System

Ah right I have the entire template saving system to port over. Let's get the data entry section finished first and then add this system.

  • spell creation
  • spell editor
  • spell serialization
  • port v1 srd templates
  • template application
  • template searching
  • actions/attacks/reactions/everything else creation
  • templates editor
  • templates serialization

i haven't gotten reports of this yet but there might be a time at which templates outgrow the localstorage capacity. when that happens we can maybe take a look at dumping them into indexedDB storage

[2.1] CR Visual Override

some of y'all are crazy and need CRs over 30. the app doesn't do that due to the CR calc being tuned for 5th edition.

but there's no reason we can't pretend given that the prof. bonus is editable. an override flag for CR display only can be added. this update requires a monster schema change.

Monster Type Templates

Additional special type of template that applies a set of traits to a monster.

  • determine format
  • editing/saving interface
  • populate default templates

See MM for examples:

  • Half-dragon
  • Dracolich
  • Shadow Dragon

Adding a third item to multiattack breaks CR calculation

I have no experience with JS, or I'd try to run this bug down myself.

When I add the third item to a multiattack group, the CR calculation suddenly stops including Resistances in the defensive CR calculation, resulting in an Estimated CR of 12 (17 Offensive, 8 Defensive) instead of 15/16. This doesn't seem to make any sense, given that an attack should have no effect on the monster's Resistances, let alone completely cancelling them out.

Below is the dump of the .5emm.json. Github isn't letting me upload even txt files for some reason

{"name":"Avatar of the Tempest (Category 3)","saveVersion":3,"size":"Huge","type":"elemental","alignment":"neutral","AC":17,"ACType":"natural armor","CR":18,"proficiency":5,"HP":{"HD":16,"type":12,"modifier":48},"speeds":[{"id":"b910e24f-3589-4dc7-bbc1-9ff364722bdf","type":"walk","speed":0,"note":""},{"type":"swim","speed":60,"note":"","id":"56b986b7-1b46-45c5-b5c1-6b309cab3daa"},{"type":"fly","speed":60,"note":"hover","id":"ef99b499-7b12-4663-a4ce-d6c42a44ca1b"}],"stats":{"STR":18,"DEX":21,"CON":17,"INT":6,"WIS":10,"CHA":13},"saves":{"STR":{"proficient":false,"override":false,"overrideValue":0},"DEX":{"proficient":true,"override":false,"overrideValue":0},"CON":{"proficient":true,"override":false,"overrideValue":0},"INT":{"proficient":false,"override":false,"overrideValue":0},"WIS":{"proficient":false,"override":false,"overrideValue":0},"CHA":{"proficient":false,"override":false,"overrideValue":0}},"skills":[],"resistances":["fire","acid","bludgeoning, piercing, and slashing from non-magical attacks that aren't adamantine"],"immunities":["cold","lightning","poison","thunder"],"vulnerabilities":[],"conditions":["exhaustion","grappled","paralyzed","petrified","poisoned","prone","restrained","unconscious"],"senses":{"blindsight":120,"darkvision":0,"tremorsense":0,"truesight":0},"passivePerception":{"override":false,"overrideValue":0},"languages":"Primordial","attacks":[{"name":"Shock","id":"afbb1acc-3c34-4c19-b26e-5a94363a79b6","distance":"Melee","kind":"Weapon","modifier":{"override":false,"overrideValue":0,"stat":"STR","proficient":true},"range":{"standard":0,"long":0,"reach":0},"targets":1,"damage":{"dice":8,"count":4,"modifier":{"override":false,"overrideValue":4,"stat":"STR"},"type":"lightning"},"alternateDamage":{"dice":10,"count":1,"modifier":{"override":false,"overrideValue":0,"stat":"STR"},"type":"slashing","condition":"","active":false},"additionalDamage":[],"save":0,"description":"This attack has advantage against a target wearing metal armor.","legendaryOnly":false},{"name":"Slam","id":"c19461a6-ae68-43b0-b5d5-c5852a48d963","distance":"Melee","kind":"Weapon","modifier":{"override":false,"overrideValue":0,"stat":"STR","proficient":true},"range":{"standard":0,"long":0,"reach":10},"targets":1,"damage":{"dice":8,"count":5,"modifier":{"override":false,"overrideValue":0,"stat":"STR"},"type":"slashing"},"alternateDamage":{"dice":10,"count":1,"modifier":{"override":false,"overrideValue":0,"stat":"STR"},"type":"slashing","condition":"","active":false},"additionalDamage":[{"id":"42e5a091-34db-4acd-a8d7-ebf0397329dc","dice":8,"count":1,"type":"lightning","note":""},{"id":"ae9374c9-e10b-470c-bde6-f818e0d959d8","dice":8,"count":1,"type":"thunder","note":""}],"save":0,"description":"","legendaryOnly":false}],"multiattacks":[{"id":"0d487fa3-e959-4f8e-acc7-a1eda99b91c2","attacks":["afbb1acc-3c34-4c19-b26e-5a94363a79b6","c19461a6-ae68-43b0-b5d5-c5852a48d963","c19461a6-ae68-43b0-b5d5-c5852a48d963"],"actions":[]}],"spellcasting":{"stat":"INT","save":{"override":false,"overrideValue":0},"modifier":{"override":false,"overrideValue":0},"attack":{"override":false,"overrideValue":0},"class":"","level":1,"slots":[0,0,0,0,0,0,0,0,0],"atWill":[],"standard":[],"notes":"","atWillNotes":""},"traits":[{"name":"Legendary Resistance","id":"3c5f6552-6cdd-4bb8-b940-8a9a53054ca4","description":"If the Avatar fails a saving throw, it can choose to succeed instead.","limitedUse":{"count":1,"rate":"day"},"crAnnotation":{"maxDamage":0,"maxSave":0,"maxModifier":0,"multitarget":false,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":false}},{"name":"Thunderous Visage","id":"f45f3db5-fee1-4a31-8a7a-a7a63a47c8f9","description":"Any creature that touches the Avatar or hits it with a melee attack using a metallic weapon takes {1d8} lightning damage. In addition, the Avatar can enter any creature's space and stop there. The first time it enters a creature's space on a turn, that creature takes {1d8} lightning damage. A creature that ends its turn inside the Avatar's space also takes {1d8} lightning damage.","limitedUse":{"count":0,"rate":"day"},"crAnnotation":{"maxDamage":4,"maxSave":0,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":true}}],"actions":[{"name":"Thunderbolt","id":"38a75a16-0f63-47c4-9186-a649c3852e31","description":"The Avatar chooses one creature within 90 feet and one other creature within 30 feet of the first target. Each target must make a DC 16 Dexterity saving throw. The targets take {6d8} lightning damage on a failed save, or half as much damage on a successful one.","recharge":"","legendaryOnly":false,"limitedUse":{"count":0,"rate":"day"},"crAnnotation":{"maxDamage":27,"maxSave":16,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":true}},{"name":"Thunderclap","id":"cf365df5-93ce-4bfe-ba45-9530c3515751","description":"A wave of thunderous force blasts out 30 feet in every direction, centered on any point within 120 feet. All unsecured objects that are completely within the area of affect are carried outside the area of effect. All creatures within the area of effect must make a DC 16 Constitution saving throw. On a failed save, a creature takes {2d8+5} bludgeoning damage plus {3d8} thunder damage and is knocked prone.","recharge":"","legendaryOnly":false,"limitedUse":{"count":0,"rate":"day"},"crAnnotation":{"maxDamage":27,"maxSave":16,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":true}},{"name":"Debris Torrent","id":"f518db29-59cc-4ecb-af11-23f425a86234","description":"Debris pulled from buildings and the surrounding area blasts out in a 60-foot cone. Each creature in the area must make a DC 17 Dexterity saving throw. On a failed save, a creature takes {6d8} bludgeoning damage and {6d8} piercing damage, or half as much damage on a successful save.","recharge":"5-6","legendaryOnly":false,"limitedUse":{"count":0,"rate":"day"},"crAnnotation":{"maxDamage":54,"maxSave":20,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":true}},{"name":"Detect","id":"79e42d66-dbcd-46e5-bd33-fab50d239c3e","description":"The Avatar of the Tempest makes a Wisdom (Perception) check.","recharge":"","legendaryOnly":true,"limitedUse":{"count":0,"rate":"day"},"crAnnotation":{"maxDamage":0,"maxSave":0,"maxModifier":0,"multitarget":false,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":false}},{"name":"Hailstorm","id":"0fdb46c7-8b4f-4d15-a7b1-63155fdbb524","description":"The Avatar of the Tempest unleashes a blast of hail in a 20-foot line. Each creature in that line must make a DC 20 Dexterity saving throw. A target takes {2d8+4} bludgeoning damage and {2d8+4} cold damage on a failed save, or half as much damage on a successful one.","recharge":"","legendaryOnly":true,"limitedUse":{"count":0,"rate":"day"},"crAnnotation":{"maxDamage":26,"maxSave":20,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":true}}],"legendaryActions":{"count":0,"actions":[{"id":"f66cf2d8-080f-4c22-9627-a222c4dd53a7","actionId":"79e42d66-dbcd-46e5-bd33-fab50d239c3e","cost":1},{"id":"7181272c-7fcd-41c9-bb7a-87484a945e33","actionId":"afbb1acc-3c34-4c19-b26e-5a94363a79b6","cost":1},{"id":"0326b6d4-54d7-4260-b11f-c84f953accd8","actionId":"0fdb46c7-8b4f-4d15-a7b1-63155fdbb524","cost":2}]},"reactions":[],"lairActions":[{"name":"Cyclone","id":"16196344-44fc-4b50-a804-dd5dc22a9bff","description":"Swirling winds pull all unsecured objects or prone creatures within 60 feet of the Avatar to the center of it's space. Each creature within 60 feet of the Avatar must make a DC 16 Strength saving throw. On a failed save, a creature takes {4d8+4} bludgeoning damage, and is knocked prone.","crAnnotation":{"maxDamage":22,"maxSave":16,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":false}},{"name":"Blinding Winds","id":"320f94b6-4f8b-41a2-83a7-dcf869c0d0d2","description":"Intense winds swirl in a 30-foot radius extending from the Avatar's form. All creatures inside must make a DC 15 Dexterity saving throw or suffer disadvantage on attack rolls until the effect ends. This lasts until initiative count 20 of the next round.","crAnnotation":{"maxDamage":0,"maxSave":10,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":false}},{"name":"Deafening Thunder","id":"f34e9eb3-fd7a-4188-b472-8cc738aa6907","description":"Thunder booms from a point within 120 feet of the Avatar. Each creature within a 20-foot radius of that point must make a DC 15 Constitution save or take {4d8} thunder damage and be deafened until the end of its next turn.","crAnnotation":{"maxDamage":18,"maxSave":16,"maxModifier":0,"multitarget":true,"ehpMultiplier":1,"ehpModifier":0,"acModifier":0,"include":false}}],"regionalEffects":[],"regionalEffectDescription":"The region containing the {NAME}'s lair is warped by the {NAME}'s magic. When the {NAME} dies, the effects fade after {1d10} days."}

P.S.: I think when it calculates Lair Actions in the CR, it is incorrectly replacing standard actions or multiattacks with the lair actions, rather than adding them on top of the normal calculation like (I think) it should. Lair actions should be totally independent of the action economy of the monster that gets them, unless I'm reading the manuals wrong.

[2.1] Reordering

have received a couple requests for being able to re-order actions, traits, attacks, basically anything that's in a list. That's possible to do but I'm punting it to 2.1 because the initial rewrite is larger than expected and i'll need to dig in to some of the ui components to append buttons to certain areas.

Version 2: Custom Text Rendering System

now we're getting to the fun stuff

Version 2's rendering of traits, actions, attacks, and certain preamble sections (spellcasting, etc.) will support the use of a much wider range of custom tokens. The idea is that the boilerplate text will just be a preset string using tokens that are accessible to everyone in the application. This will address long-standing issue #38.

Furthermore, quasar has support for fancy wysiwyg editors that support custom token replacement in the editor. this will be assigned a separate issue when the time comes.

Implementation to-do

  • context tokens (tokens directly related to the current context)
  • monster tokens (subset of general tokens related to monster stats)
  • formatting tokens
  • rendering of tokens (data token replacement -> input sanitization (per rendering context) -> formatting token replacement (per rendering context)
  • Trait-specific tokens
  • Action-specific tokens
  • Attack-specific tokens
  • Multiattack-specific tokens

bonus idea pile

  • [allowed by default] arbitrary action/trait access (actually completed already w/ allowed array access)
  • [completed] automatic CR estimation based on tokens used in text (actions and traits only)

Mythical Action Styling

Hello!

I feel like this is a styling error, but correct me if i am wrong. When using a mythical action, its text is shifted to the right on the left side of the sheet. All other text is nice and flush against the left side of the sheet so it seems kind of odd. Is this done intentionally?

Here is a image to show what i mean:
image

EDIT: it seems that this effect also happens with Legendary Actions, so this might be connected:
Here is a image showing what i get, along with a example (green circle) of what i expected it to look like.

image

Layout adjustments

  • attacks: change proficient/override switches to buttons
  • attacks: change manual bonus to button
  • actions: move delete button out of CR annotations card
  • render: hide saves, skills, and languages when empty

Version 2: Port Renderer

The statblock rendering system is pretty straight-forward, though upcoming revisions to the statblock text formatting system will require additional adjustments in the rendering system.

Warlock Spells

Warlock cantrips get added to the 1st-5th level slot section and go in from of the spells that use slots.

[2.1+] Multiattack Revisions

Multiattacks are rather complicated for such a small section of the stat block. Version 2 will port the system as-is and include an escape hatch for a fully custom re-write of that section, however that solution isn't .... great. A revised version of multiattacks will allow for more precise CR calculations and customization options. It's more like creating a database query than anything else

  • revise data structure: single attack id -> count, type, restrictions etc.
  • revise UI to allow interaction with revised structure

Version 2: CR Calculation Port

did you know that all of the CR estimation calculations are written in the component that renders the CR footer? well now you do.

  • port to TS in a composable
  • relink visuals
  • add settings button for #32

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.