NOD Engine SDK 1.0

NMS File Specifications

Introduction

The NMS file is an ASCII file that can be edited with Notepad or a text editor. NMS stands for Nihilistic Motion Set. The purpose of the file is to map various character actions in the game to the specific animation files to be displayed on the character skeleton. Each line of the file contains a keyword for a particular "motion mode" followed by the name of the animation (NMS) file corresponding to that motion.

The NMS file is composed of three parts, the motion modes, the tags section, and the mouth shapes section. The tags and mouth entries can technically be located anywhere in the file, and must begin with the special keywords "tag" and "mouth" to differentiate them from the motion mode lines.

The semicolon (;) designates a comment line. Blank lines are OK within the file. None of the file elements or keywords are case sensitive. Elements on a line are typically separated by any whitespace character (space, TAB).

Motion Modes

The following is a complete list of valid motion modes as of Vampire version 1.1. New modes may be added in future revisions, but old NMS files will continue to work on newer versions of the game (although some motions may be missing). Each line of the file contains the name of the mode being specified, followed by the name of the animation, and finally optional flags controlling the behavior of that animation when played. The flags are optional, each line can contain zero or more flags. All elements on the line are separated by whitespace characters (space, tab, etc.)

If the same mode is specified more than once, each entry is placed into an array of possible animations for that action, and the animation is selected randomly at run-time. So entering multiple animations for a sword slash, for instance, will cause the engine to alternate randomly between the two animations specified.

Sample Motion Modes

stand ChrisStandClaws.nad lowpriority
stand_onehand ChrisStandSword.nad lowpriority
stand_axe2 ChrisStandWarHammer.nad lowpriority
stand_sword2 ChrisStand2HandedSword.nad lowpriority

Movement Modes

Motion Mode

Description

Walk

Normal walking animation (no weapon)

Walk_Onehand

Walk animation when using a weapon with type "onehand"

Walk_Axe2

Walk holding a 2-handed axe weapon

Walk_Sword2

Walk with 2-handed sword

Walk_Polearm

Walk with a polarm

Walk_Gun

Walk with a gun

Walk_Gun2

Walk with a 2-handed gun

Walk_Bow

Walk with a bow

Walk_Shotgun

Walk with a shotgun

Walk_Crossbow

Walk with a crossbow

Walk_Rocket

Walk with a rocketlauncher

Walk_Chainsaw

Walk with a chainsaw

Walk_Chaingun

Walk with a chaingun

Walk_Util

Walk unarmed holding a utility item (torch) in off-hand

Walk_Util_Onehand

Walk with a 1-handed weapon and a utility item in hand

Walk_Util_Gun

Walk with a 1-handed gun and a utility item

Run

Unarmed run animation

Run_XXX

All of the previous weapon-type modes also work with RUN_

Stand

Unarmed stand animation

Stand_XXX

All of the weapon modes also work with the stand mode

Idle

This is a "fidget" animation played periodically while in stand mode

Idle_XXX

Weapon-specific idle modes, see above

Limp

Limping movement without a weapon

Liml_XXX

Limping movement for each weapon type (see above)

Combat Modes

Mode Description

Claw

Claw attack

Swordslash

Basic sword slash

Swordslash2

2-handed sword slash

Swordthrust

Sword thrust attack

Bluntbash

Attack with a bashing weapon

Bluntbash2

Attack with a 2-handed bashing weapon

Bow

Bow firing animation

Crosbow

Crossbow firing

Daggerstab

Stab attack with a dagger or knife

Daggercut

Cut attack with a dagger

Swing

Swinging weapon attack

Pistol

Pistol firing attack

Rifleaimed

Aimed rifle shot attack

Shotgun

Shotgun fire attack

Machinegun

Machinegun stafe attack

Rocket

Rocket launcher attack

Stake

Stake attempt

Throw

Thrown weapon attack

Polethrust

Polearm thrust attack

Poleslash

Polearm slash attack

Bluntslash

Slash attack with a blunt weapon

Bluntslash2

2-handed blunt weapon slash

Clawspecial

Special claw attack

Punch

Weaponless punch attack

Chainsaw

Chainsaw attack animation

Toss

Grenade or similar projectile toss

Uzi

Machinegun strafing animation

Flamethrower

Flamethrower strafe animation

Chaingun

Chain gun firing animation

Util_SwordSlash

Swordslash if holding a utility item

Util_XXXX

Other one-handed weapon modes have UTIL_ variations for use with utility items

Shield

Blocking an attack with the shield

Hurt

Hurt animation while unarmed

Hurt_XXX

Hurt animation for each specific weapon type, see WALK modes for more information

Miscellaneous Modes

Mode Description

DamageLight

Light damage hurt animation

DamageMed

Medium damage animation

DamageHeavy

Heavy damage animation

Talk

Talking loop animation (not including jaw)

Listen

Animation of character listening to another speaker

Feed

Character beginning a feed (grab)

Embraced

Character beginning being fed upon

Feeding

Looping animation while feeding

Draining

Looping animation while being fed on

FeedRelease

Attack releasing feed victim without killing them

FeedReleased

Victim being released from feed without being killed

FeederDrainer

Feeder releasing victim after killing him

DeathDrained

Victim being killed by a feed

Create

Special animation mode played on an object immediately upon creation in the world

DeathQuick

Quick death animation

DeathSlow

Slow death

DeathDramatic

Slow dramatic death

DeathSun

Death by sun damage

DeathStaked

Death by staking

DeathClawed

Death by claw attack

Special1 Ė Special25

Reserved for special cutscene actions

Spell

Generic discipline casting

Handsspell

Discipline casting for hand effects like Feral Claws

ThrowSpell

Discipline casting involving a thrown effect or projectile

SpitSpell

Discipline casting involving breath or the casterís mouth

Awaken

Awakened for torpor

Unstake

Unstaking another player

Unstaked

Being unstaked by another player

Feedwrist

Starting to feed from another player by the wrist

Embracedwrist

Starting to be fed on by another player by the wrist

Feedingwrist

In the process of draining a victim via the wrist

Drainingwrist

Begin drained by another player via the wrist

Feedreleasewrist

Wrist-feed version of releasing a victim

Feedreleasedwrist

Vicitm being released from a wrist-feed

Gesture1-Gesture10

Emote gestures (wave, bow, etc.)

Action1-Action10

Special modes for cutscenes

Confused

Acting dazed or confused

Crouch

Crouching down

Frenzy

Character entering frenzy mode

Humanitylost

Animation when losing humanity points

Feedfailed

Failed feed grab attempt

Throw1-Throw5

Special throw attack modes

Thrown1-Thrown5

Victim animations to match each different throw attack

Throwmiss

Missed throw attempt

Standup

Standing up after a throw as victim

Hidden

Character in hiding

Staked

Character is staked

Motion Mode Flags

Flag Name

Meaning

Noloop

The animation plays once and will not loop endlessly until stopped. Many modes are designed for this, such as attacks, fidgets, etc.

Movespeed

Link the animation playback rate to the movement speed of the character (not yet implemented)

Highpriority

Animation is high priority and should override those of a lower priority

Lowpriority

Animation is lower than default priority and should be interrupted by any other animations played

Endpause

Animation will automatically freeze on the last frame of the animation. Normally used for death animations, and some others.

Endtag

Animation will generate a callback into code or Codex when the animation completes. Independent from Endpause effects.

Variable

Animation playback rate is randomly adjusted in speed. This is used for stand animations on enemies so they donít remain in-sync if created simultaneously

Special

Each animation mode can contain two sets of animations. Those marked "special" will be used for attacks if the weapon attack mode is also marked special. This effectively is used to get two "slots" for each of the attack modes without creating a whole new set of mode names. Secondary sword attacks usually use these "special" attack animations.

Nofadeout

When the animation ends, the mixer should not fade it out

Nofadein

Instructs the mixer to not interpolate or fade-in the animation when it starts

Fidget

The animation is intended as a fidget. The flag generates a special callback in the code to help the fidgets operation properly. Should not be set for other types of animations.

 

Tag Section

The tag section is used to identify certain joints in the model for use by special code. Some of the definitions are optional, others are required for certain effects.

The basic format of the section is the keyword "tag" followed by the name of the joint being specified (see table), followed by the number of bone in the NOD file. There is also an optional "offset" vector that can appear after the bone number if the actual location being specified is not exactly in the center of the referenced bone. None of the elements of the lines are case-sensitive.

The offsets are in world units, or about 22 units per foot, and are relative to the bone orientation.

Sample Tags Section

; tags section
tag LFoot 4
tag RFoot 8
tag Back2 15
tag Head 18
tag Helmet 19
tag Jaw 20
tag Weapon 25
tag Rfingers 24
tag Lfingers 29 1.0 12.0 -4.0

Tag Types

Tag Name

Comments

Root

Root bone of model

LHip / RHip

Left/right Hip joint

Lfoot / Rfoot

Left/right foot

Lknee / Rknee

Left/right knee

Lankle / Rankle

Left/right ankle

Btunic1,2,3

Rear tunic joints

Ftunic1,2

Front tunic joints

Chest

Chest

Back1, 2

Two joints of back

Neck

Used for beheading effects

Head

Used for beheading effects

Helmet

 

Jaw

Not actually used for lipsync

Lshoulder/Rshoulder

Left/right shoulder

Lwrist/Rwrist

Left/right wrist

Lfingers/Rfingers

Left/right fingers

Lelbow/Relbow

Left/right elbow

Shield

Where shield attaches

Mcape1

Cape joint

Scabbard

 

 

Mouth Section

The mouth entries in the NMS file define the various mouth shapes for lipsyncing. The basic idea is to define, for each mouth shape a..i, which bones are rotated or translated from their animated positions and by how much. During the lipsyncing process in the engine, the mouth shapes are interpolated between the shapes listed here.

Each line of the file begins with the keyword "mouth" and is followed by a letter between "a" and "i". "a" is generally the "closed" mouth shape, and the other shapes correspond to the basic shapes defined in Magpie, the package we used to create the lipsync data.

Following the mouth shape is the index of the bone to be modified. These indices must match the contents of the NOD file. If the NMS and the NOD file do not match, you may end up "lipsyncing" a characters arm or leg joints instead of the jaw and mouth. After the bone index, there can be one or two vectors. In this case, the vectors are formatted in parentheses with comma separating the elements. The first vector specified is the pitch/yaw/roll deformation of the joint. The second vector, if present, specifies the translation (x,y,z).

In the current version, each mouth shape can only reference one bone, so each shape should appear only once in a mouth line.

Sample Mouth Section

mouth a 20 (0.0,0.0,0.0)
mouth b 20 (-1.5,0.0,0.0)
mouth c 20 (-4.5,0.0,0.0)
mouth d 20 (-8.0,0.0,0.0)
mouth e 20 (-5.5,0.0,0.0)
mouth f 20 (-3.0,0.0,0.0)
mouth g 20 (-7.0,0.0,0.0)
mouth h 20 (2,0.0,0.0)
mouth i 20 (-4.5,0.0,0.0)