diff --git a/include/obj/NiGeometry.h b/include/obj/NiGeometry.h index e668a4ca0c0e1c0aa8102211c35acb8ff694dc60..8ea5f317184e1fd73a34554000a08edf840edb76 100644 --- a/include/obj/NiGeometry.h +++ b/include/obj/NiGeometry.h @@ -169,7 +169,7 @@ protected: /*! The shader name. */ string shaderName; /*! Unknown link, usually -1. */ - Ref<NiObject > unknownLink; + NiObject * unknownLink; public: /*! NIFLIB_HIDDEN function. For internal use only. */ NIFLIB_HIDDEN virtual void Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info ); diff --git a/include/obj/NiMeshPSysData.h b/include/obj/NiMeshPSysData.h index c14eb8359dfb9138dbfac59a9e9ffd96e7fcb628..d830684fc11fb4fee05a546cc93596779066fa98 100644 --- a/include/obj/NiMeshPSysData.h +++ b/include/obj/NiMeshPSysData.h @@ -20,7 +20,6 @@ All rights reserved. Please see niflib.h for license. */ namespace Niflib { // Forward define of referenced NIF objects -class NiObject; class NiNode; class NiMeshPSysData; typedef Ref<NiMeshPSysData> NiMeshPSysDataRef; @@ -64,15 +63,18 @@ protected: /*! * Unknown. Seems to refer to particle modifiers, however at least one file has a * NiNode here. May indicate that this is really two separate links in different - * versions or some other problem. + * versions or some other problem. Several files have number of verts here. */ - Ref<NiObject > modifier; + unsigned int unknownModifier; /*! Unknown. */ byte unknownByte2; /*! The number of unknown links that follow. */ mutable unsigned int numUnknownLinks; - /*! Unknown. Seems to refer to particle modifiers. */ - vector<Ref<NiObject > > unknownLinks; + /*! + * Unknown. Seems to refer to particle modifiers. Sometimes matches vertices + * count. + */ + vector<unsigned int > unknownLinks; /*! Repeat of Vertex Count? */ unsigned int numVertices2; /*! Unknown. 0? */ diff --git a/src/obj/NiAVObject.cpp b/src/obj/NiAVObject.cpp index befd911b0ccd51ed32345c96c7f14c152b138cde..d83a7be9002826c7e8a20faf2b8779b88b86be45 100644 --- a/src/obj/NiAVObject.cpp +++ b/src/obj/NiAVObject.cpp @@ -53,8 +53,6 @@ NiObject * NiAVObject::Create() { return new NiAVObject; } -extern "C" int __stdcall IsDebuggerPresent(); - void NiAVObject::Read( istream& in, list<unsigned int> & link_stack, const NifInfo & info ) { //--BEGIN PRE-READ CUSTOM CODE--// //--END CUSTOM CODE--// @@ -63,12 +61,6 @@ void NiAVObject::Read( istream& in, list<unsigned int> & link_stack, const NifIn NiObjectNET::Read( in, link_stack, info ); NifStream( flags, in, info ); NifStream( translation, in, info ); - - //if (name.compare("Bip01 R Finger01") == 0) { - // if (IsDebuggerPresent()) - // __asm{ int 3 }; - //} - NifStream( rotation, in, info ); NifStream( scale, in, info ); if ( info.version <= 0x04020200 ) { diff --git a/src/obj/NiGeomMorpherController.cpp b/src/obj/NiGeomMorpherController.cpp index a0275f9349e161ab94f618d56404afd0b20cdcd6..32d23f27fb54b566bdc69352fae36d7c72b78f5b 100644 --- a/src/obj/NiGeomMorpherController.cpp +++ b/src/obj/NiGeomMorpherController.cpp @@ -63,13 +63,6 @@ void NiGeomMorpherController::Read( istream& in, list<unsigned int> & link_stack link_stack.push_back( block_num ); }; }; - if ( ( info.version >= 0x0A020000 ) && ( info.version <= 0x0A020000 ) ) { - NifStream( numUnknownInts, in, info ); - unknownInts.resize(numUnknownInts); - for (unsigned int i2 = 0; i2 < unknownInts.size(); i2++) { - NifStream( unknownInts[i2], in, info ); - }; - }; if ( ( info.version >= 0x14000004 ) && ( info.userVersion == 10 ) ) { NifStream( numUnknownInts, in, info ); unknownInts.resize(numUnknownInts); @@ -126,12 +119,6 @@ void NiGeomMorpherController::Write( ostream& out, const map<NiObjectRef,unsigne } }; }; - if ( ( info.version >= 0x0A020000 ) && ( info.version <= 0x0A020000 ) ) { - NifStream( numUnknownInts, out, info ); - for (unsigned int i2 = 0; i2 < unknownInts.size(); i2++) { - NifStream( unknownInts[i2], out, info ); - }; - }; if ( ( info.version >= 0x14000004 ) && ( info.userVersion == 10 ) ) { NifStream( numUnknownInts, out, info ); for (unsigned int i2 = 0; i2 < unknownInts.size(); i2++) { diff --git a/src/obj/NiGeometry.cpp b/src/obj/NiGeometry.cpp index 8e6bd9a6c9d9b4655c1caff2bcfd79f0ab26289e..4554f06e701297428d12d02ac67a4e7fafa50afc 100644 --- a/src/obj/NiGeometry.cpp +++ b/src/obj/NiGeometry.cpp @@ -159,8 +159,6 @@ std::list<NiObjectRef> NiGeometry::GetRefs() const { refs.push_back(StaticCast<NiObject>(data)); if ( skinInstance != NULL ) refs.push_back(StaticCast<NiObject>(skinInstance)); - if ( unknownLink != NULL ) - refs.push_back(StaticCast<NiObject>(unknownLink)); return refs; } diff --git a/src/obj/NiGeometryData.cpp b/src/obj/NiGeometryData.cpp index f8d71ce48bf9d3462f90117306350458671a3e5e..e0a6e5f2ee5bc2616d76dec241b020e991952daf 100644 --- a/src/obj/NiGeometryData.cpp +++ b/src/obj/NiGeometryData.cpp @@ -20,7 +20,7 @@ using namespace Niflib; //Definition of TYPE constant const Type NiGeometryData::TYPE("NiGeometryData", &NiObject::TYPE ); -NiGeometryData::NiGeometryData() : numVertices((unsigned short)0), unknownShort1((unsigned short)0), hasVertices(false), numUvSets2((byte)0), unknownByte1((byte)0), hasNormals(false), radius(0.0f), hasVertexColors(false), numUvSets((unsigned short)0), hasUv(false), consistencyFlags((ConsistencyType)0), unknownLink1(NULL) { +NiGeometryData::NiGeometryData() : numVertices((unsigned short)0), unknownShort1((unsigned short)0), hasVertices(1), numUvSets2((byte)0), unknownByte1((byte)0), hasNormals(false), radius(0.0f), hasVertexColors(false), numUvSets((unsigned short)0), hasUv(false), consistencyFlags((ConsistencyType)0), unknownLink1(NULL) { //--BEGIN CONSTRUCTOR CUSTOM CODE--// //--END CUSTOM CODE--// } diff --git a/src/obj/NiMeshPSysData.cpp b/src/obj/NiMeshPSysData.cpp index bfdbf0edc9884568a6a4a4925e308191b195c2e6..dd545675bbd242895fd18f3bdd56d4c0167db70f 100644 --- a/src/obj/NiMeshPSysData.cpp +++ b/src/obj/NiMeshPSysData.cpp @@ -14,14 +14,13 @@ All rights reserved. Please see niflib.h for license. */ #include "../../include/ObjectRegistry.h" #include "../../include/NIF_IO.h" #include "../../include/obj/NiMeshPSysData.h" -#include "../../include/obj/NiObject.h" #include "../../include/obj/NiNode.h" using namespace Niflib; //Definition of TYPE constant const Type NiMeshPSysData::TYPE("NiMeshPSysData", &NiPSysData::TYPE ); -NiMeshPSysData::NiMeshPSysData() : modifier(NULL), unknownByte2((byte)0), numUnknownLinks((unsigned int)0), numVertices2((unsigned int)0), unknownByte3((byte)0), unknownInt2((unsigned int)1), numVertices3((unsigned int)0), unknownLink2(NULL) { +NiMeshPSysData::NiMeshPSysData() : unknownModifier((unsigned int)0), unknownByte2((byte)0), numUnknownLinks((unsigned int)0), numVertices2((unsigned int)0), unknownByte3((byte)0), unknownInt2((unsigned int)1), numVertices3((unsigned int)0), unknownLink2(NULL) { //--BEGIN CONSTRUCTOR CUSTOM CODE--// //--END CUSTOM CODE--// } @@ -46,16 +45,14 @@ void NiMeshPSysData::Read( istream& in, list<unsigned int> & link_stack, const N unsigned int block_num; NiPSysData::Read( in, link_stack, info ); if ( info.version <= 0x14000004 ) { - NifStream( block_num, in, info ); - link_stack.push_back( block_num ); + NifStream( unknownModifier, in, info ); }; if ( ( info.version >= 0x0A020000 ) && ( info.version <= 0x14000004 ) ) { NifStream( unknownByte2, in, info ); NifStream( numUnknownLinks, in, info ); unknownLinks.resize(numUnknownLinks); for (unsigned int i2 = 0; i2 < unknownLinks.size(); i2++) { - NifStream( block_num, in, info ); - link_stack.push_back( block_num ); + NifStream( unknownLinks[i2], in, info ); }; }; if ( info.version >= 0x14000005 ) { @@ -80,29 +77,13 @@ void NiMeshPSysData::Write( ostream& out, const map<NiObjectRef,unsigned int> & NiPSysData::Write( out, link_map, info ); numUnknownLinks = (unsigned int)(unknownLinks.size()); if ( info.version <= 0x14000004 ) { - if ( info.version < VER_3_3_0_13 ) { - NifStream( (unsigned int)&(*modifier), out, info ); - } else { - if ( modifier != NULL ) { - NifStream( link_map.find( StaticCast<NiObject>(modifier) )->second, out, info ); - } else { - NifStream( 0xFFFFFFFF, out, info ); - } - } + NifStream( unknownModifier, out, info ); }; if ( ( info.version >= 0x0A020000 ) && ( info.version <= 0x14000004 ) ) { NifStream( unknownByte2, out, info ); NifStream( numUnknownLinks, out, info ); for (unsigned int i2 = 0; i2 < unknownLinks.size(); i2++) { - if ( info.version < VER_3_3_0_13 ) { - NifStream( (unsigned int)&(*unknownLinks[i2]), out, info ); - } else { - if ( unknownLinks[i2] != NULL ) { - NifStream( link_map.find( StaticCast<NiObject>(unknownLinks[i2]) )->second, out, info ); - } else { - NifStream( 0xFFFFFFFF, out, info ); - } - } + NifStream( unknownLinks[i2], out, info ); }; }; if ( info.version >= 0x14000005 ) { @@ -135,7 +116,7 @@ std::string NiMeshPSysData::asString( bool verbose ) const { unsigned int array_output_count = 0; out << NiPSysData::asString(); numUnknownLinks = (unsigned int)(unknownLinks.size()); - out << " Modifier: " << modifier << endl; + out << " Unknown Modifier: " << unknownModifier << endl; out << " Unknown Byte 2: " << unknownByte2 << endl; out << " Num Unknown Links: " << numUnknownLinks << endl; array_output_count = 0; @@ -166,14 +147,6 @@ void NiMeshPSysData::FixLinks( const map<unsigned int,NiObjectRef> & objects, li //--END CUSTOM CODE--// NiPSysData::FixLinks( objects, link_stack, info ); - if ( info.version <= 0x14000004 ) { - modifier = FixLink<NiObject>( objects, link_stack, info ); - }; - if ( ( info.version >= 0x0A020000 ) && ( info.version <= 0x14000004 ) ) { - for (unsigned int i2 = 0; i2 < unknownLinks.size(); i2++) { - unknownLinks[i2] = FixLink<NiObject>( objects, link_stack, info ); - }; - }; if ( info.version >= 0x0A020000 ) { unknownLink2 = FixLink<NiNode>( objects, link_stack, info ); }; @@ -185,12 +158,6 @@ void NiMeshPSysData::FixLinks( const map<unsigned int,NiObjectRef> & objects, li std::list<NiObjectRef> NiMeshPSysData::GetRefs() const { list<Ref<NiObject> > refs; refs = NiPSysData::GetRefs(); - if ( modifier != NULL ) - refs.push_back(StaticCast<NiObject>(modifier)); - for (unsigned int i1 = 0; i1 < unknownLinks.size(); i1++) { - if ( unknownLinks[i1] != NULL ) - refs.push_back(StaticCast<NiObject>(unknownLinks[i1])); - }; if ( unknownLink2 != NULL ) refs.push_back(StaticCast<NiObject>(unknownLink2)); return refs; diff --git a/src/obj/NiMorphData.cpp b/src/obj/NiMorphData.cpp index 848a931b38dcecd918664dc1fdb3da9ba00f7aed..edd1b1546d9c217667ebb002703ac3521bbb93fd 100644 --- a/src/obj/NiMorphData.cpp +++ b/src/obj/NiMorphData.cpp @@ -59,7 +59,7 @@ void NiMorphData::Read( istream& in, list<unsigned int> & link_stack, const NifI NifStream( morphs[i1].keys[i3], in, info, morphs[i1].interpolation ); }; }; - if ( ( info.version >= 0x0A01006A ) && ( info.version <= 0x0A01006A ) ) { + if ( ( info.version >= 0x0A01006A ) && ( info.version <= 0x0A020000 ) ) { NifStream( morphs[i1].unknownInt, in, info ); }; if ( ( info.version >= 0x14000004 ) && ( info.userVersion == 0 ) ) { @@ -96,7 +96,7 @@ void NiMorphData::Write( ostream& out, const map<NiObjectRef,unsigned int> & lin NifStream( morphs[i1].keys[i3], out, info, morphs[i1].interpolation ); }; }; - if ( ( info.version >= 0x0A01006A ) && ( info.version <= 0x0A01006A ) ) { + if ( ( info.version >= 0x0A01006A ) && ( info.version <= 0x0A020000 ) ) { NifStream( morphs[i1].unknownInt, out, info ); }; if ( ( info.version >= 0x14000004 ) && ( info.userVersion == 0 ) ) {