ebshimizu / 5e-monster-maker Goto Github PK
View Code? Open in Web Editor NEWA monster stat block builder for 5th edition Dungeons and Dragons
Home Page: https://ebshimizu.github.io/5emm/
License: MIT License
A monster stat block builder for 5th edition Dungeons and Dragons
Home Page: https://ebshimizu.github.io/5emm/
License: MIT License
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.
title
Warlock cantrips get added to the 1st-5th level slot section and go in from of the spells that use slots.
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 :))
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
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
๐
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
WotC has updated where certain things go in official stat blocks. the upcoming changes are:
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.
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
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.
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:
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.
bit of a tangle here
a button for custom spell creation will exist but actually making it do something is a different issue (#56 to be exact)
Minor typo, but the skill should be "sleight of hand", not "slight of hand".
Thanks for the useful tool!
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
did you know that all of the CR estimation calculations are written in the component that renders the CR footer? well now you do.
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.
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
we're almost there, time to think about updating the automation pipeline
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.
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.
Trying to move my custom spells and traits templates to my other browser, but it's telling me "load failed, no version detected"
5emm.zip
When working on a named creature "The [Proper Name]" is not grammatically correct.
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
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.
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.
In the skills table there is no investigation.
It filters the big combined dropdown but individual slot dropdowns are unaffected by this option.
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.
I tried some other files of mine, and they loaded up fine. I'm not sure if why these ones are refusing to load
monstermaker.zip
.
Hi
The condition diseased
seems to be missing in src/data/CONDITION.js
Thanks for a nice tool to easily create stat blocks :)
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
bonus idea pile
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.
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.
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.
Additional special type of template that applies a set of traits to a monster.
See MM for examples:
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
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.
copy style from damage per round element
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.