Fantasygrounds has been my primary VTT of choice for many years now. For most of that time I have been running games using official WoTC D&D 5e campaigns. Recently, I have been working on a conversion of the classic D&D modules T1 - 4 The Temple of Elemental Evil which I purchased a number of years ago from DMsGuild.
How I manage the conversion
In FantasyGrounds I create a new campaign to hold all the information from the original module and any additions I deem necessary and then export the campaign contents as a module to reference in the active campaign. I will not go into the details of this here, though if people are interested, they can let me know in the comments.
There are some videos that cover this and many more topics here.
The NPC character sheet in FantasyGrounds
The basic info on the NPC character sheet on FantasyGrounds
Unity can be found here 5E
NPCs and Encounters - Fantasy Grounds Customer Portal - Fantasy Grounds and
pretty good introduction to text import of NPCs can be found here Using the NPC Importer
Some further information here Generating
NPCs and Content for RPGs with AI
Toolshttps://static.wixstatic.com/media/33b97f_7b4f32f552d54bc5b0ba0fd9459dcf15~mv2.png
There are 3 formats currently supported: "024 Core Rules " the expected default, the ""024 D&DBeyond" format and the ""022 Monsters of the Multiverse" format. I am not sure how the D&DBeyond format differs from the "Core Rules" version.
![]() |
The NPC stat block Import tool |
The issue in that often any given third party statblock may not follow that format exactly.
One of the sources I was using for NPC statblocks is a conversion guide available from DMsGuild called "The Temple of Elemental Evil conversion guide with maps by Andrew James Woodyard and Eric Noa"
From the picture above one can see an example of an NPC statblock for import. Things to note for 2024 Core Rules the Armor Class is expected to be AC and Hit Points as HP followed by the number and so on. The issue I was having was that initially I had "Armor Class" and "Hit Points" and the initial sections were not parsing.
The two panes in the tool are on the left the base statblock and on the right any world building or DM notes in the NPC.
Once I changed it worked until the parser got to the ability scores and then it failed, initially completely and then after some searching it would convert Str but nothing until traits.
![]() |
A failed attempt to import. |
In this iteration I was getting as far as Dex before the parser failed. As one can see the Stats for Con, Wis and Cha are all 0
What I discovered that if one viewed the notes tab of the FantasyGrounds NPC Statblock it appends the Statblock to the Notes.
See the image below.
![]() |
NPC Character Sheet |
Switching to the Notes table reveals that the Dex save shown on the right is the default derived from the Dexterity ability (12) of +1 and not the actual save in the original ability section from the text source.
This can be seen in the image of the notes section on the right, captioned "Elmo Notes".
![]() |
Elmo Notes |
Incorrect formatting in this section can result in a complete failure to import most of the statblock. An NPC record will be created but most of the information past the point of failure may not be imported.
What I have noticed is, it is very easy to get the ability score formatting wrong, and nothing gets imported or it skips the ability scores and the skills, senses and other parts of the NPC information between the ability scores and the traits section.
It is a matter of trial and error to correct this. Just delete the failed imported NPC records in Fantasygrounds.
It is probably a good idea to set the NPC Group to "Uncategorized" when initially importing and then move the final version to the category it should properly occupy at the end. By initially importing into a category that is unpopulated or has a low population makes it easy to find the record that was imported.
Keyword ordering is also important, for instance, my imports were not bringing in the XP value of the nps. Again, looking at the Notes tab version of the statblock makes this more obvious. Since I can see an XP entry but one with no value and then realized that the 2024 version places the numerical value at XP not before.