Holiday Update and End of Year Projections
over 7 years ago
– Thu, Dec 22, 2016 at 09:22:39 PM
Greetings and Salutations,
Owlbear here with a blast update to bring everyone up to speed and onto the same page regarding the D20PRO kickstarter. First off, I'd like to thank everyone for continuing to follow along and your near infinite patience as we march toward the finish line.
I'd also like to take a moment before the deep dive to call out a pretty major event for us. As of today, 12/22/2016, we've officially landed our first major license deal for a game system. We signed with Paizo and will be producing official content for their brand under the D20PRO moniker and marketplace. There is a lot to do to make this as solid an offering as we'd like, so our content folks will be shifting attention toward the Paizo products while the devs to plug away at features and capabilities in the app.
You can read more about the release directly from our blog here.
I'd also like to thank our marketing and content teams for the bang up job they've been doing to grow awareness of D20PRO and our community. Since August, they've drawn a facebook community of over 8000 users (and climbing) as well as a growing community on twitter! This is a huge shift from the 200-ish, when being kind, we had following D20PRO before GenCon 2016.
Okay, so enough about them and on to the game!
Status Update
I won't sugar coat it. It's been slow going. The core reason for this is simple, coding takes time and some of the things we're doing to meet the Kickstarter goals are very difficult to accomplish without blowing up the system. Now with that in mind, we've been making major progress on Rules and Features (both part of the Unlimited Rules component).
There are two core portions to the current Rules API and Feature Library systems. I'll describe them both below.
Feature Library (A Visual Overview)
The Feature Library is the core in-app editor for building custom rules and, well, features.
The main components of the Feature Library are the library itself, and the Node Editor. The library hosts all of the features for a campaign and supports import and export allowing for custom features to be moved between campaigns. Eventually we'll provide a full inter-campaign library we're calling the Catalog (since Library was already used). Items saved to the Catalog will be accessible in their saved state from any Campaign. Additionally, you'll be able to set up an association between the Catalog item and a specific Campaign as the "tracked" item. But I digress... Feature Library!
The basic functionality of the Feature Library is to provide definitions for in-game elements which can affect the play space or creatures; Difficult Terrain, a casting of Cloud Kill, or a Barbarian's Rage ability are just a few examples of items ripe for Feature definitions.
The core mission of the Feature Library is to allow for definition of content which is variable based on the "caster" and/or the "target". I don't really have a better term than "caster" for the initiator of a feature so for the purposes of my own sanity, I'll use Caster to refer to a spell caster and feat/feature user alike.
The Feature Library currently looks like this:
The table is searchable, sortable and editable. Check marks on the left side indicate Features which are active in the game. Uncheck a feature and that feature will not be used by anyone. The green wifi icon allows you to push alterations of a specific feature out to all players and creatures. This is an override and mostly present for debugging purposes, however, it is currently advisable to use the override button when disabling a feature to ensure that no one has one cached.
A GM shares their feature library with their players. Currently the player access to feature editing is extremely minimal to none. We are working on enabling access to a library of features (and other useful items) to players. For now, however, sync is from GM to Player.
Enabled Features auto-link with a class's traits as well as spells and special abilities. Below is an image showing a linked trait and the action button to launch the ability:
The Green icon launches the trait just like a special ability of old -- pops up the decision, and the Red edit icon will open up the node graph to edit the feature.
The Node Graph UI is very, very rough still, but below you can see an example spell configured using a variety of options. Different abilities require different levels of complexity and the node system is self filling -- click on a link and the proper node appears connected to it (going from left to right).
The trap detailed above uses an effect node which has a primary saving throw and a modify target that does 4d6 damage to targets that ENTER the area of effect.
The Map Template produces a 20-foot burst area with a transparent green fill and is NOT visible to players. One of the updates to the template system we added with the Feature Library is the ability to have visible and non-visible templates (from a player perspective). This allows for our trap to sit on the map with it's infinite duration and keep smacking any creature foolish enough to wander in.
In addition to On Enter triggers, we've added a slew of others.
Triggers allow effects to apply based on various conditions. Currently a feature can only have one trigger event per effect, however, this will get updated to support a check box system enabling a single feature to trigger under multiple circumstances.
Additionally, Triggers can be expanded through the Rules API or through javascript embedded in the Node system -- but more on that later.
What do these things do?
- On Target - the effect is resolved on the targets initiative
- On Caster - the effect is resolved on the casters initiative
- On Stay - (requires a template) the effect is resolved if a creature ends its turn in the target area
- On Exit - (requires a template) the effect is resolved when the target exits the area
- On Enter - (requires a template) the effect is resolved when the target enters the area
- On Cancel - (requires duration) the effect is resolved with the effect is canceled or ends for any reason
Another crazy cool node in need of some major UI refinement is the Repeat/Multiply Node.
The core tools in this node are the ability to select classes that the effect repeats or multiplies for -- this can be "all" -- and the ability to set which levels or spell levels the effect is multiplied or repeated. Currently the system is only configured to handle a 3.5 style of per caster level, but through the Rules API this system changes to a per spell slot level used mechanic for 5e. The above image is showing a 3.5 magic missile's repeat node.
We also added in the ability to enable level stacking. This is a highly debated house rule where various levels from various classes can stack for the purpose of throwing around various types of energy. Well, now you can do that too.
And for the really ambitious, the Value Per Level option lets you sent the multiplier value applied for each apply at level tick.
The result is shown below for a repeated effect from a 5e magic missile cast with a 1st level spell slot.
The Decision panel for the spell is augmented to include an Expand option. Each missile is given it's own Decision UI which is accessible through the expand button but is parented to the original decision. Once expanded, targeting and saves can be changed for each missile thrown. The expand UI is available to the Player and the GM allowing for as much oversight/alternation as necessary.
Clicking expand a second time will contract the decisions and allow the Ok button on the main effect to be pressed thereby committing the spell and resolving its effects.
When used in a multiply fashion, the node takes the effects damage and multiplies the effect. A great example is a Pathfinder fireball which does 1d6 per caster level. Using a effect that deals 1d6 and is multiplied by 1 per level between 1 and 10 you have a variable d6 fireball spell which uses the caster's level to determine potential damage.
As you can see, the Feature System also fully automates the template targeting and template removal based on casting duration -- instantaneous spells only present their template during the targeting and decision phase!
There are still quite a few kinks and bugs to work out before the system goes live, but for now, you can see how this is coming along and why we're putting so much of our time into the Feature Library.
Over the next week I'll be working on documentation and examples for the current Feature Library. Once this is done and ready, we'll push a full beta release out to the KS community. If folks want an undocumented version before then, just let me know and we'll get a build ready for you sooner.
Other aspects of the library that were not ready today, but will likely be ready tomorrow or Monday are the Save/Challenge types. In order to handle rays and other features which use non-saving throw mechanics, we have a system to allow for interactions based on a two column table.
This new behavior replaces the Saving Throw node you might have spied above with a Challenge Node that allows for management of the above three types and variants thereof.
There is a lot more to the Feature Library that I could go into, however, this is already a mega post. Keep an eye out for the docs as they become ready and feel free to send questions to us either via KS, comments, or through the forums.
The next section is going to be pretty tech heavy although I personally find it enjoyable, it may not be everyone's cup of tea.
If you're looking for the what happens next wrap up, it's below the Rules API section!
Rules API (A technical overview)
The Rules API is a java class system which can be built by the end user and uses the D20PRO.jar that ships with the application to grant access the creature class model and game models.
The core of this library is built and functional, however, we've been expanding the library substantially over the last couple of months and have built in access to several UI components as well as injection points to interrupt/intercept attacks and decisions.
We are engaged in building out the 5e and Pathfinder Rules modules as samples as well as developing a best practices guide and building additional documentation. As this comes to a close, we should be able to release the API to backers for first pass usage, then we'll move to a public release.
The Rules API will release through GitHub by invitation only with public access being enabled when the we deem the system production ready. I apologize for playing this close the the chest over the last few months, the intention had been to release in September/October. Clearly I was mistaken to think so. The documentation task alone forced me to delay the release.
I will say that if there's anyone from the API category who's interested in helping to finalize this aspect of the app, I wouldn't say no to the help.
Above is a class outline for the current 5th edition rules system. The general breakdown of the API is to provide a programmable interface to change various aspects of how game mechanics are handled.
With that in mind, a brief summary of the class list and purpose is as follows:
-
Ability
The Ability class provides definitions for creature stats and stat handling. This is generally true for names, values, and any modifier calculations which need to be done. -
AC
The AC class similarly provides access to control how a creature resists attacks. In 3.5/Pathfinder terms, this includes Normal AC, Flatfooted AC, Touch AC, CMD and Spell Resistance and Psionic Resistance. This extends the Custom Defenses concept built into D20PRO to enable additional defaults. -
Actions
The actions class is part of the Feature Library system and defines a map of actions which can be used to manage effects. Core action types are Effect, Condition, and Challenge. This is one of the areas being most heavily altered at the moment as we complete work on the Feature Library, we're finding that some of our concepts need alterations to be functional in the wild -- not everything that looks good on paper holds up when let loose in the wild (of internal testing). -
CreatureClass
CreatureClass is a broad category that is focused on supplying Rules utilities to the core application. This is a nice way of saying it's a development sandbox where we incubate helper functions which eventually migrate to the appropriate classes in the Rules file, but... I like the first description better! -
D20PreferencesModel_AddOn
An extension to the preferences model, the D20PreferencesModel_AddOn class provides additional settings to the game system based on Rules. Many of the elements provided here are defaults which can be toggled to enable/disable subsystems in the D20PRO engine. A good example is the 5th Edition Advantage/Disadvantage system. The specific mechanic isn't defined by the preference, just that this rule system uses an action interrupt which can alter the outcome of a die roll. How to handle the interrupt is described in the preference. -
Duration
Controls game durations such as rounds, turns, seconds, minutes, hours, days, weeks, etc. This allows for complete control over all elements of time and duration of effects in the game space. -
FeatureRecharge
This one is a bit of an outlier at the moment as it doesn't have a proper home yet. Many modern game systems use a recharge mechanic to abstract bad-guys abilities. Rather than loading down your bad guy with a ton of abilities, they might only have one or two really potent powers which they can reuse under some recharge condition such as a die roll or a period of rest. This class defines those conditions for the current game system. -
Features
Parent class for the whole Feature Library system. Features attack to specific key types based on a character sheet's layout and organization. As such, this class allows you to alter the connectivity between a Feature and a customized sheet design. At it's base level, this case provides the broad categories and associated classes which define them. For example, we've currently implemented Traits, Special Abilities and Spells in the Feature Library. As you can see below, we've got some plans for what can be done via the Feature Library. Also, you might note a correlation between the standard tabs of a character sheet and the feature options!
-
GameSystem
At this point, this enum is mostly just historical. It establishes a list of "compatible" Rules plugins. Since 5e, Pathfinder, 3.5 and 4e are so similar in their creature model, it is very easy to switch between the game system without breaking everything excessively. Values in the Game System enum are used to populate the valid Rule sets you can switch between from the Options->Rules panel. You'd still have to have the correct rules installed for them to show up in the drop down however.
Point of note, Rules plugins are specific to your Judge folder, not your Campaign. This means that if you had Savage Worlds, Fate, and DC Heros installed along side Pathfinder you may find that you can swap between these rules adhoc. -
Grapple
Yup, grapple was a thing you could do in 3.5 and Pathfinder that was hardcoded into D20PRO. So... rather than rip it out from the ba-gillion places it's used, we created a Rules based override. Do you need a special attack type that anyone can use? Override grapple and you've got it, otherwise just return null and call it a day. -
HP
Does your game system track health using some system of numbers, tokens or other "countable" element? Then you've likely got a HP system! This class does just what you'd think. It allows for override on Hit Points, calculations, bonuses, penalties, and any other sort of HP related topic you can think of (like temporary hitpoints and non-lethal damage!) -
ModifyTarget
Another Feature Library class, this one provides Effects with a list of ModifyTargets. These are things like HP, AC, Stats, Speed, Skils, and the like. If you can damage it or heal it or boost it, it goes in this class. -
ModifyType
So we can modify the target thing, but how do we handle stacking. In most game systems there is a concept of type for effects which grant bonuses. The Modify Type system provides access to this to allow you to control what types can be applied to an effect. Additionally, this class will (but doesn't yet, still to be migrated to Rules) stacking. We've done a lot of work to improve the stacking system in D20PRO enhancing the logic and providing clearer overrides and interrupts, however, it's all going to get migrated from the core classes into the Rules as the variants to are vast. -
Money
Your characters collect it, spend it, and adore it. This is the class were you define their fiscal existence. -
MovementType
A stub class at the moment. MovementType is related to the token movement rules that are slated for post-Feature Library development. In addition to handling rules regarding where you can move, the MovementType class handles how you can move -- fly, swim, walk, crawl, burrow, etc. Again, the full implementation if not yet ready for this one. -
Save
Save is a base "resist thing" class. For D&D and D&D like games, it's a direct saving throw definition and handler class. For other games, Save will handle challenges like Discipline vs. Willpower and such. -
Size
Size is a container class for size and space constraints for the current Rule set. Additionally, Size defines human readable names for sizes like Tiny, Large, Huge, etc. -
Skill
Again, most game systems have some concept of skills. This class defines how we handle them, what they are and if they can do funky fresh things. Skill examples include Skill ranks, bonuses and such for 3.5 content, Proficiency for 5e and Disciplines for Vampire. -
Spell
Dust off the magical ... dust. The Spell class is used to define traits of the current games system. Paired with a SpellCaster_<type> handler, this class allows for retooling of the spell memorization, spell prep and spell usage interfaces. It is designed for use with complex pool systems such as spells per level -
Type
Largely a backup for classes data, the Type category populates the Races/Types element in the Traits panel. Under developed, this will provide a base for a Rule set to provide defaults. It also defines default values for classes and races imported from the Manually Specified folder's classes file.
Basically, Type is a default values for races and types with overrides living in classes. -
UI
This class is definitely still growing. It provides UI overrides for the top menu, creature right click menu's and the main menu. Eventually full overrides will exist for panel layouts and all other aspects of the visual space. -
Usage
Handles usage rates for abilities and traits -- At Will; Per Day; Per Init; Charge; Recharge; etc. This class defines the constants and human readable language associated with these constants.
Usage will likely consume the Recharge class above and be used to handle all usage states in addition to the constants. -
FiveRules()
The root method for the given Rule set. For most Rule sets, this method simply attaches the Rules to the AbstractRules class so they can be loaded and reflected into the application. However, this can be expanded to include any other custom loaders or system calls necessary. Did you build a custom external application you want to attach to the game? This class could be used to call it when the rules are instantiated. Think Unity3D app connectors... oooooh my.
Yeah, that's a lot of data and yeah, that was a lot of work! There is still lots to be done here but you can get a fairly good picture of what is possible within the system from the above outline.
What happens next aka where are my features!
We're working on them! I have to apologize for the time it's taking to get everything done. We're putting in all the hours that we can and then some. That being said, I've recently brought on a networking engineer to take some of the load off of my shoulders regarding connectivity and game lobby support.
While not specifically a kickstarter goal and perhaps not useful to those of you looking for local only games, this is a major hurdle in the market for the application and has caused us to lose a fair amount of potential traffic. Running the numbers and polling trial users has indicated this as the number one sore spot for the current application.
The big advantage, from the perspective of the kickstarter, is that I'm not going to be building that part of the project! My expertise is in rules, UI, and graphics. While I've done networking at the super-computing level, I've never built it in Java which increases the time to build something resilient and bug free.
This means that the core team and I can focus on knocking out the API and Feature Library so we can move on to Grids and Token updates.
We prioritized Rules and features over the map updates and campaign updates because, again, market research (and common sense) indicated that we needed to support the current popular game systems. D20PRO was limping along in this regard so these features took a front seat over grids and such.
These features are still on our road map. They will still happen. It will just take time due to coding and human resources.
On a side note, even our CPA is excited about where we're headed from here! And no, he's not a gamer :P
Happy Holidays!
On behalf of the whole Mesa Mundi team, I want to wish you all happy and safe holidays. If you're gaming, game responsibly and GM's, keep the TPK's to a minimum!
I have been attempting to maintain a fairly accurate running "release-notes" page here. This is not to say that the releases detailed are public, but this should give a sense of progress as we're making it. That being said, I don't always have a session open that lets me update immediately. If you see lag in updates, it's not due to beig idle, it's likely due to not spending time in VI.
The feature library docs are located off of that link as well. Again, these are WIP so please bare with me.
May you roll many 20's over the holidays!
Owlbear and team