ichabod801 / dm Goto Github PK
View Code? Open in Web Editor NEWA command line interface to a set of tools for dungeon masters of Dungeons & Dragons 5th Edition.
License: GNU General Public License v3.0
A command line interface to a set of tools for dungeon masters of Dungeons & Dragons 5th Edition.
License: GNU General Public License v3.0
The meta-campaign folder would hold general items that are used across a DM's campaigns.
You can do this by loading two campaigns, but allowing a meta campaign would allow both to be loaded automatically.
Have a unified alarm representation so data storage and user representation work together.
For example, you have orc-1, orc-2, and orc-3 in the combat tracker. You add 2 more orcs, they come in as orc-1 and orc-2. It's possible to deal with this, but you shouldn't have to.
Note that you may have a situation where orc-2 is dead. So an incrementing loop to find a free name could be a problem. You'll need pattern matching to find them all, get the indexes, then take the max of those indexes.
The would be for adding a background to a creature.
The backgrounds would need to be read from a text file. Include personality traits. They can have choice, so have one that is all choice for custom backgrounds.
This is a child of issue #9: Character Builder
Create class objects that would add one or more levels to a character.
Resetting HP at first level will need to be an option. You will want to do it if building off a default creature. You won't if you are adding it to a monster or NPC. Of course, the latter is not RAW, but allow for that option anyway.
This is a child of issue #9: Character Builder.
Have an option when rolling on a table to go to another table and roll there. This would allow something like the random dungeon generator that was a part of the first draft of this system.
Trying to load the Dome of Heaven Calendar gives this error:
Traceback (most recent call last):
File "C:\Users\spam\Documents\Roleplaying\dm\egor.py", line 1716, in onecmd
return super().onecmd(line)
File "C:\Users\spam\anaconda3\lib\cmd.py", line 217, in onecmd
return func(arg)
File "C:\Users\spam\Documents\Roleplaying\dm\egor.py", line 998, in do_set
self.load_campaign()
File "C:\Users\spam\Documents\Roleplaying\dm\egor.py", line 1564, in load_campaign
self.campaign.calendar.set_year(self.time.year)
File "C:\Users\spam\Documents\Roleplaying\dm\gtime.py", line 248, in set_year
self.current_year = self.year_table(year)
File "C:\Users\spam\Documents\Roleplaying\dm\gtime.py", line 385, in year_table
cycle.expand_table(table, self)
File "C:\Users\spam\Documents\Roleplaying\dm\gtime.py", line 602, in expand_table
overage_period = self.periods[last_year_periods - 1]
IndexError: list index out of range
Conditions often end on the turn of the person who caused the condition, not the one who has the condition. Also, they sometimes end at the start of the turn, not the end. So we need to support that. So I'm thinking a syntax like 'con [N [M [S|E]]]'. N would be the number of turns (default -1, no end), M would be the creature id of the turn it ends on, and S or E would indicate whether it ends at the start or end of the turn.
I would need to check every round. The check would be complicated enough that it might be worth making a condition object that can handle the check with a simple call.
Date formats frequently leave a leading space. Strip that when reading the formats.
I believe saving throws are not showing up in full stat blocks. Make sure everything that should show up in a stat block shows up there.
Should just be an easy conditional.
You need to be able to see that somewhere. Note that this will require adding a method for the full text to the Attack object.
This should be handled more gracefully. The problem is that the combat attributes like init and init_count have not been set up. There are no defaults.
One solution would be to set up defaults, and then check for the defaults (like an empty init list) and give a warning in Egor without raising a Python exception.
Another solution would be to set up the PCs as being in initiative by default. That would be easier for testing, but may cause problems in actual use.
Come up with a way to specify a specific creature within a group with get_creature. Something like 2-3 gets the third creature in the group that is second in initiative order.
I think that when the creature is parsed, the parens should be stripped.
The old test code in if __name__ == '__main__'
blocks does not work with the relative imports that were used for the package. They cause an error trying to run the file by itself.
Review the tests and either come up with a new test method, probably using unittest, or just drop the testing code.
Get something that creates new monsters with a questionaire and/or modifies current creatures. Then the creature can be stored in the campaign files.
Avoid generating a CR, as that would use copyrighted material from the DMG.
Currently when parsing attacks, the program cannot handle spaces in damage. So (1d4+2) is recognized as damage, but (1d4 + 2) is not. This is because it is parsing by word. I should be able to do a regex or something to catch space or no space.
Anything that makes it easier to make homebrew creatures readable is a good thang.
When you use the hit command, Creature.hit checks for the concentration condition, and warns you for a concentration check. But when you use the attack command, Attack.attack does the damage directly and there is no warning for a concentration check.
This would tie together the species, background, and class objects, as well as add an equipment feature.
This is a child of Issue #9: Character Builder.
Some parts of the code use time representations with spaces, others use dashes. Make sure both types are supported everywhere, especially in reading time formats.
It capitalizes the name, as most monster names are lower case. But if there are non initial capitals in a character's name, it lower cases them. So 'Claw Claw' becomes 'Claw claw'. Fix that.
Create a workspace for node-based adventure design. You can set up the nodes with titles, content, and connections between nodes. Also support (or be prepared to support) zooming in on nodes. You can navigate the nodes, add new nodes and connections, see tables of nodes, connections, nodes and the nodes they connect to. Also allow for tagging things in the content so lists could be made of those: npcs, monsters, macguffins, that sort of thing.
Have a tool for encounter design. Searching by type and CR. Details about the XP and # of attackers. The stuff that might factor into the tables in the DMG, but be sure not to use any copyrighted information that is in there. Support for storing encounters.
I would also like better handling of random encounters. Maybe that should be part of this issue, or maybe it needs to be an issue of it's own.
I have decided to use a separate object for characters generation. This would inherit from the current Creature object, but implement further into the background. It would know about the proficiency bonus, proficiencies for saves and skills. It could recalculate the stored bonuses for skills and saves based on changes to the various sub-bonuses. It would also be able to track equipment, gold, spell slots. As other design questions come up, the Character object should be ready to use in a player interface, should I ever want one.
Make sure the comments in the code are complete and up to date, especially the attributes of the main egor instance.
Eras would be ranges of years with names. This would modify the year and allow the era name to be in formats, so year 591 could be shown as year 108 of the Foo era.
This is set by Egor, so it doesn't crop up as a bug. However, if someone tried to use this object out of context, it would fail.
These would be objects that add a race to a creature. Note that they might be added to an NPC stat block.
The different races would need to be read from a text file. Possibly multiple text files, to account for campaign dependent races.
Child of issue #9: Character Builder
The calendar code was a frustrating mess. Review it and make sure the object hierarchy is good, and the calculations are simplified as much as reasonable.
Low priority.
Have a character builder. Maybe for NPCs that have stat blocks. This might not be worth it, given the copyrighting of the subclasses. Look into that. Or it might be good to have a monster builder that is more focused on NPCs. (see issue #6 ).
I don't think groups show the conditions of the members, which would be important for the DM/user to know. Confirm that problem and look for possible solutions.
The name accessible to formats for calendar do not include the current year, because it is not in the year table. So you can't have a format for 10/27/2021.
The do_xp method divides the xp by len(self.pcs)
. Make sure this shouldn't include self.pc_data. If it does, fix it and look for other similar pieces of code to fix.
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.