Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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.

...


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
  • Once this is done, to get the animations off the animated skeletons you import and onto the one attached to the creature mesh, simply select the skeleton, select it’s animations, and copy in the usual fashion. You can now left click the skeleton attached to the creature, put the timeline cursor bar wherever you want the animation to turn up on the animation timeline, and paste in the usual fashion. Voila. You’ve got the imported animation off it’s imported skeleton and onto the creature one.
  • Rinse and repeat for each animation you want. Don’t forget to reposition the timeline cursor or you’ll end up overwriting anims after the first time.

...

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 relevant special node (TO DO ENTER THOSE).

  • handconjure = ap_hand_right or ap_forehead or ap_mouth
  • headconjure = ap_forehead
  • impact = ap_torso
  • lforearm = 
  • lhand = ap_hand_left
  • rhand = ap_hand_right 

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 AnimationEvent1Event2NWN2 AnimationVlookup BeginVlookup End
ca1slashlhit  
c_wyvern_UNA_1attack02340    385
ca1slashrhit  
c_wyvern_UNA_1attack02340    385
ca1stabhit  
c_wyvern_UNA_1attack01290    335
cappear 

c_wyvern_UNA_idleM630        870
ccastoutcast 
c_wyvern_UNA_idleM630        870
ccastoutlp

c_wyvern_UNA_idleM630    870
cclosehhit  
c_wyvern_UNA_1attack02340    385
ccloselhit  
c_wyvern_UNA_1attack02340    385
cconjure1

c_wyvern_UNA_idleM630    870
ccwalkbsnd_footstep snd_footstep c_wyvern_UNA_walk1110    1160
ccwalkfsnd_footstep snd_footstep c_wyvern_UNA_walk1110    1160
ccwalklsnd_footstep snd_footstep c_wyvern_runL230    250
ccwalkrsnd_footstep snd_footstep c_wyvern_runR260    280
cdamagel

c_wyvern_UNA_damage01390    400
cdamager

c_wyvern_UNA_damage01390    400
cdamages

c_wyvern_UNA_damage01390    400
cdead
* see tips


c_wyvern_UNA_proneB930970
cdisappear 

c_wyvern_UNA_idleM630870
cdodgelrsnd_footstep 
c_wyvern_UNA_dodge570    620
cdodgessnd_footstep 
c_wyvern_UNA_dodge570    620
cgustandb

c_wyvern_UNA_standupB980    1030
ckdbcksnd_hitground  
c_wyvern_UNA_knockdownB880    920
ckdbckdie
* see tips


c_wyvern_UNA_proneB930    970
ckdbckps

c_wyvern_UNA_proneB930    970
cparryl

c_wyvern_UNA_dodge570620
cparryr

c_wyvern_UNA_dodge570620
cpause1

c_wyvern_UNA_idleM630870
creachhit  
c_wyvern_UNA_1attack01290335
creadyl

c_wyvern_UNA_idleM630870
creadyr

c_wyvern_UNA_idleM630870
crunsnd_footstep snd_footstep c_wyvern_run200    220
ctaunt

c_wyvern_UNA_taunt1040    1100
cwalksnd_footstep snd_footstep c_wyvern_UNA_walk1110    1160


TIPS:

  • ccastout: NWN2 doesn't often have a casting animation for creatures.  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....

------

section on armed vs unarmed animations

  • use "una" for unarmed set
  • make diff model for diff animation types (2hs, 1hs, etc)
  • cant do standard attach to bone or child to constraints
    • how to: generate the psuedo bones, import your mesh like a sword, parent it to the psuedo bone in the skel object it relates to, eg right hand sword to ap_hand_right


Tip for casting:

Place the two NWN2 animations if present together in the dopesheet timeline, it will be 60 seconds / 2 seconds, which just happens to be the maximum time spell that conjure1 uses in spells 2a, so fits perfect.

c_x_gen_conjure
c_x_gen_conjureloop


Gen cast maps to to essentially castout anad castoutlp, which has a maximum of 90 frames / 3 seconds in spells.2da.  Consider splitting out c_x_gen_cast out so that the first half provides the castout FNF animation and cast event, then take about 5 frames after and copy paste/reverse them so you create a seamless loop (copy paste on dope sheet, press S and the "-1" to reverse); make the end of your loop matches the start or you will hitch; this will be at a really shakey speed, so then on the same seamless loop scale it slower by pressing "S" and then "4'.

c_x_gen_cast
  • Anyways, all you need to do is select the skeleton with all the animations on it and hit ‘generate pseudo-bones’ from the bone menu. Voila, pseudo-skelly. Select this and make the base object all the NWN2 model/skeleton stuff is parented to, it’s parent. Might be easiest to shift + left click it and drag it onto said base object.
  • Almost there. The NWN2 mesh/skin object isn’t the right type by default. You just need to head to the Neverblender aurora mesh panel in the object menu while you have that mesh selected, then change it’s type to ‘skinmesh’.
  • Finally, add an empty and parent everything to that, then name it whatever you want to put in the 2da. NWN1 wants an empty at the top of it’s hierarchy when it looks at a model, or something.
  • You can now export to MDL via the export menu. Unfortunately, there is one more step if you want the textures to work right. Open the new MDL in nwnexplorer and export the ASCII version of it, then open that in Notepad++ or a similar editor and search for the word 'bitmap'. You need to check that the main texture files for the creature - not the strange lighting map ones you sometimes get but the tga with the creature texture as it should show up in game - is the file named after 'bitmap'. Look through the file and you'll find several instances of it to change. It might be actually that there's several textures you need to change in this way for some models that use multiple base textures but I haven't encountered this yet. Either way, once you've done this, just save the text file as MDL once again and...

...