What we are working on

Exciting things happening at the PCGen Project. For those that aren’t aware, we are actively working this development cycle to replace JEP (Java Expression Parser) with a fully functional and feature rich formula system.

What is this about?

Since PCGen’s inception, JEP has been the powerhorse doing all the calculations for the BONUS:x|y tags, and associated items. However, it’s obsolete, with it’s inability to come to a correct answer every time (race conditions, and recycling) and the fact PCGen is using a grandfathered exception to using the library which is not being updated for us.

Now we have a better solution, with no cycling, and always having the same answer. The solution replaces all of the BONUS tags and their associated tags with two new powerful tags ‘MODIFY’ and ‘MODIFYOTHER’.

The system won’t just be Variables as ‘Numbers’, but we’ve added some sweet new features, such as String, Boolean, OrderedPair, and Dice. (Yes, dice will allow those dice combos you’ve always wanted! Longsword 1d8 + 1d6 (fire))

We also get object local values – these will be for Skill, Equipment, Class, Race, etc. In addition, since Equipment can have different bonuses on different parts (Two-Headed Weapons), we have a new sublocal for equipment called PART to handle that.

What does this mean? It means Intelligent Items are possible, it means getting values we couldn’t handle before are now a reality. Equipment HP, Hardness, or even Modern things like Spaceships and all their values.

Of course, we’re replacing the old tags for displaying information, such as DESC, BENEFIT, QUALITY, ASPECT, and SPROP, with one tag ‘INFO’ and a support tag ‘INFOVARS’. This will leverage the new formula system with a unified display system (Java’s innate display model). It also stays with our clean break model. JEP and this Formula system will never touch each other.

For items that we want to list out, we also have a new system called Dynamic – things like Movement, Vision, and even Languages will be able to take advantage of this system. Movement modes are typically Ground, Fly, Swim, Burrow, Climb, perhaps Glide. You also can have a Run speed. (There are plans to make Dynamic replace a lot more, but that’s well after we’ve gotten everything moved to the new system)

We are also working on 2d Tables – Things like Carrying Capacity, Class Advancement for spell casting, etc.

Obviously, the new system is a fairly epic endeavor, replacing clunky workarounds is going to take some serious time as we not only convert to the new system, but re-align the thoughts behind how we code up items. (And this has to be done for every data set in every game system we offer)

And before I fail to mention, this is very much a work in progress as we continue to implement, debug and rework the code and data that will use it. (The code team is doing serious refactoring and making the underlying code more streamlined and stable).

How soon before you see these changes? It’s happening now. The creature ‘FACE’ will be one of the first to use the new system as of the next release ‘6.07.07’ with easy to implement conversions taking place over the next few months. FACE is gone, and any new creature will simply display the correct face value based upon its current size, with an exception for ‘Swarms’.

The beauty of the new system is we are able to select small chunks of old code to be disabled per game system. These changes are happening in Pathfinder and Starfinder first. If you have a favorite system and want to assist with the conversion to a new system, feel free to reach out and we’ll get you set up.

As much as I’ve talked about here, this is only the tip of the iceberg.

Does this impact you? Only if you use any homebrew stuff. Because this is such a massive endeavor, we will NOT be able to provide automated support to convert the old system to the new system. Our team of volunteers will be available to assist you if you’ve made such personal sets. However, it’s not a 1-for-1 exchange. As I mentioned, many data standards are a result of working within the limitations of the code. Now that those restrictions are being released, we need to focus on making the code we use make sense in the context of the books we are emulating. This means we won’t have three layers of indirection to achieve a desired effect. Anyone familiar with Choose? We’re redesigning it to allow for more than one Choice on abilities that require more than one such choice – As an example: Breath Weapons have two choices – “Cone” or “Line”, and then energy type “Fire, Electricity, Cold, Acid, etc.” Whereas before, we just tossed all those different choices in a pool, and kludged the answer back in with a lot of hacks. Look at Sorcerer Draconic Bloodline and how we display the Dragon Type if you want to see how this manifests.

The other side of the coin, once the data team begins the conversions, we will not be pumping out any new books for the active game systems. The focus will be to update everything over to the new system. (I didn’t even touch upon the Output sheet changes).

-Andrew Maitland

  • Warden Stoker

    I cant wait