From e1216e164468472447129459561b853f64cbc3bf Mon Sep 17 00:00:00 2001
From: Shon Ferguson <shonferg@users.sourceforge.net>
Date: Thu, 24 May 2007 02:39:48 +0000
Subject: [PATCH] Preparing the 0.7 Release.

---
 Makefile                       | 558 +++++++++++++++++----------------
 NvTriStrip/NvTriStrip.h        |   2 +-
 NvTriStrip/NvTriStripObjects.h |   2 +-
 SConscript                     |  50 ---
 change_log.txt                 | 130 +++++++-
 include/FixLink.h              |   1 +
 include/dll_export.h           |   2 +-
 include/nif_math.h             | 147 +++++----
 niflib.vcproj                  |   6 +
 9 files changed, 513 insertions(+), 385 deletions(-)
 delete mode 100644 SConscript

diff --git a/Makefile b/Makefile
index 1b4f5ab4..4ab7e47e 100644
--- a/Makefile
+++ b/Makefile
@@ -29,8 +29,8 @@ CXXFLAGS	= $(CFLAGS)
 #IT should find the libs used, but if it doesn't specify here. Ex: -lm for libm.so.<whatever>
 LIBS		=
 L_FLAGS 	= -shared -Wl,-soname,libniflib.so.0
-VERSION		= .6.3
-VERSION_MIN	= .6
+VERSION		= 0.7
+VERSION_MIN	= 0.7
 TARGET  	= libniflib.so.0$(VERSION)
 
 TARGETA       = libniflib.a
@@ -46,271 +46,299 @@ TARGET2       = libniflib.so.0.$(VERSION_MIN)
 OBJ_FILES = NvTriStrip/NvTriStrip.o \
            NvTriStrip/NvTriStripObjects.o \
            NvTriStrip/VertexCache.o \
-           src/ComplexShape.o \
-           src/kfm.o \
-           src/NIF_IO.o \
-           src/nif_math.o \
-           src/niflib.o \
-           src/pch.o \
-           src/Type.o \
            TriStripper/connectivity_graph.o \
            TriStripper/policy.o \
-           TriStripper/tri_stripper.o \
-           src/gen/AVObject.o \
-           src/gen/BoundingBox.o \
-           src/gen/ByteArray.o \
-           src/gen/ControllerLink.o \
-           src/gen/enums.o \
-           src/gen/Footer.o \
-           src/gen/FurniturePosition.o \
-           src/gen/Header.o \
-           src/gen/hkTriangle.o \
-           src/gen/LimitedHingeDescriptor.o \
-           src/gen/LODRange.o \
-           src/gen/MatchGroup.o \
-           src/gen/MipMap.o \
-           src/gen/Morph.o \
-           src/gen/NodeGroup.o \
-           src/gen/obj_factories.o \
-           src/gen/obj_impl.o \
-           src/gen/OblivionColFilter.o \
-           src/gen/OblivionSubShape.o \
-           src/gen/Particle.o \
-           src/gen/QuaternionXYZW.o \
-           src/gen/RagDollDescriptor.o \
-           src/gen/ShaderTexDesc.o \
-           src/gen/SkinData.o \
-           src/gen/SkinPartition.o \
-           src/gen/SkinShape.o \
-           src/gen/SkinShapeGroup.o \
-           src/gen/SkinWeight.o \
-           src/gen/Sphere.o \
-           src/gen/StringPalette.o \
-           src/gen/TBC.o \
-           src/gen/TexDesc.o \
-           src/gen/TexSource.o \
-           src/obj/AbhkConstraint.o \
-           src/obj/AbhkRagdollConstraint.o \
-           src/obj/AbhkShapeCollection.o \
-           src/obj/ABoneLODController.o \
-           src/obj/AKeyedData.o \
-           src/obj/AParticleModifier.o \
-           src/obj/APSysCtlr.o \
-           src/obj/APSysData.o \
-           src/obj/AvoidNode.o \
-           src/obj/bhkBlendCollisionObject.o \
-           src/obj/bhkBlendController.o \
-           src/obj/bhkBoxShape.o \
-           src/obj/bhkCapsuleShape.o \
-           src/obj/bhkCollisionObject.o \
-           src/obj/bhkConvexShape.o \
-           src/obj/bhkConvexTransformShape.o \
-           src/obj/bhkConvexVerticesShape.o \
-           src/obj/bhkEntity.o \
-           src/obj/bhkHingeConstraint.o \
-           src/obj/bhkLimitedHingeConstraint.o \
-           src/obj/bhkListShape.o \
-           src/obj/bhkMalleableConstraint.o \
-           src/obj/bhkMoppBvTreeShape.o \
-           src/obj/bhkMultiSphereShape.o \
-           src/obj/bhkNiTriStripsShape.o \
-           src/obj/bhkPackedNiTriStripsShape.o \
-           src/obj/bhkPrismaticConstraint.o \
-           src/obj/bhkRagdollConstraint.o \
-           src/obj/bhkRefObject.o \
-           src/obj/bhkRigidBody.o \
-           src/obj/bhkRigidBodyT.o \
-           src/obj/bhkSerializable.o \
-           src/obj/bhkShape.o \
-           src/obj/bhkSimpleShapePhantom.o \
-           src/obj/bhkSPCollisionObject.o \
-           src/obj/bhkSphereRepShape.o \
-           src/obj/bhkSphereShape.o \
-           src/obj/bhkStiffSpringConstraint.o \
-           src/obj/bhkTransformShape.o \
-           src/obj/bhkWorldObject.o \
-           src/obj/BSBound.o \
-           src/obj/BSFurnitureMarker.o \
-           src/obj/BSKeyframeController.o \
-           src/obj/BSParentVelocityModifier.o \
-           src/obj/BSPSysArrayEmitter.o \
-           src/obj/BSXFlags.o \
-           src/obj/FxButton.o \
-           src/obj/FxRadioButton.o \
-           src/obj/FxWidget.o \
-           src/obj/hkPackedNiTriStripsData.o \
-           src/obj/NiAlphaController.o \
-           src/obj/NiAlphaProperty.o \
-           src/obj/NiAmbientLight.o \
-           src/obj/NiAutoNormalParticles.o \
-           src/obj/NiAutoNormalParticlesData.o \
-           src/obj/NiAVObject.o \
-           src/obj/NiBillboardNode.o \
-           src/obj/NiBinaryExtraData.o \
-           src/obj/NiBlendBoolInterpolator.o \
-           src/obj/NiBlendFloatInterpolator.o \
-           src/obj/NiBlendInterpolator.o \
-           src/obj/NiBlendPoint3Interpolator.o \
-           src/obj/NiBlendTransformInterpolator.o \
-           src/obj/NiBoneLODController.o \
-           src/obj/NiBoolData.o \
-           src/obj/NiBooleanExtraData.o \
-           src/obj/NiBoolInterpolator.o \
-           src/obj/NiBoolTimelineInterpolator.o \
-           src/obj/NiBSAnimationNode.o \
-           src/obj/NiBSBoneLODController.o \
-           src/obj/NiBSPArrayController.o \
-           src/obj/NiBSParticleNode.o \
-           src/obj/NiBSplineBasisData.o \
-           src/obj/NiBSplineCompFloatInterpolator.o \
-           src/obj/NiBSplineCompPoint3Interpolator.o \
-           src/obj/NiBSplineCompTransformInterpolator.o \
-           src/obj/NiBSplineData.o \
-           src/obj/NiBSplineInterpolator.o \
-           src/obj/NiCamera.o \
-           src/obj/NiClod.o \
-           src/obj/NiClodData.o \
-           src/obj/NiClodSkinInstance.o \
-           src/obj/NiCollisionData.o \
-           src/obj/NiCollisionObject.o \
-           src/obj/NiColorData.o \
-           src/obj/NiColorExtraData.o \
-           src/obj/NiControllerManager.o \
-           src/obj/NiControllerSequence.o \
-           src/obj/NiDefaultAVObjectPalette.o \
-           src/obj/NiDirectionalLight.o \
-           src/obj/NiDitherProperty.o \
-           src/obj/NiDynamicEffect.o \
-           src/obj/NiExtraData.o \
-           src/obj/NiFlipController.o \
-           src/obj/NiFloatData.o \
-           src/obj/NiFloatExtraData.o \
-           src/obj/NiFloatExtraDataController.o \
-           src/obj/NiFloatInterpolator.o \
-           src/obj/NiFloatsExtraData.o \
-           src/obj/NiFogProperty.o \
-           src/obj/NiGeometry.o \
-           src/obj/NiGeometryData.o \
-           src/obj/NiGeomMorpherController.o \
-           src/obj/NiGravity.o \
-           src/obj/NiImage.o \
-           src/obj/NiIntegerExtraData.o \
-           src/obj/NiIntegersExtraData.o \
-           src/obj/NiInterpolator.o \
-           src/obj/NiKeyframeController.o \
-           src/obj/NiKeyframeData.o \
-           src/obj/NiLight.o \
-           src/obj/NiLightColorController.o \
-           src/obj/NiLightDimmerController.o \
-           src/obj/NiLODData.o \
-           src/obj/NiLODNode.o \
-           src/obj/NiLookAtController.o \
-           src/obj/NiLookAtInterpolator.o \
-           src/obj/NiMaterialColorController.o \
-           src/obj/NiMaterialProperty.o \
-           src/obj/NiMeshParticleSystem.o \
-           src/obj/NiMeshPSysData.o \
-           src/obj/NiMorphData.o \
-           src/obj/NiMultiTargetTransformController.o \
-           src/obj/NiNode.o \
-           src/obj/NiObject.o \
-           src/obj/NiObjectNET.o \
-           src/obj/NiPalette.o \
-           src/obj/NiParticleBomb.o \
-           src/obj/NiParticleColorModifier.o \
-           src/obj/NiParticleGrowFade.o \
-           src/obj/NiParticleMeshes.o \
-           src/obj/NiParticleMeshesData.o \
-           src/obj/NiParticleMeshModifier.o \
-           src/obj/NiParticleRotation.o \
-           src/obj/NiParticles.o \
-           src/obj/NiParticlesData.o \
-           src/obj/NiParticleSystem.o \
-           src/obj/NiParticleSystemController.o \
-           src/obj/NiPathController.o \
-           src/obj/NiPathInterpolator.o \
-           src/obj/NiPixelData.o \
-           src/obj/NiPlanarCollider.o \
-           src/obj/NiPoint3Interpolator.o \
-           src/obj/NiPointLight.o \
-           src/obj/NiPosData.o \
-           src/obj/NiProperty.o \
-           src/obj/NiPSysAgeDeathModifier.o \
-           src/obj/NiPSysBombModifier.o \
-           src/obj/NiPSysBoundUpdateModifier.o \
-           src/obj/NiPSysBoxEmitter.o \
-           src/obj/NiPSysColliderManager.o \
-           src/obj/NiPSysColorModifier.o \
-           src/obj/NiPSysCylinderEmitter.o \
-           src/obj/NiPSysData.o \
-           src/obj/NiPSysDragModifier.o \
-           src/obj/NiPSysEmitter.o \
-           src/obj/NiPSysEmitterCtlr.o \
-           src/obj/NiPSysEmitterCtlrData.o \
-           src/obj/NiPSysEmitterDeclinationCtlr.o \
-           src/obj/NiPSysEmitterDeclinationVarCtlr.o \
-           src/obj/NiPSysEmitterInitialRadiusCtlr.o \
-           src/obj/NiPSysEmitterLifeSpanCtlr.o \
-           src/obj/NiPSysEmitterSpeedCtlr.o \
-           src/obj/NiPSysGravityModifier.o \
-           src/obj/NiPSysGravityStrengthCtlr.o \
-           src/obj/NiPSysGrowFadeModifier.o \
-           src/obj/NiPSysMeshEmitter.o \
-           src/obj/NiPSysMeshUpdateModifier.o \
-           src/obj/NiPSysModifier.o \
-           src/obj/NiPSysModifierActiveCtlr.o \
-           src/obj/NiPSysPlanarCollider.o \
-           src/obj/NiPSysPositionModifier.o \
-           src/obj/NiPSysResetOnLoopCtlr.o \
-           src/obj/NiPSysRotationModifier.o \
-           src/obj/NiPSysSpawnModifier.o \
-           src/obj/NiPSysSphereEmitter.o \
-           src/obj/NiPSysUpdateCtlr.o \
-           src/obj/NiPSysVolumeEmitter.o \
-           src/obj/NiRangeLODData.o \
-           src/obj/NiRotatingParticles.o \
-           src/obj/NiRotatingParticlesData.o \
-           src/obj/NiScreenLODData.o \
-           src/obj/NiSequenceStreamHelper.o \
-           src/obj/NiShadeProperty.o \
-           src/obj/NiSingleInterpolatorController.o \
-           src/obj/NiSkinData.o \
-           src/obj/NiSkinInstance.o \
-           src/obj/NiSkinPartition.o \
-           src/obj/NiSourceTexture.o \
-           src/obj/NiSpecularProperty.o \
-           src/obj/NiSphericalCollider.o \
-           src/obj/NiSpotLight.o \
-           src/obj/NiStencilProperty.o \
-           src/obj/NiStringExtraData.o \
-           src/obj/NiStringPalette.o \
-           src/obj/NiStringsExtraData.o \
-           src/obj/NiTextKeyExtraData.o \
-           src/obj/NiTextureEffect.o \
-           src/obj/NiTextureModeProperty.o \
-           src/obj/NiTextureProperty.o \
-           src/obj/NiTextureTransformController.o \
-           src/obj/NiTexturingProperty.o \
-           src/obj/NiTimeController.o \
-           src/obj/NiTransformController.o \
-           src/obj/NiTransformData.o \
-           src/obj/NiTransformInterpolator.o \
-           src/obj/NiTriBasedGeom.o \
-           src/obj/NiTriBasedGeomData.o \
-           src/obj/NiTriShape.o \
-           src/obj/NiTriShapeData.o \
-           src/obj/NiTriStrips.o \
-           src/obj/NiTriStripsData.o \
-           src/obj/NiUVController.o \
-           src/obj/NiUVData.o \
-           src/obj/NiVectorExtraData.o \
-           src/obj/NiVertexColorProperty.o \
-           src/obj/NiVertWeightsExtraData.o \
-           src/obj/NiVisController.o \
-           src/obj/NiVisData.o \
-           src/obj/NiWireframeProperty.o \
-           src/obj/NiZBufferProperty.o \
-           src/obj/RootCollisionNode.o
+           TriStripper/tri_stripper.o \
+           src/ComplexShape.o \
+           src/kfm.o \
+           src/niflib.o \
+           src/NIF_IO.o \
+           src/nif_math.o \
+           src/pch.o \
+           src/Type.o \
+           src/obj/AParticleModifier.o \
+           src/obj/AvoidNode.o \
+           src/obj/bhkBlendCollisionObject.o \
+           src/obj/bhkBlendController.o \
+           src/obj/bhkBoxShape.o \
+           src/obj/bhkBvTreeShape.o \
+           src/obj/bhkCapsuleShape.o \
+           src/obj/bhkCollisionObject.o \
+           src/obj/bhkConstraint.o \
+           src/obj/bhkConvexShape.o \
+           src/obj/bhkConvexTransformShape.o \
+           src/obj/bhkConvexVerticesShape.o \
+           src/obj/bhkEntity.o \
+           src/obj/bhkHingeConstraint.o \
+           src/obj/bhkLimitedHingeConstraint.o \
+           src/obj/bhkListShape.o \
+           src/obj/bhkMalleableConstraint.o \
+           src/obj/bhkMoppBvTreeShape.o \
+           src/obj/bhkMultiSphereShape.o \
+           src/obj/bhkNiCollisionObject.o \
+           src/obj/bhkNiTriStripsShape.o \
+           src/obj/bhkPackedNiTriStripsShape.o \
+           src/obj/bhkPCollisionObject.o \
+           src/obj/bhkPhantom.o \
+           src/obj/bhkPrismaticConstraint.o \
+           src/obj/bhkRagdollConstraint.o \
+           src/obj/bhkRefObject.o \
+           src/obj/bhkRigidBody.o \
+           src/obj/bhkRigidBodyT.o \
+           src/obj/bhkSerializable.o \
+           src/obj/bhkShape.o \
+           src/obj/bhkShapeCollection.o \
+           src/obj/bhkShapePhantom.o \
+           src/obj/bhkSimpleShapePhantom.o \
+           src/obj/bhkSPCollisionObject.o \
+           src/obj/bhkSphereRepShape.o \
+           src/obj/bhkSphereShape.o \
+           src/obj/bhkStiffSpringConstraint.o \
+           src/obj/bhkTransformShape.o \
+           src/obj/bhkWorldObject.o \
+           src/obj/BSBound.o \
+           src/obj/BSFurnitureMarker.o \
+           src/obj/BSKeyframeController.o \
+           src/obj/BSParentVelocityModifier.o \
+           src/obj/BSPSysArrayEmitter.o \
+           src/obj/BSWindModifier.o \
+           src/obj/BSXFlags.o \
+           src/obj/FxButton.o \
+           src/obj/FxRadioButton.o \
+           src/obj/FxWidget.o \
+           src/obj/hkPackedNiTriStripsData.o \
+           src/obj/NiAlphaController.o \
+           src/obj/NiAlphaProperty.o \
+           src/obj/NiAmbientLight.o \
+           src/obj/NiAutoNormalParticles.o \
+           src/obj/NiAutoNormalParticlesData.o \
+           src/obj/NiAVObject.o \
+           src/obj/NiAVObjectPalette.o \
+           src/obj/NiBillboardNode.o \
+           src/obj/NiBinaryExtraData.o \
+           src/obj/NiBinaryVoxelData.o \
+           src/obj/NiBinaryVoxelExtraData.o \
+           src/obj/NiBlendBoolInterpolator.o \
+           src/obj/NiBlendFloatInterpolator.o \
+           src/obj/NiBlendInterpolator.o \
+           src/obj/NiBlendPoint3Interpolator.o \
+           src/obj/NiBlendTransformInterpolator.o \
+           src/obj/NiBone.o \
+           src/obj/NiBoneLODController.o \
+           src/obj/NiBoolData.o \
+           src/obj/NiBooleanExtraData.o \
+           src/obj/NiBoolInterpController.o \
+           src/obj/NiBoolInterpolator.o \
+           src/obj/NiBoolTimelineInterpolator.o \
+           src/obj/NiBSAnimationNode.o \
+           src/obj/NiBSBoneLODController.o \
+           src/obj/NiBSPArrayController.o \
+           src/obj/NiBSParticleNode.o \
+           src/obj/NiBSplineBasisData.o \
+           src/obj/NiBSplineCompFloatInterpolator.o \
+           src/obj/NiBSplineCompPoint3Interpolator.o \
+           src/obj/NiBSplineCompTransformInterpolator.o \
+           src/obj/NiBSplineData.o \
+           src/obj/NiBSplineFloatInterpolator.o \
+           src/obj/NiBSplineInterpolator.o \
+           src/obj/NiBSplinePoint3Interpolator.o \
+           src/obj/NiBSplineTransformInterpolator.o \
+           src/obj/NiCamera.o \
+           src/obj/NiClod.o \
+           src/obj/NiClodData.o \
+           src/obj/NiClodSkinInstance.o \
+           src/obj/NiCollisionData.o \
+           src/obj/NiCollisionObject.o \
+           src/obj/NiColorData.o \
+           src/obj/NiColorExtraData.o \
+           src/obj/NiControllerManager.o \
+           src/obj/NiControllerSequence.o \
+           src/obj/NiDefaultAVObjectPalette.o \
+           src/obj/NiDirectionalLight.o \
+           src/obj/NiDitherProperty.o \
+           src/obj/NiDynamicEffect.o \
+           src/obj/NiExtraData.o \
+           src/obj/NiExtraDataController.o \
+           src/obj/NiFlipController.o \
+           src/obj/NiFloatData.o \
+           src/obj/NiFloatExtraData.o \
+           src/obj/NiFloatExtraDataController.o \
+           src/obj/NiFloatInterpController.o \
+           src/obj/NiFloatInterpolator.o \
+           src/obj/NiFloatsExtraData.o \
+           src/obj/NiFogProperty.o \
+           src/obj/NiGeometry.o \
+           src/obj/NiGeometryData.o \
+           src/obj/NiGeomMorpherController.o \
+           src/obj/NiGravity.o \
+           src/obj/NiImage.o \
+           src/obj/NiIntegerExtraData.o \
+           src/obj/NiIntegersExtraData.o \
+           src/obj/NiInterpController.o \
+           src/obj/NiInterpolator.o \
+           src/obj/NiKeyBasedInterpolator.o \
+           src/obj/NiKeyframeController.o \
+           src/obj/NiKeyframeData.o \
+           src/obj/NiLight.o \
+           src/obj/NiLightColorController.o \
+           src/obj/NiLightDimmerController.o \
+           src/obj/NiLODData.o \
+           src/obj/NiLODNode.o \
+           src/obj/NiLookAtController.o \
+           src/obj/NiLookAtInterpolator.o \
+           src/obj/NiMaterialColorController.o \
+           src/obj/NiMaterialProperty.o \
+           src/obj/NiMeshParticleSystem.o \
+           src/obj/NiMeshPSysData.o \
+           src/obj/NiMorphData.o \
+           src/obj/NiMultiTargetTransformController.o \
+           src/obj/NiMultiTextureProperty.o \
+           src/obj/NiNode.o \
+           src/obj/NiObject.o \
+           src/obj/NiObjectNET.o \
+           src/obj/NiPalette.o \
+           src/obj/NiParticleBomb.o \
+           src/obj/NiParticleColorModifier.o \
+           src/obj/NiParticleGrowFade.o \
+           src/obj/NiParticleMeshes.o \
+           src/obj/NiParticleMeshesData.o \
+           src/obj/NiParticleMeshModifier.o \
+           src/obj/NiParticleRotation.o \
+           src/obj/NiParticles.o \
+           src/obj/NiParticlesData.o \
+           src/obj/NiParticleSystem.o \
+           src/obj/NiParticleSystemController.o \
+           src/obj/NiPathController.o \
+           src/obj/NiPathInterpolator.o \
+           src/obj/NiPixelData.o \
+           src/obj/NiPlanarCollider.o \
+           src/obj/NiPoint3InterpController.o \
+           src/obj/NiPoint3Interpolator.o \
+           src/obj/NiPointLight.o \
+           src/obj/NiPosData.o \
+           src/obj/NiProperty.o \
+           src/obj/NiPSysAgeDeathModifier.o \
+           src/obj/NiPSysBombModifier.o \
+           src/obj/NiPSysBoundUpdateModifier.o \
+           src/obj/NiPSysBoxEmitter.o \
+           src/obj/NiPSysCollider.o \
+           src/obj/NiPSysColliderManager.o \
+           src/obj/NiPSysColorModifier.o \
+           src/obj/NiPSysCylinderEmitter.o \
+           src/obj/NiPSysData.o \
+           src/obj/NiPSysDragModifier.o \
+           src/obj/NiPSysEmitter.o \
+           src/obj/NiPSysEmitterCtlr.o \
+           src/obj/NiPSysEmitterCtlrData.o \
+           src/obj/NiPSysEmitterDeclinationCtlr.o \
+           src/obj/NiPSysEmitterDeclinationVarCtlr.o \
+           src/obj/NiPSysEmitterInitialRadiusCtlr.o \
+           src/obj/NiPSysEmitterLifeSpanCtlr.o \
+           src/obj/NiPSysEmitterSpeedCtlr.o \
+           src/obj/NiPSysGravityModifier.o \
+           src/obj/NiPSysGravityStrengthCtlr.o \
+           src/obj/NiPSysGrowFadeModifier.o \
+           src/obj/NiPSysMeshEmitter.o \
+           src/obj/NiPSysMeshUpdateModifier.o \
+           src/obj/NiPSysModifier.o \
+           src/obj/NiPSysModifierActiveCtlr.o \
+           src/obj/NiPSysModifierBoolCtlr.o \
+           src/obj/NiPSysModifierCtlr.o \
+           src/obj/NiPSysModifierFloatCtlr.o \
+           src/obj/NiPSysPlanarCollider.o \
+           src/obj/NiPSysPositionModifier.o \
+           src/obj/NiPSysResetOnLoopCtlr.o \
+           src/obj/NiPSysRotationModifier.o \
+           src/obj/NiPSysSpawnModifier.o \
+           src/obj/NiPSysSphereEmitter.o \
+           src/obj/NiPSysSphericalCollider.o \
+           src/obj/NiPSysUpdateCtlr.o \
+           src/obj/NiPSysVolumeEmitter.o \
+           src/obj/NiRangeLODData.o \
+           src/obj/NiRawImageData.o \
+           src/obj/NiRollController.o \
+           src/obj/NiRotatingParticles.o \
+           src/obj/NiRotatingParticlesData.o \
+           src/obj/NiScreenLODData.o \
+           src/obj/NiSequence.o \
+           src/obj/NiSequenceStreamHelper.o \
+           src/obj/NiShadeProperty.o \
+           src/obj/NiSingleInterpController.o \
+           src/obj/NiSkinData.o \
+           src/obj/NiSkinInstance.o \
+           src/obj/NiSkinPartition.o \
+           src/obj/NiSourceTexture.o \
+           src/obj/NiSpecularProperty.o \
+           src/obj/NiSphericalCollider.o \
+           src/obj/NiSpotLight.o \
+           src/obj/NiStencilProperty.o \
+           src/obj/NiStringExtraData.o \
+           src/obj/NiStringPalette.o \
+           src/obj/NiStringsExtraData.o \
+           src/obj/NiSwitchNode.o \
+           src/obj/NiTextKeyExtraData.o \
+           src/obj/NiTexture.o \
+           src/obj/NiTextureEffect.o \
+           src/obj/NiTextureModeProperty.o \
+           src/obj/NiTextureProperty.o \
+           src/obj/NiTextureTransformController.o \
+           src/obj/NiTexturingProperty.o \
+           src/obj/NiTimeController.o \
+           src/obj/NiTransformController.o \
+           src/obj/NiTransformData.o \
+           src/obj/NiTransformInterpolator.o \
+           src/obj/NiTriBasedGeom.o \
+           src/obj/NiTriBasedGeomData.o \
+           src/obj/NiTriShape.o \
+           src/obj/NiTriShapeData.o \
+           src/obj/NiTriShapeSkinController.o \
+           src/obj/NiTriStrips.o \
+           src/obj/NiTriStripsData.o \
+           src/obj/NiUVController.o \
+           src/obj/NiUVData.o \
+           src/obj/NiVectorExtraData.o \
+           src/obj/NiVertexColorProperty.o \
+           src/obj/NiVertWeightsExtraData.o \
+           src/obj/NiVisController.o \
+           src/obj/NiVisData.o \
+           src/obj/NiWireframeProperty.o \
+           src/obj/NiZBufferProperty.o \
+           src/obj/RootCollisionNode.o \
+           src/gen/AVObject.o \
+           src/gen/BoundingBox.o \
+           src/gen/ByteArray.o \
+           src/gen/ByteColor3.o \
+           src/gen/ByteColor4.o \
+           src/gen/ControllerLink.o \
+           src/gen/enums.o \
+           src/gen/Footer.o \
+           src/gen/FurniturePosition.o \
+           src/gen/Header.o \
+           src/gen/hkTriangle.o \
+           src/gen/LimitedHingeDescriptor.o \
+           src/gen/LODRange.o \
+           src/gen/MatchGroup.o \
+           src/gen/MipMap.o \
+           src/gen/Morph.o \
+           src/gen/MultiTextureElement.o \
+           src/gen/NodeGroup.o \
+           src/gen/OblivionColFilter.o \
+           src/gen/OblivionSubShape.o \
+           src/gen/OldSkinData.o \
+           src/gen/Particle.o \
+           src/gen/QuaternionXYZW.o \
+           src/gen/RagDollDescriptor.o \
+           src/gen/ShaderTexDesc.o \
+           src/gen/SkinData.o \
+           src/gen/SkinPartition.o \
+           src/gen/SkinShape.o \
+           src/gen/SkinShapeGroup.o \
+           src/gen/SkinWeight.o \
+           src/gen/Sphere.o \
+           src/gen/StringPalette.o \
+           src/gen/TBC.o \
+           src/gen/TexDesc.o \
+           src/gen/TexSource.o
 
 all: Makefile  $(TARGET)
 
diff --git a/NvTriStrip/NvTriStrip.h b/NvTriStrip/NvTriStrip.h
index 1e136d28..82b2186b 100644
--- a/NvTriStrip/NvTriStrip.h
+++ b/NvTriStrip/NvTriStrip.h
@@ -144,4 +144,4 @@ void RemapIndices(const PrimitiveGroup* in_primGroups, const unsigned short numG
 
 } //End namespace
 
-#endif
\ No newline at end of file
+#endif
diff --git a/NvTriStrip/NvTriStripObjects.h b/NvTriStrip/NvTriStripObjects.h
index 6c0b42e7..c8588a74 100644
--- a/NvTriStrip/NvTriStripObjects.h
+++ b/NvTriStrip/NvTriStripObjects.h
@@ -245,4 +245,4 @@ protected:
 
 } //End namespace
 
-#endif
\ No newline at end of file
+#endif
diff --git a/SConscript b/SConscript
deleted file mode 100644
index c14a6de7..00000000
--- a/SConscript
+++ /dev/null
@@ -1,50 +0,0 @@
-Import('*')
-
-# set up environment
-
-env_niflib = env.Copy()
-
-if sys.platform == 'win32':
-    env_niflib.Append(CCFLAGS = '/D "BUILDING_NIFLIB_DLL"')
-else:
-    env_niflib.Append(CCFLAGS = '-DBUILDING_NIFLIB_DLL')
-
-# generate code
-
-os.system('cd ' + os.path.join('..', '..', 'docsys') + ' && python nifxml_niflib.py -p ' + os.path.join('..' , 'niflib'))
-
-# list source files
-
-src_files = []
-
-for n in nifxml.compound_names:
-    x = nifxml.compound_types[n]
-    if n[:3] != 'ns ' and not x.niflibtype and not x.template:
-        src_files.append('src/gen/' + str(n) + '.cpp')
-
-for n in nifxml.block_names:
-    src_files.append('src/obj/' +  str(n) + '.cpp')
-
-src_files.extend(Split("""
-src/ComplexShape.cpp
-src/niflib.cpp
-src/nif_math.cpp
-src/NIF_IO.cpp
-src/kfm.cpp
-src/Type.cpp
-src/gen/obj_factories.cpp
-src/gen/enums.cpp
-src/gen/obj_impl.cpp
-TriStripper/connectivity_graph.cpp
-TriStripper/policy.cpp
-TriStripper/tri_stripper.cpp
-NvTriStrip/NvTriStrip.cpp
-NvTriStrip/NvTriStripObjects.cpp
-NvTriStrip/VertexCache.cpp
-"""))
-
-# build niflib
-
-niflib = env_niflib.SharedLibrary('niflib', src_files)
-
-Export('niflib')
diff --git a/change_log.txt b/change_log.txt
index 78d22478..55096443 100644
--- a/change_log.txt
+++ b/change_log.txt
@@ -480,4 +480,132 @@
  * Change default to little endian instead of big endian.
  * Added NiClodSkinInstance and fixed NiClodData.  Niflib can now open all
    Freedom Force demo NIF files.
- * Corrected Shape/particle hierarchy by adding NiGeometry and NiGeometryData.
\ No newline at end of file
+ * Corrected Shape/particle hierarchy by adding NiGeometry and NiGeometryData.
+ 
+ ==Version 0.7==
+ 
+ * Removed predefines from Doxyfile since they are no longer needed with the
+   new Python generation method.
+ * Disabled Whole Program Optimization in project settings.  This makes a full
+   recompile take longer, but makes compiling after small changes to a few
+   files much much faster.
+ * Niflib is now using a new XML update method.  This means:
+   - There are no longer any defines, things like inheritance class name, NIF
+     attribute variables, and default constructor code are all visible without
+     looking at another file.
+   - All non-custom parts of the Object files are now totally identical and in
+     the same order, so it will be easier to compare them.
+   - NiObjects are now completely self-contained.  To remove them from Niflib,
+     you have only to exclude their CPP file from the build.  To add new ones,
+     you only have to include their new CPP file.
+   - Making a change to a NiObject implementation file only causes that one
+     file to be re-compiled, which is generally much quicker than before since
+     the large obj_define and obj_impl files do not have to be parsed or
+     compiled.
+   - There are no longer any "Internal" versions of the Read, Write, asString,
+     FixLinks, or GetRefs functions.  Now there is just one function for each
+     of these with pre and post custom code areas (except for GetRefs which I
+     didn't think needed it.)
+   - Updates to the hierarchy in the XML should now be almost completely
+     automatic.  All that should be necessary to make an update is to add any
+     new NiObject CPP files to the build.
+   - Changes to the generated parts of the NiObject files can now be made at
+     any time, and immediately applied to all NiObjects without editing each
+     existing one.
+ * Moved FixLink template file from obj_impl.cpp to its own file.
+ * Moving array template to nif_basic_types so that NIF_IO won't need to be
+   exposed.
+ * Removed erroneous bhkMeshShape object.
+ * Added support in the version parsing functions for versions such as "3.03"
+   which were being parsed as "3.3.0.0" before.  These will now be parsed as
+   "3.0.3.0."
+ * All Bridge Commander demo NIF files other than those that contain voxel 3D
+   textures can now be read.
+ * All DAoC demo NIF files except those of version 2.3 and those that do not
+   appear to store NIF data can now be read.
+ * Updated user's guide.
+ * Added functions to NiImage and NiTextureProperty to allow texture name to be
+   manipulated in <= 3.1 files.
+ * Updated ComplexShape to take the above objects into account when deciding
+   whether to include UV coordinates.
+ * Fixed one more bug that allows 3.3.0.13 files to work again.
+ * Added 10.0.1.2 to the list of "supported" versions.
+ * Added version 3.1 to list of "supported" versions.
+ * Fixed several bugs that were preventing support for old 3.1 and below files
+   from working.  Many of these can now be loaded.
+ * Updated Niflib to the latest XML which adds support for:  bhkMeshShape,
+   NiMultiTextureProperty, NiRawImageData, NiRollController, NiSequence,
+   NiBinaryVoxelExtraData, NiBinaryVoxelData, NiPSysCollider, NiBone,
+   NiPSysSphericalCollider, BSWindModifier, NiTriShapeSkinController objects,
+   and possibly more.  This also significantly improves the class hierarchy.
+ * Objects now have a Create methods and register themselves in the global
+   object map with pre-main initialization, making obj_factories.cpp obsolete.
+ * Re-exposed TYPE constants and marked them NIFLIB_API, making the TypeConst
+   function obsolete.  You now must use NiObject::TYPE instead of
+   NiObject::TypeConst() again.
+ * Re-exposed IDENTITY constants and marked then NIFLIB_API.  Now you must use
+   MatrixXX::IDENTITY instead of MatrixXX::Identity() again.
+ * Changed the default linkage to DLL.  You now have to define
+   NIFLIB_STATIC_LINK if you want to use static linking instead of having to
+   define USE_NIFLIB_DLL if you want to use the DLL.
+ * Added a new Debug - DLL configuration.
+ * Static configurations now create either niflib_static.lib or
+   niflib_static_debug.lib, while DLL configurations create niflib_dll.lib and
+   niflib_dll_debug.lib along with niflib.dll and niflib_debug.dll.
+ * Added ClearHardareSkinInfo function to NiTriBasedGeom so that
+   SetSkinPartition functions could be made NIFLIB_HIDDEN.
+ * Removed access to unknown data in NiPSysEmitterCtlrData.
+ * Some function and enum name changes in NiAlphaProperty and
+   NiStencilProperty to be more consistent with OpenGL and the rest of Niflib.
+ * Removed access to unknown parameters in NiSourceTexture and merged file name
+   access functions.
+ * Removed redundant Get/SetHidden functions from NiAVObject, use
+   Get/SetVisibility instead.
+ * Renamed Get/SetCollision to Get/SetCollisionMode in NiAVObject.
+ * Made sure all classes fell into 3 namespaces:  Niflib, triangle_stripper,
+   and NvTriStrip.
+ * Removed some functions from NiObject that did nothing.
+ * Moved structures contained within the ComplexShape class outside of it so
+   they're easier to reference.
+ * Moved ListAncestors and FindCommonAncestor helper functions from inside of
+   NiGeometry to public interface.
+ * Added IsAnimated function to NiObjectNET.
+ * Implemented experimental endian support which means that Niflib may be able
+   to work on PowrePC Macs and other big-endian CPUs, however support is not
+   complete.  Theoretically it should be possible to read a big-endian file on
+   a little-endian system, but it is not possible to do the opposite, or to
+   create a little-endian file due to issues with the header needing to switch
+   endian types int he middle of the generated code and always read the bytes
+   that make up the NIF version in the same order.
+ * DLL files built with the MSVC project will now appear in the niflib/bin
+   folder instead of the common ../bin folder.  This should make it easier to
+   find the files if only the niflib folder is checked out.
+ * Added warning comments to generated files advising the user not to edit them
+   manually.
+ * Changed NiNode AddChild function to keep NiTriBasedGeom-derived objects at
+   the top of the list.  Fixes issue with Oblivion flattened skin file
+   hierarchies where the NiTriBasedGeom skin was appearing after the NiNode
+   bones that it used in the child list of their mutual parent.
+ * Project file now properly uses "Multithreaded DLL" runtime library for
+   "Release - DLL" configuration.
+ * Removed old SWIG-related code as SWIG will no longer be suppoted.
+ * Fixed GetIDString virtual function missmatch that was causing the name not
+   to show up when the function was called from a NiObjectRef.
+ * Removed precompiled header file stuff from project files that is no longer
+   used.
+ * Fixed Niflib DLL compile.  All public functions should now be marked with
+   either NIFLIB_API or NIFLIB_HIDDEN.  May have missed a few here or there
+   but they should be noticed eventually.
+ * All public functions are now documented with Doxygen comments.
+ * Changed all occurrences of uint and ushort to unsigned int and unsigned
+   short.
+ * Fixed many GCC compile problems.  Niflib should compile in GCC now:
+   - Replaced array template with a simpler one that works with GCC.
+   - Replaced "unsigned" with "unsigned int"  GCC doesn't like this.
+   - Changed C++ style unsigned int casts so GCC will be able to understand
+     them.
+   - Properly capitalized include file names in niflib.cpp.
+ * Changed as many functions as possible to take pointer arguments instead of
+   Ref template arguments.
+ * Prevented the link map from being copied unnecessarily, improving
+   performance and memory usage.
\ No newline at end of file
diff --git a/include/FixLink.h b/include/FixLink.h
index 54b7bd3e..b4889315 100644
--- a/include/FixLink.h
+++ b/include/FixLink.h
@@ -7,6 +7,7 @@ All rights reserved.  Please see niflib.h for license. */
 
 #include "obj/NiObject.h"
 #include "Ref.h"
+#include <stdexcept>
 namespace Niflib {
 
 using namespace std;
diff --git a/include/dll_export.h b/include/dll_export.h
index d01dd4ec..d8340ab6 100644
--- a/include/dll_export.h
+++ b/include/dll_export.h
@@ -14,7 +14,7 @@ All rights reserved.  Please see niflib.h for license. */
 
 #ifndef NIFLIB_STATIC_LINK
 	// Building shared library
-	#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || defined(__CYGWIN__)
+	#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER)
 		// Windows
 		#ifdef BUILDING_NIFLIB_DLL
 			//The building process is underway, export symbols
diff --git a/include/nif_math.h b/include/nif_math.h
index 5584813f..a299e927 100644
--- a/include/nif_math.h
+++ b/include/nif_math.h
@@ -31,18 +31,18 @@ struct Float4;
 struct Matrix44;
 
 /*! Stores 2D texture coordinates – two floating point variables, u and v. */
-struct NIFLIB_API TexCoord {
+struct TexCoord {
 	float u; /*!< The U value in this coordinate pair. */ 
 	float v; /*!< The V value in this coordinate pair. */ 
 
 	/*! Default constructor	*/
-	TexCoord() : u(0.0f), v(0.0f) {}
+	NIFLIB_API TexCoord() : u(0.0f), v(0.0f) {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] u The value to set U to.
 	 * \param[in] v The value to set V to.
 	 */
-	TexCoord(float u, float v) {
+	NIFLIB_API TexCoord(float u, float v) {
 		this->u = u;
 		this->v = v;
 	}
@@ -51,7 +51,7 @@ struct NIFLIB_API TexCoord {
 	 * \param[in] u The value to set U to.
 	 * \param[in] v The value to set V to.
 	 */
-	void Set(float u, float v) {
+	NIFLIB_API void Set(float u, float v) {
 		this->u = u;
 		this->v = v;
 	}
@@ -60,20 +60,20 @@ struct NIFLIB_API TexCoord {
 };
 
 /*! Represents a triangle face formed between three vertices referenced by number */
-struct NIFLIB_API Triangle {
+struct Triangle {
 	unsigned short v1; /*!< The index of the first vertex. */ 
 	unsigned short v2; /*!< The index of the second vertex. */ 
 	unsigned short v3; /*!< The index of the third vertex. */ 
 
 	/*! Default constructor */
-	Triangle() {}
+	NIFLIB_API Triangle() {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] v1 The index of the first vertex.
 	 * \param[in] v2 The index of the second vertex.
 	 * \param[in] v3 The index of the third vertex.
 	 */
-	Triangle(unsigned short v1, unsigned short v2, unsigned short v3) {
+	NIFLIB_API Triangle(unsigned short v1, unsigned short v2, unsigned short v3) {
 		this->v1 = v1;
 		this->v2 = v2;
 		this->v3 = v3;
@@ -84,7 +84,7 @@ struct NIFLIB_API Triangle {
 	 * \param[in] v2 The index of the second vertex.
 	 * \param[in] v3 The index of the third vertex.
 	 */
-	void Set(unsigned short v1, unsigned short v2, unsigned short v3) {
+	NIFLIB_API void Set(unsigned short v1, unsigned short v2, unsigned short v3) {
 		this->v1 = v1;
 		this->v2 = v2;
 		this->v3 = v3;
@@ -94,7 +94,7 @@ struct NIFLIB_API Triangle {
 	 * \param[in] n The index into the data array.  Should be 0, 1, or 2.
 	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
 	 */
-	unsigned short & operator[](int n) {
+	NIFLIB_API unsigned short & operator[](int n) {
 		switch (n) {
 			case 0: return v1; break;
 			case 1: return v2; break;
@@ -102,7 +102,7 @@ struct NIFLIB_API Triangle {
 			default: throw std::out_of_range("Index out of range for Triangle");
 		};
 	}
-	unsigned short operator[](int n) const {
+	NIFLIB_API unsigned short operator[](int n) const {
 		switch (n) {
 			case 0: return v1; break;
 			case 1: return v2; break;
@@ -113,20 +113,20 @@ struct NIFLIB_API Triangle {
 };
 
 /*!Represents a position or direction in 3D space*/
-struct NIFLIB_API Vector3 {
+struct Vector3 {
 	float x; /*!< The X component of this vector. */ 
 	float y; /*!< The Y component of this vector. */ 
 	float z; /*!< The Z component of this vector. */ 
 
 	/*!Default constructor.*/
-	Vector3() { x = y = z = 0.0f; }
+	NIFLIB_API Vector3() { x = y = z = 0.0f; }
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] x The value to set X to.
 	 * \param[in] y The value to set Y to.
 	 * \param[in] z The value to set Z to.
 	 */
-	Vector3(float x, float y, float z) {
+	NIFLIB_API Vector3(float x, float y, float z) {
 		this->x = x;
 		this->y = y;
 		this->z = z;
@@ -135,17 +135,17 @@ struct NIFLIB_API Vector3 {
 	/*! This constructor can be used to initialize this Vector3 with another Vector3
 	 * \param[in] v The Vector3 to construct this one from
 	 */
-	Vector3( const Vector3 & v) { x = v.x; y = v.y; z = v.z; }
+	NIFLIB_API Vector3( const Vector3 & v) { x = v.x; y = v.y; z = v.z; }
 	
 	/*! Destructor */
-	~Vector3() {}
+	NIFLIB_API ~Vector3() {}
 
 	/*! This function can be used to set all values in the structure at the same time.
 	 * \param[in] x The value to set X to.
 	 * \param[in] y The value to set Y to.
 	 * \param[in] z The value to set Z to.
 	 */
-	void Set(float x, float y, float z) {
+	NIFLIB_API void Set(float x, float y, float z) {
 		this->x = x;
 		this->y = y;
 		this->z = z;
@@ -154,40 +154,40 @@ struct NIFLIB_API Vector3 {
 	/* This function calculates the magnitude of this vector
 	 * \return the magnitude of the vector; its length.
 	 */
-	float Magnitude() const;
+	NIFLIB_API float Magnitude() const;
 
 	/* This function returns a normalization of this vector.  A vecctor pointing in the same
 	 * direction but with a magnitude, or length, of 1.
 	 */
-	Vector3 Normalized() const;
+	NIFLIB_API Vector3 Normalized() const;
 
 	/* Allows the addition of vectors.  Each component, x, y, y, is added with
 	 * the same component of the other vector.
 	 * \return The result of the addition.
 	 */
-	Vector3 operator+( const Vector3 & rh ) const;
+	NIFLIB_API Vector3 operator+( const Vector3 & rh ) const;
 
 	/* Adds the two vectors and then sets the result to the left-hand vector.
 	 * \return This vector is returned.
 	 */
-	Vector3 & operator+=( const Vector3 & rh );
+	NIFLIB_API Vector3 & operator+=( const Vector3 & rh );
 
 	/* Allows the subtraction of vectors.  Each component, x, y, y, is subtracted from
 	 * the same component of the other vector.
 	 * \return The result of the subtraction.
 	 */
-	Vector3 operator-( const Vector3 & rh ) const;
+	NIFLIB_API Vector3 operator-( const Vector3 & rh ) const;
 
 	/* This operator subtracts the two vectors and then sets the result to the left-hand vector.
 	 * \return This vector is returned.
 	 */
-	Vector3 & operator-=( const Vector3 & rh);
+	NIFLIB_API Vector3 & operator-=( const Vector3 & rh);
 
 	/* Allows scaler multiplication, that is multipying all components of the
 	 * vector, x, y and z, by the same number.
 	 * \return The result of the multiplication.
 	 */
-	Vector3 operator*( const float & rh) const; //Scalar Multiply
+	NIFLIB_API Vector3 operator*( const float & rh) const; //Scalar Multiply
 
 	/* Multipies a vector by a scalar and then sets the result to the left-hand vector.
 	 * \return This vector is returned.
@@ -197,18 +197,18 @@ struct NIFLIB_API Vector3 {
 	/* Multiplies a vector by a vector using the dot product
 	 * \return The dot product of the two vectors.
 	 */
-	float operator*( const Vector3 & v ) const;
+	NIFLIB_API float operator*( const Vector3 & v ) const;
 
 	/* Multiplies a vector by a vector using the cross product
 	 * \return The cross product of the two vectors.
 	 */
-	Vector3 operator^( const Vector3 & v ) const;
+	NIFLIB_API Vector3 operator^( const Vector3 & v ) const;
 
 	/* Allows scaler division, that is dividing all components of the
 	 * vector, x, y and z, by the same number.
 	 * \return The result of the division.
 	 */
-	Vector3 operator/( const float & rh ) const;
+	NIFLIB_API Vector3 operator/( const float & rh ) const;
 
 	/* Divides a vector by a scalar and then sets the result to the left-hand vector.
 	 * \return This vector is returned.
@@ -218,29 +218,29 @@ struct NIFLIB_API Vector3 {
 	/* Sets the components of this Vector3 to those of another Vector3 
 	 * \return This vector is returned.
 	 */
-	Vector3 & operator=( const Vector3 & v ) { x = v.x; y = v.y; z = v.z;  return *this; }
+	NIFLIB_API Vector3 & operator=( const Vector3 & v ) { x = v.x; y = v.y; z = v.z;  return *this; }
 
 	/* Tests the equality of two Vector3 structures.  Vectors are considered equal if all
 	 * three components are equal.
 	 */
-	bool operator==( const Vector3 & rh ) const;
+	NIFLIB_API bool operator==( const Vector3 & rh ) const;
 
 	/* Tests the inequality of two Vector3 structures.  Vectors are considered equal if all
 	 * three components are equal.
 	 */
-	bool operator!=( const Vector3 & rh ) const;
+	NIFLIB_API bool operator!=( const Vector3 & rh ) const;
 
 	/* Computes the dot product of two vectors; the angle between two vectors.
 	 * \param[in] rh The vector to perform the dot product with
 	 * \return The angle in radians between this vector and the one given
 	 */
-	float DotProduct( const Vector3 & rh ) const;
+	NIFLIB_API float DotProduct( const Vector3 & rh ) const;
 
 	/* Computes the cross product of two vectors; a vector perpendicular to both of them.
 	 * \param[in] The vector to perform the cross product with
 	 * \return A vector perpendicular to this vector and the one given
 	 */
-	Vector3 CrossProduct( const Vector3 & rh) const; //Cross Product
+	NIFLIB_API Vector3 CrossProduct( const Vector3 & rh) const; //Cross Product
 
 
 	///* Multiplies this Vector with a 4x4 matrix
@@ -257,28 +257,33 @@ struct NIFLIB_API Vector3 {
 };
 
 /* Stores two floating point numbers.  Used as a row of a Matrix22 */
-struct NIFLIB_API Float2 {
+struct Float2 {
 	float data[2]; /*!< The two floating point numbers stored as an array. */ 
 	
 	/*! The bracket operator makes it possible to use this structure like a C++ array.
 	 * \param[in] n The index into the data array.  Should be 0 or 1.
 	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
 	 */
-	float & operator[](int n) {
+	NIFLIB_API float & operator[](int n) {
 		return data[n];
 	}
-	float operator[](int n) const {
+
+	/*! The bracket operator makes it possible to use this structure like a C++ array.
+	 * \param[in] n The index into the data array.  Should be 0 or 1.
+	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
+	 */
+	NIFLIB_API float operator[](int n) const {
 		return data[n];
 	}
 
 	/*! Default constructor. */
-	Float2() {}
+	NIFLIB_API Float2() {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] f1 The value to set the first floating point number to.
 	 * \param[in] f2 The value to set the second floating point number to.
 	 */
-	Float2( float f1, float f2 ) {
+	NIFLIB_API Float2( float f1, float f2 ) {
 		data[0] = f1;
 		data[1] = f2;
 	}
@@ -287,7 +292,7 @@ struct NIFLIB_API Float2 {
 	 * \param[in] f1 The value to set the first floating point number to.
 	 * \param[in] f2 The value to set the second floating point number to.
 	 */
-	void Set( float f1, float f2 ) {
+	NIFLIB_API void Set( float f1, float f2 ) {
 		data[0] = f1;
 		data[1] = f2;
 	}
@@ -344,29 +349,34 @@ struct Matrix22 {
 };
 
 /* Stores three floating point numbers.  Used as a row of a Matrix33 and to store the data in attr_vector3 and attr_color3 type attributes. */
-struct NIFLIB_API Float3 {
+struct Float3 {
 	float data[3]; /*!< The three floating point numbers stored as an array. */ 
 
 	/*! The bracket operator makes it possible to use this structure like a C++ array.
 	 * \param[in] n The index into the data array.  Should be 0, 1, or 2.
 	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
 	 */
-	float & operator[](int n) {
+	NIFLIB_API float & operator[](int n) {
 		return data[n];
 	}
-	float operator[](int n) const {
+
+	/*! The bracket operator makes it possible to use this structure like a C++ array.
+	 * \param[in] n The index into the data array.  Should be 0, 1, or 2.
+	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
+	 */
+	NIFLIB_API float operator[](int n) const {
 		return data[n];
 	}
 
 	/*!Default constructor.*/
-	Float3() {}
+	NIFLIB_API Float3() {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] f1 The value to set the first floating point number to.
 	 * \param[in] f2 The value to set the second floating point number to.
 	 * \param[in] f3 The value to set the third floating point number to.
 	 */
-	Float3( float f1, float f2, float f3 ) {
+	NIFLIB_API Float3( float f1, float f2, float f3 ) {
 		data[0] = f1;
 		data[1] = f2;
 		data[2] = f3;
@@ -377,7 +387,7 @@ struct NIFLIB_API Float3 {
 	 * \param[in] f2 The value to set the second floating point number to.
 	 * \param[in] f3 The value to set the third floating point number to.
 	 */
-	void Set( float f1, float f2, float f3 ) {
+	NIFLIB_API void Set( float f1, float f2, float f3 ) {
 		data[0] = f1;
 		data[1] = f2;
 		data[2] = f3;
@@ -469,22 +479,27 @@ struct Matrix33 {
 
 
 /* Stores four floating point numbers.  Used as a row of a Matrix44. */
-struct NIFLIB_API Float4 {
+struct Float4 {
 	float data[4]; /*!< The four floating point numbers stored as an array. */ 
 
 	/*! The bracket operator makes it possible to use this structure like a C++ array.
 	 * \param[in] n The index into the data array.  Should be 0, 1, 2, or 3.
 	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
 	 */
-	float & operator[](int n) {
+	NIFLIB_API float & operator[](int n) {
 		return data[n];
 	}
-	float operator[](int n) const {
+
+	/*! The bracket operator makes it possible to use this structure like a C++ array.
+	 * \param[in] n The index into the data array.  Should be 0, 1, 2, or 3.
+	 * \return The value at the given array index by reference so it can be read or set via the bracket operator.
+	 */
+	NIFLIB_API float operator[](int n) const {
 		return data[n];
 	}
 
 	/*! Default Constructor.*/
-	Float4() {}
+	NIFLIB_API Float4() {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] f1 The value to set the first floating point number to.
@@ -492,7 +507,7 @@ struct NIFLIB_API Float4 {
 	 * \param[in] f3 The value to set the third floating point number to.
 	 * \param[in] f4 The value to set the fourth floating point number to.
 	 */
-	Float4( float f1, float f2, float f3, float f4 ) {
+	NIFLIB_API Float4( float f1, float f2, float f3, float f4 ) {
 		data[0] = f1;
 		data[1] = f2;
 		data[3] = f3;
@@ -505,7 +520,7 @@ struct NIFLIB_API Float4 {
 	 * \param[in] f3 The value to set the third floating point number to.
 	 * \param[in] f4 The value to set the fourth floating point number to.
 	 */
-	void Set( float f1, float f2, float f3, float f4 ) {
+	NIFLIB_API void Set( float f1, float f2, float f3, float f4 ) {
 		data[0] = f1;
 		data[1] = f2;
 		data[3] = f3;
@@ -601,7 +616,7 @@ struct Matrix44 {
 	 * \param[in] m43 The value to set at row 4, column 3.
 	 * \param[in] m44 The value to set at row 4, column 4.
 	 */
-	void Set(
+	NIFLIB_API void Set(
 		float m11, float m12, float m13, float m14,
 		float m21, float m22, float m23, float m24,
 		float m31, float m32, float m33, float m34,
@@ -727,20 +742,20 @@ struct Matrix44 {
 };
 
 /*! Stores a color along with alpha translucency */
-struct NIFLIB_API Color3 {
+struct Color3 {
 	float r; /*!< The red component of this color.  Should be between 0.0f and 1.0f. */ 
 	float g; /*!< The green component of this color.  Should be between 0.0f and 1.0f. */ 
 	float b; /*!< The blue component of this color.  Should be between 0.0f and 1.0f. */ 
 
 	/*! Default constructor */
-	Color3() {}
+	NIFLIB_API Color3() {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] r The value to set the red component of this color to.  Should be between 0.0f and 1.0f.
 	 * \param[in] g The value to set the green component of this color to. Should be between 0.0f and 1.0f.
 	 * \param[in] b The value to set the blue component of this color to.  Should be between 0.0f and 1.0f.
 	 */
-	Color3(float r, float g, float b) {
+	NIFLIB_API Color3(float r, float g, float b) {
 		this->r = r;
 		this->g = g;
 		this->b = b;
@@ -751,7 +766,7 @@ struct NIFLIB_API Color3 {
 	 * \param[in] g The value to set the green component of this color to. Should be between 0.0f and 1.0f.
 	 * \param[in] b The value to set the blue component of this color to.  Should be between 0.0f and 1.0f.
 	 */
-	void Set(float r, float g, float b) {
+	NIFLIB_API void Set(float r, float g, float b) {
 		this->r = r;
 		this->g = g;
 		this->b = b;
@@ -759,14 +774,14 @@ struct NIFLIB_API Color3 {
 };
 
 /*! Stores a color along with alpha translucency */
-struct NIFLIB_API Color4 {
+struct Color4 {
 	float r; /*!< The red component of this color.  Should be between 0.0f and 1.0f. */ 
 	float g; /*!< The green component of this color.  Should be between 0.0f and 1.0f. */ 
 	float b; /*!< The blue component of this color.  Should be between 0.0f and 1.0f. */ 
 	float a; /*!< The alpha translucency component of this color.  Should be between 0.0f and 1.0f. */ 
 
 	/*! Default constructor */
-	Color4() : r(0.0f), g(0.0f), b(0.0f), a(0.0f) {}
+	NIFLIB_API Color4() : r(0.0f), g(0.0f), b(0.0f), a(0.0f) {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] r The value to set the red component of this color to.  Should be between 0.0f and 1.0f.
@@ -774,7 +789,7 @@ struct NIFLIB_API Color4 {
 	 * \param[in] b The value to set the blue component of this color to.  Should be between 0.0f and 1.0f.
 	 * \param[in] a The value to set the alpha translucency component of this color to.  Should be between 0.0f and 1.0f.
 	 */
-	Color4(float r, float g, float b, float a = 1.0f) {
+	NIFLIB_API Color4(float r, float g, float b, float a = 1.0f) {
 		this->r = r;
 		this->g = g;
 		this->b = b;
@@ -787,31 +802,31 @@ struct NIFLIB_API Color4 {
 	 * \param[in] b The value to set the blue component of this color to.  Should be between 0.0f and 1.0f.
 	 * \param[in] a The value to set the alpha translucency component of this color to.  Should be between 0.0f and 1.0f.
 	 */
-	void Set(float r, float g, float b, float a = 1.0f) {
+	NIFLIB_API void Set(float r, float g, float b, float a = 1.0f) {
 		this->r = r;
 		this->g = g;
 		this->b = b;
 		this->a = a;
 	}
 
-	bool operator==( const Color4 & n ) const {
+	NIFLIB_API bool operator==( const Color4 & n ) const {
 		return ( r == n.r && g == n.g && b == n.b && a == n.a );
 	}
 
-	bool operator!=( const Color4 & n ) const {
+	NIFLIB_API bool operator!=( const Color4 & n ) const {
 		return ( r != n.r || g != n.g || b != n.b || a != n.a );
 	}
 };
 
 /*! Represents a quaternion - a 4D extention of complex numbers used as an alternitive to matrices to represent rotation.*/
-struct NIFLIB_API Quaternion {
+struct Quaternion {
 	float w; /*!< The W scalar component of this Quaternion. */ 
 	float x; /*!< The X vector component of this Quaternion. */ 
 	float y; /*!< The Y vector component of this Quaternion. */ 
 	float z; /*!< The Z vector component of this Quaternion. */ 
 
 	/*! Default constructor. */
-	Quaternion() {}
+	NIFLIB_API Quaternion() {}
 
 	/*! This constructor can be used to set all values in this structure during initialization
 	 * \param[in] w The value to set the W scalar component of this quaternion to.
@@ -819,7 +834,7 @@ struct NIFLIB_API Quaternion {
 	 * \param[in] y The value to set the Y vector component of this quaternion to.
 	 * \param[in] z The value to set the Z vector component of this quaternion to.
 	 */
-	Quaternion(float w, float x, float y, float z) {
+	NIFLIB_API Quaternion(float w, float x, float y, float z) {
 		this->w = w;
 		this->x = x;
 		this->y = y;
@@ -832,7 +847,7 @@ struct NIFLIB_API Quaternion {
 	 * \param[in] y The value to set the Y vector component of this quaternion to.
 	 * \param[in] z The value to set the Z vector component of this quaternion to.
 	 */
-	void Set(float w, float x, float y, float z) {
+	NIFLIB_API void Set(float w, float x, float y, float z) {
 		this->w = w;
 		this->x = x;
 		this->y = y;
@@ -842,14 +857,14 @@ struct NIFLIB_API Quaternion {
 	/*! This function returns a 3x3 matrix representation of the rotation stored in this quaternion.
 	 * \return a Matrix33 structure with an equivalent rotation to this quaternion.
 	 */
-	Matrix33 AsMatrix();
+	NIFLIB_API Matrix33 AsMatrix();
 
 	/*! This function returns a Euler Angle representation of the rotation stored in this quaternion.
 	 * The angles returned correspond to yaw, pitch, and roll and are in radiens.
 	 * \return a Float3 structure with the first value containing the yaw, the second the pitch,
 	 * and the third the roll.  The values are in radians.
 	 */
-	Float3 AsEulerYawPitchRoll();
+	NIFLIB_API Float3 AsEulerYawPitchRoll();
 };
 
 //--ostream functions for printing with cout--//
diff --git a/niflib.vcproj b/niflib.vcproj
index 78528762..b54dfb79 100644
--- a/niflib.vcproj
+++ b/niflib.vcproj
@@ -192,6 +192,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="bin\niflib.dll"
+				Version="0.7"
 				ImportLibrary="lib/niflib_dll.lib"
 			/>
 			<Tool
@@ -267,6 +268,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="bin\niflib_debug.dll"
+				Version="0.7"
 				ImportLibrary="lib/niflib_dll_debug.lib"
 			/>
 			<Tool
@@ -1529,6 +1531,10 @@
 				RelativePath=".\include\dll_export.h"
 				>
 			</File>
+			<File
+				RelativePath=".\include\FixLink.h"
+				>
+			</File>
 			<File
 				RelativePath=".\include\Key.h"
 				>
-- 
GitLab