Coding Dual Class Code issues. #pathfinder

Andrew Maitland

They'll also ask about the error in the logs.

I don't recall this hitting the discord, but I can answer basic questions if they've been missed.

Let's start with some basics: "Dual Class" is an outdated term from 2nd edition D&D, it was exclusive to Humans and indicated they had progressed in a single class and then opted to retire from that class and started into another class (They didn't progress at the same time, and even worse, you lost access to the abilities you had until you caught up!). Demihumans were allowed to 'multiclass' and therefore took two or three classes (But they had severe level limits, except dwarves and the thief levels). I think what you're mashing together is a weird "gestalt" but being overly additive (rogue grants 8 skill points, sorcerer 2 skill points, but your class is adding those together for 10, which isn't how gestalt works either, but hey your homebrew and you can make it do whatever you'd like)...

Okay, to address the very obvious issues:

TYPE:Dual Class  <-- That's a no. Stick with existing nomenclature unless you explicitly understand why things exist.

Valid Class Type choices for Pathfinder are: PC, NPC, MONSTER, and COMPANION are the valid choices. Adding is fine, but removing is not. You'll mess up inner calculations that PCGen does by omitting such things.

Case in point here's the code you're omitting:


See, don't alter things until you understand their reason for existing, it causes ALL sorts of debugging headaches, trust me!

DEFINE:RogueLVL|0 is all great and dandy, but where is the DEFINE:SorcererLVL|0 also the same for incrementing the value as they level up with a BONUS:VAR|SorcererLVL|CL  ?

Though, I'm keen to use the newer classlevel() instead of CL, but that's a matter of preference I suppose.

BONUS:CASTERLEVEL|Sorcerer|Caster_Level_BL_Stripped_Sorcerer <-- equals NULL, and is silliness... I was trying to be clever, but the code was mangled and faulty. However, two big issues, you have an undefined var (hence the NULL comment, so the casterlevel will always show 1 on the output sheet if it shows anything numerical), and two, unless you'll take sorcerer as a separate class, this tag is completely and utterly pointless)

The correct usage would be 'BONUS:CASTERLEVEL|Rogue/Sorcerer|CL' since the class name is Rogue/Sorcerer, and not Sorcerer. Next, assuming you actually want to see spells, you'll need 'SPELLLIST:1|Sorcerer' remember, you're not a 'sorcerer', you've made a brand new class called Rogue/Sorcerer. Since that's the case, none of the spells have CLASSES:Rogue/Sorcerer=x in them, so the fastest method is to use that tag.  Remember, you don't have "sorcerer" or "rogue" classes, you're faking it by granting the same things they would get (marginally), but Archetypes won't work (They are keyed to specific classes and you're not exactly set up to pull anything in), and everything keyed off of rogues and sorcerers are likely to fail. (For example, a magic item looking for a sorcerer would not treat your rogue/sorcerer as a sorcerer, bear this in mind). Just to help drive this point home. I can call this class 'Murder Hobo' and have the exact same results. The class name itself grants nothing, it's just a name or unique identifier of what the class does or is for.  In fact, you could display Rogue/Sorcerer and then KEY the class to Murder Hobo! I have the clear distinction the name is fooling you into a false sense of granting, which is never the case. Hence, the DEFINEs from both classes need to be added and bonused similarly, and then you'll have to explicitly add anything you desire to the class. Whether that's spells, abilities, feats, etc. Lucky for you, most of the abilities are self-contained and those reliant on class levels were given the 'ClassNamelvl' variables.

Anyways, clean up the basics, rerun the class and see where that lands you. An error log points us in a direction to address the errors. (and yes, the volunteers all hang out on discord, it's far easier to monitor from our smart devices ;) )


On 3/14/2022 2:06 PM, John Conner via wrote:
Sorry thought I put that in the original message.  I'm currently running PCGen v6.08.00 RC8 and I'm working with Pathfinder 1e.

John Conner

Sorry thought I put that in the original message.  I'm currently running PCGen v6.08.00 RC8 and I'm working with Pathfinder 1e.

Joel Fischoff

Also, PCGen has a Discord channel that might be frequented
more often than this board.
And, to be useful, here is a server invite link for said server:


First: I can't answer your questions, but the person who can is going to ask some basic questions before they can help you.

Q1: What version of PCGen are you running?
Q2: What game mode are you using? (Pathfinder 1E, Starfinder, D&D, etc.)

Also, PCGen has a Discord channel that might be frequented more often than this board.

Hope this helps.

John Conner

Hi all,

I'm hoping someone on the list can give me some idea were I'm going wrong on coding a dual class character.  Below is the character lst as it's currently coded.  When I attempt to create a character with this it will fail to properly load the character.  Any ideas on what I screwed up?

###Dual Class

###Dual Class (Rogue/Sorcerer)

# Class Name   Hit Dice            Type     Max Level         Source Page     Define  Combat bonus            Save bonus

CLASS:Rogue/Sorcerer  HD:8    TYPE:Dual Class           MAXLEVEL:20   SOURCEPAGE:p.67            DEFINE:RogueLVL|0            BONUS:COMBAT|BASEAB|classlevel("APPLIEDAS=NONEPIC")*3/4|TYPE=Base.REPLACE|PREVAREQ:UseAlternateBABProgression,0            BONUS:SAVE|BASE.Reflex|classlevel("APPLIEDAS=NONEPIC")/2+2|PREVAREQ:UseAlternateSaveProgression,0            BONUS:SAVE|BASE.Fortitude,BASE.Will|classlevel("APPLIEDAS=NONEPIC")/3|PREVAREQ:UseAlternateSaveProgression,0            BONUS:VAR|ClassBABModerate|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalBAB,1            BONUS:VAR|RogueLVL|CL            BONUS:VAR|ClassSavePoor_Fortitude|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1            BONUS:VAR|ClassSaveGood_Reflex|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1            BONUS:VAR|ClassSavePoor_Will|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1            ROLE:Skill        FACT:ClassType|PC       FACT:Abb|Rg/S

# Class Name   Skill Pts/Lvl


# Class Name   Spell Stat          Memorize          Caster level

CLASS:Rogue/Sorcerer  SPELLSTAT:CHA           MEMORIZE:NO            BONUS:CASTERLEVEL|Sorcerer|Caster_Level_BL_Stripped_Sorcerer


1          ABILITY:Class|AUTOMATIC|Rogue|Sorcerer

1          ABILITY:Special Ability|AUTOMATIC|Weapon and Armor Proficiency ~ Rogue

1          ABILITY:Sorcerer Class Feature|AUTOMATIC|Sorcerer ~ Sorcerer Bloodline|PREVAREQ:Sorcerer_CF_Bloodline,0

1          ABILITY:Sorcerer Class Feature|AUTOMATIC|Sorcerer ~ Cantrips

1          ABILITY:Sorcerer Class Feature|AUTOMATIC|Sorcerer ~ Eschew Materials|PREVAREQ:Sorcerer_CF_EschewMaterials,0

###Block: Level progression

1          CAST:0,3          KNOWN:4,2

2          CAST:0,4          KNOWN:5,2

3          CAST:0,5          KNOWN:5,3

4          CAST:0,6,3       KNOWN:6,3,1

5          CAST:0,6,4       KNOWN:6,4,2

6          CAST:0,6,5,3     KNOWN:7,4,2,1

7          CAST:0,6,6,4     KNOWN:7,5,3,2

8          CAST:0,6,6,5,3  KNOWN:8,5,3,2,1

9          CAST:0,6,6,6,4  KNOWN:8,5,4,3,2

10        CAST:0,6,6,6,5,3           KNOWN:9,5,4,3,2,1

11        CAST:0,6,6,6,6,4           KNOWN:9,5,5,4,3,2

12        CAST:0,6,6,6,6,5,3        KNOWN:9,5,5,4,3,2,1

13        CAST:0,6,6,6,6,6,4        KNOWN:9,5,5,4,4,3,2

14        CAST:0,6,6,6,6,6,5,3     KNOWN:9,5,5,4,4,3,2,1

15        CAST:0,6,6,6,6,6,6,4     KNOWN:9,5,5,4,4,4,3,2

16        CAST:0,6,6,6,6,6,6,5,3   KNOWN:9,5,5,4,4,4,3,2,1

17        CAST:0,6,6,6,6,6,6,6,4   KNOWN:9,5,5,4,4,4,3,3,2

18        CAST:0,6,6,6,6,6,6,6,5,3            KNOWN:9,5,5,4,4,4,3,3,2,1

19        CAST:0,6,6,6,6,6,6,6,6,4            KNOWN:9,5,5,4,4,4,3,3,3,2

20        CAST:0,6,6,6,6,6,6,6,6,6            KNOWN:9,5,5,4,4,4,3,3,3,3