You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

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. 

  • Delete all of the objects of spheres named 'COLS'. Just right click these on the right hand list and click delete hierarchy.
  • Inspect the creature mesh(s) and delete any LODs.

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.



BeginEnd
c_wyvern_idlefidget1191
c_wyvern_run200220
c_wyvern_runL230250
c_wyvern_runR260280
c_wyvern_UNA_1attack01290335
c_wyvern_UNA_1attack02340385
c_wyvern_UNA_damage01390400
c_wyvern_UNA_death01410486
c_wyvern_UNA_death02490560
c_wyvern_UNA_dodge570620
c_wyvern_UNA_idleM630870
c_wyvern_UNA_knockdownB880920
c_wyvern_UNA_proneB930970
c_wyvern_UNA_standupB9801030
c_wyvern_UNA_taunt10401100
c_wyvern_UNA_walk11101160

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:

  • Import your next animation by selecting the animation's GR2 file and the "skel.GR2" file.  It will create a "skel.001" object.
  • Go to the "skel.001" object and look in your animation dope sheet.  Find the frames and right mouse button copy them.
  • Go to the master "skel" object and place your timeline cursor at an appropriate interval after the existing last animation.  I usually increment it to the next sequence in 10, so if the prior ends at 191, start at 200.
  • Right click on the dope sheet timeline cursor, with the cursor located at the end of your existing timeline, and click paste.  The animation should copy over.  
  • Review and double check your animation is good.  Note the ending location and put it in your table.
  • Delete the "skel.001" object.
  • Rinse and repeat the above until you have all the animations.

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:

  • Take the new "skel.001" psuedo-bones object and parent it to the main "skel" armature object you've been working with.
  • Now create a new root of the name of the creature model with Shift-A=>Empty=>Plain Axes , eg "c_umberhulk".  Parent your "skel" armature object to that.
  • Now take your "skel" armature object and unparent it from the root since we don't want it in the NWN mdl file.  Rename it to something new like "skel_arm".
  • Rename the "skel.001" pseudo-bones that is still in the root hierarchy by removing the ".001".  

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 root.

  • handconjure
  • headconjure
  • impact

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.

NWN AnimationEvent1Event2NWN2 Animation
ca1slashlhit  
c_wyvern_UNA_1attack02
ca1slashrhit  
c_wyvern_UNA_1attack02
ca1stabhit  
c_wyvern_UNA_1attack01
cappear 

c_wyvern_UNA_idleM
ccastoutcast 
c_wyvern_UNA_idleM
ccastoutlp

c_wyvern_UNA_idleM
cclosehhit  
c_wyvern_UNA_1attack02
ccloselhit  
c_wyvern_UNA_1attack02
cconjure1

c_wyvern_UNA_idleM
ccwalkbsnd_footstep snd_footstep c_wyvern_UNA_walk
ccwalkfsnd_footstep snd_footstep c_wyvern_UNA_walk
ccwalklsnd_footstep snd_footstep c_wyvern_runL
ccwalkrsnd_footstep snd_footstep c_wyvern_runR
cdamagel

c_wyvern_UNA_damage01
cdamager

c_wyvern_UNA_damage01
cdamages

c_wyvern_UNA_damage01
cdead 

c_wyvern_UNA_proneB
cdisappear 

c_wyvern_UNA_idleM
cdodgelrsnd_footstep 
c_wyvern_UNA_dodge
cdodgessnd_footstep 
c_wyvern_UNA_dodge
cgustandb

c_wyvern_UNA_standupB
ckdbcksnd_hitground  
c_wyvern_UNA_knockdownB
ckdbckdie

c_wyvern_UNA_proneB
ckdbckps

c_wyvern_UNA_proneB
cparryl

c_wyvern_UNA_dodge
cparryr

c_wyvern_UNA_dodge
cpause1

c_wyvern_idlefidget
creachhit  
c_wyvern_UNA_1attack01
creadyl

c_wyvern_UNA_idleM
creadyr

c_wyvern_UNA_idleM
crunsnd_footstep snd_footstep c_wyvern_run
ctaunt

c_wyvern_UNA_taunt
cwalksnd_footstep snd_footstep c_wyvern_UNA_walk


TIPS:

  • ccastout: NWN2 doesn't often have a casting animation.  In NWN1, the casting animation is 30 frames.  As a default, you can use the idle animation for the NWN ccastout animation.  The game will expect 30 frames here, so clip the end time of ccastout to be T+30, not the last frame of the animation.  If you just use the default times, the game will speed up the idle animation and compress it and you will get a janky look.  
  • cdead: Just use the first frame of the prone animation as both start and end, so it is looping off that.  So if the prone animation runs from 930-970, your start and stop will be 930 both. 
  • ckdbckdie: Just use the first frame of the prone animation as both start and end, so it is looping off that.  So if the prone animation runs from 930-970, your start and stop will be 930 both.

TOOLSET TIP:

  • Go through your time line and find the first frame of your idle animation.  Copy that frame and paste it at frame zero of the timeline.  It will make the toolset render better with bounding boxes and preview panes.

MORE ANIMATIONS THAN YOU USE TIP:

  • You'll notice that you didn't use your death animations from NWN2 at all.  There are almost always two.  Keep them and add the following custom animations.  Add some snd_hitground events too.
xdeath1actc_wyvern_death01start and stop times for the death animation
xdeath1lpc_wyvern_death01start and stop times to be the last frame of the death animation
xdeath2actc_wyvern_death02start and stop times for the death animation
xdeath2lpc_wyvern_death02start 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....



  • No labels