THIS IS A WORK IN PROGRESS, IF YOU WANT THE ORIGINAL GUIDE, SCROLL TO THE COMMENT BELOW
Intro
This guide is for porting NWN2 creatures to NWN EE. The original guide was written by Discord Zetamog and was placed as a comment to a blank page. The original comment has been brought up and edited here.
Scope
This guide will cover porting NWN2 creatures to NWN EE with the scope of (a) using NWN2 animations and (b) upscaling the original textures to NWN EE's PBR texture maps.
Currently this guide is just for monstrous creatures who use unarmed attacks only.
Overview
One thing to note before starting out is that NWN2 models might have more complicated animations but appear to have fewer than NWN EE ones, at least for creatures. Overall however all of the key NWN1 animations can be fulfilled, with some adaptation. In general, NWN2 animations tend to be longer than NWNEE and in some cases the animation will be speed up for NWN EE. However the end results are generally reasonable.
NWN2 models are accompanied with GR2 (Granny) animations. When starting you will need to have the base NWN2 game and be able to search through the files and grab them.
You should do some background reading first, including:
NWN2 tools: https://forum.neverwintervault.org/t/mdb-gr2-to-fbx-fbx-to-mdb-gr2-tools/348
Neverblender: https://nwn.wiki/display/NWN1/NeverBlender
NWN EE Animations: https://nwn.wiki/display/NWN1/Animations
Getting the right tools
In addition to owning the games, you will also need the below tools. Install them if you don't have them already.
Note on the NWN2 Blender addon: if you do not have NWN2 installed in the standard install path, the plugin has to be updated. If you have issues later importing an MDB file, make sure you update the config.yml file at C:\Users\[profile]\AppData\Roaming\Blender Foundation\Blender\[version]\scripts\addons\nwn2mdk.
Digging through NWN2 files
All of the files you need are in your NWN2\Data folder. Unzip all of the files so you can grab their contents easily using 7Zip or WinRAR or a tool of your choice.
It is probably also best to go into the NWN2 toolset and look at the creature you wish to convert. Look in the creature properties and get the model filename, which will help you find the files, such as "c_umberhulk".
If you search through the unzipped the files with a tool, like windows search, you'll start to see results. As you research the files you'll likely find the keyword that all the creature files share. Below is an example search:
![]()
At a minimum, copy all of the file types out to a working directory: MDB, TGA, DDS and GR2. You will also want WAV and SSF files if you need to make a soundset.
Import models and animations to Blender; setup
Head to blender and import all the GR2s, and the MDB in one go. That makes sure your MDB ends up with a usable skeleton. The skeleton is the thing that animates the MDB skin. When you select all the GR2s and the MDB for import, one of the files you’re getting has "skel.GR2" at the end of its name. That’s the skeleton the animations should end up copied onto when you import them. Only one can be imported at once though for some reason, so when you did the batch import, you'll have only one on it at the time.
Clean up the model.
As a general note, to import a particular animation, go back to the import menu and select both the "skel.gr2" file and that particular GR2 animation file then hit import. A new skeleton model, separate from the creature mesh/skin model, should show up in blender with that animation on it. When trying to bring in more animations, do not forget to import the "skel.gr2" model with an individual animation file. You may have animations that look similar in name, so you might want to use this time to take inventory and also clean out duplicate animations.
First though, you should probably list out a map of the animations you’re going to work with. It's best to do this in something like Excel or Google Sheets. At a minimum, you will want the below NWNEE animations and they need to be mapped. Read up on Animations very carefully for these.
| ca1slashl |
| ca1slashr |
| ca1stab |
| cappear |
| ccastout |
| ccastoutlp |
| ccloseh |
| cclosel |
| cconjure1 |
| ccwalkb |
| ccwalkf |
| ccwalkl |
| ccwalkr |
| cdamagel |
| cdamager |
| cdamages |
| cdead |
| cdisappear |
| cdodgelr |
| cdodges |
| cgustandb |
| ckdbck |
| ckdbckdie |
| ckdbckps |
| cparryl |
| cparryr |
| cpause1 |
| creach |
| creadyl |
| creadyr |
| crun |
| ctaunt |
| cwalk |
Finally, review all of your GR2 files that you will want to import. You should prepare to make a sheet with each animation, and, as you import them, record the location you placed them in the time line. Below is an example of one way of recording the wyvern animations might look.
| Begin | End | |
| c_wyvern_idlefidget | 1 | 191 |
| c_wyvern_run | 200 | 220 |
| c_wyvern_runL | 230 | 250 |
| c_wyvern_runR | 260 | 280 |
| c_wyvern_UNA_1attack01 | 290 | 335 |
| c_wyvern_UNA_1attack02 | 340 | 385 |
| c_wyvern_UNA_damage01 | 390 | 400 |
| c_wyvern_UNA_death01 | 410 | 486 |
| c_wyvern_UNA_death02 | 490 | 560 |
| c_wyvern_UNA_dodge | 570 | 620 |
| c_wyvern_UNA_idleM | 630 | 870 |
| c_wyvern_UNA_knockdownB | 880 | 920 |
| c_wyvern_UNA_proneB | 930 | 970 |
| c_wyvern_UNA_standupB | 980 | 1030 |
| c_wyvern_UNA_taunt | 1040 | 1100 |
| c_wyvern_UNA_walk | 1110 | 1160 |
Tediously import your animations
Make an entry in your table (like above) for the first animation that was imported. Note the Begin and End times.
Start importing the rest of the animations, one by one:
SPECIAL NOTE: NWN expects the on-hit damage animation to be 10 seconds, and the NWN2 animations for that are generally 30 seconds or a bit more. Unless you scale the NWN2 animation down to 10 frames, it will clip over your death/knockback animations. So, when you import the on-hit damage animation, scale it to 10 seconds first by pressing "S" for scale and a modifier. Usually it will be ".33" making you have 10 frames. The NWN2 animations for on-hit damage are generally "_damage01" and "_damage02", etc. Everything else will be fine in terms of the NWN game engine will auto-compensate for animation length.
SPECIAL NOTE: Don't forget to place your timeline cursor out or you will overwrite existing!
SPECIAL NOTE: Take notes like the table above or you will regret it later.
Create your pseudo-bones
Once you are satisfied with your animations you will use Neverblender to create pseudo-bones. That’s because NWN EE doesn’t recognize actual skeletons, unless there’s a pseudo-skeleton there to do the exact same thing.
Select the "skel" object and go to the Object Data Properties tab. Find the "Generate Pseudo Bones" button. Uncheck "Add Aurora Base" and "Add Rootdummy". Press the "Generate Pseudo Bones" button. A new object should be created with your pseudo-bones with the name of "skel.001".
Fix object hierarchies
Basically, here you need to create your root and move out the armature in favor of keeping the pseudo bones. You can do it several ways, but this one works fine:
Change model type to Skinmesh
Highlight your mesh(s) in the model and change them to type "Skinmesh"
Add your nodes
Add the below nodes and parent them to the relevant special node (TO DO ENTER THOSE).
Place them where appropriate relative to the mesh.
Update the texture reference
Go to your mesh object and name the material file name / texture. We'll make the texture later.
Tediously map your animations and add events
Again you should refer back to your notes that you've been taking and map out how you want the NWN2 animations to line up with the NWN1 animations. Generally you'll have something for everything, but you'll have some choices to make. Review your animations that you've imported and decide what is best for each NWN animation type. When you map the NWN2 animation and later create the NWN animation with start and stop times, refer back to the table you made above listing which frames are for when. Below is an example mapping of a wyvern, as well as the events you should add to for each NWN animation. You may want to add more events, such as more footsteps, but the below should be considered the minimum. Refer back to your timeline to figure out which frame timings will work best for each event. Ultimately, its probably most efficient to make a vlookup to your begin end times.
| NWN Animation | Event1 | Event2 | NWN2 Animation | Vlookup Begin | Vlookup End |
| ca1slashl | hit | c_wyvern_UNA_1attack02 | 340 | 385 | |
| ca1slashr | hit | c_wyvern_UNA_1attack02 | 340 | 385 | |
| ca1stab | hit | c_wyvern_UNA_1attack01 | 290 | 335 | |
| cappear | c_wyvern_UNA_idleM | 630 | 870 | ||
| ccastout | cast | c_wyvern_UNA_idleM | 630 | 870 | |
| ccastoutlp | c_wyvern_UNA_idleM | 630 | 870 | ||
| ccloseh | hit | c_wyvern_UNA_1attack02 | 340 | 385 | |
| cclosel | hit | c_wyvern_UNA_1attack02 | 340 | 385 | |
| cconjure1 | c_wyvern_UNA_idleM | 630 | 870 | ||
| ccwalkb | snd_footstep | snd_footstep | c_wyvern_UNA_walk | 1110 | 1160 |
| ccwalkf | snd_footstep | snd_footstep | c_wyvern_UNA_walk | 1110 | 1160 |
| ccwalkl | snd_footstep | snd_footstep | c_wyvern_runL | 230 | 250 |
| ccwalkr | snd_footstep | snd_footstep | c_wyvern_runR | 260 | 280 |
| cdamagel | c_wyvern_UNA_damage01 | 390 | 400 | ||
| cdamager | c_wyvern_UNA_damage01 | 390 | 400 | ||
| cdamages | c_wyvern_UNA_damage01 | 390 | 400 | ||
| cdead * see tips | c_wyvern_UNA_proneB | 930 | 970 | ||
| cdisappear | c_wyvern_UNA_idleM | 630 | 870 | ||
| cdodgelr | snd_footstep | c_wyvern_UNA_dodge | 570 | 620 | |
| cdodges | snd_footstep | c_wyvern_UNA_dodge | 570 | 620 | |
| cgustandb | c_wyvern_UNA_standupB | 980 | 1030 | ||
| ckdbck | snd_hitground | c_wyvern_UNA_knockdownB | 880 | 920 | |
| ckdbckdie* see tips | c_wyvern_UNA_proneB | 930 | 970 | ||
| ckdbckps | c_wyvern_UNA_proneB | 930 | 970 | ||
| cparryl | c_wyvern_UNA_dodge | 570 | 620 | ||
| cparryr | c_wyvern_UNA_dodge | 570 | 620 | ||
| cpause1 | c_wyvern_UNA_idleM | 630 | 870 | ||
| creach | hit | c_wyvern_UNA_1attack01 | 290 | 335 | |
| creadyl | c_wyvern_UNA_idleM | 630 | 870 | ||
| creadyr | c_wyvern_UNA_idleM | 630 | 870 | ||
| crun | snd_footstep | snd_footstep | c_wyvern_run | 200 | 220 |
| ctaunt | c_wyvern_UNA_taunt | 1040 | 1100 | ||
| cwalk | snd_footstep | snd_footstep | c_wyvern_UNA_walk | 1110 | 1160 |
TIPS:
TOOLSET TIP:
MORE ANIMATIONS THAN YOU USE TIP:
| xdeath1act | c_wyvern_death01 | start and stop times for the death animation |
| xdeath1lp | c_wyvern_death01 | start and stop times to be the last frame of the death animation |
| xdeath2act | c_wyvern_death02 | start and stop times for the death animation |
| xdeath2lp | c_wyvern_death02 | start and stop times to be the last frame of the death animation |
In version .35 of NWNEE and higher, you can call these and have custom death animations using the following script commands per animation. They can go in the creature's death script.
ReplaceObjectAnimation(OBJECT_SELF, "ckdbck", "xdeath1act");
ReplaceObjectAnimation(OBJECT_SELF, "ckdbckdie", "xdeath1lp");
As a general rule, it makes sense to keep all the NWN2 animations since you can ultimately call them through script. Better to have them just in case.
DONE FOR NOW - YOUR MODEL SHOULD BE READY FOR EXPORT. MORE LATER ON TEXTURES, BUT THAT'S ALL THATS REALLY LEFT....
------
section on armed vs unarmed animations