Skip to content

The Hierarchy of NetImmerse Classes⚓︎

This page puts into relation various classes that compromise Morrowind's scene graph. Some of these classes are abstract, meaning they aren't directly found in the scene graph but are used by other classes to inherit common variables and methods. The game's scene graph can be inspected by entering ssg (show scene graph) command in the console. Morrowind's engine is Gamebryo, which was before known as NetImmerse. That's why these classes have the prefix ni in their name. These classes in MWSE follow the naming as in the vanilla engine. But, some classes contain information about the scene graph in MWSE and have tes3 prefixes such as tes3vector3.

The primary building blocks of the scene graph are called nodes. Each node has one parent and zero or more child nodes. For example, the base node of Morrowind's world scene graph, named worldRoot, and all the game world objects are represented by nodes that are children of the worldRoot node.

Note that the relations described here don't reflect how these types are organized in the scene graph. For instance, the worldRoot node mentioned earlier is of type niNode, but is the root node of the world's scene graph, while the base class of most types described here is niObject.

The types are arranged into functional groupings. Within each grouping, indentation implies inheritance from the class of the previous indentation level. The color of the text carries the following meanings:

  • Turquoise - Classes read by MWSE but not yet exposed to Lua scripts
  • Green - Classes present in Morrowind but not yet read by MWSE
  • All the other classes in standard text color in this list are available in Lua scripts

niMain⚓︎

Basic Foundation Types⚓︎

  • niColor
  • niColorA
  • niPackedColor
  • niRTTI

Basic Math and Geometry Classes⚓︎

  • niBound
  • tes3boundingBox
  • tes3matrix33
  • tes3vector2
  • tes3vector3
  • niQuaternion
  • tes3transform

Templated Container Classes⚓︎

  • niTArray - not exposed as a type but can be iterated as a standard Lua array.
  • niLinkedList
    • niDynamicEffectLinkedList
    • niNodeLinkedList
    • niPropertyLinkedList

Animation Classes⚓︎

  • niObject
    • niTimeController
    • niObjectNET
      • niAVObject
        • niNode
          • niBSAnimationManager
          • niBSAnimationNode
            • niBSParticleNode
      • niSequenceStreamHelper

Texturing Classes⚓︎

  • niObject
    • niBltSource
    • niObjectNET
      • niTexture
        • niRenderedTexture
          • niRenderedCubeMap
        • niSourceTexture
    • niPalette
    • niPixelData
  • niPixelFormat

Object Depth Sorting Classes⚓︎

  • niObject
    • niAccumulator
      • niClusterAccumulator
        • niAlphaAccumulator

Geometry Data Classes⚓︎

  • niObject
    • niGeometryData
      • niLinesData
      • niTriBasedGeomData
        • niParticlesData
          • niAutoNormalParticlesData
          • niRotatingParticlesData
        • niTriShapeData
          • niTriShapeDynamicData
        • niTriStripsData

Geometry Rendering Classes⚓︎

  • niObject
    • niObjectNET
      • niAVObject
        • niGeometry
          • niLines
          • niTriBasedGeometry
            • niTriShape
            • niTriStrips
            • niParticles
              • niAutoNormalParticles
              • niRotatingParticles
    • niScreenPolygon
    • niSkinData
    • niSkinDataBoneData
    • niSkinDataBoneDataVertexWeight
    • niSkinInstance
    • niSkinPartition
    • niSkinPartitionPartition

Scene Graph Organization Classes⚓︎

  • niObject
    • niExtraData
      • BrickNiExtraData
      • niStringExtraData
      • niTES3ExtraData
      • niTextKeyExtraData
      • niVertWeightsExtraData
    • niObjectNET
      • niAVObject
        • niNode
          • AvoidNode
          • niBillboardNode
          • niBSPNode
          • niSortAdjustNode
          • niSwitchNode
            • niFltAnimationNode
            • niLODNode

Lightning and Effects Classes⚓︎

  • niObject
    • niObjectNET
      • niAVObject
        • niDynamicEffect
          • niLight
            • niAmbientLight
            • niDirectionalLight
            • niPointLight
              • niSpotLight
          • niTextureEffect

Rendering and Property Classes⚓︎

  • niObject
    • niObjectNET
      • niAVObject
        • niCamera
      • niProperty
        • niAlphaProperty
        • niDitherProperty
        • niFogProperty
        • niMaterialProperty
        • niRendererSpecificProperty
        • niShadeProperty
        • niSpecularProperty
        • niStencilProperty
        • niTexturingProperty
        • niVertexColorProperty
        • niWireframeProperty
        • niZBufferProperty
    • niRenderer
      • niDX8Renderer

niParticle⚓︎

Particle System Classes⚓︎

  • niObject
    • niEmitterModifier
    • niParticleModifier
      • niGravity
      • niParticleBomb
      • niParticleCollider
        • niPlanarCollider
        • niSphericalCollider
      • niParticleColorModifier
      • niParticleGrowFade
      • niParticleRotation
    • niTimeController - Not only related to particles
      • niParticleSystemController
  • niPerParticleData

niCollision⚓︎

Collision Classes⚓︎

  • niCollisionGroup
  • niCollisionGroupRecord
  • niObject
    • niObjectNET
      • niAVObject
        • niNode
          • RootCollisionNode
          • niCollisionSwitch
  • niPick
  • niPickRecord

niAnimation⚓︎

Animation Classes⚓︎

  • niObject
    • niColorData
    • niExtraData - this type is not related to animation by itself.
      • niTextKeyExtraData
    • niFloatData
    • niKeyframeData
    • niMorphData
    • niPosData
    • niSequence
    • niTimeController
      • niFlipController
      • niFloatController
        • niAlphaController
        • niRollController
      • niKeyframeController
      • niKeyframeManager
      • niLightColorController
      • niLookAtController
      • niMaterialColorController
      • niMorpherController
        • niGeomMorpherController
      • niParticleSystemController
        • niBSPArrayController
      • niPathController
      • niUVController
      • niVisController
    • niUVData
    • niVisData
  • niAnimationKey
    • niColorKey
    • niFloatKey
      • niBezFloatKey
      • niTCBFloatKey
    • niPosKey
      • niBezPosKey
      • niTCBPosKey
    • niRotKey
      • niBezRotKey
      • niTCBRotKey
      • niEulerRotKey
  • niTextKey

Diagrammatic representation⚓︎

%%{
    init: {
        'er': {
            'diagramPadding': 5,
            'entityPadding': 5
        },
        'flowchart': {
            'diagramPadding': 2,
            'curve': 'monotoneX'
        }
    }
}%%

graph LR
    A(niObject) --> B(niAccumulator);
        B --> BA(niClusterAccumulator);
            BA --> BAA(niAlphaAccumulator);

    A --> C(niExtraData);
        C --> CA(BrickNiExtraData);
        C --> CB(TES3ObjectExtraData);
        C --> CC(niStringExtraData);
        C --> CD(niTextKeyExtraData);
        C --> CE(niVertWeightsExtraData);

    A --> D(niGeometryData);
        D --> DA(niLinesData);
        D --> DB(niParticlesData);
            DB --> DBA(niAutoNormalParticlesData);
            DB --> DBB(niRotatingParticlesData);
    subgraph Scroll down for more info
        D --> DC(niTriBasedGeomData);
    end

    A --> E(niObjectNET);

    subgraph Scroll down for more info
        E --> EA(niAVObject);
        E --> ED(niTexture);
    end

        E --> EC(niSequenceStreamHelper);

        E --> EB(niProperty);
            EB --> EBA(niAlphaProperty);
            EB --> EBB(niDitherProperty);
            EB --> EBC(niFogProperty);
            EB --> EBD(niMaterialProperty);
            EB --> EBE(niRendererSpecificProperty);
            EB --> EBF(niShadeProperty);
            EB --> EBG(niSpecularProperty);
            EB --> EBH(niStencilProperty);
            EB --> EBI(niTexturingProperty);
            EB --> EBJ(niVertexColorProperty);
            EB --> EBK(niWireframeProperty);
            EB --> EBL(niZBufferProperty);

    A --> F(niParticleModifier);
        F --> FA(niGravity);
        F --> FB(niParticleBomb);
        F --> FC(niParticleCollider);
            FC --> FCA(niPlanarCollider);
            FC --> FCB(niSphericalCollider);
        F --> FD(niParticleColorModifier);
        F --> FE(niParticleGrowFade);
        F --> FF(niParticleRotation);

    A --> G(niRenderer);
        G --> GA(niDX8Renderer);

    A --> H(niTimeController);
        H --> HA(niFlipController);
        H --> HB(niFloatController);
            HB --> HBA(niAlphaController);
            HB --> HBB(niRollController);
        H --> HC(niKeyframeController);
        H --> HD(niKeyframeManager);
        H --> HE(niLightColorController);
        H --> HF(niLookAtController);
        H --> HG(niMaterialColorController);
        H --> HH(niMorpherController);
            HH --> HHA(niGeomMorpherController);
        H --> HI(niParticleSystemController);
            HI --> HIA(niBSPArrayController);
        H --> HJ(niPathController);
        H --> HK(niUVController);
        H --> HL(niVisController);

    A --> I(niBltSource);
    A --> J(niColorData);
    A --> K(niEmitterModifier);
    A --> L(niFloatData);
    A --> M(niKeyframeData);
    A --> N(niMorphData);
    A --> O(niPalette);
    A --> P(niPixelData);
    A --> Q(niPosData);
    A --> R(niScreenPolygon);
    A --> S(niSequence);
    A --> T(niSkinData);
    A --> U(niSkinInstance);
    A --> V(niSkinPartition);
    A --> W(niUVData);
    A --> X(niVisData);

    %% Default style
    classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;

    %% Turquoise
    classDef notExposed color:#000, fill: #40E0D0, stroke: #333, stroke-width: 2px;
    class B,HA,HK,L,Q,R,W notExposed;

    %% YellowGreen
    classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
    class BA,BAA,CA,CE,DBA,EBB,EBE,EBF,EBG,EBK,EC,GA,HB,HBA,HBB,HE,HG,HH,HHA,HIA,HL,I,K,N,O,X notResearched;
%%{
    init: {
        'er': {
            'diagramPadding': 5,
            'entityPadding': 5
        },
        'flowchart': {
            'diagramPadding': 2,
            'curve': 'monotoneX'
        }
    }
}%%

graph LR
    ED(niTexture);
        ED --> EDA(niRenderedTexture);
            EDA --> EDAA(niRenderedCubeMap);
        ED --> EDB(niSourceTexture);

    %% Default style
    classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;

    %% YellowGreen
    classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
    class EDAA notResearched;
%%{
    init: {
        'er': {
            'diagramPadding': 5,
            'entityPadding': 5
        },
        'flowchart': {
            'diagramPadding': 2,
            'curve': 'monotoneX'
        }
    }
}%%

graph LR
    DC(niTriBasedGeomData);
        DC --> DCA(niTriShapeData);
            DCA --> DCAA(niTriShapeDynamicData);
        DC --> DCB(niTriStripsData);

    %% Default style
    classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;

    %% YellowGreen
    classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
    class DCAA,DCB notResearched;
%%{
    init: {
        'er': {
            'diagramPadding': 5,
            'entityPadding': 5
        },
        'flowchart': {
            'diagramPadding': 2,
            'curve': 'monotoneX'
        }
    }
}%%

graph LR
    EA(niAVObject);
    EA --> EAA(niCamera);

    EA --> EAB(niDynamicEffect);
        EAB --> EABA(niTextureEffect);
        EAB --> EABB(niLight);
            EABB --> EABBA(niAmbientLight);
            EABB --> EABBB(niDirectionalLight);
            EABB --> EABBC(niPointLight);
                EABBC --> EABBCA(niSpotLight);

    EA --> EAC(niGeometry);
        EAC --> EACA(niLines);
        EAC --> EACB(niParticles);
            EACB --> EACBA(niAutoNormalParticles);
            EACB --> EACBB(niRotatingParticles);
        EAC --> EACC(niTriBasedGeometry);
            EACC --> EACCA(niTriShape);
            EACC --> EACCB(niTriStrips);

    EA --> EAD(niNode);
        EAD --> EADA(AvoidNode);
        EAD --> EADB(RootCollisionNode);
        EAD --> EADC(niBillboardNode);
        EAD --> EADD(niBSAnimationManager);
        EAD --> EADE(niBSPNode);
        EAD --> EADF(niCollisionSwitch);
        EAD --> EADG(niSortAdjustNode);
        EAD --> EADH(niBSAnimationNode);
            EADH --> EADHA(niBSParticleNode);
        EAD --> EADI(niSwitchNode);
            EADI --> EADIA(niFltAnimationNode);
            EADI --> EADIB(niLODNode);

    %% Default style
    classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;

    %% Turquoise
    classDef notExposed color:#000, fill: #40E0D0, stroke: #333, stroke-width: 2px;
    class EAC,EACC notExposed;

    %% YellowGreen
    classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
    class EACCB,EADA,EADB,EADD,EADE,EADH,EADHA,EADIA,EADIB notResearched;