Explorar o código

Merge pull request #951 from Azaezel/alpha403/clusterCleanups

inspector cleanups
Brian Roberts %!s(int64=2) %!d(string=hai) anos
pai
achega
6e35acf2a2
Modificáronse 100 ficheiros con 823 adicións e 732 borrados
  1. 1 0
      Engine/source/T3D/Scene.cpp
  2. 1 0
      Engine/source/T3D/accumulationVolume.cpp
  3. 1 0
      Engine/source/T3D/aiPlayer.cpp
  4. 1 0
      Engine/source/T3D/assets/CppAsset.cpp
  5. 1 0
      Engine/source/T3D/assets/CubemapAsset.cpp
  6. 1 0
      Engine/source/T3D/assets/ExampleAsset.cpp
  7. 1 0
      Engine/source/T3D/assets/GUIAsset.cpp
  8. 1 0
      Engine/source/T3D/assets/GameObjectAsset.cpp
  9. 1 0
      Engine/source/T3D/assets/ImageAsset.cpp
  10. 1 0
      Engine/source/T3D/assets/LevelAsset.cpp
  11. 1 0
      Engine/source/T3D/assets/MaterialAsset.cpp
  12. 1 0
      Engine/source/T3D/assets/ParticleAsset.cpp
  13. 1 0
      Engine/source/T3D/assets/PostEffectAsset.cpp
  14. 1 0
      Engine/source/T3D/assets/ScriptAsset.cpp
  15. 1 0
      Engine/source/T3D/assets/ShapeAnimationAsset.cpp
  16. 1 0
      Engine/source/T3D/assets/ShapeAsset.cpp
  17. 1 0
      Engine/source/T3D/assets/SoundAsset.cpp
  18. 1 0
      Engine/source/T3D/assets/TerrainAsset.cpp
  19. 1 0
      Engine/source/T3D/assets/TerrainMaterialAsset.cpp
  20. 3 0
      Engine/source/T3D/assets/assetImporter.cpp
  21. 1 0
      Engine/source/T3D/assets/stateMachineAsset.cpp
  22. 2 0
      Engine/source/T3D/camera.cpp
  23. 1 0
      Engine/source/T3D/convexShape.cpp
  24. 14 11
      Engine/source/T3D/debris.cpp
  25. 1 0
      Engine/source/T3D/decal/decalData.cpp
  26. 1 0
      Engine/source/T3D/examples/renderMeshExample.cpp
  27. 2 1
      Engine/source/T3D/examples/renderObjectExample.cpp
  28. 4 3
      Engine/source/T3D/examples/renderShapeExample.cpp
  29. 1 0
      Engine/source/T3D/fps/guiClockHud.cpp
  30. 1 0
      Engine/source/T3D/fps/guiCrossHairHud.cpp
  31. 1 0
      Engine/source/T3D/fps/guiHealthBarHud.cpp
  32. 3 2
      Engine/source/T3D/fps/guiHealthTextHud.cpp
  33. 1 0
      Engine/source/T3D/fps/guiShapeNameHud.cpp
  34. 142 127
      Engine/source/T3D/fx/explosion.cpp
  35. 1 0
      Engine/source/T3D/fx/fxFoliageReplicator.cpp
  36. 1 0
      Engine/source/T3D/fx/fxShapeReplicator.cpp
  37. 1 0
      Engine/source/T3D/fx/groundCover.cpp
  38. 2 0
      Engine/source/T3D/fx/lightning.cpp
  39. 1 0
      Engine/source/T3D/fx/particle.cpp
  40. 1 0
      Engine/source/T3D/fx/particleEmitter.cpp
  41. 2 0
      Engine/source/T3D/fx/particleEmitterNode.cpp
  42. 2 0
      Engine/source/T3D/fx/precipitation.cpp
  43. 2 0
      Engine/source/T3D/fx/ribbon.cpp
  44. 2 0
      Engine/source/T3D/fx/ribbonNode.cpp
  45. 2 1
      Engine/source/T3D/fx/splash.cpp
  46. 2 0
      Engine/source/T3D/gameBase/gameBase.cpp
  47. 1 0
      Engine/source/T3D/groundPlane.cpp
  48. 1 0
      Engine/source/T3D/guiObjectView.cpp
  49. 37 38
      Engine/source/T3D/item.cpp
  50. 1 0
      Engine/source/T3D/levelInfo.cpp
  51. 1 0
      Engine/source/T3D/lightAnimData.cpp
  52. 1 0
      Engine/source/T3D/lightBase.cpp
  53. 1 0
      Engine/source/T3D/lightDescription.cpp
  54. 1 0
      Engine/source/T3D/lightFlareData.cpp
  55. 1 0
      Engine/source/T3D/lighting/boxEnvironmentProbe.cpp
  56. 1 0
      Engine/source/T3D/lighting/reflectionProbe.cpp
  57. 1 0
      Engine/source/T3D/lighting/skylight.cpp
  58. 1 0
      Engine/source/T3D/lighting/sphereEnvironmentProbe.cpp
  59. 2 1
      Engine/source/T3D/missionArea.cpp
  60. 6 1
      Engine/source/T3D/missionMarker.cpp
  61. 1 0
      Engine/source/T3D/notesObject.cpp
  62. 3 1
      Engine/source/T3D/pathCamera.cpp
  63. 3 1
      Engine/source/T3D/pathShape.cpp
  64. 1 0
      Engine/source/T3D/physicalZone.cpp
  65. 10 8
      Engine/source/T3D/physics/physicsDebris.cpp
  66. 2 1
      Engine/source/T3D/physics/physicsForce.cpp
  67. 7 6
      Engine/source/T3D/physics/physicsShape.cpp
  68. 3 3
      Engine/source/T3D/player.cpp
  69. 1 0
      Engine/source/T3D/pointLight.cpp
  70. 1 0
      Engine/source/T3D/portal.cpp
  71. 1 0
      Engine/source/T3D/prefab.cpp
  72. 86 84
      Engine/source/T3D/projectile.cpp
  73. 7 8
      Engine/source/T3D/proximityMine.cpp
  74. 28 47
      Engine/source/T3D/rigidShape.cpp
  75. 1 0
      Engine/source/T3D/scopeAlwaysShape.cpp
  76. 1 0
      Engine/source/T3D/sfx/sfxEmitter.cpp
  77. 28 49
      Engine/source/T3D/shapeBase.cpp
  78. 0 2
      Engine/source/T3D/shapeBase.h
  79. 124 140
      Engine/source/T3D/shapeImage.cpp
  80. 1 0
      Engine/source/T3D/spotLight.cpp
  81. 3 5
      Engine/source/T3D/staticShape.cpp
  82. 2 0
      Engine/source/T3D/trigger.cpp
  83. 9 8
      Engine/source/T3D/tsStatic.cpp
  84. 24 25
      Engine/source/T3D/turret/aiTurretShape.cpp
  85. 27 25
      Engine/source/T3D/turret/turretShape.cpp
  86. 37 17
      Engine/source/T3D/vehicles/flyingVehicle.cpp
  87. 1 0
      Engine/source/T3D/vehicles/guiSpeedometer.cpp
  88. 74 77
      Engine/source/T3D/vehicles/hoverVehicle.cpp
  89. 35 25
      Engine/source/T3D/vehicles/vehicle.cpp
  90. 1 0
      Engine/source/T3D/vehicles/vehicleBlocker.cpp
  91. 14 5
      Engine/source/T3D/vehicles/wheeledVehicle.cpp
  92. 1 0
      Engine/source/T3D/zone.cpp
  93. 2 1
      Engine/source/Verve/Core/VController.cpp
  94. 1 1
      Engine/source/Verve/Core/VController.h
  95. 3 2
      Engine/source/Verve/Core/VEvent.cpp
  96. 1 1
      Engine/source/Verve/Core/VEvent.h
  97. 2 1
      Engine/source/Verve/Core/VObject.cpp
  98. 1 1
      Engine/source/Verve/Core/VObject.h
  99. 3 2
      Engine/source/Verve/Extension/Animation/VShapeAnimationEvent.cpp
  100. 1 1
      Engine/source/Verve/Extension/Animation/VShapeAnimationEvent.h

+ 1 - 0
Engine/source/T3D/Scene.cpp

@@ -24,6 +24,7 @@ Scene::~Scene()
 
 
 void Scene::initPersistFields()
 void Scene::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
    addGroup("Internal");
    addGroup("Internal");

+ 1 - 0
Engine/source/T3D/accumulationVolume.cpp

@@ -97,6 +97,7 @@ AccumulationVolume::~AccumulationVolume()
 
 
 void AccumulationVolume::initPersistFields()
 void AccumulationVolume::initPersistFields()
 {
 {
+   docsURL;
    addProtectedField("textureAsset", TypeImageAssetId, Offset(mTextureAssetId, AccumulationVolume),
    addProtectedField("textureAsset", TypeImageAssetId, Offset(mTextureAssetId, AccumulationVolume),
       &_setTexture, &defaultProtectedGetFn, "Accumulation texture.");
       &_setTexture, &defaultProtectedGetFn, "Accumulation texture.");
    addProtectedField( "texture", TypeStringFilename, Offset( mTextureName, AccumulationVolume ),
    addProtectedField( "texture", TypeStringFilename, Offset( mTextureName, AccumulationVolume ),

+ 1 - 0
Engine/source/T3D/aiPlayer.cpp

@@ -133,6 +133,7 @@ AIPlayer::~AIPlayer()
 
 
 void AIPlayer::initPersistFields()
 void AIPlayer::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "AI" );
    addGroup( "AI" );
 
 
       addField( "mMoveTolerance", TypeF32, Offset( mMoveTolerance, AIPlayer ), 
       addField( "mMoveTolerance", TypeF32, Offset( mMoveTolerance, AIPlayer ), 

+ 1 - 0
Engine/source/T3D/assets/CppAsset.cpp

@@ -107,6 +107,7 @@ CppAsset::~CppAsset()
 
 
 void CppAsset::initPersistFields()
 void CppAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/CubemapAsset.cpp

@@ -111,6 +111,7 @@ CubemapAsset::~CubemapAsset()
 
 
 void CubemapAsset::initPersistFields()
 void CubemapAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/ExampleAsset.cpp

@@ -104,6 +104,7 @@ ExampleAsset::~ExampleAsset()
 
 
 void ExampleAsset::initPersistFields()
 void ExampleAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/GUIAsset.cpp

@@ -95,6 +95,7 @@ GUIAsset::~GUIAsset()
 
 
 void GUIAsset::initPersistFields()
 void GUIAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/GameObjectAsset.cpp

@@ -109,6 +109,7 @@ GameObjectAsset::~GameObjectAsset()
 
 
 void GameObjectAsset::initPersistFields()
 void GameObjectAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/ImageAsset.cpp

@@ -155,6 +155,7 @@ void ImageAsset::consoleInit()
 
 
 void ImageAsset::initPersistFields()
 void ImageAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/LevelAsset.cpp

@@ -111,6 +111,7 @@ LevelAsset::~LevelAsset()
 
 
 void LevelAsset::initPersistFields()
 void LevelAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/MaterialAsset.cpp

@@ -150,6 +150,7 @@ void MaterialAsset::consoleInit()
 
 
 void MaterialAsset::initPersistFields()
 void MaterialAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/ParticleAsset.cpp

@@ -106,6 +106,7 @@ ParticleAsset::~ParticleAsset()
 
 
 void ParticleAsset::initPersistFields()
 void ParticleAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/PostEffectAsset.cpp

@@ -111,6 +111,7 @@ PostEffectAsset::~PostEffectAsset()
 
 
 void PostEffectAsset::initPersistFields()
 void PostEffectAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/ScriptAsset.cpp

@@ -105,6 +105,7 @@ ScriptAsset::~ScriptAsset()
 
 
 void ScriptAsset::initPersistFields()
 void ScriptAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/ShapeAnimationAsset.cpp

@@ -112,6 +112,7 @@ ShapeAnimationAsset::~ShapeAnimationAsset()
 
 
 void ShapeAnimationAsset::initPersistFields()
 void ShapeAnimationAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/ShapeAsset.cpp

@@ -165,6 +165,7 @@ void ShapeAsset::consoleInit()
 
 
 void ShapeAsset::initPersistFields()
 void ShapeAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/SoundAsset.cpp

@@ -147,6 +147,7 @@ SoundAsset::~SoundAsset()
 
 
 void SoundAsset::initPersistFields()
 void SoundAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/TerrainAsset.cpp

@@ -134,6 +134,7 @@ TerrainAsset::~TerrainAsset()
 
 
 void TerrainAsset::initPersistFields()
 void TerrainAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/assets/TerrainMaterialAsset.cpp

@@ -153,6 +153,7 @@ void TerrainMaterialAsset::consoleInit()
 
 
 void TerrainMaterialAsset::initPersistFields()
 void TerrainMaterialAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 3 - 0
Engine/source/T3D/assets/assetImporter.cpp

@@ -134,6 +134,7 @@ void AssetImportConfig::onRemove()
 /// Engine.
 /// Engine.
 void AssetImportConfig::initPersistFields()
 void AssetImportConfig::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
    addGroup("General");
    addGroup("General");
@@ -466,6 +467,7 @@ void AssetImportObject::onRemove()
 
 
 void AssetImportObject::initPersistFields()
 void AssetImportObject::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
    addField("assetType", TypeRealString, Offset(assetType, AssetImportObject), "What type is the importing asset");
    addField("assetType", TypeRealString, Offset(assetType, AssetImportObject), "What type is the importing asset");
@@ -539,6 +541,7 @@ void AssetImporter::onRemove()
 
 
 void AssetImporter::initPersistFields()
 void AssetImporter::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
    addField("targetModuleId", TypeRealString, Offset(targetModuleId, AssetImporter), "The Id of the module the assets are to be imported into");
    addField("targetModuleId", TypeRealString, Offset(targetModuleId, AssetImporter), "The Id of the module the assets are to be imported into");

+ 1 - 0
Engine/source/T3D/assets/stateMachineAsset.cpp

@@ -106,6 +106,7 @@ StateMachineAsset::~StateMachineAsset()
 
 
 void StateMachineAsset::initPersistFields()
 void StateMachineAsset::initPersistFields()
 {
 {
+   docsURL;
    // Call parent.
    // Call parent.
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 2 - 0
Engine/source/T3D/camera.cpp

@@ -85,6 +85,7 @@ ConsoleDocClass( CameraData,
 
 
 void CameraData::initPersistFields()
 void CameraData::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -1307,6 +1308,7 @@ void Camera::unpackUpdate(NetConnection *con, BitStream *bstream)
 
 
 void Camera::initPersistFields()
 void Camera::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Camera" );
    addGroup( "Camera" );
       addProtectedField( "controlMode", TYPEID< CameraMotionMode >(), Offset( mMode, Camera ),
       addProtectedField( "controlMode", TYPEID< CameraMotionMode >(), Offset( mMode, Camera ),
          &_setModeField, &defaultProtectedGetFn,
          &_setModeField, &defaultProtectedGetFn,

+ 1 - 0
Engine/source/T3D/convexShape.cpp

@@ -309,6 +309,7 @@ ConvexShape::~ConvexShape()
 
 
 void ConvexShape::initPersistFields()
 void ConvexShape::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Rendering" );
    addGroup( "Rendering" );
 
 
       INITPERSISTFIELD_MATERIALASSET(Material, ConvexShape, "Default material used to render the ConvexShape surface.");
       INITPERSISTFIELD_MATERIALASSET(Material, ConvexShape, "Default material used to render the ConvexShape surface.");

+ 14 - 11
Engine/source/T3D/debris.cpp

@@ -295,21 +295,23 @@ bool DebrisData::preload(bool server, String &errorStr)
 
 
 void DebrisData::initPersistFields()
 void DebrisData::initPersistFields()
 {
 {
-   addGroup("Display");
-   addField("texture",              TypeString,                  Offset(textureName,         DebrisData), 
-      "@brief Texture imagemap to use for this debris object.\n\nNot used any more.\n", AbstractClassRep::FIELD_HideInInspectors);
-
-   INITPERSISTFIELD_SHAPEASSET(Shape, DebrisData, "Shape to use for this debris object.");
-   endGroup("Display");
-
+   docsURL;
+   addGroup("Shapes");
+      addField("texture",              TypeString,                  Offset(textureName,         DebrisData), 
+         "@brief Texture imagemap to use for this debris object.\n\nNot used any more.\n", AbstractClassRep::FIELD_HideInInspectors);
+      INITPERSISTFIELD_SHAPEASSET(Shape, DebrisData, "Shape to use for this debris object.");
+   endGroup("Shapes");
+
+   addGroup("Particle Effects");
+      addField("emitters",             TYPEID< ParticleEmitterData >(),  Offset(emitterList,    DebrisData), DDC_NUM_EMITTERS, 
+         "@brief List of particle emitters to spawn along with this debris object.\n\nThese are optional.  You could have Debris made up of only a shape.\n");
+   addGroup("Particle Effects");
    addGroup("Datablocks");
    addGroup("Datablocks");
-   addField("emitters",             TYPEID< ParticleEmitterData >(),  Offset(emitterList,    DebrisData), DDC_NUM_EMITTERS, 
-      "@brief List of particle emitters to spawn along with this debris object.\n\nThese are optional.  You could have Debris made up of only a shape.\n");
    addField("explosion",            TYPEID< ExplosionData >(),   Offset(explosion,           DebrisData), 
    addField("explosion",            TYPEID< ExplosionData >(),   Offset(explosion,           DebrisData), 
       "@brief ExplosionData to spawn along with this debris object.\n\nThis is optional as not all Debris explode.\n");
       "@brief ExplosionData to spawn along with this debris object.\n\nThis is optional as not all Debris explode.\n");
    endGroup("Datablocks");
    endGroup("Datablocks");
 
 
-   addGroup("Physical Properties");
+   addGroup("Physics");
    addField("elasticity",           TypeF32,                     Offset(elasticity,          DebrisData), 
    addField("elasticity",           TypeF32,                     Offset(elasticity,          DebrisData), 
       "@brief A floating-point value specifying how 'bouncy' this object is.\n\nMust be in the range of -10 to 10.\n");
       "@brief A floating-point value specifying how 'bouncy' this object is.\n\nMust be in the range of -10 to 10.\n");
    addField("friction",             TypeF32,                     Offset(friction,            DebrisData), 
    addField("friction",             TypeF32,                     Offset(friction,            DebrisData), 
@@ -338,7 +340,7 @@ void DebrisData::initPersistFields()
       "@brief Use mass calculations based on radius.\n\nAllows for the adjustment of elasticity and friction based on the Debris size.\n@see baseRadius\n");
       "@brief Use mass calculations based on radius.\n\nAllows for the adjustment of elasticity and friction based on the Debris size.\n@see baseRadius\n");
    addField("baseRadius",           TypeF32,                     Offset(baseRadius,          DebrisData), 
    addField("baseRadius",           TypeF32,                     Offset(baseRadius,          DebrisData), 
       "@brief Radius at which the standard elasticity and friction apply.\n\nOnly used when useRaduisMass is true.\n@see useRadiusMass.\n");
       "@brief Radius at which the standard elasticity and friction apply.\n\nOnly used when useRaduisMass is true.\n@see useRadiusMass.\n");
-   endGroup("Physical Properties");
+   endGroup("Physics");
 
 
    addGroup("Behavior");
    addGroup("Behavior");
    addField("explodeOnMaxBounce",   TypeBool,                    Offset(explodeOnMaxBounce,  DebrisData), 
    addField("explodeOnMaxBounce",   TypeBool,                    Offset(explodeOnMaxBounce,  DebrisData), 
@@ -566,6 +568,7 @@ Debris::~Debris()
 
 
 void Debris::initPersistFields()
 void Debris::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Debris" );	
    addGroup( "Debris" );	
    
    
       addField( "lifetime", TypeF32, Offset(mLifetime, Debris), 
       addField( "lifetime", TypeF32, Offset(mLifetime, Debris), 

+ 1 - 0
Engine/source/T3D/decal/decalData.cpp

@@ -138,6 +138,7 @@ void DecalData::onRemove()
 
 
 void DecalData::initPersistFields()
 void DecalData::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Decal" );
    addGroup( "Decal" );
 
 
       addField( "size", TypeF32, Offset( size, DecalData ), 
       addField( "size", TypeF32, Offset( size, DecalData ), 

+ 1 - 0
Engine/source/T3D/examples/renderMeshExample.cpp

@@ -74,6 +74,7 @@ RenderMeshExample::~RenderMeshExample()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void RenderMeshExample::initPersistFields()
 void RenderMeshExample::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Rendering" );
    addGroup( "Rendering" );
    INITPERSISTFIELD_MATERIALASSET(Material, RenderMeshExample, "The material used to render the mesh.");
    INITPERSISTFIELD_MATERIALASSET(Material, RenderMeshExample, "The material used to render the mesh.");
    endGroup( "Rendering" );
    endGroup( "Rendering" );

+ 2 - 1
Engine/source/T3D/examples/renderObjectExample.cpp

@@ -68,6 +68,7 @@ RenderObjectExample::~RenderObjectExample()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void RenderObjectExample::initPersistFields()
 void RenderObjectExample::initPersistFields()
 {
 {
+   docsURL;
    // SceneObject already handles exposing the transform
    // SceneObject already handles exposing the transform
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
@@ -277,4 +278,4 @@ void RenderObjectExample::render( ObjectRenderInst *ri, SceneRenderState *state,
 
 
    // Draw our triangles
    // Draw our triangles
    GFX->drawPrimitive( GFXTriangleList, 0, 12 );
    GFX->drawPrimitive( GFXTriangleList, 0, 12 );
-}
+}

+ 4 - 3
Engine/source/T3D/examples/renderShapeExample.cpp

@@ -72,12 +72,13 @@ RenderShapeExample::~RenderShapeExample()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void RenderShapeExample::initPersistFields()
 void RenderShapeExample::initPersistFields()
 {
 {
-   addGroup( "Rendering" );
+   docsURL;
+   Parent::initPersistFields();
+   addGroup( "Shapes" );
    INITPERSISTFIELD_SHAPEASSET(Shape, RenderShapeExample, "The path to the shape file.")
    INITPERSISTFIELD_SHAPEASSET(Shape, RenderShapeExample, "The path to the shape file.")
-   endGroup( "Rendering" );
+   endGroup( "Shapes" );
 
 
    // SceneObject already handles exposing the transform
    // SceneObject already handles exposing the transform
-   Parent::initPersistFields();
 }
 }
 
 
 void RenderShapeExample::inspectPostApply()
 void RenderShapeExample::inspectPostApply()

+ 1 - 0
Engine/source/T3D/fps/guiClockHud.cpp

@@ -97,6 +97,7 @@ GuiClockHud::GuiClockHud()
 
 
 void GuiClockHud::initPersistFields()
 void GuiClockHud::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Misc");		
    addGroup("Misc");		
    addField( "showFill", TypeBool, Offset( mShowFill, GuiClockHud ), "If true, draws a background color behind the control.");
    addField( "showFill", TypeBool, Offset( mShowFill, GuiClockHud ), "If true, draws a background color behind the control.");
    addField( "showFrame", TypeBool, Offset( mShowFrame, GuiClockHud ), "If true, draws a frame around the control." );
    addField( "showFrame", TypeBool, Offset( mShowFrame, GuiClockHud ), "If true, draws a frame around the control." );

+ 1 - 0
Engine/source/T3D/fps/guiCrossHairHud.cpp

@@ -99,6 +99,7 @@ GuiCrossHairHud::GuiCrossHairHud()
 
 
 void GuiCrossHairHud::initPersistFields()
 void GuiCrossHairHud::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Damage");		
    addGroup("Damage");		
    addField( "damageFillColor", TypeColorF, Offset( mDamageFillColor, GuiCrossHairHud ), "As the health bar depletes, this color will represent the health loss amount." );
    addField( "damageFillColor", TypeColorF, Offset( mDamageFillColor, GuiCrossHairHud ), "As the health bar depletes, this color will represent the health loss amount." );
    addField( "damageFrameColor", TypeColorF, Offset( mDamageFrameColor, GuiCrossHairHud ), "Color for the health bar's frame." );
    addField( "damageFrameColor", TypeColorF, Offset( mDamageFrameColor, GuiCrossHairHud ), "Color for the health bar's frame." );

+ 1 - 0
Engine/source/T3D/fps/guiHealthBarHud.cpp

@@ -112,6 +112,7 @@ GuiHealthBarHud::GuiHealthBarHud()
 
 
 void GuiHealthBarHud::initPersistFields()
 void GuiHealthBarHud::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Colors");		
    addGroup("Colors");		
    addField( "fillColor", TypeColorF, Offset( mFillColor, GuiHealthBarHud ), "Standard color for the background of the control." );
    addField( "fillColor", TypeColorF, Offset( mFillColor, GuiHealthBarHud ), "Standard color for the background of the control." );
    addField( "frameColor", TypeColorF, Offset( mFrameColor, GuiHealthBarHud ), "Color for the control's frame." );
    addField( "frameColor", TypeColorF, Offset( mFrameColor, GuiHealthBarHud ), "Color for the control's frame." );

+ 3 - 2
Engine/source/T3D/fps/guiHealthTextHud.cpp

@@ -115,7 +115,8 @@ GuiHealthTextHud::GuiHealthTextHud()
 }  
 }  
   
   
 void GuiHealthTextHud::initPersistFields()  
 void GuiHealthTextHud::initPersistFields()  
-{  
+{
+   docsURL;
    addGroup("Colors");       
    addGroup("Colors");       
    addField("fillColor", TypeColorF, Offset(mFillColor, GuiHealthTextHud), "Color for the background of the control.");  
    addField("fillColor", TypeColorF, Offset(mFillColor, GuiHealthTextHud), "Color for the background of the control.");  
    addField("frameColor", TypeColorF, Offset(mFrameColor, GuiHealthTextHud), "Color for the control's frame.");  
    addField("frameColor", TypeColorF, Offset(mFrameColor, GuiHealthTextHud), "Color for the control's frame.");  
@@ -199,4 +200,4 @@ void GuiHealthTextHud::onRender(Point2I offset, const RectI &updateRect)
    // If enabled draw the border last  
    // If enabled draw the border last  
    if (mShowFrame)  
    if (mShowFrame)  
       drawUtil->drawRect(updateRect, mFrameColor.toColorI());
       drawUtil->drawRect(updateRect, mFrameColor.toColorI());
-}  
+}  

+ 1 - 0
Engine/source/T3D/fps/guiShapeNameHud.cpp

@@ -126,6 +126,7 @@ GuiShapeNameHud::GuiShapeNameHud()
 
 
 void GuiShapeNameHud::initPersistFields()
 void GuiShapeNameHud::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Colors");     
    addGroup("Colors");     
    addField( "fillColor",  TypeColorF, Offset( mFillColor, GuiShapeNameHud ), "Standard color for the background of the control." );
    addField( "fillColor",  TypeColorF, Offset( mFillColor, GuiShapeNameHud ), "Standard color for the background of the control." );
    addField( "frameColor", TypeColorF, Offset( mFrameColor, GuiShapeNameHud ), "Color for the control's frame."  );
    addField( "frameColor", TypeColorF, Offset( mFrameColor, GuiShapeNameHud ), "Color for the control's frame."  );

+ 142 - 127
Engine/source/T3D/fx/explosion.cpp

@@ -387,134 +387,148 @@ ExplosionData* ExplosionData::cloneAndPerformSubstitutions(const SimObject* owne
 
 
 void ExplosionData::initPersistFields()
 void ExplosionData::initPersistFields()
 {
 {
-   INITPERSISTFIELD_SHAPEASSET(ExplosionShape, ExplosionData, "@brief Optional shape asset to place at the center of the explosion.\n\n"
-      "The <i>ambient</i> animation of this model will be played automatically at the start of the explosion.");
-
-   addField( "explosionScale", TypePoint3F, Offset(explosionScale, ExplosionData),
+   docsURL;
+   addGroup("Shapes");
+      INITPERSISTFIELD_SHAPEASSET(ExplosionShape, ExplosionData, "@brief Optional shape asset to place at the center of the explosion.\n\n"
+         "The <i>ambient</i> animation of this model will be played automatically at the start of the explosion.");
+   endGroup("Shapes");
+
+   addGroup("Sounds");
+      INITPERSISTFIELD_SOUNDASSET(Sound, ExplosionData, "Sound to play when this explosion explodes.");
+   endGroup("Sounds");
+
+   addGroup("Particle Effects");
+      addField( "faceViewer", TypeBool, Offset(faceViewer, ExplosionData),
+         "Controls whether the visual effects of the explosion always face the camera." );
+
+      addField( "particleEmitter", TYPEID< ParticleEmitterData >(), Offset(particleEmitter, ExplosionData),
+         "@brief Emitter used to generate a cloud of particles at the start of the explosion.\n\n"
+         "Explosions can generate two different particle effects. The first is a "
+         "single burst of particles at the start of the explosion emitted in a "
+         "spherical cloud using particleEmitter.\n\n"
+         "The second effect spawns the list of ParticleEmitters given by the emitter[] "
+         "field. These emitters generate particles in the normal way throughout the "
+         "lifetime of the explosion." );
+      addField( "particleDensity", TypeS32, Offset(particleDensity, ExplosionData),
+         "@brief Density of the particle cloud created at the start of the explosion.\n\n"
+         "@see particleEmitter" );
+      addField( "particleRadius", TypeF32, Offset(particleRadius, ExplosionData),
+         "@brief Radial distance from the explosion center at which cloud particles "
+         "are emitted.\n\n"
+         "@see particleEmitter" );
+      addField( "emitter", TYPEID< ParticleEmitterData >(), Offset(emitterList, ExplosionData), EC_NUM_EMITTERS,
+         "@brief List of additional ParticleEmitterData objects to spawn with this "
+         "explosion.\n\n"
+         "@see particleEmitter" );
+   endGroup("Particle Effects");
+
+   addGroup("Debris");
+      addField( "debris", TYPEID< DebrisData >(), Offset(debrisList, ExplosionData), EC_NUM_DEBRIS_TYPES,
+         "List of DebrisData objects to spawn with this explosion." );
+      addField( "debrisThetaMin", TypeF32, Offset(debrisThetaMin, ExplosionData),
+         "Minimum angle, from the horizontal plane, to eject debris from." );
+      addField( "debrisThetaMax", TypeF32, Offset(debrisThetaMax, ExplosionData),
+         "Maximum angle, from the horizontal plane, to eject debris from." );
+      addField( "debrisPhiMin", TypeF32, Offset(debrisPhiMin, ExplosionData),
+         "Minimum reference angle, from the vertical plane, to eject debris from." );
+      addField( "debrisPhiMax", TypeF32, Offset(debrisPhiMax, ExplosionData),
+         "Maximum reference angle, from the vertical plane, to eject debris from." );
+      addField( "debrisNum", TypeS32, Offset(debrisNum, ExplosionData),
+         "Number of debris objects to create." );
+      addField( "debrisNumVariance", TypeS32, Offset(debrisNumVariance, ExplosionData),
+         "Variance in the number of debris objects to create (must be from 0 - debrisNum)." );
+      addField( "debrisVelocity", TypeF32, Offset(debrisVelocity, ExplosionData),
+         "Velocity to toss debris at." );
+      addField( "debrisVelocityVariance", TypeF32, Offset(debrisVelocityVariance, ExplosionData),
+         "Variance in the debris initial velocity (must be >= 0)." );
+      addField( "subExplosion", TYPEID< ExplosionData >(), Offset(explosionList, ExplosionData), EC_MAX_SUB_EXPLOSIONS,
+         "List of additional ExplosionData objects to create at the start of the explosion." );
+   endGroup("Debris");
+
+
+   addGroup("Animation");
+      addField("explosionScale", TypePoint3F, Offset(explosionScale, ExplosionData),
       "\"X Y Z\" scale factor applied to the explosionShape model at the start "
       "\"X Y Z\" scale factor applied to the explosionShape model at the start "
-      "of the explosion." );
-   addField( "playSpeed", TypeF32, Offset(playSpeed, ExplosionData),
-      "Time scale at which to play the explosionShape <i>ambient</i> sequence." );
-
-   INITPERSISTFIELD_SOUNDASSET(Sound, ExplosionData, "Sound to play when this explosion explodes.");
-
-   addField( "faceViewer", TypeBool, Offset(faceViewer, ExplosionData),
-      "Controls whether the visual effects of the explosion always face the camera." );
-
-   addField( "particleEmitter", TYPEID< ParticleEmitterData >(), Offset(particleEmitter, ExplosionData),
-      "@brief Emitter used to generate a cloud of particles at the start of the explosion.\n\n"
-      "Explosions can generate two different particle effects. The first is a "
-      "single burst of particles at the start of the explosion emitted in a "
-      "spherical cloud using particleEmitter.\n\n"
-      "The second effect spawns the list of ParticleEmitters given by the emitter[] "
-      "field. These emitters generate particles in the normal way throughout the "
-      "lifetime of the explosion." );
-   addField( "particleDensity", TypeS32, Offset(particleDensity, ExplosionData),
-      "@brief Density of the particle cloud created at the start of the explosion.\n\n"
-      "@see particleEmitter" );
-   addField( "particleRadius", TypeF32, Offset(particleRadius, ExplosionData),
-      "@brief Radial distance from the explosion center at which cloud particles "
-      "are emitted.\n\n"
-      "@see particleEmitter" );
-   addField( "emitter", TYPEID< ParticleEmitterData >(), Offset(emitterList, ExplosionData), EC_NUM_EMITTERS,
-      "@brief List of additional ParticleEmitterData objects to spawn with this "
-      "explosion.\n\n"
-      "@see particleEmitter" );
-
-   addField( "debris", TYPEID< DebrisData >(), Offset(debrisList, ExplosionData), EC_NUM_DEBRIS_TYPES,
-      "List of DebrisData objects to spawn with this explosion." );
-   addField( "debrisThetaMin", TypeF32, Offset(debrisThetaMin, ExplosionData),
-      "Minimum angle, from the horizontal plane, to eject debris from." );
-   addField( "debrisThetaMax", TypeF32, Offset(debrisThetaMax, ExplosionData),
-      "Maximum angle, from the horizontal plane, to eject debris from." );
-   addField( "debrisPhiMin", TypeF32, Offset(debrisPhiMin, ExplosionData),
-      "Minimum reference angle, from the vertical plane, to eject debris from." );
-   addField( "debrisPhiMax", TypeF32, Offset(debrisPhiMax, ExplosionData),
-      "Maximum reference angle, from the vertical plane, to eject debris from." );
-   addField( "debrisNum", TypeS32, Offset(debrisNum, ExplosionData),
-      "Number of debris objects to create." );
-   addField( "debrisNumVariance", TypeS32, Offset(debrisNumVariance, ExplosionData),
-      "Variance in the number of debris objects to create (must be from 0 - debrisNum)." );
-   addField( "debrisVelocity", TypeF32, Offset(debrisVelocity, ExplosionData),
-      "Velocity to toss debris at." );
-   addField( "debrisVelocityVariance", TypeF32, Offset(debrisVelocityVariance, ExplosionData),
-      "Variance in the debris initial velocity (must be >= 0)." );
-
-   addField( "subExplosion", TYPEID< ExplosionData >(), Offset(explosionList, ExplosionData), EC_MAX_SUB_EXPLOSIONS,
-      "List of additional ExplosionData objects to create at the start of the "
-      "explosion." );
-
-   addField( "delayMS", TypeS32, Offset(delayMS, ExplosionData),
-      "Amount of time, in milliseconds, to delay the start of the explosion effect "
-      "from the creation of the Explosion object." );
-   addField( "delayVariance", TypeS32, Offset(delayVariance, ExplosionData),
-      "Variance, in milliseconds, of delayMS." );
-   addField( "lifetimeMS", TypeS32, Offset(lifetimeMS, ExplosionData),
-      "@brief Lifetime, in milliseconds, of the Explosion object.\n\n"
-      "@note If explosionShape is defined and contains an <i>ambient</i> animation, "
-      "this field is ignored, and the playSpeed scaled duration of the animation "
-      "is used instead." );
-   addField( "lifetimeVariance", TypeS32, Offset(lifetimeVariance, ExplosionData),
-      "Variance, in milliseconds, of the lifetimeMS of the Explosion object.\n" );
-   addField( "offset", TypeF32, Offset(offset, ExplosionData),
-      "@brief Offset distance (in a random direction) of the center of the explosion "
-      "from the Explosion object position.\n\n"
-      "Most often used to create some variance in position for subExplosion effects." );
-
-   addField( "times", TypeF32, Offset(times, ExplosionData), EC_NUM_TIME_KEYS,
-      "@brief Time keyframes used to scale the explosionShape model.\n\n"
-      "Values should be in increasing order from 0.0 - 1.0, and correspond to "
-      "the life of the Explosion where 0 is the beginning and 1 is the end of "
-      "the explosion lifetime.\n"
-      "@see lifetimeMS" );
-   addField( "sizes", TypePoint3F, Offset(sizes, ExplosionData), EC_NUM_TIME_KEYS,
-      "@brief \"X Y Z\" size keyframes used to scale the explosionShape model.\n\n"
-      "The explosionShape (if defined) will be scaled using the times/sizes "
-      "keyframes over the lifetime of the explosion.\n"
-      "@see lifetimeMS" );
-
-   addField( "shakeCamera", TypeBool, Offset(shakeCamera, ExplosionData),
-      "Controls whether the camera shakes during this explosion." );
-   addField( "camShakeFreq", TypePoint3F, Offset(camShakeFreq, ExplosionData),
-      "Frequency of camera shaking, defined in the \"X Y Z\" axes." );
-   addField( "camShakeAmp", TypePoint3F, Offset(camShakeAmp, ExplosionData),
-      "@brief Amplitude of camera shaking, defined in the \"X Y Z\" axes.\n\n"
-      "Set any value to 0 to disable shaking in that axis." );
-   addField( "camShakeDuration", TypeF32, Offset(camShakeDuration, ExplosionData),
-      "Duration (in seconds) to shake the camera." );
-   addField( "camShakeRadius", TypeF32, Offset(camShakeRadius, ExplosionData),
-      "Radial distance that a camera's position must be within relative to the "
-      "center of the explosion to be shaken." );
-   addField( "camShakeFalloff", TypeF32, Offset(camShakeFalloff, ExplosionData),
-      "Falloff value for the camera shake." );
-
-   addField( "lightStartRadius", TypeF32, Offset(lightStartRadius, ExplosionData),
-      "@brief Initial radius of the PointLight created by this explosion.\n\n"
-      "Radius is linearly interpolated from lightStartRadius to lightEndRadius "
-      "over the lifetime of the explosion.\n"
-      "@see lifetimeMS" );
-   addField( "lightEndRadius", TypeF32, Offset(lightEndRadius, ExplosionData),
-      "@brief Final radius of the PointLight created by this explosion.\n\n"
-      "@see lightStartRadius" );
-   addField( "lightStartColor", TypeColorF, Offset(lightStartColor, ExplosionData),
-      "@brief Initial color of the PointLight created by this explosion.\n\n"
-      "Color is linearly interpolated from lightStartColor to lightEndColor "
-      "over the lifetime of the explosion.\n"
-      "@see lifetimeMS" );
-   addField( "lightEndColor", TypeColorF, Offset(lightEndColor, ExplosionData),
-      "@brief Final color of the PointLight created by this explosion.\n\n"
-      "@see lightStartColor" );
-   addField( "lightStartBrightness", TypeF32, Offset(lightStartBrightness, ExplosionData),
-      "@brief Initial brightness of the PointLight created by this explosion.\n\n"
-      "Brightness is linearly interpolated from lightStartBrightness to "
-      "lightEndBrightness over the lifetime of the explosion.\n"
-      "@see lifetimeMS" );
-   addField("lightEndBrightness", TypeF32, Offset(lightEndBrightness, ExplosionData),
-      "@brief Final brightness of the PointLight created by this explosion.\n\n"
-      "@see lightStartBrightness" );
-   addField( "lightNormalOffset", TypeF32, Offset(lightNormalOffset, ExplosionData),
-      "Distance (in the explosion normal direction) of the PointLight position "
-      "from the explosion center." );
+      "of the explosion.");
+       addField("playSpeed", TypeF32, Offset(playSpeed, ExplosionData),
+          "Time scale at which to play the explosionShape <i>ambient</i> sequence.");
+
+      addField( "delayMS", TypeS32, Offset(delayMS, ExplosionData),
+         "Amount of time, in milliseconds, to delay the start of the explosion effect "
+         "from the creation of the Explosion object." );
+      addField( "delayVariance", TypeS32, Offset(delayVariance, ExplosionData),
+         "Variance, in milliseconds, of delayMS." );
+      addField( "lifetimeMS", TypeS32, Offset(lifetimeMS, ExplosionData),
+         "@brief Lifetime, in milliseconds, of the Explosion object.\n\n"
+         "@note If explosionShape is defined and contains an <i>ambient</i> animation, "
+         "this field is ignored, and the playSpeed scaled duration of the animation "
+         "is used instead." );
+      addField( "lifetimeVariance", TypeS32, Offset(lifetimeVariance, ExplosionData),
+         "Variance, in milliseconds, of the lifetimeMS of the Explosion object.\n" );
+      addField( "offset", TypeF32, Offset(offset, ExplosionData),
+         "@brief Offset distance (in a random direction) of the center of the explosion "
+         "from the Explosion object position.\n\n"
+         "Most often used to create some variance in position for subExplosion effects." );
+
+      addField( "times", TypeF32, Offset(times, ExplosionData), EC_NUM_TIME_KEYS,
+         "@brief Time keyframes used to scale the explosionShape model.\n\n"
+         "Values should be in increasing order from 0.0 - 1.0, and correspond to "
+         "the life of the Explosion where 0 is the beginning and 1 is the end of "
+         "the explosion lifetime.\n"
+         "@see lifetimeMS" );
+      addField( "sizes", TypePoint3F, Offset(sizes, ExplosionData), EC_NUM_TIME_KEYS,
+         "@brief \"X Y Z\" size keyframes used to scale the explosionShape model.\n\n"
+         "The explosionShape (if defined) will be scaled using the times/sizes "
+         "keyframes over the lifetime of the explosion.\n"
+         "@see lifetimeMS" );
+   endGroup("Animation");
+
+   addGroup("Camera Shake");
+      addField( "shakeCamera", TypeBool, Offset(shakeCamera, ExplosionData),
+         "Controls whether the camera shakes during this explosion." );
+      addField( "camShakeFreq", TypePoint3F, Offset(camShakeFreq, ExplosionData),
+         "Frequency of camera shaking, defined in the \"X Y Z\" axes." );
+      addField( "camShakeAmp", TypePoint3F, Offset(camShakeAmp, ExplosionData),
+         "@brief Amplitude of camera shaking, defined in the \"X Y Z\" axes.\n\n"
+         "Set any value to 0 to disable shaking in that axis." );
+      addField( "camShakeDuration", TypeF32, Offset(camShakeDuration, ExplosionData),
+         "Duration (in seconds) to shake the camera." );
+      addField( "camShakeRadius", TypeF32, Offset(camShakeRadius, ExplosionData),
+         "Radial distance that a camera's position must be within relative to the "
+         "center of the explosion to be shaken." );
+      addField( "camShakeFalloff", TypeF32, Offset(camShakeFalloff, ExplosionData),
+         "Falloff value for the camera shake." );
+   endGroup("Camera Shake");
+
+   addGroup("Light Emitter");
+      addField( "lightStartRadius", TypeF32, Offset(lightStartRadius, ExplosionData),
+         "@brief Initial radius of the PointLight created by this explosion.\n\n"
+         "Radius is linearly interpolated from lightStartRadius to lightEndRadius "
+         "over the lifetime of the explosion.\n"
+         "@see lifetimeMS" );
+      addField( "lightEndRadius", TypeF32, Offset(lightEndRadius, ExplosionData),
+         "@brief Final radius of the PointLight created by this explosion.\n\n"
+         "@see lightStartRadius" );
+      addField( "lightStartColor", TypeColorF, Offset(lightStartColor, ExplosionData),
+         "@brief Initial color of the PointLight created by this explosion.\n\n"
+         "Color is linearly interpolated from lightStartColor to lightEndColor "
+         "over the lifetime of the explosion.\n"
+         "@see lifetimeMS" );
+      addField( "lightEndColor", TypeColorF, Offset(lightEndColor, ExplosionData),
+         "@brief Final color of the PointLight created by this explosion.\n\n"
+         "@see lightStartColor" );
+      addField( "lightStartBrightness", TypeF32, Offset(lightStartBrightness, ExplosionData),
+         "@brief Initial brightness of the PointLight created by this explosion.\n\n"
+         "Brightness is linearly interpolated from lightStartBrightness to "
+         "lightEndBrightness over the lifetime of the explosion.\n"
+         "@see lifetimeMS" );
+      addField("lightEndBrightness", TypeF32, Offset(lightEndBrightness, ExplosionData),
+         "@brief Final brightness of the PointLight created by this explosion.\n\n"
+         "@see lightStartBrightness" );
+      addField( "lightNormalOffset", TypeF32, Offset(lightNormalOffset, ExplosionData),
+         "Distance (in the explosion normal direction) of the PointLight position "
+         "from the explosion center." );
+   endGroup("Light Emitter");
 
 
    // disallow some field substitutions
    // disallow some field substitutions
    onlyKeepClearSubstitutions("debris"); // subs resolving to "~~", or "~0" are OK
    onlyKeepClearSubstitutions("debris"); // subs resolving to "~~", or "~0" are OK
@@ -967,6 +981,7 @@ void Explosion::setInitialState(const Point3F& point, const Point3F& normal, con
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void Explosion::initPersistFields()
 void Explosion::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
    addField("initialNormal", TypePoint3F, Offset(mInitialNormal, Explosion), "Initial starting Normal.");
    addField("initialNormal", TypePoint3F, Offset(mInitialNormal, Explosion), "Initial starting Normal.");
    //
    //

+ 1 - 0
Engine/source/T3D/fx/fxFoliageReplicator.cpp

@@ -345,6 +345,7 @@ fxFoliageReplicator::~fxFoliageReplicator()
 
 
 void fxFoliageReplicator::initPersistFields()
 void fxFoliageReplicator::initPersistFields()
 {
 {
+   docsURL;
    // Add out own persistent fields.
    // Add out own persistent fields.
    addGroup( "Debugging" );	// MM: Added Group Header.
    addGroup( "Debugging" );	// MM: Added Group Header.
       addField( "UseDebugInfo",        TypeBool,      Offset( mFieldData.mUseDebugInfo,         fxFoliageReplicator ), "Culling bins are drawn when set to true." );
       addField( "UseDebugInfo",        TypeBool,      Offset( mFieldData.mUseDebugInfo,         fxFoliageReplicator ), "Culling bins are drawn when set to true." );

+ 1 - 0
Engine/source/T3D/fx/fxShapeReplicator.cpp

@@ -139,6 +139,7 @@ fxShapeReplicator::~fxShapeReplicator()
 
 
 void fxShapeReplicator::initPersistFields()
 void fxShapeReplicator::initPersistFields()
 {
 {
+   docsURL;
    // Add out own persistent fields.
    // Add out own persistent fields.
    addGroup( "Debugging" );	// MM: Added Group Header.
    addGroup( "Debugging" );	// MM: Added Group Header.
       addField( "HideReplications",    TypeBool,      Offset( mFieldData.mHideReplications,     fxShapeReplicator ), "Replicated shapes are hidden when set to true." );
       addField( "HideReplications",    TypeBool,      Offset( mFieldData.mHideReplications,     fxShapeReplicator ), "Replicated shapes are hidden when set to true." );

+ 1 - 0
Engine/source/T3D/fx/groundCover.cpp

@@ -540,6 +540,7 @@ IMPLEMENT_CO_NETOBJECT_V1(GroundCover);
 
 
 void GroundCover::initPersistFields()
 void GroundCover::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "GroundCover General" );
    addGroup( "GroundCover General" );
 
 
       INITPERSISTFIELD_MATERIALASSET(Material, GroundCover, "Material used by all GroundCover segments.");
       INITPERSISTFIELD_MATERIALASSET(Material, GroundCover, "Material used by all GroundCover segments.");

+ 2 - 0
Engine/source/T3D/fx/lightning.cpp

@@ -262,6 +262,7 @@ LightningData::~LightningData()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void LightningData::initPersistFields()
 void LightningData::initPersistFields()
 {
 {
+   docsURL;
 
 
    INITPERSISTFIELD_SOUNDASSET(StrikeSound, LightningData, "Sound to play when lightning STRIKES!");
    INITPERSISTFIELD_SOUNDASSET(StrikeSound, LightningData, "Sound to play when lightning STRIKES!");
 
 
@@ -411,6 +412,7 @@ Lightning::~Lightning()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void Lightning::initPersistFields()
 void Lightning::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Strikes" );
    addGroup( "Strikes" );
    addField( "strikesPerMinute", TypeS32, Offset(strikesPerMinute, Lightning),
    addField( "strikesPerMinute", TypeS32, Offset(strikesPerMinute, Lightning),
       "@brief Number of lightning strikes to perform per minute.\n\n"
       "@brief Number of lightning strikes to perform per minute.\n\n"

+ 1 - 0
Engine/source/T3D/fx/particle.cpp

@@ -147,6 +147,7 @@ FRangeValidator spinRandFValidator(-1000.f, 1000.f);
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ParticleData::initPersistFields()
 void ParticleData::initPersistFields()
 {
 {
+   docsURL;
    addFieldV( "dragCoefficient", TYPEID< F32 >(), Offset(dragCoefficient, ParticleData), &dragCoefFValidator,
    addFieldV( "dragCoefficient", TYPEID< F32 >(), Offset(dragCoefficient, ParticleData), &dragCoefFValidator,
       "Particle physics drag amount." );
       "Particle physics drag amount." );
    addField( "windCoefficient", TYPEID< F32 >(), Offset(windCoefficient, ParticleData),
    addField( "windCoefficient", TYPEID< F32 >(), Offset(windCoefficient, ParticleData),

+ 1 - 0
Engine/source/T3D/fx/particleEmitter.cpp

@@ -207,6 +207,7 @@ FRangeValidator phiFValidator(0.f, 360.f);
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ParticleEmitterData::initPersistFields()
 void ParticleEmitterData::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "ParticleEmitterData" );
    addGroup( "ParticleEmitterData" );
 
 
       addFieldV("ejectionPeriodMS", TYPEID< S32 >(), Offset(ejectionPeriodMS,   ParticleEmitterData), &ejectPeriodIValidator,
       addFieldV("ejectionPeriodMS", TYPEID< S32 >(), Offset(ejectionPeriodMS,   ParticleEmitterData), &ejectPeriodIValidator,

+ 2 - 0
Engine/source/T3D/fx/particleEmitterNode.cpp

@@ -89,6 +89,7 @@ ParticleEmitterNodeData::~ParticleEmitterNodeData()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ParticleEmitterNodeData::initPersistFields()
 void ParticleEmitterNodeData::initPersistFields()
 {
 {
+   docsURL;
    addField( "timeMultiple", TYPEID< F32 >(), Offset(timeMultiple, ParticleEmitterNodeData),
    addField( "timeMultiple", TYPEID< F32 >(), Offset(timeMultiple, ParticleEmitterNodeData),
       "@brief Time multiplier for particle emitter nodes.\n\n"
       "@brief Time multiplier for particle emitter nodes.\n\n"
       "Increasing timeMultiple is like running the emitter at a faster rate - single-shot "
       "Increasing timeMultiple is like running the emitter at a faster rate - single-shot "
@@ -181,6 +182,7 @@ ParticleEmitterNode::~ParticleEmitterNode()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ParticleEmitterNode::initPersistFields()
 void ParticleEmitterNode::initPersistFields()
 {
 {
+   docsURL;
    addField( "active", TYPEID< bool >(), Offset(mActive,ParticleEmitterNode),
    addField( "active", TYPEID< bool >(), Offset(mActive,ParticleEmitterNode),
       "Controls whether particles are emitted from this node." );
       "Controls whether particles are emitted from this node." );
    addField( "emitter",  TYPEID< ParticleEmitterData >(), Offset(mEmitterDatablock, ParticleEmitterNode),
    addField( "emitter",  TYPEID< ParticleEmitterData >(), Offset(mEmitterDatablock, ParticleEmitterNode),

+ 2 - 0
Engine/source/T3D/fx/precipitation.cpp

@@ -143,6 +143,7 @@ PrecipitationData::PrecipitationData()
 
 
 void PrecipitationData::initPersistFields()
 void PrecipitationData::initPersistFields()
 {
 {
+   docsURL;
    INITPERSISTFIELD_SOUNDASSET(Sound, PrecipitationData, "Looping SFXProfile effect to play while Precipitation is active.");
    INITPERSISTFIELD_SOUNDASSET(Sound, PrecipitationData, "Looping SFXProfile effect to play while Precipitation is active.");
 
 
    addProtectedField( "dropTexture", TypeFilename, Offset(mDropName, PrecipitationData), &_setDropData, &defaultProtectedGetFn,
    addProtectedField( "dropTexture", TypeFilename, Offset(mDropName, PrecipitationData), &_setDropData, &defaultProtectedGetFn,
@@ -367,6 +368,7 @@ IRangeValidator ValidNumDropsRange(1, 100000);
 
 
 void Precipitation::initPersistFields()
 void Precipitation::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Precipitation");
    addGroup("Precipitation");
 
 
       addFieldV( "numDrops", TypeS32, Offset(mNumDrops, Precipitation), &ValidNumDropsRange,
       addFieldV( "numDrops", TypeS32, Offset(mNumDrops, Precipitation), &ValidNumDropsRange,

+ 2 - 0
Engine/source/T3D/fx/ribbon.cpp

@@ -68,6 +68,7 @@ RibbonData::RibbonData()
 
 
 void RibbonData::initPersistFields()
 void RibbonData::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
    addGroup("Ribbon");
    addGroup("Ribbon");
@@ -205,6 +206,7 @@ Ribbon::~Ribbon()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void Ribbon::initPersistFields()
 void Ribbon::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 2 - 0
Engine/source/T3D/fx/ribbonNode.cpp

@@ -56,6 +56,7 @@ RibbonNodeData::~RibbonNodeData()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void RibbonNodeData::initPersistFields()
 void RibbonNodeData::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -90,6 +91,7 @@ RibbonNode::~RibbonNode()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void RibbonNode::initPersistFields()
 void RibbonNode::initPersistFields()
 {
 {
+   docsURL;
    addField( "active", TYPEID< bool >(), Offset(mActive,RibbonNode),
    addField( "active", TYPEID< bool >(), Offset(mActive,RibbonNode),
       "Controls whether ribbon is emitted from this node." );
       "Controls whether ribbon is emitted from this node." );
    addField( "ribbon",  TYPEID< RibbonData >(), Offset(mRibbonDatablock, RibbonNode),
    addField( "ribbon",  TYPEID< RibbonData >(), Offset(mRibbonDatablock, RibbonNode),

+ 2 - 1
Engine/source/T3D/fx/splash.cpp

@@ -114,8 +114,9 @@ SplashData::SplashData()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 // Init fields
 // Init fields
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
-   void SplashData::initPersistFields()
+void SplashData::initPersistFields()
 {
 {
+      docsURL;
    INITPERSISTFIELD_SOUNDASSET(Sound, SplashData, "Sound to play when splash, splashes.");
    INITPERSISTFIELD_SOUNDASSET(Sound, SplashData, "Sound to play when splash, splashes.");
 
 
    addField("scale",             TypePoint3F,                  Offset(scale,              SplashData), "The scale of this splashing effect, defined as the F32 points X, Y, Z.\n");
    addField("scale",             TypePoint3F,                  Offset(scale,              SplashData), "The scale of this splashing effect, defined as the F32 points X, Y, Z.\n");

+ 2 - 0
Engine/source/T3D/gameBase/gameBase.cpp

@@ -156,6 +156,7 @@ bool GameBaseData::onAdd()
 
 
 void GameBaseData::initPersistFields()
 void GameBaseData::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Scripting");
    addGroup("Scripting");
 
 
       addField( "category", TypeCaseString, Offset(mCategory, GameBaseData ),
       addField( "category", TypeCaseString, Offset(mCategory, GameBaseData ),
@@ -721,6 +722,7 @@ DefineEngineMethod( GameBase, setDataBlock, bool, ( GameBaseData* data ),,
 
 
 void GameBase::initPersistFields()
 void GameBase::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Game" );
    addGroup( "Game" );
 
 
       addProtectedField( "dataBlock", TYPEID< GameBaseData >(), Offset(mDataBlock, GameBase),
       addProtectedField( "dataBlock", TYPEID< GameBaseData >(), Offset(mDataBlock, GameBase),

+ 1 - 0
Engine/source/T3D/groundPlane.cpp

@@ -103,6 +103,7 @@ GroundPlane::~GroundPlane()
 
 
 void GroundPlane::initPersistFields()
 void GroundPlane::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Plane" );
    addGroup( "Plane" );
 
 
       addField( "squareSize",    TypeF32,          Offset( mSquareSize, GroundPlane ), "Square size in meters to which %GroundPlane subdivides its geometry." );
       addField( "squareSize",    TypeF32,          Offset( mSquareSize, GroundPlane ), "Square size in meters to which %GroundPlane subdivides its geometry." );

+ 1 - 0
Engine/source/T3D/guiObjectView.cpp

@@ -135,6 +135,7 @@ GuiObjectView::~GuiObjectView()
 
 
 void GuiObjectView::initPersistFields()
 void GuiObjectView::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Model" );
    addGroup( "Model" );
    
    
       addField( "shapeFile", TypeStringFilename, Offset( mModelName, GuiObjectView ),
       addField( "shapeFile", TypeStringFilename, Offset( mModelName, GuiObjectView ),

+ 37 - 38
Engine/source/T3D/item.cpp

@@ -88,7 +88,6 @@ ConsoleDocClass( ItemData,
       "   density = 2;\n"
       "   density = 2;\n"
 	   "   drag = 0.5;\n"
 	   "   drag = 0.5;\n"
 	   "   maxVelocity = \"10.0\";\n"
 	   "   maxVelocity = \"10.0\";\n"
-	   "   emap = true;\n"
 	   "   sticky = false;\n"
 	   "   sticky = false;\n"
 	   "   dynamicType = \"0\"\n;"
 	   "   dynamicType = \"0\"\n;"
 	   "   lightOnlyStatic = false;\n"
 	   "   lightOnlyStatic = false;\n"
@@ -109,9 +108,6 @@ ConsoleDocClass( ItemData,
 
 
 ItemData::ItemData()
 ItemData::ItemData()
 {
 {
-   shadowEnable = true;
-
-
    friction = 0;
    friction = 0;
    elasticity = 0;
    elasticity = 0;
 
 
@@ -141,40 +137,43 @@ EndImplementEnumType;
 
 
 void ItemData::initPersistFields()
 void ItemData::initPersistFields()
 {
 {
-   addField("friction",          TypeF32,       Offset(friction,           ItemData), "A floating-point value specifying how much velocity is lost to impact and sliding friction.");
-   addField("elasticity",        TypeF32,       Offset(elasticity,         ItemData), "A floating-point value specifying how 'bouncy' this ItemData is.");
-   addField("sticky",            TypeBool,      Offset(sticky,             ItemData), 
-      "@brief If true, ItemData will 'stick' to any surface it collides with.\n\n"
-      "When an item does stick to a surface, the Item::onStickyCollision() callback is called.  The Item has methods to retrieve "
-      "the world position and normal the Item is stuck to.\n"
-      "@note Valid objects to stick to must be of StaticShapeObjectType.\n");
-   addField("gravityMod",        TypeF32,       Offset(gravityMod,         ItemData), "Floating point value to multiply the existing gravity with, just for this ItemData.");
-   addField("maxVelocity",       TypeF32,       Offset(maxVelocity,        ItemData), "Maximum velocity that this ItemData is able to move.");
-
-   addField("lightType",         TYPEID< Item::LightType >(),      Offset(lightType, ItemData), "Type of light to apply to this ItemData. Options are NoLight, ConstantLight, PulsingLight. Default is NoLight." );
-   addField("lightColor",        TypeColorF,    Offset(lightColor,         ItemData),
-      "@brief Color value to make this light. Example: \"1.0,1.0,1.0\"\n\n"
-      "@see lightType\n");
-   addField("lightTime",         TypeS32,       Offset(lightTime,          ItemData), 
-      "@brief Time value for the light of this ItemData, used to control the pulse speed of the PulsingLight LightType.\n\n"
-      "@see lightType\n");
-   addField("lightRadius",       TypeF32,       Offset(lightRadius,        ItemData), 
-      "@brief Distance from the center point of this ItemData for the light to affect\n\n"
-      "@see lightType\n");
-   addField("lightOnlyStatic",   TypeBool,      Offset(lightOnlyStatic,    ItemData), 
-      "@brief If true, this ItemData will only cast a light if the Item for this ItemData has a static value of true.\n\n"
-      "@see lightType\n");
-
-   addField("simpleServerCollision",   TypeBool,  Offset(simpleServerCollision,    ItemData), 
-      "@brief Determines if only simple server-side collision will be used (for pick ups).\n\n"
-      "If set to true then only simple, server-side collision detection will be used.  This is often the case "
-      "if the item is used for a pick up object, such as ammo.  If set to false then a full collision volume "
-      "will be used as defined by the shape.  The default is true.\n"
-      "@note Only applies when using a physics library.\n"
-      "@see TurretShape and ProximityMine for examples that should set this to false to allow them to be "
-      "shot by projectiles.\n");
-
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
+   addGroup("Physics");
+      addField("friction",          TypeF32,       Offset(friction,           ItemData), "A floating-point value specifying how much velocity is lost to impact and sliding friction.");
+      addField("elasticity",        TypeF32,       Offset(elasticity,         ItemData), "A floating-point value specifying how 'bouncy' this ItemData is.");
+      addField("sticky",            TypeBool,      Offset(sticky,             ItemData),
+         "@brief If true, ItemData will 'stick' to any surface it collides with.\n\n"
+         "When an item does stick to a surface, the Item::onStickyCollision() callback is called.  The Item has methods to retrieve "
+         "the world position and normal the Item is stuck to.\n"
+         "@note Valid objects to stick to must be of StaticShapeObjectType.\n");
+      addField("gravityMod",        TypeF32,       Offset(gravityMod,         ItemData), "Floating point value to multiply the existing gravity with, just for this ItemData.");
+      addField("maxVelocity",       TypeF32,       Offset(maxVelocity,        ItemData), "Maximum velocity that this ItemData is able to move.");
+      addField("simpleServerCollision",   TypeBool,  Offset(simpleServerCollision,    ItemData),
+         "@brief Determines if only simple server-side collision will be used (for pick ups).\n\n"
+         "If set to true then only simple, server-side collision detection will be used.  This is often the case "
+         "if the item is used for a pick up object, such as ammo.  If set to false then a full collision volume "
+         "will be used as defined by the shape.  The default is true.\n"
+         "@note Only applies when using a physics library.\n"
+         "@see TurretShape and ProximityMine for examples that should set this to false to allow them to be "
+         "shot by projectiles.\n");
+   endGroup("Physics");
+
+   addGroup("Light Emitter");
+      addField("lightType",         TYPEID< Item::LightType >(),      Offset(lightType, ItemData), "Type of light to apply to this ItemData. Options are NoLight, ConstantLight, PulsingLight. Default is NoLight." );
+      addField("lightColor",        TypeColorF,    Offset(lightColor,         ItemData),
+         "@brief Color value to make this light. Example: \"1.0,1.0,1.0\"\n\n"
+         "@see lightType\n");
+      addField("lightTime",         TypeS32,       Offset(lightTime,          ItemData), 
+         "@brief Time value for the light of this ItemData, used to control the pulse speed of the PulsingLight LightType.\n\n"
+         "@see lightType\n");
+      addField("lightRadius",       TypeF32,       Offset(lightRadius,        ItemData), 
+         "@brief Distance from the center point of this ItemData for the light to affect\n\n"
+         "@see lightType\n");
+      addField("lightOnlyStatic",   TypeBool,      Offset(lightOnlyStatic,    ItemData), 
+         "@brief If true, this ItemData will only cast a light if the Item for this ItemData has a static value of true.\n\n"
+         "@see lightType\n");
+   endGroup("Light Emitter");
 }
 }
 
 
 void ItemData::packData(BitStream* stream)
 void ItemData::packData(BitStream* stream)
@@ -262,7 +261,6 @@ ConsoleDocClass( Item,
       "   mass = 2;\n"
       "   mass = 2;\n"
       "   friction = 1;\n"
       "   friction = 1;\n"
       "   elasticity = 0.3;\n"
       "   elasticity = 0.3;\n"
-      "   emap = true;\n\n"
       "   // Dynamic properties used by the scripts\n"
       "   // Dynamic properties used by the scripts\n"
       "   pickupName = \"a health patch\";\n"
       "   pickupName = \"a health patch\";\n"
       "   repairAmount = 50;\n"
       "   repairAmount = 50;\n"
@@ -1304,6 +1302,7 @@ bool Item::_setRotate(void *object, const char *index, const char *data)
 
 
 void Item::initPersistFields()
 void Item::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Misc");	
    addGroup("Misc");	
    addProtectedField("static", TypeBool, Offset(mStatic, Item), &_setStatic, &defaultProtectedGetFn, "If true, the object is not moving in the world.\n");
    addProtectedField("static", TypeBool, Offset(mStatic, Item), &_setStatic, &defaultProtectedGetFn, "If true, the object is not moving in the world.\n");
    addProtectedField("rotate", TypeBool, Offset(mRotate, Item), &_setRotate, &defaultProtectedGetFn, "If true, the object will automatically rotate around its Z axis.\n");
    addProtectedField("rotate", TypeBool, Offset(mRotate, Item), &_setRotate, &defaultProtectedGetFn, "If true, the object will automatically rotate around its Z axis.\n");

+ 1 - 0
Engine/source/T3D/levelInfo.cpp

@@ -127,6 +127,7 @@ FRangeValidator ValiDampnessRange(0.0f, 1.0f);
 
 
 void LevelInfo::initPersistFields()
 void LevelInfo::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Visibility" );
    addGroup( "Visibility" );
 
 
       addField( "nearClip", TypeF32, Offset( mNearClip, LevelInfo ), "Closest distance from the camera's position to render the world." );
       addField( "nearClip", TypeF32, Offset( mNearClip, LevelInfo ), "Closest distance from the camera's position to render the world." );

+ 1 - 0
Engine/source/T3D/lightAnimData.cpp

@@ -62,6 +62,7 @@ ConsoleDocClass( LightAnimData,
 
 
 void LightAnimData::initPersistFields()
 void LightAnimData::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Offset",
    addGroup( "Offset",
       "The XYZ translation animation state relative to the light position." );
       "The XYZ translation animation state relative to the light position." );
 
 

+ 1 - 0
Engine/source/T3D/lightBase.cpp

@@ -88,6 +88,7 @@ LightBase::~LightBase()
 
 
 void LightBase::initPersistFields()
 void LightBase::initPersistFields()
 {
 {
+   docsURL;
    // We only add the basic lighting options that all lighting
    // We only add the basic lighting options that all lighting
    // systems would use... the specific lighting system options
    // systems would use... the specific lighting system options
    // are injected at runtime by the lighting system itself.
    // are injected at runtime by the lighting system itself.

+ 1 - 0
Engine/source/T3D/lightDescription.cpp

@@ -90,6 +90,7 @@ ConsoleDocClass( LightDescription,
 
 
 void LightDescription::initPersistFields()
 void LightDescription::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Light" );
    addGroup( "Light" );
 
 
       addField( "color", TypeColorF, Offset( color, LightDescription ), "Changes the base color hue of the light." );
       addField( "color", TypeColorF, Offset( color, LightDescription ), "Changes the base color hue of the light." );

+ 1 - 0
Engine/source/T3D/lightFlareData.cpp

@@ -142,6 +142,7 @@ LightFlareData::~LightFlareData()
 
 
 void LightFlareData::initPersistFields()
 void LightFlareData::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "LightFlareData" );
    addGroup( "LightFlareData" );
 
 
       addField( "overallScale", TypeF32, Offset( mScale, LightFlareData ),
       addField( "overallScale", TypeF32, Offset( mScale, LightFlareData ),

+ 1 - 0
Engine/source/T3D/lighting/boxEnvironmentProbe.cpp

@@ -90,6 +90,7 @@ BoxEnvironmentProbe::~BoxEnvironmentProbe()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void BoxEnvironmentProbe::initPersistFields()
 void BoxEnvironmentProbe::initPersistFields()
 {
 {
+   docsURL;
    // SceneObject already handles exposing the transform
    // SceneObject already handles exposing the transform
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/lighting/reflectionProbe.cpp

@@ -151,6 +151,7 @@ ReflectionProbe::~ReflectionProbe()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ReflectionProbe::initPersistFields()
 void ReflectionProbe::initPersistFields()
 {
 {
+   docsURL;
    addField("canDamp", TypeBool, Offset(mCanDamp, ReflectionProbe),"wetness allowed");
    addField("canDamp", TypeBool, Offset(mCanDamp, ReflectionProbe),"wetness allowed");
    addGroup("Rendering");
    addGroup("Rendering");
       addProtectedField("enabled", TypeBool, Offset(mEnabled, ReflectionProbe),
       addProtectedField("enabled", TypeBool, Offset(mEnabled, ReflectionProbe),

+ 1 - 0
Engine/source/T3D/lighting/skylight.cpp

@@ -90,6 +90,7 @@ Skylight::~Skylight()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void Skylight::initPersistFields()
 void Skylight::initPersistFields()
 {
 {
+   docsURL;
    // SceneObject already handles exposing the transform
    // SceneObject already handles exposing the transform
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 1 - 0
Engine/source/T3D/lighting/sphereEnvironmentProbe.cpp

@@ -89,6 +89,7 @@ SphereEnvironmentProbe::~SphereEnvironmentProbe()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void SphereEnvironmentProbe::initPersistFields()
 void SphereEnvironmentProbe::initPersistFields()
 {
 {
+   docsURL;
    // SceneObject already handles exposing the transform
    // SceneObject already handles exposing the transform
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 

+ 2 - 1
Engine/source/T3D/missionArea.cpp

@@ -130,6 +130,7 @@ void MissionArea::inspectPostApply()
 
 
 void MissionArea::initPersistFields()
 void MissionArea::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Dimensions");	
    addGroup("Dimensions");	
    addField("area", TypeRectI, Offset(mArea, MissionArea), "Four corners (X1, X2, Y1, Y2) that makes up the level's boundaries");
    addField("area", TypeRectI, Offset(mArea, MissionArea), "Four corners (X1, X2, Y1, Y2) that makes up the level's boundaries");
    addField("flightCeiling", TypeF32, Offset(mFlightCeiling, MissionArea), "Represents the top of the mission area, used by FlyingVehicle. ");
    addField("flightCeiling", TypeF32, Offset(mFlightCeiling, MissionArea), "Represents the top of the mission area, used by FlyingVehicle. ");
@@ -215,4 +216,4 @@ DefineEngineMethod( MissionArea, postApply, void, (),,
                    )
                    )
 {
 {
    object->inspectPostApply();
    object->inspectPostApply();
-}
+}

+ 6 - 1
Engine/source/T3D/missionMarker.cpp

@@ -179,7 +179,9 @@ void MissionMarker::unpackUpdate(NetConnection * con, BitStream * stream)
    }
    }
 }
 }
 
 
-void MissionMarker::initPersistFields() {
+void MissionMarker::initPersistFields()
+{
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -281,6 +283,7 @@ void WayPoint::unpackUpdate(NetConnection * con, BitStream * stream)
 
 
 void WayPoint::initPersistFields()
 void WayPoint::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Misc"); 
    addGroup("Misc"); 
    addField("markerName", TypeCaseString, Offset(mName, WayPoint), "Unique name representing this waypoint");
    addField("markerName", TypeCaseString, Offset(mName, WayPoint), "Unique name representing this waypoint");
    endGroup("Misc");
    endGroup("Misc");
@@ -468,6 +471,7 @@ void SpawnSphere::advanceTime( F32 timeDelta )
 
 
 void SpawnSphere::initPersistFields()
 void SpawnSphere::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Spawn" );
    addGroup( "Spawn" );
    addField( "spawnClass", TypeRealString, Offset(mSpawnClass, SpawnSphere),
    addField( "spawnClass", TypeRealString, Offset(mSpawnClass, SpawnSphere),
       "Object class to create (eg. Player, AIPlayer, Debris etc)" );
       "Object class to create (eg. Player, AIPlayer, Debris etc)" );
@@ -611,6 +615,7 @@ void CameraBookmark::unpackUpdate(NetConnection * con, BitStream * stream)
 
 
 void CameraBookmark::initPersistFields()
 void CameraBookmark::initPersistFields()
 {
 {
+   docsURL;
    //addGroup("Misc");  
    //addGroup("Misc");  
    //addField("name", TypeCaseString, Offset(mName, CameraBookmark));
    //addField("name", TypeCaseString, Offset(mName, CameraBookmark));
    //endGroup("Misc");
    //endGroup("Misc");

+ 1 - 0
Engine/source/T3D/notesObject.cpp

@@ -40,6 +40,7 @@ NotesObject::~NotesObject()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void NotesObject::initPersistFields()
 void NotesObject::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 
 
    addField("Note", TypeCommand, Offset(mNote, NotesObject), "");
    addField("Note", TypeCommand, Offset(mNote, NotesObject), "");

+ 3 - 1
Engine/source/T3D/pathCamera.cpp

@@ -61,6 +61,7 @@ void PathCameraData::consoleInit()
 
 
 void PathCameraData::initPersistFields()
 void PathCameraData::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -201,6 +202,7 @@ void PathCamera::onEditorDisable()
 
 
 void PathCamera::initPersistFields()
 void PathCamera::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -637,4 +639,4 @@ DefineEngineMethod(PathCamera, popFront, void, (),, "Removes the knot at the fro
 													"@endtsexample\n")
 													"@endtsexample\n")
 {
 {
    object->popFront();
    object->popFront();
-}
+}

+ 3 - 1
Engine/source/T3D/pathShape.cpp

@@ -44,6 +44,7 @@ bool PathShapeData::preload(bool server, String &errorStr)
 
 
 void PathShapeData::initPersistFields()
 void PathShapeData::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -146,6 +147,7 @@ PathShapeData::PathShapeData()
 
 
 void PathShape::initPersistFields()
 void PathShape::initPersistFields()
 {
 {
+   docsURL;
 
 
    addField( "Path", TYPEID< SimObjectRef<SimPath::Path> >(), Offset( mSimPath, PathShape ),
    addField( "Path", TYPEID< SimObjectRef<SimPath::Path> >(), Offset( mSimPath, PathShape ),
          "@brief Name of a Path to follow." );
          "@brief Name of a Path to follow." );
@@ -587,4 +589,4 @@ DefineEngineMethod(PathShape, popFront, void, (), , "Removes the knot at the fro
 DefineEngineMethod(PathShape, getState, S32, (), , "PathShape.getState()")
 DefineEngineMethod(PathShape, getState, S32, (), , "PathShape.getState()")
 {
 {
 	return object->getState(); 
 	return object->getState(); 
-}
+}

+ 1 - 0
Engine/source/T3D/physicalZone.cpp

@@ -148,6 +148,7 @@ void PhysicalZone::consoleInit()
 
 
 void PhysicalZone::initPersistFields()
 void PhysicalZone::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Misc");
    addGroup("Misc");
    addField("velocityMod",  TypeF32,               Offset(mVelocityMod,  PhysicalZone), "Multiply velocity of objects entering zone by this value every tick.");
    addField("velocityMod",  TypeF32,               Offset(mVelocityMod,  PhysicalZone), "Multiply velocity of objects entering zone by this value every tick.");
    addField("gravityMod",   TypeF32,               Offset(mGravityMod,   PhysicalZone), "Gravity in PhysicalZone. Multiplies against standard gravity.");
    addField("gravityMod",   TypeF32,               Offset(mGravityMod,   PhysicalZone), "Gravity in PhysicalZone. Multiplies against standard gravity.");

+ 10 - 8
Engine/source/T3D/physics/physicsDebris.cpp

@@ -110,21 +110,23 @@ bool PhysicsDebrisData::preload( bool server, String &errorStr )
 
 
 void PhysicsDebrisData::initPersistFields()
 void PhysicsDebrisData::initPersistFields()
 {
 {
-   addGroup( "Display" );
+   docsURL;
+   addGroup( "Shapes" );
 
 
       addProtectedField( "shapeFile", TypeShapeFilename, Offset( mShapeName, PhysicsDebrisData ), &_setShapeData, &defaultProtectedGetFn,
       addProtectedField( "shapeFile", TypeShapeFilename, Offset( mShapeName, PhysicsDebrisData ), &_setShapeData, &defaultProtectedGetFn,
          "@brief Path to the .DAE or .DTS file to use for this shape.\n\n"
          "@brief Path to the .DAE or .DTS file to use for this shape.\n\n"
          "Compatable with Live-Asset Reloading.", AbstractClassRep::FIELD_HideInInspectors);
          "Compatable with Live-Asset Reloading.", AbstractClassRep::FIELD_HideInInspectors);
-         
+
       INITPERSISTFIELD_SHAPEASSET(Shape, PhysicsDebrisData, "@brief Shape to use with this debris.\n\n"
       INITPERSISTFIELD_SHAPEASSET(Shape, PhysicsDebrisData, "@brief Shape to use with this debris.\n\n"
          "Compatable with Live-Asset Reloading.");
          "Compatable with Live-Asset Reloading.");
+   endGroup( "Shapes" );
 
 
+   addGroup("Rendering");
       addField( "castShadows", TypeBool, Offset( castShadows, PhysicsDebrisData ), 
       addField( "castShadows", TypeBool, Offset( castShadows, PhysicsDebrisData ), 
         "@brief Determines if the shape's shadow should be cast onto the environment.\n\n" );
         "@brief Determines if the shape's shadow should be cast onto the environment.\n\n" );
+   endGroup("Rendering");
 
 
-   endGroup( "Display" );
-
-   addGroup( "Physical Properties" );
+   addGroup( "Physics" );
 
 
       addField("lifetime", TypeF32, Offset( lifetime, PhysicsDebrisData ),
       addField("lifetime", TypeF32, Offset( lifetime, PhysicsDebrisData ),
          "@brief Base time, in seconds, that debris persists after time of creation.\n\n"
          "@brief Base time, in seconds, that debris persists after time of creation.\n\n"
@@ -192,8 +194,7 @@ void PhysicsDebrisData::initPersistFields()
          "The result of the calculated buoyancy is relative to the density of the WaterObject the PhysicsDebris is within."
          "The result of the calculated buoyancy is relative to the density of the WaterObject the PhysicsDebris is within."
          "@see WaterObject::density");
          "@see WaterObject::density");
 
 
-   endGroup( "Physical Properties" );
-
+   endGroup( "Physics" );
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 
@@ -332,6 +333,7 @@ PhysicsDebris::~PhysicsDebris()
 
 
 void PhysicsDebris::initPersistFields()
 void PhysicsDebris::initPersistFields()
 {
 {
+   docsURL;
    Con::addVariable( "$pref::PhysicsDebris::lifetimeScale", TypeF32, &smLifetimeScale,
    Con::addVariable( "$pref::PhysicsDebris::lifetimeScale", TypeF32, &smLifetimeScale,
       "@brief Scales how long %PhysicsDebris will live before being removed.\n"
       "@brief Scales how long %PhysicsDebris will live before being removed.\n"
       "@note A value of 0 will disable PhysicsDebris entirely.");
       "@note A value of 0 will disable PhysicsDebris entirely.");
@@ -723,4 +725,4 @@ void PhysicsDebris::_onPhysicsReset( PhysicsResetEvent reset )
       // Editing stuff, clean up the trash!
       // Editing stuff, clean up the trash!
       safeDeleteObject();
       safeDeleteObject();
    }
    }
-}
+}

+ 2 - 1
Engine/source/T3D/physics/physicsForce.cpp

@@ -54,7 +54,8 @@ PhysicsForce::~PhysicsForce()
 }
 }
 
 
 void PhysicsForce::initPersistFields()
 void PhysicsForce::initPersistFields()
-{   
+{
+   docsURL;
    Parent::initPersistFields();   
    Parent::initPersistFields();   
 }
 }
 
 

+ 7 - 6
Engine/source/T3D/physics/physicsShape.cpp

@@ -87,9 +87,8 @@ PhysicsShapeData::~PhysicsShapeData()
 
 
 void PhysicsShapeData::initPersistFields()
 void PhysicsShapeData::initPersistFields()
 {
 {
-   Parent::initPersistFields();
-
-   addGroup("Media");
+   docsURL;
+   addGroup("Shapes");
 
 
       INITPERSISTFIELD_SHAPEASSET(Shape, PhysicsShapeData, "@brief Shape asset to be used with this physics object.\n\n"
       INITPERSISTFIELD_SHAPEASSET(Shape, PhysicsShapeData, "@brief Shape asset to be used with this physics object.\n\n"
          "Compatable with Live-Asset Reloading. ")
          "Compatable with Live-Asset Reloading. ")
@@ -103,7 +102,7 @@ void PhysicsShapeData::initPersistFields()
       addField( "destroyedShape", TYPEID< SimObjectRef<PhysicsShapeData> >(), Offset( destroyedShape, PhysicsShapeData ),
       addField( "destroyedShape", TYPEID< SimObjectRef<PhysicsShapeData> >(), Offset( destroyedShape, PhysicsShapeData ),
          "@brief Name of a PhysicsShapeData to spawn when this shape is destroyed (optional)." );
          "@brief Name of a PhysicsShapeData to spawn when this shape is destroyed (optional)." );
 
 
-   endGroup("Media");
+   endGroup("Shapes");
 
 
    addGroup( "Physics" );
    addGroup( "Physics" );
       
       
@@ -173,7 +172,8 @@ void PhysicsShapeData::initPersistFields()
       addField( "simType", TYPEID< PhysicsShapeData::SimType >(), Offset( simType, PhysicsShapeData ),
       addField( "simType", TYPEID< PhysicsShapeData::SimType >(), Offset( simType, PhysicsShapeData ),
          "@brief Controls whether this shape is simulated on the server, client, or both physics simulations.\n\n" );
          "@brief Controls whether this shape is simulated on the server, client, or both physics simulations.\n\n" );
 
 
-   endGroup( "Networking" );   
+   endGroup( "Networking" );
+   Parent::initPersistFields();
 }
 }
 
 
 void PhysicsShapeData::packData( BitStream *stream )
 void PhysicsShapeData::packData( BitStream *stream )
@@ -431,7 +431,8 @@ void PhysicsShape::consoleInit()
 }
 }
 
 
 void PhysicsShape::initPersistFields()
 void PhysicsShape::initPersistFields()
-{   
+{
+   docsURL;
    addGroup( "PhysicsShape" );
    addGroup( "PhysicsShape" );
 
 
       addField( "playAmbient", TypeBool, Offset( mPlayAmbient, PhysicsShape ),
       addField( "playAmbient", TypeBool, Offset( mPlayAmbient, PhysicsShape ),

+ 3 - 3
Engine/source/T3D/player.cpp

@@ -282,7 +282,6 @@ IMPLEMENT_CALLBACK( PlayerData, onLeaveMissionArea, void, ( Player* obj ), ( obj
 
 
 PlayerData::PlayerData()
 PlayerData::PlayerData()
 {
 {
-   shadowEnable = true;
    shadowSize = 256;
    shadowSize = 256;
    shadowProjectionDistance = 14.0f;
    shadowProjectionDistance = 14.0f;
 
 
@@ -705,6 +704,9 @@ bool PlayerData::isJumpAction(U32 action)
 
 
 void PlayerData::initPersistFields()
 void PlayerData::initPersistFields()
 {
 {
+   docsURL;
+   Parent::initPersistFields();
+
    addField( "pickupRadius", TypeF32, Offset(pickupRadius, PlayerData),
    addField( "pickupRadius", TypeF32, Offset(pickupRadius, PlayerData),
       "@brief Radius around the player to collide with Items in the scene (on server).\n\n"
       "@brief Radius around the player to collide with Items in the scene (on server).\n\n"
       "Internally the pickupRadius is added to the larger side of the initial bounding box "
       "Internally the pickupRadius is added to the larger side of the initial bounding box "
@@ -1163,8 +1165,6 @@ void PlayerData::initPersistFields()
          "need to.\n");
          "need to.\n");
 
 
    endGroup( "Third Person" );
    endGroup( "Third Person" );
-
-   Parent::initPersistFields();
 }
 }
 
 
 void PlayerData::packData(BitStream* stream)
 void PlayerData::packData(BitStream* stream)

+ 1 - 0
Engine/source/T3D/pointLight.cpp

@@ -99,6 +99,7 @@ PointLight::~PointLight()
 
 
 void PointLight::initPersistFields()
 void PointLight::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Light" );
    addGroup( "Light" );
 
 
       addField( "radius", TypeF32, Offset( mRadius, PointLight ), "Controls the falloff of the light emission" );
       addField( "radius", TypeF32, Offset( mRadius, PointLight ), "Controls the falloff of the light emission" );

+ 1 - 0
Engine/source/T3D/portal.cpp

@@ -147,6 +147,7 @@ Portal::Portal()
 
 
 void Portal::initPersistFields()
 void Portal::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Zoning" );
    addGroup( "Zoning" );
 
 
       addProtectedField( "frontSidePassable", TypeBool, Offset( mPassableSides[ FrontSide ], Portal ),
       addProtectedField( "frontSidePassable", TypeBool, Offset( mPassableSides[ FrontSide ], Portal ),

+ 1 - 0
Engine/source/T3D/prefab.cpp

@@ -81,6 +81,7 @@ Prefab::~Prefab()
 
 
 void Prefab::initPersistFields()
 void Prefab::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Prefab" );
    addGroup( "Prefab" );
 
 
       addProtectedField( "filename", TypePrefabFilename, Offset( mFilename, Prefab ),         
       addProtectedField( "filename", TypePrefabFilename, Offset( mFilename, Prefab ),         

+ 86 - 84
Engine/source/T3D/projectile.cpp

@@ -232,88 +232,91 @@ ProjectileData::ProjectileData(const ProjectileData& other, bool temp_clone) : G
 
 
 void ProjectileData::initPersistFields()
 void ProjectileData::initPersistFields()
 {
 {
-   addField("particleEmitter", TYPEID< ParticleEmitterData >(), Offset(particleEmitter, ProjectileData),
-      "@brief Particle emitter datablock used to generate particles while the projectile is outside of water.\n\n"
-      "@note If datablocks are defined for both particleEmitter and particleWaterEmitter, both effects will play "
-      "as the projectile enters or leaves water.\n\n"
-      "@see particleWaterEmitter\n");
-   addField("particleWaterEmitter", TYPEID< ParticleEmitterData >(), Offset(particleWaterEmitter, ProjectileData),
-      "@brief Particle emitter datablock used to generate particles while the projectile is submerged in water.\n\n"
-      "@note If datablocks are defined for both particleWaterEmitter and particleEmitter , both effects will play "
-      "as the projectile enters or leaves water.\n\n"
-      "@see particleEmitter\n");
-
-   addProtectedField("projectileShapeName", TypeShapeFilename, Offset(mProjectileShapeName, ProjectileData), &_setProjectileShapeData, &defaultProtectedGetFn,
-      "@brief File path to the model of the projectile.\n\n", AbstractClassRep::FIELD_HideInInspectors);
-      
-   INITPERSISTFIELD_SHAPEASSET(ProjectileShape, ProjectileData, "@brief The model of the projectile.\n\n");
-
-   addField("scale", TypePoint3F, Offset(scale, ProjectileData),
-      "@brief Scale to apply to the projectile's size.\n\n"
-      "@note This is applied after SceneObject::scale\n");
-
-   INITPERSISTFIELD_SOUNDASSET(ProjectileSound, ProjectileData, "The sound for the projectile.");
-
-   addField("explosion", TYPEID< ExplosionData >(), Offset(explosion, ProjectileData),
-      "@brief Explosion datablock used when the projectile explodes outside of water.\n\n");
-   addField("waterExplosion", TYPEID< ExplosionData >(), Offset(waterExplosion, ProjectileData),
-      "@brief Explosion datablock used when the projectile explodes underwater.\n\n");
-
-   addField("splash", TYPEID< SplashData >(), Offset(splash, ProjectileData),
-      "@brief Splash datablock used to create splash effects as the projectile enters or leaves water\n\n");
-
-   addField("decal", TYPEID< DecalData >(), Offset(decal, ProjectileData),
-      "@brief Decal datablock used for decals placed at projectile explosion points.\n\n");
-
-   addField("lightDesc", TYPEID< LightDescription >(), Offset(lightDesc, ProjectileData),
-      "@brief LightDescription datablock used for lights attached to the projectile.\n\n");
-
-   addField("isBallistic", TypeBool, Offset(isBallistic, ProjectileData),
-      "@brief Detetmines if the projectile should be affected by gravity and whether or not "
-      "it bounces before exploding.\n\n");
-
-   addField("velInheritFactor", TypeF32, Offset(velInheritFactor, ProjectileData),
-      "@brief Amount of velocity the projectile recieves from the source that created it.\n\n"
-      "Use an amount between 0 and 1 for the best effect. "
-      "This value is never modified by the engine.\n"
-      "@note This value by default is not transmitted between the server and the client.");
-   addField("muzzleVelocity", TypeF32, Offset(muzzleVelocity, ProjectileData),
-      "@brief Amount of velocity the projectile recieves from the \"muzzle\" of the gun.\n\n"
-      "Used with velInheritFactor to determine the initial velocity of the projectile. "
-      "This value is never modified by the engine.\n\n"
-      "@note This value by default is not transmitted between the server and the client.\n\n"
-      "@see velInheritFactor");
-   
-   addField("impactForce", TypeF32, Offset(impactForce, ProjectileData));
-
-   addProtectedField("lifetime", TypeS32, Offset(lifetime, ProjectileData), &setLifetime, &getScaledValue, 
-      "@brief Amount of time, in milliseconds, before the projectile is removed from the simulation.\n\n"
-      "Used with fadeDelay to determine the transparency of the projectile at a given time. "
-      "A projectile may exist up to a maximum of 131040ms (or 4095 ticks) as defined by Projectile::MaxLivingTicks in the source code."
-      "@see fadeDelay");
-
-   addProtectedField("armingDelay", TypeS32, Offset(armingDelay, ProjectileData), &setArmingDelay, &getScaledValue, 
-      "@brief Amount of time, in milliseconds, before the projectile will cause damage or explode on impact.\n\n"
-      "This value must be equal to or less than the projectile's lifetime.\n\n"
-      "@see lifetime");
-   addProtectedField("fadeDelay", TypeS32, Offset(fadeDelay, ProjectileData), &setFadeDelay, &getScaledValue,
-      "@brief Amount of time, in milliseconds, before the projectile begins to fade out.\n\n"
-      "This value must be smaller than the projectile's lifetime to have an affect.");
-
-   addField("bounceElasticity", TypeF32, Offset(bounceElasticity, ProjectileData), 
-      "@brief Influences post-bounce velocity of a projectile that does not explode on contact.\n\n"
-      "Scales the velocity from a bounce after friction is taken into account. "
-      "A value of 1.0 will leave it's velocity unchanged while values greater than 1.0 will increase it.\n");
-   addField("bounceFriction", TypeF32, Offset(bounceFriction, ProjectileData),
-      "@brief Factor to reduce post-bounce velocity of a projectile that does not explode on contact.\n\n"
-      "Reduces bounce velocity by this factor and a multiple of the tangent to impact. "
-      "Used to simulate surface friction.\n");
-   addField("gravityMod", TypeF32, Offset(gravityMod, ProjectileData ),
-      "@brief Scales the influence of gravity on the projectile.\n\n"
-      "The larger this value is, the more that gravity will affect the projectile. "
-      "A value of 1.0 will assume \"normal\" influence upon it.\n"
-      "The magnitude of gravity is assumed to be 9.81 m/s/s\n\n"
-      "@note ProjectileData::isBallistic must be true for this to have any affect.");
+   docsURL;
+   addGroup("Shapes");
+      addProtectedField("projectileShapeName", TypeShapeFilename, Offset(mProjectileShapeName, ProjectileData), &_setProjectileShapeData, &defaultProtectedGetFn,
+         "@brief File path to the model of the projectile.\n\n", AbstractClassRep::FIELD_HideInInspectors);
+      INITPERSISTFIELD_SHAPEASSET(ProjectileShape, ProjectileData, "@brief The model of the projectile.\n\n");
+      addField("scale", TypePoint3F, Offset(scale, ProjectileData),
+         "@brief Scale to apply to the projectile's size.\n\n"
+         "@note This is applied after SceneObject::scale\n");
+   endGroup("Shapes");
+
+   addGroup("Particle Effects");
+      addField("particleEmitter", TYPEID< ParticleEmitterData >(), Offset(particleEmitter, ProjectileData),
+         "@brief Particle emitter datablock used to generate particles while the projectile is outside of water.\n\n"
+         "@note If datablocks are defined for both particleEmitter and particleWaterEmitter, both effects will play "
+         "as the projectile enters or leaves water.\n\n"
+         "@see particleWaterEmitter\n");
+      addField("particleWaterEmitter", TYPEID< ParticleEmitterData >(), Offset(particleWaterEmitter, ProjectileData),
+         "@brief Particle emitter datablock used to generate particles while the projectile is submerged in water.\n\n"
+         "@note If datablocks are defined for both particleWaterEmitter and particleEmitter , both effects will play "
+         "as the projectile enters or leaves water.\n\n"
+         "@see particleEmitter\n");
+      addField("explosion", TYPEID< ExplosionData >(), Offset(explosion, ProjectileData),
+         "@brief Explosion datablock used when the projectile explodes outside of water.\n\n");
+      addField("waterExplosion", TYPEID< ExplosionData >(), Offset(waterExplosion, ProjectileData),
+         "@brief Explosion datablock used when the projectile explodes underwater.\n\n");
+      addField("splash", TYPEID< SplashData >(), Offset(splash, ProjectileData),
+         "@brief Splash datablock used to create splash effects as the projectile enters or leaves water\n\n");
+      addField("decal", TYPEID< DecalData >(), Offset(decal, ProjectileData),
+         "@brief Decal datablock used for decals placed at projectile explosion points.\n\n");
+   endGroup("Particle Effects");
+
+   addGroup("Sounds");
+      INITPERSISTFIELD_SOUNDASSET(ProjectileSound, ProjectileData, "The sound for the projectile.");
+   endGroup("Sounds");
+
+   addGroup("Light Emitter");
+      addField("lightDesc", TYPEID< LightDescription >(), Offset(lightDesc, ProjectileData),
+         "@brief LightDescription datablock used for lights attached to the projectile.\n\n");
+   endGroup("Light Emitter");   
+
+   addGroup("Physics");
+      addProtectedField("lifetime", TypeS32, Offset(lifetime, ProjectileData), &setLifetime, &getScaledValue,
+         "@brief Amount of time, in milliseconds, before the projectile is removed from the simulation.\n\n"
+         "Used with fadeDelay to determine the transparency of the projectile at a given time. "
+         "A projectile may exist up to a maximum of 131040ms (or 4095 ticks) as defined by Projectile::MaxLivingTicks in the source code."
+         "@see fadeDelay");
+      addProtectedField("armingDelay", TypeS32, Offset(armingDelay, ProjectileData), &setArmingDelay, &getScaledValue,
+         "@brief Amount of time, in milliseconds, before the projectile will cause damage or explode on impact.\n\n"
+         "This value must be equal to or less than the projectile's lifetime.\n\n"
+         "@see lifetime");
+      addProtectedField("fadeDelay", TypeS32, Offset(fadeDelay, ProjectileData), &setFadeDelay, &getScaledValue,
+         "@brief Amount of time, in milliseconds, before the projectile begins to fade out.\n\n"
+         "This value must be smaller than the projectile's lifetime to have an affect.");
+      addField("isBallistic", TypeBool, Offset(isBallistic, ProjectileData),
+         "@brief Detetmines if the projectile should be affected by gravity and whether or not "
+         "it bounces before exploding.\n\n");
+      addField("velInheritFactor", TypeF32, Offset(velInheritFactor, ProjectileData),
+         "@brief Amount of velocity the projectile recieves from the source that created it.\n\n"
+         "Use an amount between 0 and 1 for the best effect. "
+         "This value is never modified by the engine.\n"
+         "@note This value by default is not transmitted between the server and the client.");
+      addField("muzzleVelocity", TypeF32, Offset(muzzleVelocity, ProjectileData),
+         "@brief Amount of velocity the projectile recieves from the \"muzzle\" of the gun.\n\n"
+         "Used with velInheritFactor to determine the initial velocity of the projectile. "
+         "This value is never modified by the engine.\n\n"
+         "@note This value by default is not transmitted between the server and the client.\n\n"
+         "@see velInheritFactor");
+      addField("impactForce", TypeF32, Offset(impactForce, ProjectileData));
+      addField("bounceElasticity", TypeF32, Offset(bounceElasticity, ProjectileData),
+         "@brief Influences post-bounce velocity of a projectile that does not explode on contact.\n\n"
+         "Scales the velocity from a bounce after friction is taken into account. "
+         "A value of 1.0 will leave it's velocity unchanged while values greater than 1.0 will increase it.\n");
+      addField("bounceFriction", TypeF32, Offset(bounceFriction, ProjectileData),
+         "@brief Factor to reduce post-bounce velocity of a projectile that does not explode on contact.\n\n"
+         "Reduces bounce velocity by this factor and a multiple of the tangent to impact. "
+         "Used to simulate surface friction.\n");
+      addField("gravityMod", TypeF32, Offset(gravityMod, ProjectileData),
+         "@brief Scales the influence of gravity on the projectile.\n\n"
+         "The larger this value is, the more that gravity will affect the projectile. "
+         "A value of 1.0 will assume \"normal\" influence upon it.\n"
+         "The magnitude of gravity is assumed to be 9.81 m/s/s\n\n"
+         "@note ProjectileData::isBallistic must be true for this to have any affect.");
+   endGroup("Physics");
+
+   Parent::initPersistFields();
    // disallow some field substitutions
    // disallow some field substitutions
    onlyKeepClearSubstitutions("explosion");
    onlyKeepClearSubstitutions("explosion");
    onlyKeepClearSubstitutions("particleEmitter");
    onlyKeepClearSubstitutions("particleEmitter");
@@ -321,8 +324,6 @@ void ProjectileData::initPersistFields()
    onlyKeepClearSubstitutions("sound");
    onlyKeepClearSubstitutions("sound");
    onlyKeepClearSubstitutions("splash");
    onlyKeepClearSubstitutions("splash");
    onlyKeepClearSubstitutions("waterExplosion");
    onlyKeepClearSubstitutions("waterExplosion");
-
-   Parent::initPersistFields();
 }
 }
 
 
 
 
@@ -647,6 +648,7 @@ Projectile::~Projectile()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void Projectile::initPersistFields()
 void Projectile::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Physics");
    addGroup("Physics");
 
 
    addProtectedField("initialPosition",  TypePoint3F, Offset(mInitialPosition, Projectile), &_setInitialPosition, &defaultProtectedGetFn,
    addProtectedField("initialPosition",  TypePoint3F, Offset(mInitialPosition, Projectile), &_setInitialPosition, &defaultProtectedGetFn,

+ 7 - 8
Engine/source/T3D/proximityMine.cpp

@@ -88,12 +88,16 @@ ProximityMineData::ProximityMineData()
 
 
 void ProximityMineData::initPersistFields()
 void ProximityMineData::initPersistFields()
 {
 {
+   docsURL;
+   Parent::initPersistFields();
+   addGroup("Sounds");
+      INITPERSISTFIELD_SOUNDASSET(ArmSound, ProximityMineData, "Arming sound for this proximity mine.");
+      INITPERSISTFIELD_SOUNDASSET(TriggerSound, ProximityMineData, "Arming sound for this proximity mine.");
+   endGroup("Sounds");
+
    addGroup( "Arming" );
    addGroup( "Arming" );
    addField( "armingDelay", TypeF32, Offset(armingDelay, ProximityMineData), 
    addField( "armingDelay", TypeF32, Offset(armingDelay, ProximityMineData), 
       "Delay (in seconds) from when the mine is placed to when it becomes active." );
       "Delay (in seconds) from when the mine is placed to when it becomes active." );
-
-   INITPERSISTFIELD_SOUNDASSET(ArmSound, ProximityMineData, "Arming sound for this proximity mine.");
-
    endGroup( "Arming" );
    endGroup( "Arming" );
 
 
    addGroup( "Triggering" );
    addGroup( "Triggering" );
@@ -111,9 +115,6 @@ void ProximityMineData::initPersistFields()
       "Speed above which moving objects within the trigger radius will trigger the mine" );
       "Speed above which moving objects within the trigger radius will trigger the mine" );
    addField( "triggerDelay", TypeF32, Offset(triggerDelay, ProximityMineData),
    addField( "triggerDelay", TypeF32, Offset(triggerDelay, ProximityMineData),
       "Delay (in seconds) from when the mine is triggered until it explodes." );
       "Delay (in seconds) from when the mine is triggered until it explodes." );
-
-   INITPERSISTFIELD_SOUNDASSET(TriggerSound, ProximityMineData, "Arming sound for this proximity mine.");
-
    endGroup( "Triggering" );
    endGroup( "Triggering" );
 
 
    addGroup( "Explosion" );
    addGroup( "Explosion" );
@@ -124,8 +125,6 @@ void ProximityMineData::initPersistFields()
       "ground, which can end up blocking the explosion.  This offset along the mine's "
       "ground, which can end up blocking the explosion.  This offset along the mine's "
       "'up' normal allows you to raise the explosion origin to a better height.");
       "'up' normal allows you to raise the explosion origin to a better height.");
    endGroup( "Explosion" );
    endGroup( "Explosion" );
-
-   Parent::initPersistFields();
 }
 }
 
 
 bool ProximityMineData::preload( bool server, String& errorStr )
 bool ProximityMineData::preload( bool server, String& errorStr )

+ 28 - 47
Engine/source/T3D/rigidShape.cpp

@@ -61,7 +61,6 @@ ConsoleDocClass( RigidShapeData,
 	"	   category = \"RigidShape\";\n"
 	"	   category = \"RigidShape\";\n"
 	"\n"		
 	"\n"		
 	"	   shapeFile = \"~/data/shapes/boulder/boulder.dts\";\n"
 	"	   shapeFile = \"~/data/shapes/boulder/boulder.dts\";\n"
-	"	   emap = true;\n"
 	"\n"
 	"\n"
 	"	   // Rigid Body\n"
 	"	   // Rigid Body\n"
 	"	   mass = 500;\n"
 	"	   mass = 500;\n"
@@ -112,7 +111,6 @@ ConsoleDocClass( RigidShape,
 	"	   category = \"RigidShape\";\n"
 	"	   category = \"RigidShape\";\n"
 	"\n"		
 	"\n"		
 	"	   shapeFile = \"~/data/shapes/boulder/boulder.dts\";\n"
 	"	   shapeFile = \"~/data/shapes/boulder/boulder.dts\";\n"
-	"	   emap = true;\n"
 	"\n"
 	"\n"
 	"	   // Rigid Body\n"
 	"	   // Rigid Body\n"
 	"	   mass = 500;\n"
 	"	   mass = 500;\n"
@@ -232,8 +230,6 @@ EndImplementEnumType;
 
 
 RigidShapeData::RigidShapeData()
 RigidShapeData::RigidShapeData()
 {
 {
-   shadowEnable = true;
-
    body.friction = 0;
    body.friction = 0;
    body.restitution = 1;
    body.restitution = 1;
 
 
@@ -516,73 +512,57 @@ void RigidShapeData::unpackData(BitStream* stream)
 
 
 void RigidShapeData::initPersistFields()
 void RigidShapeData::initPersistFields()
 {
 {
-   addGroup("Physics");
-   addField("enablePhysicsRep", TypeBool, Offset(enablePhysicsRep, RigidShapeData),
-      "@brief Creates a representation of the object in the physics plugin.\n");
-   endGroup("Physics");
-
-   addField("massCenter", TypePoint3F, Offset(massCenter, RigidShapeData), "Center of mass for rigid body.");
-   addField("massBox", TypePoint3F, Offset(massBox, RigidShapeData), "Size of inertial box.");
-   addField("bodyRestitution", TypeF32, Offset(body.restitution, RigidShapeData), "The percentage of kinetic energy kept by this object in a collision.");
-   addField("bodyFriction", TypeF32, Offset(body.friction, RigidShapeData), "How much friction this object has. Lower values will cause the object to appear to be more slippery.");
-
-   addField("minImpactSpeed", TypeF32, Offset(minImpactSpeed, RigidShapeData),
-      "Minimum collision speed to classify collision as impact (triggers onImpact on server object)." );
-   addField("softImpactSpeed", TypeF32, Offset(softImpactSpeed, RigidShapeData), "Minimum speed at which this object must be travelling for the soft impact sound to be played.");
-   addField("hardImpactSpeed", TypeF32, Offset(hardImpactSpeed, RigidShapeData), "Minimum speed at which the object must be travelling for the hard impact sound to be played.");
-   addField("minRollSpeed", TypeF32, Offset(minRollSpeed, RigidShapeData));
-
-   addField("maxDrag", TypeF32, Offset(maxDrag, RigidShapeData), "Maximum drag available to this object.");
-   addField("minDrag", TypeF32, Offset(minDrag, RigidShapeData), "Minimum drag available to this object.");
-   addField("integration", TypeS32, Offset(integration, RigidShapeData), "Number of physics steps to process per tick.");
-   addField("collisionTol", TypeF32, Offset(collisionTol, RigidShapeData), "Collision distance tolerance.");
-   addField("contactTol", TypeF32, Offset(contactTol, RigidShapeData), "Contact velocity tolerance.");
-   
-   addGroup( "Forces" );
+   docsURL;
+   Parent::initPersistFields();
 
 
-      addField("dragForce",            TypeF32, Offset(dragForce,            RigidShapeData), "Used to simulate the constant drag acting on the object");
-      addField("vertFactor",           TypeF32, Offset(vertFactor,           RigidShapeData), "The scalar applied to the vertical portion of the velocity drag acting on a object.");
-   
-   endGroup( "Forces" );
-   
    addGroup( "Particle Effects" );
    addGroup( "Particle Effects" );
-
       addField("dustEmitter",       TYPEID< ParticleEmitterData >(),   Offset(dustEmitter,        RigidShapeData), "Array of pointers to ParticleEmitterData datablocks which will be used to emit particles at object/terrain contact point.\n");
       addField("dustEmitter",       TYPEID< ParticleEmitterData >(),   Offset(dustEmitter,        RigidShapeData), "Array of pointers to ParticleEmitterData datablocks which will be used to emit particles at object/terrain contact point.\n");
       addField("triggerDustHeight", TypeF32,                      Offset(triggerDustHeight,  RigidShapeData), "Maximum height from the ground at which the object will generate dust.\n");
       addField("triggerDustHeight", TypeF32,                      Offset(triggerDustHeight,  RigidShapeData), "Maximum height from the ground at which the object will generate dust.\n");
       addField("dustHeight",        TypeF32,                      Offset(dustHeight,         RigidShapeData), "Height of dust effects.\n");
       addField("dustHeight",        TypeF32,                      Offset(dustHeight,         RigidShapeData), "Height of dust effects.\n");
-
       addField("dustTrailEmitter",     TYPEID< ParticleEmitterData >(),   Offset(dustTrailEmitter,   RigidShapeData), "Particle emitter used to create a dust trail for the moving object.\n");
       addField("dustTrailEmitter",     TYPEID< ParticleEmitterData >(),   Offset(dustTrailEmitter,   RigidShapeData), "Particle emitter used to create a dust trail for the moving object.\n");
-
       addField("splashEmitter",        TYPEID< ParticleEmitterData >(),   Offset(splashEmitterList,     RigidShapeData), VC_NUM_SPLASH_EMITTERS, "Array of pointers to ParticleEmitterData datablocks which will generate splash effects.\n");
       addField("splashEmitter",        TYPEID< ParticleEmitterData >(),   Offset(splashEmitterList,     RigidShapeData), VC_NUM_SPLASH_EMITTERS, "Array of pointers to ParticleEmitterData datablocks which will generate splash effects.\n");
-
       addField("splashFreqMod",  TypeF32,                Offset(splashFreqMod,   RigidShapeData), "The simulated frequency modulation of a splash generated by this object. Multiplied along with speed and time elapsed when determining splash emition rate.\n");
       addField("splashFreqMod",  TypeF32,                Offset(splashFreqMod,   RigidShapeData), "The simulated frequency modulation of a splash generated by this object. Multiplied along with speed and time elapsed when determining splash emition rate.\n");
-      addField("splashVelEpsilon", TypeF32,              Offset(splashVelEpsilon, RigidShapeData), "The threshold speed at which we consider the object's movement to have stopped when updating splash effects.\n");
-      
+      addField("splashVelEpsilon", TypeF32,              Offset(splashVelEpsilon, RigidShapeData), "The threshold speed at which we consider the object's movement to have stopped when updating splash effects.\n");  
    endGroup( "Particle Effects" );
    endGroup( "Particle Effects" );
    
    
    addGroup( "Sounds" );
    addGroup( "Sounds" );
+      INITPERSISTFIELD_SOUNDASSET_ENUMED(BodySounds, bodySounds, Body::Sounds::MaxSounds, RigidShapeData, "Sounds for body.");      INITPERSISTFIELD_SOUNDASSET_ENUMED(WaterSounds, waterSounds, Sounds::MaxSounds, RigidShapeData, "Sounds for interacting with water.");
+   endGroup( "Sounds" );
 
 
-      INITPERSISTFIELD_SOUNDASSET_ENUMED(BodySounds, bodySounds, Body::Sounds::MaxSounds, RigidShapeData, "Sounds for body.");
+   addGroup("Physics");
+      addField("enablePhysicsRep", TypeBool, Offset(enablePhysicsRep, RigidShapeData),
+         "@brief Creates a representation of the object in the physics plugin.\n");
+         ("massCenter", TypePoint3F, Offset(massCenter, RigidShapeData), "Center of mass for rigid body.");
+      addField("massBox", TypePoint3F, Offset(massBox, RigidShapeData), "Size of inertial box.");
+      addField("bodyRestitution", TypeF32, Offset(body.restitution, RigidShapeData), "The percentage of kinetic energy kept by this object in a collision.");
+      addField("bodyFriction", TypeF32, Offset(body.friction, RigidShapeData), "How much friction this object has. Lower values will cause the object to appear to be more slippery.");
+      addField("maxDrag", TypeF32, Offset(maxDrag, RigidShapeData), "Maximum drag available to this object.");
+      addField("minDrag", TypeF32, Offset(minDrag, RigidShapeData), "Minimum drag available to this object.");
+      addField("integration", TypeS32, Offset(integration, RigidShapeData), "Number of physics steps to process per tick.");
+      addField("collisionTol", TypeF32, Offset(collisionTol, RigidShapeData), "Collision distance tolerance.");
+      addField("contactTol", TypeF32, Offset(contactTol, RigidShapeData), "Contact velocity tolerance.");
+      addField("dragForce",            TypeF32, Offset(dragForce,            RigidShapeData), "Used to simulate the constant drag acting on the object");
+      addField("vertFactor",           TypeF32, Offset(vertFactor,           RigidShapeData), "The scalar applied to the vertical portion of the velocity drag acting on a object.");
+   endGroup("Physics");
 
 
+   addGroup("Collision");
+      addField("minImpactSpeed", TypeF32, Offset(minImpactSpeed, RigidShapeData),
+      "Minimum collision speed to classify collision as impact (triggers onImpact on server object)." );
+      addField("softImpactSpeed", TypeF32, Offset(softImpactSpeed, RigidShapeData), "Minimum speed at which this object must be travelling for the soft impact sound to be played.");
+      addField("hardImpactSpeed", TypeF32, Offset(hardImpactSpeed, RigidShapeData), "Minimum speed at which the object must be travelling for the hard impact sound to be played.");
+      addField("minRollSpeed", TypeF32, Offset(minRollSpeed, RigidShapeData));
       addField("exitSplashSoundVelocity", TypeF32,       Offset(exitSplashSoundVel, RigidShapeData), "The minimum velocity at which the exit splash sound will be played when emerging from water.\n");
       addField("exitSplashSoundVelocity", TypeF32,       Offset(exitSplashSoundVel, RigidShapeData), "The minimum velocity at which the exit splash sound will be played when emerging from water.\n");
       addField("softSplashSoundVelocity", TypeF32,       Offset(softSplashSoundVel, RigidShapeData),"The minimum velocity at which the soft splash sound will be played when impacting water.\n");
       addField("softSplashSoundVelocity", TypeF32,       Offset(softSplashSoundVel, RigidShapeData),"The minimum velocity at which the soft splash sound will be played when impacting water.\n");
       addField("mediumSplashSoundVelocity", TypeF32,     Offset(medSplashSoundVel, RigidShapeData), "The minimum velocity at which the medium splash sound will be played when impacting water.\n");
       addField("mediumSplashSoundVelocity", TypeF32,     Offset(medSplashSoundVel, RigidShapeData), "The minimum velocity at which the medium splash sound will be played when impacting water.\n");
       addField("hardSplashSoundVelocity", TypeF32,       Offset(hardSplashSoundVel, RigidShapeData), "The minimum velocity at which the hard splash sound will be played when impacting water.\n");
       addField("hardSplashSoundVelocity", TypeF32,       Offset(hardSplashSoundVel, RigidShapeData), "The minimum velocity at which the hard splash sound will be played when impacting water.\n");
-      
-      INITPERSISTFIELD_SOUNDASSET_ENUMED(WaterSounds, waterSounds, Sounds::MaxSounds, RigidShapeData, "Sounds for interacting with water.");
-
-   endGroup( "Sounds" );
+   endGroup("Collision");   
    
    
    addGroup( "Camera" );
    addGroup( "Camera" );
-
       addField("cameraRoll",     TypeBool,       Offset(cameraRoll,     RigidShapeData), "Specifies whether the camera's rotation matrix, and the render eye transform are multiplied during camera updates.\n");
       addField("cameraRoll",     TypeBool,       Offset(cameraRoll,     RigidShapeData), "Specifies whether the camera's rotation matrix, and the render eye transform are multiplied during camera updates.\n");
       addField("cameraLag",      TypeF32,        Offset(cameraLag,      RigidShapeData), "Scalar amount by which the third person camera lags the object, relative to the object's linear velocity.\n");
       addField("cameraLag",      TypeF32,        Offset(cameraLag,      RigidShapeData), "Scalar amount by which the third person camera lags the object, relative to the object's linear velocity.\n");
       addField("cameraDecay",  TypeF32,        Offset(cameraDecay,  RigidShapeData), "Scalar rate at which the third person camera offset decays, per tick.\n");
       addField("cameraDecay",  TypeF32,        Offset(cameraDecay,  RigidShapeData), "Scalar rate at which the third person camera offset decays, per tick.\n");
       addField("cameraOffset",   TypeF32,        Offset(cameraOffset,   RigidShapeData), "The vertical offset of the object's camera.\n");
       addField("cameraOffset",   TypeF32,        Offset(cameraOffset,   RigidShapeData), "The vertical offset of the object's camera.\n");
-      
    endGroup( "Camera" );
    endGroup( "Camera" );
-
-   Parent::initPersistFields();
 }   
 }   
 
 
 
 
@@ -1706,6 +1686,7 @@ void RigidShape::consoleInit()
 
 
 void RigidShape::initPersistFields()
 void RigidShape::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 1 - 0
Engine/source/T3D/scopeAlwaysShape.cpp

@@ -40,6 +40,7 @@ ScopeAlwaysShape::ScopeAlwaysShape()
 
 
 void ScopeAlwaysShape::initPersistFields()
 void ScopeAlwaysShape::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 1 - 0
Engine/source/T3D/sfx/sfxEmitter.cpp

@@ -174,6 +174,7 @@ void SFXEmitter::consoleInit()
 
 
 void SFXEmitter::initPersistFields()
 void SFXEmitter::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Media" );
    addGroup( "Media" );
 
 
    INITPERSISTFIELD_SOUNDASSET(Sound, SFXEmitter, "");
    INITPERSISTFIELD_SOUNDASSET(Sound, SFXEmitter, "");

+ 28 - 49
Engine/source/T3D/shapeBase.cpp

@@ -153,7 +153,7 @@ static const char *sDamageStateName[] =
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 
 
 ShapeBaseData::ShapeBaseData()
 ShapeBaseData::ShapeBaseData()
- : shadowEnable( false ),
+ :
    shadowSize( 128 ),
    shadowSize( 128 ),
    shadowMaxVisibleDistance( 80.0f ),
    shadowMaxVisibleDistance( 80.0f ),
    shadowProjectionDistance( 10.0f ),
    shadowProjectionDistance( 10.0f ),
@@ -208,7 +208,6 @@ ShapeBaseData::ShapeBaseData()
 
 
 ShapeBaseData::ShapeBaseData(const ShapeBaseData& other, bool temp_clone) : GameBaseData(other, temp_clone)
 ShapeBaseData::ShapeBaseData(const ShapeBaseData& other, bool temp_clone) : GameBaseData(other, temp_clone)
 {
 {
-   shadowEnable = other.shadowEnable;
    shadowSize = other.shadowSize;
    shadowSize = other.shadowSize;
    shadowMaxVisibleDistance = other.shadowMaxVisibleDistance;
    shadowMaxVisibleDistance = other.shadowMaxVisibleDistance;
    shadowProjectionDistance = other.shadowProjectionDistance;
    shadowProjectionDistance = other.shadowProjectionDistance;
@@ -535,31 +534,17 @@ bool ShapeBaseData::_setMass( void* object, const char* index, const char* data
 
 
 void ShapeBaseData::initPersistFields()
 void ShapeBaseData::initPersistFields()
 {
 {
-   addGroup( "Shadows" );
-
-      addField( "shadowEnable", TypeBool, Offset(shadowEnable, ShapeBaseData),
-         "Enable shadows for this shape (currently unused, shadows are always enabled)." );
-      addField( "shadowSize", TypeS32, Offset(shadowSize, ShapeBaseData),
-         "Size of the projected shadow texture (must be power of 2)." );
-      addField( "shadowMaxVisibleDistance", TypeF32, Offset(shadowMaxVisibleDistance, ShapeBaseData),
-         "Maximum distance at which shadow is visible (currently unused)." );
-      addField( "shadowProjectionDistance", TypeF32, Offset(shadowProjectionDistance, ShapeBaseData),
-         "Maximum height above ground to project shadow. If the object is higher "
-         "than this no shadow will be rendered." );
-      addField( "shadowSphereAdjust", TypeF32, Offset(shadowSphereAdjust, ShapeBaseData),
-         "Scalar applied to the radius of spot shadows (initial radius is based "
-         "on the shape bounds but can be adjusted with this field)." );
-
-   endGroup( "Shadows" );
-
-   addGroup( "Render" );
-
+   docsURL;
+   addGroup( "Shapes" );
       INITPERSISTFIELD_SHAPEASSET(Shape, ShapeBaseData, "The source shape asset.");
       INITPERSISTFIELD_SHAPEASSET(Shape, ShapeBaseData, "The source shape asset.");
+      addField("computeCRC", TypeBool, Offset(computeCRC, ShapeBaseData),
+         "If true, verify that the CRC of the client's shape model matches the "
+         "server's CRC for the shape model when loaded by the client.");
+      addField("silentBBoxValidation", TypeBool, Offset(silent_bbox_check, ShapeBaseData));
+      INITPERSISTFIELD_SHAPEASSET(DebrisShape, ShapeBaseData, "The shape asset to use for auto-generated breakups via blowup(). @note may not be functional.");
+   endGroup( "Shapes" );
 
 
-   endGroup( "Render" );
-
-   addGroup( "Destruction", "Parameters related to the destruction effects of this object." );
-
+   addGroup("Particle Effects");
       addField( "explosion", TYPEID< ExplosionData >(), Offset(explosion, ShapeBaseData),
       addField( "explosion", TYPEID< ExplosionData >(), Offset(explosion, ShapeBaseData),
          "%Explosion to generate when this shape is blown up." );
          "%Explosion to generate when this shape is blown up." );
       addField( "underwaterExplosion", TYPEID< ExplosionData >(), Offset(underwaterExplosion, ShapeBaseData),
       addField( "underwaterExplosion", TYPEID< ExplosionData >(), Offset(underwaterExplosion, ShapeBaseData),
@@ -568,23 +553,17 @@ void ShapeBaseData::initPersistFields()
          "%Debris to generate when this shape is blown up." );
          "%Debris to generate when this shape is blown up." );
       addField( "renderWhenDestroyed", TypeBool, Offset(renderWhenDestroyed, ShapeBaseData),
       addField( "renderWhenDestroyed", TypeBool, Offset(renderWhenDestroyed, ShapeBaseData),
          "Whether to render the shape when it is in the \"Destroyed\" damage state." );
          "Whether to render the shape when it is in the \"Destroyed\" damage state." );
+   endGroup("Particle Effects");
 
 
-      INITPERSISTFIELD_SHAPEASSET(DebrisShape, ShapeBaseData, "The shape asset to use for auto-generated breakups. @note may not be functional.");
-
-   endGroup( "Destruction" );
-
-   addGroup( "Physics" );
-   
+   addGroup( "Physics" );   
       addProtectedField("mass", TypeF32, Offset(mass, ShapeBaseData), &_setMass, &defaultProtectedGetFn, "Shape mass.\nUsed in simulation of moving objects.\n"  );
       addProtectedField("mass", TypeF32, Offset(mass, ShapeBaseData), &_setMass, &defaultProtectedGetFn, "Shape mass.\nUsed in simulation of moving objects.\n"  );
       addField( "drag", TypeF32, Offset(drag, ShapeBaseData),
       addField( "drag", TypeF32, Offset(drag, ShapeBaseData),
          "Drag factor.\nReduces velocity of moving objects." );
          "Drag factor.\nReduces velocity of moving objects." );
       addField( "density", TypeF32, Offset(density, ShapeBaseData),
       addField( "density", TypeF32, Offset(density, ShapeBaseData),
          "Shape density.\nUsed when computing buoyancy when in water.\n" );
          "Shape density.\nUsed when computing buoyancy when in water.\n" );
-
    endGroup( "Physics" );
    endGroup( "Physics" );
 
 
    addGroup( "Damage/Energy" );
    addGroup( "Damage/Energy" );
-
       addField( "maxEnergy", TypeF32, Offset(maxEnergy, ShapeBaseData),
       addField( "maxEnergy", TypeF32, Offset(maxEnergy, ShapeBaseData),
          "Maximum energy level for this object." );
          "Maximum energy level for this object." );
       addField( "maxDamage", TypeF32, Offset(maxDamage, ShapeBaseData),
       addField( "maxDamage", TypeF32, Offset(maxDamage, ShapeBaseData),
@@ -605,11 +584,9 @@ void ShapeBaseData::initPersistFields()
       addField( "isInvincible", TypeBool, Offset(isInvincible, ShapeBaseData),
       addField( "isInvincible", TypeBool, Offset(isInvincible, ShapeBaseData),
          "Invincible flag; when invincible, the object cannot be damaged or "
          "Invincible flag; when invincible, the object cannot be damaged or "
          "repaired." );
          "repaired." );
-
    endGroup( "Damage/Energy" );
    endGroup( "Damage/Energy" );
 
 
    addGroup( "Camera", "The settings used by the shape when it is the camera." );
    addGroup( "Camera", "The settings used by the shape when it is the camera." );
-
       addField( "cameraMaxDist", TypeF32, Offset(cameraMaxDist, ShapeBaseData),
       addField( "cameraMaxDist", TypeF32, Offset(cameraMaxDist, ShapeBaseData),
          "The maximum distance from the camera to the object.\n"
          "The maximum distance from the camera to the object.\n"
          "Used when computing a custom camera transform for this object.\n\n"
          "Used when computing a custom camera transform for this object.\n\n"
@@ -638,35 +615,38 @@ void ShapeBaseData::initPersistFields()
          "Observe this object through its camera transform and default fov.\n"
          "Observe this object through its camera transform and default fov.\n"
          "If true, when this object is the camera it can provide a custom camera "
          "If true, when this object is the camera it can provide a custom camera "
          "transform and FOV (instead of the default eye transform)." );
          "transform and FOV (instead of the default eye transform)." );
-
    endGroup("Camera");
    endGroup("Camera");
 
 
-   addGroup( "Misc" );
-
-      addField( "computeCRC", TypeBool, Offset(computeCRC, ShapeBaseData),
-         "If true, verify that the CRC of the client's shape model matches the "
-         "server's CRC for the shape model when loaded by the client." );
-
-   endGroup( "Misc" );
-
    addGroup( "Reflection" );
    addGroup( "Reflection" );
-
       addField( "cubeReflectorDesc", TypeRealString, Offset( cubeDescName, ShapeBaseData ), 
       addField( "cubeReflectorDesc", TypeRealString, Offset( cubeDescName, ShapeBaseData ), 
          "References a ReflectorDesc datablock that defines performance and quality properties for dynamic reflections.\n");
          "References a ReflectorDesc datablock that defines performance and quality properties for dynamic reflections.\n");
       //addField( "reflectMaxRateMs", TypeS32, Offset( reflectMaxRateMs, ShapeBaseData ), "reflection will not be updated more frequently than this" );
       //addField( "reflectMaxRateMs", TypeS32, Offset( reflectMaxRateMs, ShapeBaseData ), "reflection will not be updated more frequently than this" );
       //addField( "reflectMaxDist", TypeF32, Offset( reflectMaxDist, ShapeBaseData ), "distance at which reflection is never updated" );
       //addField( "reflectMaxDist", TypeF32, Offset( reflectMaxDist, ShapeBaseData ), "distance at which reflection is never updated" );
       //addField( "reflectMinDist", TypeF32, Offset( reflectMinDist, ShapeBaseData ), "distance at which reflection is always updated" );
       //addField( "reflectMinDist", TypeF32, Offset( reflectMinDist, ShapeBaseData ), "distance at which reflection is always updated" );
       //addField( "reflectDetailAdjust", TypeF32, Offset( reflectDetailAdjust, ShapeBaseData ), "scale up or down the detail level for objects rendered in a reflection" );
       //addField( "reflectDetailAdjust", TypeF32, Offset( reflectDetailAdjust, ShapeBaseData ), "scale up or down the detail level for objects rendered in a reflection" );
-
    endGroup( "Reflection" );
    endGroup( "Reflection" );
 
 
    addField("remapTextureTags",      TypeString,   Offset(remap_txr_tags, ShapeBaseData));
    addField("remapTextureTags",      TypeString,   Offset(remap_txr_tags, ShapeBaseData));
-   addField("silentBBoxValidation",  TypeBool,     Offset(silent_bbox_check, ShapeBaseData));
+
    // disallow some field substitutions
    // disallow some field substitutions
    onlyKeepClearSubstitutions("debris"); // subs resolving to "~~", or "~0" are OK
    onlyKeepClearSubstitutions("debris"); // subs resolving to "~~", or "~0" are OK
    onlyKeepClearSubstitutions("explosion");
    onlyKeepClearSubstitutions("explosion");
    onlyKeepClearSubstitutions("underwaterExplosion");
    onlyKeepClearSubstitutions("underwaterExplosion");
    Parent::initPersistFields();
    Parent::initPersistFields();
+
+   addGroup("BL Projected Shadows");
+      addField("shadowSize", TypeS32, Offset(shadowSize, ShapeBaseData),
+         "Size of the projected shadow texture (must be power of 2).");
+      addField("shadowMaxVisibleDistance", TypeF32, Offset(shadowMaxVisibleDistance, ShapeBaseData),
+         "Maximum distance at which shadow is visible (currently unused).");
+      addField("shadowProjectionDistance", TypeF32, Offset(shadowProjectionDistance, ShapeBaseData),
+         "Maximum height above ground to project shadow. If the object is higher "
+         "than this no shadow will be rendered.");
+      addField("shadowSphereAdjust", TypeF32, Offset(shadowSphereAdjust, ShapeBaseData),
+         "Scalar applied to the radius of spot shadows (initial radius is based "
+         "on the shape bounds but can be adjusted with this field).");
+   endGroup("BL Projected Shadows");
+
 }
 }
 
 
 DefineEngineMethod( ShapeBaseData, checkDeployPos, bool, ( TransformF txfm ),,
 DefineEngineMethod( ShapeBaseData, checkDeployPos, bool, ( TransformF txfm ),,
@@ -751,7 +731,6 @@ void ShapeBaseData::packData(BitStream* stream)
    if(stream->writeFlag(computeCRC))
    if(stream->writeFlag(computeCRC))
       stream->write(mCRC);
       stream->write(mCRC);
 
 
-   stream->writeFlag(shadowEnable);
    stream->write(shadowSize);
    stream->write(shadowSize);
    stream->write(shadowMaxVisibleDistance);
    stream->write(shadowMaxVisibleDistance);
    stream->write(shadowProjectionDistance);
    stream->write(shadowProjectionDistance);
@@ -829,7 +808,6 @@ void ShapeBaseData::unpackData(BitStream* stream)
    if(computeCRC)
    if(computeCRC)
       stream->read(&mCRC);
       stream->read(&mCRC);
 
 
-   shadowEnable = stream->readFlag();
    stream->read(&shadowSize);
    stream->read(&shadowSize);
    stream->read(&shadowMaxVisibleDistance);
    stream->read(&shadowMaxVisibleDistance);
    stream->read(&shadowProjectionDistance);
    stream->read(&shadowProjectionDistance);
@@ -1056,6 +1034,7 @@ ShapeBase::~ShapeBase()
 
 
 void ShapeBase::initPersistFields()
 void ShapeBase::initPersistFields()
 {
 {
+   docsURL;
    addProtectedField( "skin", TypeRealString, Offset(mAppliedSkinName, ShapeBase), &_setFieldSkin, &_getFieldSkin,
    addProtectedField( "skin", TypeRealString, Offset(mAppliedSkinName, ShapeBase), &_setFieldSkin, &_getFieldSkin,
       "@brief The skin applied to the shape.\n\n"
       "@brief The skin applied to the shape.\n\n"
 
 

+ 0 - 2
Engine/source/T3D/shapeBase.h

@@ -354,7 +354,6 @@ struct ShapeBaseImageData: public GameBaseData {
    bool useRemainderDT;
    bool useRemainderDT;
 
 
    //
    //
-   bool emap;                       ///< Environment mapping on?
    bool correctMuzzleVector;        ///< Adjust 1st person firing vector to eye's LOS point?
    bool correctMuzzleVector;        ///< Adjust 1st person firing vector to eye's LOS point?
    bool correctMuzzleVectorTP;      ///< Adjust 3rd person firing vector to camera's LOS point?
    bool correctMuzzleVectorTP;      ///< Adjust 3rd person firing vector to camera's LOS point?
    bool firstPerson;                ///< Render the image when in first person?
    bool firstPerson;                ///< Render the image when in first person?
@@ -542,7 +541,6 @@ public:
 
 
    // TODO: These are only really used in Basic Lighting
    // TODO: These are only really used in Basic Lighting
    // mode... we should probably move them somewhere else.
    // mode... we should probably move them somewhere else.
-   bool shadowEnable;
    U32 shadowSize;
    U32 shadowSize;
    F32 shadowMaxVisibleDistance;
    F32 shadowMaxVisibleDistance;
    F32 shadowProjectionDistance;
    F32 shadowProjectionDistance;

+ 124 - 140
Engine/source/T3D/shapeImage.cpp

@@ -166,8 +166,6 @@ static ShapeBaseImageData::StateData gDefaultStateData;
 
 
 ShapeBaseImageData::ShapeBaseImageData()
 ShapeBaseImageData::ShapeBaseImageData()
 {
 {
-   emap = false;
-
    mountPoint = 0;
    mountPoint = 0;
    mountOffset.identity();
    mountOffset.identity();
    eyeOffset.identity();
    eyeOffset.identity();
@@ -631,92 +629,109 @@ S32 ShapeBaseImageData::lookupState(const char* name)
 
 
 void ShapeBaseImageData::initPersistFields()
 void ShapeBaseImageData::initPersistFields()
 {
 {
-   addField( "emap", TypeBool, Offset(emap, ShapeBaseImageData),
-      "@brief Whether to enable environment mapping on this Image.\n\n" );
-
-   INITPERSISTFIELD_SHAPEASSET_ARRAY(Shape, MaxShapes, ShapeBaseImageData, "The shape asset to use for this image in the third person")
-
+   docsURL;
+   addGroup("Shapes");
+      INITPERSISTFIELD_SHAPEASSET_ARRAY(Shape, MaxShapes, ShapeBaseImageData, "The shape asset to use for this image in the third person")
    //addProtectedField("shapeFileFP", TypeShapeFilename, Offset(mShapeName[1], ShapeBaseImageData), _setShapeData, defaultProtectedGetFn, "deprecated alias for ShapeFPFile/Asset", AbstractClassRep::FIELD_HideInInspectors);
    //addProtectedField("shapeFileFP", TypeShapeFilename, Offset(mShapeName[1], ShapeBaseImageData), _setShapeData, defaultProtectedGetFn, "deprecated alias for ShapeFPFile/Asset", AbstractClassRep::FIELD_HideInInspectors);
-
-   addField( "imageAnimPrefix", TypeCaseString, Offset(imageAnimPrefix, ShapeBaseImageData),
-      "@brief Passed along to the mounting shape to modify animation sequences played in third person. [optional]\n\n" );
-   addField( "imageAnimPrefixFP", TypeCaseString, Offset(imageAnimPrefixFP, ShapeBaseImageData),
-      "@brief Passed along to the mounting shape to modify animation sequences played in first person. [optional]\n\n" );
-
-   addField( "animateAllShapes", TypeBool, Offset(animateAllShapes, ShapeBaseImageData),
-      "@brief Indicates that all shapes should be animated in sync.\n\n"
-      "When multiple shapes are defined for this image datablock, each of them are automatically "
-      "animated in step with each other.  This allows for easy switching between between shapes "
-      "when some other condition changes, such as going from first person to third person, and "
-      "keeping their look consistent.  If you know that you'll never switch between shapes on the "
-      "fly, such as players only being allowed in a first person view, then you could set this to "
-      "false to save some calculations.\n\n"
-      "There are other circumstances internal to the engine that determine that only the current shape "
-      "should be animated rather than all defined shapes.  In those cases, this property is ignored.\n\n"
-      "@note This property is only important if you have more than one shape defined, such as shapeFileFP.\n\n"
-      "@see shapeFileFP\n");
-
-   addField( "animateOnServer", TypeBool, Offset(animateOnServer, ShapeBaseImageData),
-      "@brief Indicates that the image should be animated on the server.\n\n"
-      "In most cases you'll want this set if you're using useEyeNode.  You may also want to "
-      "set this if the muzzlePoint is animated while it shoots.  You can set this "
-      "to false even if these previous cases are true if the image's shape is set "
-      "up in the correct position and orientation in the 'root' pose and none of "
-      "the nodes are animated at key times, such as the muzzlePoint essentially "
-      "remaining at the same position at the start of the fire state (it could "
-      "animate just fine after the projectile is away as the muzzle vector is only "
-      "calculated at the start of the state).\n\n"
-      "You'll also want to set this to true if you're animating the camera using the "
-      "image's 'eye' node -- unless the movement is very subtle and doesn't need to "
-      "be reflected on the server.\n\n"
-      "@note Setting this to true causes up to four animation threads to be advanced on the server "
-      "for each instance in use, although for most images only one or two are actually defined.\n\n"
-      "@see useEyeNode\n");
-
-   addField( "scriptAnimTransitionTime", TypeF32, Offset(scriptAnimTransitionTime, ShapeBaseImageData),
-      "@brief The amount of time to transition between the previous sequence and new sequence when the script prefix has changed.\n\n"
-      "When setImageScriptAnimPrefix() is used on a ShapeBase that has this image mounted, the image "
-      "will attempt to switch to the new animation sequence based on the given script prefix.  This is "
-      "the amount of time it takes to transition from the previously playing animation sequence to"
-      "the new script prefix-based animation sequence.\n"
-      "@see ShapeBase::setImageScriptAnimPrefix()");
+      addField("casing", TYPEID< DebrisData >(), Offset(casing, ShapeBaseImageData),
+            "@brief DebrisData datablock to use for ejected casings.\n\n"
+            "@see stateEjectShell");
+      addField("shellExitDir", TypePoint3F, Offset(shellExitDir, ShapeBaseImageData),
+         "@brief Vector direction to eject shell casings.\n\n"
+         "@see casing");
+      addField("shellExitVariance", TypeF32, Offset(shellExitVariance, ShapeBaseImageData),
+         "@brief Variance (in degrees) from the shellExitDir vector to eject casings.\n\n"
+         "@see shellExitDir");
+      addField("shellVelocity", TypeF32, Offset(shellVelocity, ShapeBaseImageData),
+         "@brief Speed at which to eject casings.\n\n"
+         "@see casing");
+      addField("computeCRC", TypeBool, Offset(computeCRC, ShapeBaseImageData),
+         "If true, verify that the CRC of the client's Image matches the server's "
+         "CRC for the Image when loaded by the client.");
+   endGroup("Shapes");
+
+   addGroup("Animation");
+      addField( "imageAnimPrefix", TypeCaseString, Offset(imageAnimPrefix, ShapeBaseImageData),
+         "@brief Passed along to the mounting shape to modify animation sequences played in third person. [optional]\n\n" );
+      addField( "imageAnimPrefixFP", TypeCaseString, Offset(imageAnimPrefixFP, ShapeBaseImageData),
+         "@brief Passed along to the mounting shape to modify animation sequences played in first person. [optional]\n\n" );
+      addField( "animateAllShapes", TypeBool, Offset(animateAllShapes, ShapeBaseImageData),
+         "@brief Indicates that all shapes should be animated in sync.\n\n"
+         "When multiple shapes are defined for this image datablock, each of them are automatically "
+         "animated in step with each other.  This allows for easy switching between between shapes "
+         "when some other condition changes, such as going from first person to third person, and "
+         "keeping their look consistent.  If you know that you'll never switch between shapes on the "
+         "fly, such as players only being allowed in a first person view, then you could set this to "
+         "false to save some calculations.\n\n"
+         "There are other circumstances internal to the engine that determine that only the current shape "
+         "should be animated rather than all defined shapes.  In those cases, this property is ignored.\n\n"
+         "@note This property is only important if you have more than one shape defined, such as shapeFileFP.\n\n"
+         "@see shapeFileFP\n");
+      addField( "animateOnServer", TypeBool, Offset(animateOnServer, ShapeBaseImageData),
+         "@brief Indicates that the image should be animated on the server.\n\n"
+         "In most cases you'll want this set if you're using useEyeNode.  You may also want to "
+         "set this if the muzzlePoint is animated while it shoots.  You can set this "
+         "to false even if these previous cases are true if the image's shape is set "
+         "up in the correct position and orientation in the 'root' pose and none of "
+         "the nodes are animated at key times, such as the muzzlePoint essentially "
+         "remaining at the same position at the start of the fire state (it could "
+         "animate just fine after the projectile is away as the muzzle vector is only "
+         "calculated at the start of the state).\n\n"
+         "You'll also want to set this to true if you're animating the camera using the "
+         "image's 'eye' node -- unless the movement is very subtle and doesn't need to "
+         "be reflected on the server.\n\n"
+         "@note Setting this to true causes up to four animation threads to be advanced on the server "
+         "for each instance in use, although for most images only one or two are actually defined.\n\n"
+         "@see useEyeNode\n");
+      addField( "scriptAnimTransitionTime", TypeF32, Offset(scriptAnimTransitionTime, ShapeBaseImageData),
+         "@brief The amount of time to transition between the previous sequence and new sequence when the script prefix has changed.\n\n"
+         "When setImageScriptAnimPrefix() is used on a ShapeBase that has this image mounted, the image "
+         "will attempt to switch to the new animation sequence based on the given script prefix.  This is "
+         "the amount of time it takes to transition from the previously playing animation sequence to"
+         "the new script prefix-based animation sequence.\n"
+         "@see ShapeBase::setImageScriptAnimPrefix()");
+   endGroup("Animation");
 
 
    addField( "projectile", TYPEID< ProjectileData >(), Offset(projectile, ShapeBaseImageData),
    addField( "projectile", TYPEID< ProjectileData >(), Offset(projectile, ShapeBaseImageData),
       "@brief The projectile fired by this Image\n\n" );
       "@brief The projectile fired by this Image\n\n" );
-
    addField( "cloakable", TypeBool, Offset(cloakable, ShapeBaseImageData),
    addField( "cloakable", TypeBool, Offset(cloakable, ShapeBaseImageData),
       "@brief Whether this Image can be cloaked.\n\n"
       "@brief Whether this Image can be cloaked.\n\n"
       "Currently unused." );
       "Currently unused." );
+   addField("usesEnergy", TypeBool, Offset(usesEnergy, ShapeBaseImageData),
+      "@brief Flag indicating whether this Image uses energy instead of ammo.  The energy level comes from the ShapeBase object we're mounted to.\n\n"
+      "@see ShapeBase::setEnergyLevel()");
+   addField("minEnergy", TypeF32, Offset(minEnergy, ShapeBaseImageData),
+      "@brief Minimum Image energy for it to be operable.\n\n"
+      "@see usesEnergy");
 
 
+   addGroup("Mounting");
    addField( "mountPoint", TypeS32, Offset(mountPoint, ShapeBaseImageData),
    addField( "mountPoint", TypeS32, Offset(mountPoint, ShapeBaseImageData),
       "@brief Mount node # to mount this Image to.\n\n"
       "@brief Mount node # to mount this Image to.\n\n"
       "This should correspond to a mount# node on the ShapeBase derived object we are mounting to." );
       "This should correspond to a mount# node on the ShapeBase derived object we are mounting to." );
-
    addField( "offset", TypeMatrixPosition, Offset(mountOffset, ShapeBaseImageData),
    addField( "offset", TypeMatrixPosition, Offset(mountOffset, ShapeBaseImageData),
       "@brief \"X Y Z\" translation offset from this Image's <i>mountPoint</i> node to "
       "@brief \"X Y Z\" translation offset from this Image's <i>mountPoint</i> node to "
       "attach to.\n\n"
       "attach to.\n\n"
       "Defaults to \"0 0 0\". ie. attach this Image's "
       "Defaults to \"0 0 0\". ie. attach this Image's "
       "<i>mountPoint</i> node to the ShapeBase model's mount# node without any offset.\n"
       "<i>mountPoint</i> node to the ShapeBase model's mount# node without any offset.\n"
       "@see rotation");
       "@see rotation");
-
    addField( "rotation", TypeMatrixRotation, Offset(mountOffset, ShapeBaseImageData),
    addField( "rotation", TypeMatrixRotation, Offset(mountOffset, ShapeBaseImageData),
       "@brief \"X Y Z ANGLE\" rotation offset from this Image's <i>mountPoint</i> node "
       "@brief \"X Y Z ANGLE\" rotation offset from this Image's <i>mountPoint</i> node "
       "to attach to.\n\n"
       "to attach to.\n\n"
       "Defaults to \"0 0 0\". ie. attach this Image's "
       "Defaults to \"0 0 0\". ie. attach this Image's "
       "<i>mountPoint</i> node to the ShapeBase model's mount# node without any additional rotation.\n"
       "<i>mountPoint</i> node to the ShapeBase model's mount# node without any additional rotation.\n"
       "@see offset");
       "@see offset");
+   endGroup("Mounting");
 
 
+   addGroup("Camera");
    addField( "eyeOffset", TypeMatrixPosition, Offset(eyeOffset, ShapeBaseImageData),
    addField( "eyeOffset", TypeMatrixPosition, Offset(eyeOffset, ShapeBaseImageData),
       "@brief \"X Y Z\" translation offset from the ShapeBase model's eye node.\n\n"
       "@brief \"X Y Z\" translation offset from the ShapeBase model's eye node.\n\n"
       "When in first person view, this is the offset from the eye node to place the gun.  This "
       "When in first person view, this is the offset from the eye node to place the gun.  This "
       "gives the gun a fixed point in space, typical of a lot of FPS games.\n"
       "gives the gun a fixed point in space, typical of a lot of FPS games.\n"
       "@see eyeRotation");
       "@see eyeRotation");
-
    addField( "eyeRotation", TypeMatrixRotation, Offset(eyeOffset, ShapeBaseImageData),
    addField( "eyeRotation", TypeMatrixRotation, Offset(eyeOffset, ShapeBaseImageData),
       "@brief \"X Y Z ANGLE\" rotation offset from the ShapeBase model's eye node.\n\n"
       "@brief \"X Y Z ANGLE\" rotation offset from the ShapeBase model's eye node.\n\n"
       "When in first person view, this is the rotation from the eye node to place the gun.\n"
       "When in first person view, this is the rotation from the eye node to place the gun.\n"
       "@see eyeOffset");
       "@see eyeOffset");
-
    addField( "useEyeNode", TypeBool, Offset(useEyeNode, ShapeBaseImageData),
    addField( "useEyeNode", TypeBool, Offset(useEyeNode, ShapeBaseImageData),
       "@brief Mount image using image's eyeMount node and place the camera at the image's eye node (or "
       "@brief Mount image using image's eyeMount node and place the camera at the image's eye node (or "
       "at the eyeMount node if the eye node is missing).\n\n"
       "at the eyeMount node if the eye node is missing).\n\n"
@@ -728,92 +743,62 @@ void ShapeBaseImageData::initPersistFields()
       "@note Read about the animateOnServer field as you may want to set it to true if you're using useEyeNode.\n\n"
       "@note Read about the animateOnServer field as you may want to set it to true if you're using useEyeNode.\n\n"
       "@see eyeOffset\n\n"
       "@see eyeOffset\n\n"
       "@see animateOnServer\n\n");
       "@see animateOnServer\n\n");
-
+   addField("firstPerson", TypeBool, Offset(firstPerson, ShapeBaseImageData),
+      "@brief Set to true to render the image in first person.");
+   endGroup("Camera");
+   
+   addGroup("Camera Shake");
+      addField( "shakeCamera", TypeBool, Offset(shakeCamera, ShapeBaseImageData),
+         "@brief Flag indicating whether the camera should shake when this Image fires.\n\n" );
+      addField( "camShakeFreq", TypePoint3F, Offset(camShakeFreq, ShapeBaseImageData),
+         "@brief Frequency of the camera shaking effect.\n\n"
+         "@see shakeCamera" );
+      addField( "camShakeAmp", TypePoint3F, Offset(camShakeAmp, ShapeBaseImageData),
+         "@brief Amplitude of the camera shaking effect.\n\n"
+         "@see shakeCamera" );
+      addField( "camShakeDuration", TypeF32, Offset(camShakeDuration, ShapeBaseImageData),
+         "Duration (in seconds) to shake the camera." );
+      addField( "camShakeRadius", TypeF32, Offset(camShakeRadius, ShapeBaseImageData),
+         "Radial distance that a camera's position must be within relative to the "
+         "center of the explosion to be shaken." );
+      addField( "camShakeFalloff", TypeF32, Offset(camShakeFalloff, ShapeBaseImageData),
+         "Falloff value for the camera shake." );
+   endGroup("Camera Shake");
+
+   addGroup("Physics");
    addField( "correctMuzzleVector", TypeBool,  Offset(correctMuzzleVector, ShapeBaseImageData),
    addField( "correctMuzzleVector", TypeBool,  Offset(correctMuzzleVector, ShapeBaseImageData),
       "@brief Flag to adjust the aiming vector to the eye's LOS point when in 1st person view.\n\n"
       "@brief Flag to adjust the aiming vector to the eye's LOS point when in 1st person view.\n\n"
       "@see ShapeBase::getMuzzleVector()" );
       "@see ShapeBase::getMuzzleVector()" );
-
    addField( "correctMuzzleVectorTP", TypeBool,  Offset(correctMuzzleVectorTP, ShapeBaseImageData),
    addField( "correctMuzzleVectorTP", TypeBool,  Offset(correctMuzzleVectorTP, ShapeBaseImageData),
       "@brief Flag to adjust the aiming vector to the camera's LOS point when in 3rd person view.\n\n"
       "@brief Flag to adjust the aiming vector to the camera's LOS point when in 3rd person view.\n\n"
       "@see ShapeBase::getMuzzleVector()" );
       "@see ShapeBase::getMuzzleVector()" );
-
-   addField( "firstPerson", TypeBool, Offset(firstPerson, ShapeBaseImageData),
-      "@brief Set to true to render the image in first person." );
-
    addField( "mass", TypeF32, Offset(mass, ShapeBaseImageData),
    addField( "mass", TypeF32, Offset(mass, ShapeBaseImageData),
       "@brief Mass of this Image.\n\n"
       "@brief Mass of this Image.\n\n"
       "This is added to the total mass of the ShapeBase object." );
       "This is added to the total mass of the ShapeBase object." );
-
-   addField( "usesEnergy", TypeBool, Offset(usesEnergy,ShapeBaseImageData),
-      "@brief Flag indicating whether this Image uses energy instead of ammo.  The energy level comes from the ShapeBase object we're mounted to.\n\n"
-      "@see ShapeBase::setEnergyLevel()");
-
-   addField( "minEnergy", TypeF32, Offset(minEnergy, ShapeBaseImageData),
-      "@brief Minimum Image energy for it to be operable.\n\n"
-      "@see usesEnergy");
-
    addField( "accuFire", TypeBool, Offset(accuFire, ShapeBaseImageData),
    addField( "accuFire", TypeBool, Offset(accuFire, ShapeBaseImageData),
       "@brief Flag to control whether the Image's aim is automatically converged with "
       "@brief Flag to control whether the Image's aim is automatically converged with "
       "the crosshair.\n\n"
       "the crosshair.\n\n"
       "Currently unused." );
       "Currently unused." );
-
-   addField( "lightType", TYPEID< ShapeBaseImageData::LightType >(), Offset(lightType, ShapeBaseImageData),
-      "@brief The type of light this Image emits.\n\n"
-      "@see ShapeBaseImageLightType");
-
-   addField( "lightColor", TypeColorF, Offset(lightColor, ShapeBaseImageData),
-      "@brief The color of light this Image emits.\n\n"
-      "@see lightType");
-
-   addField( "lightDuration", TypeS32, Offset(lightDuration, ShapeBaseImageData),
-      "@brief Duration in SimTime of Pulsing and WeaponFire type lights.\n\n"
-      "@see lightType");
-
-   addField( "lightRadius", TypeF32, Offset(lightRadius, ShapeBaseImageData),
-      "@brief Radius of the light this Image emits.\n\n"
-      "@see lightType");
-
-   addField( "lightBrightness", TypeF32, Offset(lightBrightness, ShapeBaseImageData),
-      "@brief Brightness of the light this Image emits.\n\n"
-      "Only valid for WeaponFireLight."
-      "@see lightType");
-
-   addField( "shakeCamera", TypeBool, Offset(shakeCamera, ShapeBaseImageData),
-      "@brief Flag indicating whether the camera should shake when this Image fires.\n\n" );
-
-   addField( "camShakeFreq", TypePoint3F, Offset(camShakeFreq, ShapeBaseImageData),
-      "@brief Frequency of the camera shaking effect.\n\n"
-      "@see shakeCamera" );
-
-   addField( "camShakeAmp", TypePoint3F, Offset(camShakeAmp, ShapeBaseImageData),
-      "@brief Amplitude of the camera shaking effect.\n\n"
-      "@see shakeCamera" );
-
-   addField( "camShakeDuration", TypeF32, Offset(camShakeDuration, ShapeBaseImageData),
-      "Duration (in seconds) to shake the camera." );
-
-   addField( "camShakeRadius", TypeF32, Offset(camShakeRadius, ShapeBaseImageData),
-      "Radial distance that a camera's position must be within relative to the "
-      "center of the explosion to be shaken." );
-
-   addField( "camShakeFalloff", TypeF32, Offset(camShakeFalloff, ShapeBaseImageData),
-      "Falloff value for the camera shake." );
-
-   addField( "casing", TYPEID< DebrisData >(), Offset(casing, ShapeBaseImageData),
-      "@brief DebrisData datablock to use for ejected casings.\n\n"
-      "@see stateEjectShell" );
-
-   addField( "shellExitDir", TypePoint3F, Offset(shellExitDir, ShapeBaseImageData),
-      "@brief Vector direction to eject shell casings.\n\n"
-      "@see casing");
-
-   addField( "shellExitVariance", TypeF32, Offset(shellExitVariance, ShapeBaseImageData),
-      "@brief Variance (in degrees) from the shellExitDir vector to eject casings.\n\n"
-      "@see shellExitDir");
-
-   addField( "shellVelocity", TypeF32, Offset(shellVelocity, ShapeBaseImageData),
-      "@brief Speed at which to eject casings.\n\n"
-      "@see casing");
+   endGroup("Physics");
+
+   addGroup("Light Emitter");
+      addField( "lightType", TYPEID< ShapeBaseImageData::LightType >(), Offset(lightType, ShapeBaseImageData),
+         "@brief The type of light this Image emits.\n\n"
+         "@see ShapeBaseImageLightType");
+      addField( "lightColor", TypeColorF, Offset(lightColor, ShapeBaseImageData),
+         "@brief The color of light this Image emits.\n\n"
+         "@see lightType");
+      addField( "lightDuration", TypeS32, Offset(lightDuration, ShapeBaseImageData),
+         "@brief Duration in SimTime of Pulsing and WeaponFire type lights.\n\n"
+         "@see lightType");
+      addField( "lightRadius", TypeF32, Offset(lightRadius, ShapeBaseImageData),
+         "@brief Radius of the light this Image emits.\n\n"
+         "@see lightType");
+      addField( "lightBrightness", TypeF32, Offset(lightBrightness, ShapeBaseImageData),
+         "@brief Brightness of the light this Image emits.\n\n"
+         "Only valid for WeaponFireLight."
+         "@see lightType");
+   endGroup("Light Emitter");
 
 
    // State arrays
    // State arrays
    addArray( "States", MaxStates );
    addArray( "States", MaxStates );
@@ -994,18 +979,17 @@ void ShapeBaseImageData::initPersistFields()
 
 
    endArray( "States" );
    endArray( "States" );
 
 
-   addField( "computeCRC", TypeBool, Offset(computeCRC, ShapeBaseImageData),
-      "If true, verify that the CRC of the client's Image matches the server's "
-      "CRC for the Image when loaded by the client." );
-
-   addField( "maxConcurrentSounds", TypeS32, Offset(maxConcurrentSounds, ShapeBaseImageData),
-      "@brief Maximum number of sounds this Image can play at a time.\n\n"
-      "Any value <= 0 indicates that it can play an infinite number of sounds." );
-
-   addField( "useRemainderDT", TypeBool, Offset(useRemainderDT, ShapeBaseImageData), 
-      "@brief If true, allow multiple timeout transitions to occur within a single "
-      "tick (useful if states have a very small timeout).\n\n" );
-
+   addGroup("Sounds");
+      addField( "maxConcurrentSounds", TypeS32, Offset(maxConcurrentSounds, ShapeBaseImageData),
+         "@brief Maximum number of sounds this Image can play at a time.\n\n"
+         "Any value <= 0 indicates that it can play an infinite number of sounds." );
+   endGroup("Sounds");
+
+   addGroup("Animation");
+      addField( "useRemainderDT", TypeBool, Offset(useRemainderDT, ShapeBaseImageData),
+         "@brief If true, allow multiple timeout transitions to occur within a single "
+         "tick (useful if states have a very small timeout).\n\n" );
+   endGroup("Animation");
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 1 - 0
Engine/source/T3D/spotLight.cpp

@@ -95,6 +95,7 @@ SpotLight::~SpotLight()
 
 
 void SpotLight::initPersistFields()
 void SpotLight::initPersistFields()
 {
 {
+   docsURL;
    addGroup( "Light" );
    addGroup( "Light" );
       
       
       addField( "range", TypeF32, Offset( mRange, SpotLight ) );
       addField( "range", TypeF32, Offset( mRange, SpotLight ) );

+ 3 - 5
Engine/source/T3D/staticShape.cpp

@@ -95,9 +95,6 @@ ConsoleDocClass( StaticShapeData,
 StaticShapeData::StaticShapeData()
 StaticShapeData::StaticShapeData()
 {
 {
    dynamicTypeField     = 0;
    dynamicTypeField     = 0;
-
-   shadowEnable = true;
-
    noIndividualDamage = false;
    noIndividualDamage = false;
 }
 }
 
 
@@ -111,13 +108,13 @@ StaticShapeData::StaticShapeData(const StaticShapeData& other, bool temp_clone)
 
 
 void StaticShapeData::initPersistFields()
 void StaticShapeData::initPersistFields()
 {
 {
+   docsURL;
+   Parent::initPersistFields();
    addField("noIndividualDamage",   TypeBool, Offset(noIndividualDamage,   StaticShapeData), "Deprecated\n\n @internal");
    addField("noIndividualDamage",   TypeBool, Offset(noIndividualDamage,   StaticShapeData), "Deprecated\n\n @internal");
    addField("dynamicType",          TypeS32,  Offset(dynamicTypeField,     StaticShapeData), 
    addField("dynamicType",          TypeS32,  Offset(dynamicTypeField,     StaticShapeData), 
       "@brief An integer value which, if speficied, is added to the value retured by getType().\n\n"
       "@brief An integer value which, if speficied, is added to the value retured by getType().\n\n"
       "This allows you to extend the type mask for a StaticShape that uses this datablock.  Type masks "
       "This allows you to extend the type mask for a StaticShape that uses this datablock.  Type masks "
       "are used for container queries, etc.");
       "are used for container queries, etc.");
-
-   Parent::initPersistFields();
 }
 }
 
 
 void StaticShapeData::packData(BitStream* stream)
 void StaticShapeData::packData(BitStream* stream)
@@ -197,6 +194,7 @@ StaticShape::~StaticShape()
 
 
 void StaticShape::initPersistFields()
 void StaticShape::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 2 - 0
Engine/source/T3D/trigger.cpp

@@ -98,6 +98,7 @@ bool TriggerData::onAdd()
 
 
 void TriggerData::initPersistFields()
 void TriggerData::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Callbacks");
    addGroup("Callbacks");
 
 
       addField( "tickPeriodMS",  TypeS32,    Offset( tickPeriodMS, TriggerData ),
       addField( "tickPeriodMS",  TypeS32,    Offset( tickPeriodMS, TriggerData ),
@@ -370,6 +371,7 @@ void Trigger::consoleInit()
 
 
 void Trigger::initPersistFields()
 void Trigger::initPersistFields()
 {
 {
+   docsURL;
    addField("polyhedron", TypeTriggerPolyhedron, Offset(mTriggerPolyhedron, Trigger),
    addField("polyhedron", TypeTriggerPolyhedron, Offset(mTriggerPolyhedron, Trigger),
       "@brief Defines a non-rectangular area for the trigger.\n\n"
       "@brief Defines a non-rectangular area for the trigger.\n\n"
       "Rather than the standard rectangular bounds, this optional parameter defines a quadrilateral "
       "Rather than the standard rectangular bounds, this optional parameter defines a quadrilateral "

+ 9 - 8
Engine/source/T3D/tsStatic.cpp

@@ -176,11 +176,7 @@ FRangeValidator speedValidator(0.0f, AnimSpeedMax);
 
 
 void TSStatic::initPersistFields()
 void TSStatic::initPersistFields()
 {
 {
-   addFieldV("AnimOffset", TypeF32, Offset(mAnimOffset, TSStatic), &percentValidator,
-      "Percent Animation Offset.");
-
-   addFieldV("AnimSpeed", TypeF32, Offset(mAnimSpeed, TSStatic), &speedValidator,
-      "Percent Animation Speed.");
+   docsURL;
    addGroup("Shape");
    addGroup("Shape");
 
 
    INITPERSISTFIELD_SHAPEASSET(Shape, TSStatic, "Model to use for this TSStatic");
    INITPERSISTFIELD_SHAPEASSET(Shape, TSStatic, "Model to use for this TSStatic");
@@ -219,16 +215,21 @@ void TSStatic::initPersistFields()
       "name as the new target.\n\n");
       "name as the new target.\n\n");
    endGroup("Materials");
    endGroup("Materials");
 
 
-   addGroup("Rendering");
-
+   addGroup("Animation");
    addField("playAmbient", TypeBool, Offset(mPlayAmbient, TSStatic),
    addField("playAmbient", TypeBool, Offset(mPlayAmbient, TSStatic),
       "Enables automatic playing of the animation sequence named \"ambient\" (if it exists) when the TSStatic is loaded.");
       "Enables automatic playing of the animation sequence named \"ambient\" (if it exists) when the TSStatic is loaded.");
+   addFieldV("AnimOffset", TypeF32, Offset(mAnimOffset, TSStatic), &percentValidator,
+      "Percent Animation Offset.");
+   addFieldV("AnimSpeed", TypeF32, Offset(mAnimSpeed, TSStatic), &speedValidator,
+      "Percent Animation Speed.");
+   endGroup("Animation");
+
+   addGroup("Rendering");
    addField("meshCulling", TypeBool, Offset(mMeshCulling, TSStatic),
    addField("meshCulling", TypeBool, Offset(mMeshCulling, TSStatic),
       "Enables detailed culling of meshes within the TSStatic. Should only be used "
       "Enables detailed culling of meshes within the TSStatic. Should only be used "
       "with large complex shapes like buildings which contain many submeshes.");
       "with large complex shapes like buildings which contain many submeshes.");
    addField("originSort", TypeBool, Offset(mUseOriginSort, TSStatic),
    addField("originSort", TypeBool, Offset(mUseOriginSort, TSStatic),
       "Enables translucent sorting of the TSStatic by its origin instead of the bounds.");
       "Enables translucent sorting of the TSStatic by its origin instead of the bounds.");
-
    endGroup("Rendering");
    endGroup("Rendering");
 
 
    addGroup("Reflection");
    addGroup("Reflection");

+ 24 - 25
Engine/source/T3D/turret/aiTurretShape.cpp

@@ -124,34 +124,34 @@ AITurretShapeData::AITurretShapeData()
 
 
 void AITurretShapeData::initPersistFields()
 void AITurretShapeData::initPersistFields()
 {
 {
-   addField("maxScanHeading",       TypeF32,       Offset(maxScanHeading,        AITurretShapeData),
-      "@brief Maximum number of degrees to scan left and right.\n\n"
-      "@note Maximum scan heading is 90 degrees.\n");
-   addField("maxScanPitch",         TypeF32,       Offset(maxScanPitch,          AITurretShapeData),
-      "@brief Maximum number of degrees to scan up and down.\n\n"
-      "@note Maximum scan pitch is 90 degrees.\n");
-   addField("maxScanDistance",      TypeF32,       Offset(maxScanDistance,       AITurretShapeData),
-      "@brief Maximum distance to scan.\n\n"
-      "When combined with maxScanHeading and maxScanPitch this forms a 3D scanning wedge used to initially "
-      "locate a target.\n");
-
-   addField("scanTickFrequency",          TypeS32,       Offset(scanTickFrequency,       AITurretShapeData),
-      "@brief How often should we perform a full scan when looking for a target.\n\n"
-      "Expressed as the number of ticks between full scans, but no less than 1.\n");
-   addField("scanTickFrequencyVariance",  TypeS32,       Offset(scanTickFrequencyVariance,       AITurretShapeData),
-      "@brief Random amount that should be added to the scan tick frequency each scan period.\n\n"
-      "Expressed as the number of ticks to randomly add, but no less than zero.\n");
-
-   addField("trackLostTargetTime",  TypeF32,       Offset(trackLostTargetTime,       AITurretShapeData),
-      "@brief How long after the turret has lost the target should it still track it.\n\n"
-      "Expressed in seconds.\n");
-
+   docsURL;
+   Parent::initPersistFields();
+   addGroup("AI Steering");
+      addField("maxScanHeading",       TypeF32,       Offset(maxScanHeading,        AITurretShapeData),
+         "@brief Maximum number of degrees to scan left and right.\n\n"
+         "@note Maximum scan heading is 90 degrees.\n");
+      addField("maxScanPitch",         TypeF32,       Offset(maxScanPitch,          AITurretShapeData),
+         "@brief Maximum number of degrees to scan up and down.\n\n"
+         "@note Maximum scan pitch is 90 degrees.\n");
+      addField("maxScanDistance",      TypeF32,       Offset(maxScanDistance,       AITurretShapeData),
+         "@brief Maximum distance to scan.\n\n"
+         "When combined with maxScanHeading and maxScanPitch this forms a 3D scanning wedge used to initially "
+         "locate a target.\n");
+      addField("scanTickFrequency",          TypeS32,       Offset(scanTickFrequency,       AITurretShapeData),
+         "@brief How often should we perform a full scan when looking for a target.\n\n"
+         "Expressed as the number of ticks between full scans, but no less than 1.\n");
+      addField("scanTickFrequencyVariance",  TypeS32,       Offset(scanTickFrequencyVariance,       AITurretShapeData),
+         "@brief Random amount that should be added to the scan tick frequency each scan period.\n\n"
+         "Expressed as the number of ticks to randomly add, but no less than zero.\n");
+      addField("trackLostTargetTime",  TypeF32,       Offset(trackLostTargetTime,       AITurretShapeData),
+         "@brief How long after the turret has lost the target should it still track it.\n\n"
+         "Expressed in seconds.\n");
    addField("maxWeaponRange",       TypeF32,       Offset(maxWeaponRange,       AITurretShapeData),
    addField("maxWeaponRange",       TypeF32,       Offset(maxWeaponRange,       AITurretShapeData),
       "@brief Maximum distance that the weapon will fire upon a target.\n\n");
       "@brief Maximum distance that the weapon will fire upon a target.\n\n");
-
    addField("weaponLeadVelocity",   TypeF32,       Offset(weaponLeadVelocity,   AITurretShapeData),
    addField("weaponLeadVelocity",   TypeF32,       Offset(weaponLeadVelocity,   AITurretShapeData),
       "@brief Velocity used to lead target.\n\n"
       "@brief Velocity used to lead target.\n\n"
       "If value <= 0, don't lead target.\n");
       "If value <= 0, don't lead target.\n");
+   endGroup("AI Steering");
 
 
    // State arrays
    // State arrays
    addArray( "States", MaxStates );
    addArray( "States", MaxStates );
@@ -196,8 +196,6 @@ void AITurretShapeData::initPersistFields()
          "Scoped to AITurretShapeData.");
          "Scoped to AITurretShapeData.");
 
 
    endArray( "States" );
    endArray( "States" );
-
-   Parent::initPersistFields();
 }
 }
 
 
 bool AITurretShapeData::onAdd()
 bool AITurretShapeData::onAdd()
@@ -467,6 +465,7 @@ AITurretShape::~AITurretShape()
 
 
 void AITurretShape::initPersistFields()
 void AITurretShape::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 27 - 25
Engine/source/T3D/turret/turretShape.cpp

@@ -87,8 +87,6 @@ TurretShapeData::TurretShapeData()
 {
 {
    weaponLinkType = FireTogether;
    weaponLinkType = FireTogether;
 
 
-   shadowEnable = true;
-
    zRotOnly = false;
    zRotOnly = false;
 
 
    startLoaded = true;
    startLoaded = true;
@@ -133,42 +131,45 @@ TurretShapeData::TurretShapeData()
 
 
 void TurretShapeData::initPersistFields()
 void TurretShapeData::initPersistFields()
 {
 {
-   addField("zRotOnly",       TypeBool,         Offset(zRotOnly,       TurretShapeData),
-      "@brief Should the turret allow only z rotations.\n\n"
-      "True indicates that the turret may only be rotated on its z axis, just like the Item class.  "
-      "This keeps the turret always upright regardless of the surface it lands on.\n");
-
+   docsURL;
+   Parent::initPersistFields();
+   addGroup("Steering");
+      addField("zRotOnly",       TypeBool,         Offset(zRotOnly,       TurretShapeData),
+         "@brief Should the turret allow only z rotations.\n\n"
+         "True indicates that the turret may only be rotated on its z axis, just like the Item class.  "
+         "This keeps the turret always upright regardless of the surface it lands on.\n");
+      addField("maxHeading",        TypeF32,       Offset(maxHeading,         TurretShapeData),
+         "@brief Maximum number of degrees to rotate from center.\n\n"
+         "A value of 180 or more degrees indicates the turret may rotate completely around.\n");
+      addField("minPitch",          TypeF32,       Offset(minPitch,           TurretShapeData),
+         "@brief Minimum number of degrees to rotate down from straight ahead.\n\n");
+      addField("maxPitch",          TypeF32,       Offset(maxPitch,           TurretShapeData),
+         "@brief Maximum number of degrees to rotate up from straight ahead.\n\n");
+      addField("headingRate",       TypeF32,       Offset(headingRate,        TurretShapeData),
+         "@brief Degrees per second rotation.\n\n"
+         "A value of 0 means no rotation is allowed.  A value less than 0 means the rotation is instantaneous.\n");
+      addField("pitchRate",         TypeF32,       Offset(pitchRate,          TurretShapeData),
+         "@brief Degrees per second rotation.\n\n"
+         "A value of 0 means no rotation is allowed.  A value less than 0 means the rotation is instantaneous.\n");
+   endGroup("Steering");
+
+   addGroup("Weapon State");
    addField( "weaponLinkType", TYPEID< TurretShapeData::FireLinkType >(), Offset(weaponLinkType, TurretShapeData),
    addField( "weaponLinkType", TYPEID< TurretShapeData::FireLinkType >(), Offset(weaponLinkType, TurretShapeData),
       "@brief Set how the mounted weapons are linked and triggered.\n\n"
       "@brief Set how the mounted weapons are linked and triggered.\n\n"
       "<ul><li>FireTogether: All weapons fire under trigger 0.</li>"
       "<ul><li>FireTogether: All weapons fire under trigger 0.</li>"
       "<li>GroupedFire: Weapon mounts 0,2 fire under trigger 0, mounts 1,3 fire under trigger 1.</li>"
       "<li>GroupedFire: Weapon mounts 0,2 fire under trigger 0, mounts 1,3 fire under trigger 1.</li>"
       "<li>IndividualFire: Each weapon mount fires under its own trigger 0-3.</li></ul>\n"
       "<li>IndividualFire: Each weapon mount fires under its own trigger 0-3.</li></ul>\n"
       "@see TurretShapeFireLinkType");
       "@see TurretShapeFireLinkType");
-
    addField("startLoaded",       TypeBool,       Offset(startLoaded,       TurretShapeData),
    addField("startLoaded",       TypeBool,       Offset(startLoaded,       TurretShapeData),
       "@brief Does the turret's mounted weapon(s) start in a loaded state.\n\n"
       "@brief Does the turret's mounted weapon(s) start in a loaded state.\n\n"
       "True indicates that all mounted weapons start in a loaded state.\n"
       "True indicates that all mounted weapons start in a loaded state.\n"
       "@see ShapeBase::setImageLoaded()");
       "@see ShapeBase::setImageLoaded()");
+   endGroup("Weapon State");
 
 
+   addGroup("Camera", "The settings used by the shape when it is the camera.");
    addField("cameraOffset",      TypeF32,       Offset(cameraOffset,       TurretShapeData),
    addField("cameraOffset",      TypeF32,       Offset(cameraOffset,       TurretShapeData),
       "Vertical (Z axis) height of the camera above the turret." );
       "Vertical (Z axis) height of the camera above the turret." );
-
-   addField("maxHeading",        TypeF32,       Offset(maxHeading,         TurretShapeData),
-      "@brief Maximum number of degrees to rotate from center.\n\n"
-      "A value of 180 or more degrees indicates the turret may rotate completely around.\n");
-   addField("minPitch",          TypeF32,       Offset(minPitch,           TurretShapeData),
-      "@brief Minimum number of degrees to rotate down from straight ahead.\n\n");
-   addField("maxPitch",          TypeF32,       Offset(maxPitch,           TurretShapeData),
-      "@brief Maximum number of degrees to rotate up from straight ahead.\n\n");
-
-   addField("headingRate",       TypeF32,       Offset(headingRate,        TurretShapeData),
-      "@brief Degrees per second rotation.\n\n"
-      "A value of 0 means no rotation is allowed.  A value less than 0 means the rotation is instantaneous.\n");
-   addField("pitchRate",         TypeF32,       Offset(pitchRate,          TurretShapeData),
-      "@brief Degrees per second rotation.\n\n"
-      "A value of 0 means no rotation is allowed.  A value less than 0 means the rotation is instantaneous.\n");
-
-   Parent::initPersistFields();
+   endGroup("Camera");
 }
 }
 
 
 void TurretShapeData::packData(BitStream* stream)
 void TurretShapeData::packData(BitStream* stream)
@@ -300,6 +301,7 @@ TurretShape::~TurretShape()
 
 
 void TurretShape::initPersistFields()
 void TurretShape::initPersistFields()
 {
 {
+   docsURL;
    addField("respawn",        TypeBool,      Offset(mRespawn,      TurretShape),
    addField("respawn",        TypeBool,      Offset(mRespawn,      TurretShape),
       "@brief Respawn the turret after it has been destroyed.\n\n"
       "@brief Respawn the turret after it has been destroyed.\n\n"
       "If true, the turret will respawn after it is destroyed.\n");
       "If true, the turret will respawn after it is destroyed.\n");

+ 37 - 17
Engine/source/T3D/vehicles/flyingVehicle.cpp

@@ -50,6 +50,15 @@ const static U32 sCollisionMoveMask = ( TerrainObjectType | WaterObjectType
 static U32 sServerCollisionMask = sCollisionMoveMask; // ItemObjectType
 static U32 sServerCollisionMask = sCollisionMoveMask; // ItemObjectType
 static U32 sClientCollisionMask = sCollisionMoveMask;
 static U32 sClientCollisionMask = sCollisionMoveMask;
 
 
+typedef FlyingVehicleData::Sounds engineSounds;
+DefineEnumType(engineSounds);
+
+ImplementEnumType(engineSounds, "enum types.\n"
+   "@ingroup VehicleData\n\n")
+   { engineSounds::JetSound, "JetSound", "..." },
+   { engineSounds::EngineSound,  "EngineSound", "..." },
+      EndImplementEnumType;
+
 //
 //
 const char* FlyingVehicle::sJetSequence[FlyingVehicle::JetAnimCount] =
 const char* FlyingVehicle::sJetSequence[FlyingVehicle::JetAnimCount] =
 {
 {
@@ -166,15 +175,30 @@ bool FlyingVehicleData::preload(bool server, String &errorStr)
 
 
 void FlyingVehicleData::initPersistFields()
 void FlyingVehicleData::initPersistFields()
 {
 {
+   docsURL;
+   Parent::initPersistFields();
 
 
-   INITPERSISTFIELD_SOUNDASSET_ARRAY(FlyingSounds, Sounds::MaxSounds, FlyingVehicleData, "Sounds for flying vehicle");
+   addGroup("Physics");
+   addField( "rollForce", TypeF32, Offset(rollForce, FlyingVehicleData),
+      "@brief Damping torque against rolling maneuvers (rotation about the y-axis), "
+      "proportional to linear velocity.\n\n"
+      "Acts to adjust roll to a stable position over time as the vehicle moves." );
+   addField( "rotationalDrag", TypeF32, Offset(rotationalDrag, FlyingVehicleData),
+      "Rotational drag factor (slows vehicle rotation speed in all axes)." );
+   addField( "horizontalSurfaceForce", TypeF32, Offset(horizontalSurfaceForce, FlyingVehicleData),
+      "@brief Damping force in the opposite direction to sideways velocity.\n\n"
+      "Provides \"bite\" into the wind for climbing/diving and turning)." );
+   addField( "hoverHeight", TypeF32, Offset(hoverHeight, FlyingVehicleData),
+      "The vehicle's height off the ground when at rest." );
+   addField( "createHoverHeight", TypeF32, Offset(createHoverHeight, FlyingVehicleData),
+      "@brief The vehicle's height off the ground when useCreateHeight is active.\n\n"
+      "This can help avoid problems with spawning the vehicle." );
+   endGroup("Physics");
 
 
+   addGroup("Steering");
    addField( "maneuveringForce", TypeF32, Offset(maneuveringForce, FlyingVehicleData),
    addField( "maneuveringForce", TypeF32, Offset(maneuveringForce, FlyingVehicleData),
       "@brief Maximum X and Y (horizontal plane) maneuvering force.\n\n"
       "@brief Maximum X and Y (horizontal plane) maneuvering force.\n\n"
       "The actual force applied depends on the current thrust." );
       "The actual force applied depends on the current thrust." );
-   addField( "horizontalSurfaceForce", TypeF32, Offset(horizontalSurfaceForce, FlyingVehicleData),
-      "@brief Damping force in the opposite direction to sideways velocity.\n\n"
-      "Provides \"bite\" into the wind for climbing/diving and turning)." );
    addField( "verticalSurfaceForce", TypeF32, Offset(verticalSurfaceForce, FlyingVehicleData),
    addField( "verticalSurfaceForce", TypeF32, Offset(verticalSurfaceForce, FlyingVehicleData),
       "@brief Damping force in the opposite direction to vertical velocity.\n\n"
       "@brief Damping force in the opposite direction to vertical velocity.\n\n"
       "Controls side slip; lower numbers give more slide." );
       "Controls side slip; lower numbers give more slide." );
@@ -186,13 +210,9 @@ void FlyingVehicleData::initPersistFields()
    addField( "steeringRollForce", TypeF32, Offset(steeringRollForce, FlyingVehicleData),
    addField( "steeringRollForce", TypeF32, Offset(steeringRollForce, FlyingVehicleData),
       "Roll force induced by sideways steering input value (controls how much "
       "Roll force induced by sideways steering input value (controls how much "
       "the vehicle rolls when turning)." );
       "the vehicle rolls when turning)." );
-   addField( "rollForce", TypeF32, Offset(rollForce, FlyingVehicleData),
-      "@brief Damping torque against rolling maneuvers (rotation about the y-axis), "
-      "proportional to linear velocity.\n\n"
-      "Acts to adjust roll to a stable position over time as the vehicle moves." );
-   addField( "rotationalDrag", TypeF32, Offset(rotationalDrag, FlyingVehicleData),
-      "Rotational drag factor (slows vehicle rotation speed in all axes)." );
+   endGroup("Steering");
 
 
+   addGroup("AutoCorrection");
    addField( "maxAutoSpeed", TypeF32, Offset(maxAutoSpeed, FlyingVehicleData),
    addField( "maxAutoSpeed", TypeF32, Offset(maxAutoSpeed, FlyingVehicleData),
       "Maximum speed for automatic vehicle control assistance - vehicles "
       "Maximum speed for automatic vehicle control assistance - vehicles "
       "travelling at speeds above this value do not get control assitance." );
       "travelling at speeds above this value do not get control assitance." );
@@ -208,13 +228,9 @@ void FlyingVehicleData::initPersistFields()
       "@brief Corrective torque applied to level out the vehicle when moving at less "
       "@brief Corrective torque applied to level out the vehicle when moving at less "
       "than maxAutoSpeed.\n\n"
       "than maxAutoSpeed.\n\n"
       "The torque is inversely proportional to vehicle speed." );
       "The torque is inversely proportional to vehicle speed." );
+   endGroup("AutoCorrection");
 
 
-   addField( "hoverHeight", TypeF32, Offset(hoverHeight, FlyingVehicleData),
-      "The vehicle's height off the ground when at rest." );
-   addField( "createHoverHeight", TypeF32, Offset(createHoverHeight, FlyingVehicleData),
-      "@brief The vehicle's height off the ground when useCreateHeight is active.\n\n"
-      "This can help avoid problems with spawning the vehicle." );
-
+   addGroup("Particle Effects");
    addField( "forwardJetEmitter",TYPEID< ParticleEmitterData >(), Offset(jetEmitter[ForwardJetEmitter], FlyingVehicleData),
    addField( "forwardJetEmitter",TYPEID< ParticleEmitterData >(), Offset(jetEmitter[ForwardJetEmitter], FlyingVehicleData),
       "@brief Emitter to generate particles for forward jet thrust.\n\n"
       "@brief Emitter to generate particles for forward jet thrust.\n\n"
       "Forward jet thrust particles are emitted from model nodes JetNozzle0 "
       "Forward jet thrust particles are emitted from model nodes JetNozzle0 "
@@ -231,8 +247,11 @@ void FlyingVehicleData::initPersistFields()
       "Emitter to generate contrail particles from model nodes contrail0 - contrail3." );
       "Emitter to generate contrail particles from model nodes contrail0 - contrail3." );
    addField( "minTrailSpeed", TypeF32, Offset(minTrailSpeed, FlyingVehicleData),
    addField( "minTrailSpeed", TypeF32, Offset(minTrailSpeed, FlyingVehicleData),
       "Minimum speed at which to start generating contrail particles." );
       "Minimum speed at which to start generating contrail particles." );
+   endGroup("Particle Effects");
 
 
-   Parent::initPersistFields();
+   addGroup("Sounds");
+      INITPERSISTFIELD_SOUNDASSET_ENUMED(FlyingSounds, engineSounds, Sounds::MaxSounds, FlyingVehicleData, "EngineSounds.");
+   endGroup("Sounds");
 }
 }
 
 
 void FlyingVehicleData::packData(BitStream* stream)
 void FlyingVehicleData::packData(BitStream* stream)
@@ -788,6 +807,7 @@ void FlyingVehicle::unpackUpdate(NetConnection *con, BitStream *stream)
 
 
 void FlyingVehicle::initPersistFields()
 void FlyingVehicle::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 1 - 0
Engine/source/T3D/vehicles/guiSpeedometer.cpp

@@ -108,6 +108,7 @@ GuiSpeedometerHud::GuiSpeedometerHud()
 
 
 void GuiSpeedometerHud::initPersistFields()
 void GuiSpeedometerHud::initPersistFields()
 {
 {
+   docsURL;
    addGroup("Needle");
    addGroup("Needle");
 
 
    addField("maxSpeed", TypeF32, Offset( mMaxSpeed, GuiSpeedometerHud ),
    addField("maxSpeed", TypeF32, Offset( mMaxSpeed, GuiSpeedometerHud ),

+ 74 - 77
Engine/source/T3D/vehicles/hoverVehicle.cpp

@@ -174,79 +174,88 @@ HoverVehicleData::~HoverVehicleData()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void HoverVehicleData::initPersistFields()
 void HoverVehicleData::initPersistFields()
 {
 {
-   addField( "dragForce", TypeF32, Offset(dragForce, HoverVehicleData),
+   docsURL;
+   Parent::initPersistFields();
+   addGroup("Physics");
+      addField( "normalForce", TypeF32, Offset(normalForce, HoverVehicleData),
+         "Force generated in the ground normal direction when the vehicle is not "
+         "floating (within stabalizer length from the ground).\n\n"
+         "@see stabLenMin" );
+      addField( "stabLenMin", TypeF32, Offset(stabLenMin, HoverVehicleData),
+         "Length of the base stabalizer when travelling at minimum speed (0).\n"
+         "Each tick, the vehicle performs 2 raycasts (from the center back and "
+         "center front of the vehicle) to check for contact with the ground. The "
+         "base stabalizer length determines the length of that raycast; if "
+         "neither raycast hit the ground, the vehicle is floating, stabalizer "
+         "spring and ground normal forces are not applied.\n\n"
+         "<img src=\"images/hoverVehicle_forces.png\">\n"
+         "@see stabSpringConstant" );
+      addField( "stabLenMax", TypeF32, Offset(stabLenMax, HoverVehicleData),
+         "Length of the base stabalizer when travelling at maximum speed "
+         "(maxThrustSpeed).\n\n@see stabLenMin\n\n@see mainThrustForce" );
+      addField("vertFactor", TypeF32, Offset(vertFactor, HoverVehicleData),
+         "Scalar applied to the vertical portion of the velocity drag acting on "
+         "the vehicle.\nFor the horizontal (X and Y) components of velocity drag, "
+         "a factor of 0.25 is applied when the vehicle is floating, and a factor "
+         "of 1.0 is applied when the vehicle is not floating. This velocity drag "
+         "is multiplied by the vehicle's dragForce, as defined above, and the "
+         "result is subtracted from it's movement force.\n"
+         "@note The vertFactor must be between 0.0 and 1.0 (inclusive).");
+      addField("stabSpringConstant", TypeF32, Offset(stabSpringConstant, HoverVehicleData),
+         "Value used to generate stabalizer spring force. The force generated "
+         "depends on stabilizer compression, that is how close the vehicle is "
+         "to the ground proportional to current stabalizer length.\n\n"
+         "@see stabLenMin");
+      addField("stabDampingConstant", TypeF32, Offset(stabDampingConstant, HoverVehicleData),
+         "Damping spring force acting against changes in the stabalizer length.\n\n"
+         "@see stabLenMin");
+   endGroup("Physics");
+
+   addGroup("Steering");
+      addField( "steeringForce", TypeF32, Offset(steeringForce, HoverVehicleData),
+         "Yaw (rotation about the Z-axis) force applied when steering in the x-axis direction."
+         "about the vehicle's Z-axis)" );
+      addField( "rollForce", TypeF32, Offset(rollForce, HoverVehicleData),
+      "Roll (rotation about the Y-axis) force applied when steering in the x-axis direction." );
+      addField( "pitchForce", TypeF32, Offset(pitchForce, HoverVehicleData),
+      "Pitch (rotation about the X-axis) force applied when steering in the y-axis direction." );
+      addField( "dragForce", TypeF32, Offset(dragForce, HoverVehicleData),
       "Drag force factor that acts opposite to the vehicle velocity.\nAlso "
       "Drag force factor that acts opposite to the vehicle velocity.\nAlso "
       "used to determnine the vehicle's maxThrustSpeed.\n@see mainThrustForce" );
       "used to determnine the vehicle's maxThrustSpeed.\n@see mainThrustForce" );
-   addField( "vertFactor", TypeF32, Offset(vertFactor, HoverVehicleData),
-      "Scalar applied to the vertical portion of the velocity drag acting on "
-      "the vehicle.\nFor the horizontal (X and Y) components of velocity drag, "
-      "a factor of 0.25 is applied when the vehicle is floating, and a factor "
-      "of 1.0 is applied when the vehicle is not floating. This velocity drag "
-      "is multiplied by the vehicle's dragForce, as defined above, and the "
-      "result is subtracted from it's movement force.\n"
-      "@note The vertFactor must be between 0.0 and 1.0 (inclusive)." );
-   addField( "floatingThrustFactor", TypeF32, Offset(floatingThrustFactor, HoverVehicleData),
-      "Scalar applied to the vehicle's thrust force when the vehicle is floating.\n"
-      "@note The floatingThrustFactor must be between 0.0 and 1.0 (inclusive)." );
-   addField( "mainThrustForce", TypeF32, Offset(mainThrustForce, HoverVehicleData),
-      "Force generated by thrusting the vehicle forward.\nAlso used to determine "
-      "the maxThrustSpeed:\n\n"
-      "@tsexample\n"
-      "maxThrustSpeed = (mainThrustForce + strafeThrustForce) / dragForce;\n"
-      "@endtsexample\n" );
-   addField( "reverseThrustForce", TypeF32, Offset(reverseThrustForce, HoverVehicleData),
-      "Force generated by thrusting the vehicle backward." );
-   addField( "strafeThrustForce", TypeF32, Offset(strafeThrustForce, HoverVehicleData),
-      "Force generated by thrusting the vehicle to one side.\nAlso used to "
-      "determine the vehicle's maxThrustSpeed.\n@see mainThrustForce" );
-   addField( "turboFactor", TypeF32, Offset(turboFactor, HoverVehicleData),
-      "Scale factor applied to the vehicle's thrust force when jetting." );
-
-   addField( "stabLenMin", TypeF32, Offset(stabLenMin, HoverVehicleData),
-      "Length of the base stabalizer when travelling at minimum speed (0).\n"
-      "Each tick, the vehicle performs 2 raycasts (from the center back and "
-      "center front of the vehicle) to check for contact with the ground. The "
-      "base stabalizer length determines the length of that raycast; if "
-      "neither raycast hit the ground, the vehicle is floating, stabalizer "
-      "spring and ground normal forces are not applied.\n\n"
-      "<img src=\"images/hoverVehicle_forces.png\">\n"
-      "@see stabSpringConstant" );
-   addField( "stabLenMax", TypeF32, Offset(stabLenMax, HoverVehicleData),
-      "Length of the base stabalizer when travelling at maximum speed "
-      "(maxThrustSpeed).\n\n@see stabLenMin\n\n@see mainThrustForce" );
-
-   addField( "stabSpringConstant", TypeF32, Offset(stabSpringConstant, HoverVehicleData),
-      "Value used to generate stabalizer spring force. The force generated "
-      "depends on stabilizer compression, that is how close the vehicle is "
-      "to the ground proportional to current stabalizer length.\n\n"
-      "@see stabLenMin" );
-   addField( "stabDampingConstant", TypeF32, Offset(stabDampingConstant, HoverVehicleData),
-      "Damping spring force acting against changes in the stabalizer length.\n\n"
-      "@see stabLenMin" );
-
+      addField( "mainThrustForce", TypeF32, Offset(mainThrustForce, HoverVehicleData),
+         "Force generated by thrusting the vehicle forward.\nAlso used to determine "
+         "the maxThrustSpeed:\n\n"
+         "@tsexample\n"
+         "maxThrustSpeed = (mainThrustForce + strafeThrustForce) / dragForce;\n"
+         "@endtsexample\n" );
+      addField( "reverseThrustForce", TypeF32, Offset(reverseThrustForce, HoverVehicleData),
+         "Force generated by thrusting the vehicle backward." );
+      addField( "strafeThrustForce", TypeF32, Offset(strafeThrustForce, HoverVehicleData),
+         "Force generated by thrusting the vehicle to one side.\nAlso used to "
+         "determine the vehicle's maxThrustSpeed.\n@see mainThrustForce" );
+      addField( "turboFactor", TypeF32, Offset(turboFactor, HoverVehicleData),
+         "Scale factor applied to the vehicle's thrust force when jetting." );
+      addField( "floatingThrustFactor", TypeF32, Offset(floatingThrustFactor, HoverVehicleData),
+         "Scalar applied to the vehicle's thrust force when the vehicle is floating.\n"
+         "@note The floatingThrustFactor must be between 0.0 and 1.0 (inclusive)." );
+   endGroup("Steering");
+
+   addGroup("AutoCorrection");
    addField( "gyroDrag", TypeF32, Offset(gyroDrag, HoverVehicleData),
    addField( "gyroDrag", TypeF32, Offset(gyroDrag, HoverVehicleData),
       "Damping torque that acts against the vehicle's current angular momentum." );
       "Damping torque that acts against the vehicle's current angular momentum." );
-   addField( "normalForce", TypeF32, Offset(normalForce, HoverVehicleData),
-      "Force generated in the ground normal direction when the vehicle is not "
-      "floating (within stabalizer length from the ground).\n\n"
-      "@see stabLenMin" );
    addField( "restorativeForce", TypeF32, Offset(restorativeForce, HoverVehicleData),
    addField( "restorativeForce", TypeF32, Offset(restorativeForce, HoverVehicleData),
       "Force generated to stabalize the vehicle (return it to neutral pitch/roll) "
       "Force generated to stabalize the vehicle (return it to neutral pitch/roll) "
       "when the vehicle is floating (more than stabalizer length from the "
       "when the vehicle is floating (more than stabalizer length from the "
       "ground.\n\n@see stabLenMin" );
       "ground.\n\n@see stabLenMin" );
-   addField( "steeringForce", TypeF32, Offset(steeringForce, HoverVehicleData),
-      "Yaw (rotation about the Z-axis) force applied when steering in the x-axis direction."
-      "about the vehicle's Z-axis)" );
-   addField( "rollForce", TypeF32, Offset(rollForce, HoverVehicleData),
-      "Roll (rotation about the Y-axis) force applied when steering in the x-axis direction." );
-   addField( "pitchForce", TypeF32, Offset(pitchForce, HoverVehicleData),
-      "Pitch (rotation about the X-axis) force applied when steering in the y-axis direction." );
+   endGroup("AutoCorrection");
 
 
-   INITPERSISTFIELD_SOUNDASSET_ENUMED(HoverSounds, hoverSoundsEnum, Sounds::MaxSounds, HoverVehicleData, "Sounds for hover vehicle.");
-   
+   addGroup("Particle Effects");
    addField( "dustTrailEmitter", TYPEID< ParticleEmitterData >(), Offset(dustTrailEmitter, HoverVehicleData),
    addField( "dustTrailEmitter", TYPEID< ParticleEmitterData >(), Offset(dustTrailEmitter, HoverVehicleData),
       "Emitter to generate particles for the vehicle's dust trail.\nThe trail "
       "Emitter to generate particles for the vehicle's dust trail.\nThe trail "
       "of dust particles is generated only while the vehicle is moving." );
       "of dust particles is generated only while the vehicle is moving." );
+   addField( "forwardJetEmitter", TYPEID< ParticleEmitterData >(), Offset(jetEmitter[ForwardJetEmitter], HoverVehicleData),
+      "Emitter to generate particles for forward jet thrust.\nForward jet "
+      "thrust particles are emitted from model nodes JetNozzle0 and JetNozzle1." );
    addField( "dustTrailOffset", TypePoint3F, Offset(dustTrailOffset, HoverVehicleData),
    addField( "dustTrailOffset", TypePoint3F, Offset(dustTrailOffset, HoverVehicleData),
       "\"X Y Z\" offset from the vehicle's origin from which to generate dust "
       "\"X Y Z\" offset from the vehicle's origin from which to generate dust "
       "trail particles.\nBy default particles are emitted directly beneath the "
       "trail particles.\nBy default particles are emitted directly beneath the "
@@ -261,23 +270,11 @@ void HoverVehicleData::initPersistFields()
       "vehicle's speed is divided by this value to determine how many particles "
       "vehicle's speed is divided by this value to determine how many particles "
       "to generate each frame. Lower values give a more dense trail, higher "
       "to generate each frame. Lower values give a more dense trail, higher "
       "values a more sparse trail." );
       "values a more sparse trail." );
+   endGroup("Sounds");
 
 
-   addField( "floatingGravMag", TypeF32, Offset(floatingGravMag, HoverVehicleData),
-      "Scale factor applied to the vehicle gravitational force when the vehicle "
-      "is floating.\n\n@see stabLenMin" );
-   addField( "brakingForce", TypeF32, Offset(brakingForce, HoverVehicleData),
-      "Force generated by braking.\nThe vehicle is considered to be braking if "
-      "it is moving, but the throttle is off, and no left or right thrust is "
-      "being applied. This force is only applied when the vehicle's velocity is "
-      "less than brakingActivationSpeed." );
-   addField( "brakingActivationSpeed", TypeF32, Offset(brakingActivationSpeed, HoverVehicleData),
-      "Maximum speed below which a braking force is applied.\n\n@see brakingForce" );
-
-   addField( "forwardJetEmitter", TYPEID< ParticleEmitterData >(), Offset(jetEmitter[ForwardJetEmitter], HoverVehicleData),
-      "Emitter to generate particles for forward jet thrust.\nForward jet "
-      "thrust particles are emitted from model nodes JetNozzle0 and JetNozzle1." );
-
-   Parent::initPersistFields();
+   addGroup("Particle Effects");
+      INITPERSISTFIELD_SOUNDASSET_ENUMED(HoverSounds, hoverSoundsEnum, Sounds::MaxSounds, HoverVehicleData, "Sounds for hover vehicle.");
+   endGroup("Sounds");
 }
 }
 
 
 
 

+ 35 - 25
Engine/source/T3D/vehicles/vehicle.cpp

@@ -127,7 +127,6 @@ ConsoleDocClass( VehicleData,
 
 
 VehicleData::VehicleData()
 VehicleData::VehicleData()
 {
 {
-   shadowEnable = true;
    shadowSize = 256;
    shadowSize = 256;
    shadowProjectionDistance = 14.0f;
    shadowProjectionDistance = 14.0f;
    maxSteeringAngle = M_PI_F/4.0f; // 45 deg.
    maxSteeringAngle = M_PI_F/4.0f; // 45 deg.
@@ -275,30 +274,10 @@ void VehicleData::unpackData(BitStream* stream)
 
 
 void VehicleData::initPersistFields()
 void VehicleData::initPersistFields()
 {
 {
-   addGroup("Physics");
-   addField("enablePhysicsRep", TypeBool, Offset(enablePhysicsRep, VehicleData),
-      "@brief Creates a representation of the object in the physics plugin.\n");
-   endGroup("Physics");
-
-   addField( "jetForce", TypeF32, Offset(jetForce, VehicleData),
-      "@brief Additional force applied to the vehicle when it is jetting.\n\n"
-      "For WheeledVehicles, the force is applied in the forward direction. For "
-      "FlyingVehicles, the force is applied in the thrust direction." );
-   addField( "jetEnergyDrain", TypeF32, Offset(jetEnergyDrain, VehicleData),
-      "@brief Energy amount to drain for each tick the vehicle is jetting.\n\n"
-      "Once the vehicle's energy level reaches 0, it will no longer be able to jet." );
-   addField( "minJetEnergy", TypeF32, Offset(minJetEnergy, VehicleData),
-      "Minimum vehicle energy level to begin jetting." );
-
-   addField( "steeringReturn", TypeF32, Offset(steeringReturn, VehicleData),
-      "Rate at which the vehicle's steering returns to forwards when it is moving." );
-   addField( "steeringReturnSpeedScale", TypeF32, Offset(steeringReturnSpeedScale, VehicleData),
-      "Amount of effect the vehicle's speed has on its rate of steering return." );
-   addField( "powerSteering", TypeBool, Offset(powerSteering, VehicleData),
-      "If true, steering does not auto-centre while the vehicle is being steered by its driver." );
-   addField( "maxSteeringAngle", TypeF32, Offset(maxSteeringAngle, VehicleData),
-      "Maximum yaw (horizontal) and pitch (vertical) steering angle in radians." );
+   docsURL;
+   Parent::initPersistFields();   
 
 
+   addGroup("Particle Effects");
    addField( "damageEmitter", TYPEID< ParticleEmitterData >(), Offset(damageEmitterList, VehicleData), VC_NUM_DAMAGE_EMITTERS,
    addField( "damageEmitter", TYPEID< ParticleEmitterData >(), Offset(damageEmitterList, VehicleData), VC_NUM_DAMAGE_EMITTERS,
       "@brief Array of particle emitters used to generate damage (dust, smoke etc) "
       "@brief Array of particle emitters used to generate damage (dust, smoke etc) "
       "effects.\n\n"
       "effects.\n\n"
@@ -326,13 +305,43 @@ void VehicleData::initPersistFields()
    addField( "numDmgEmitterAreas", TypeF32, Offset(numDmgEmitterAreas, VehicleData),
    addField( "numDmgEmitterAreas", TypeF32, Offset(numDmgEmitterAreas, VehicleData),
       "Number of damageEmitterOffset values to use for each damageEmitter.\n\n"
       "Number of damageEmitterOffset values to use for each damageEmitter.\n\n"
       "@see damageEmitterOffset" );
       "@see damageEmitterOffset" );
+   endGroup("Particle Effects");
+
+   addGroup("Physics");
+   addField("enablePhysicsRep", TypeBool, Offset(enablePhysicsRep, VehicleData),
+      "@brief Creates a representation of the object in the physics plugin.\n");
+   endGroup("Physics");
+
+   addGroup("Collision");
    addField( "collDamageThresholdVel", TypeF32, Offset(collDamageThresholdVel, VehicleData),
    addField( "collDamageThresholdVel", TypeF32, Offset(collDamageThresholdVel, VehicleData),
       "Minimum collision velocity to cause damage to this vehicle.\nCurrently unused." );
       "Minimum collision velocity to cause damage to this vehicle.\nCurrently unused." );
    addField( "collDamageMultiplier", TypeF32, Offset(collDamageMultiplier, VehicleData),
    addField( "collDamageMultiplier", TypeF32, Offset(collDamageMultiplier, VehicleData),
       "@brief Damage to this vehicle after a collision (multiplied by collision "
       "@brief Damage to this vehicle after a collision (multiplied by collision "
       "velocity).\n\nCurrently unused." );
       "velocity).\n\nCurrently unused." );
+   endGroup("Collision");
+
+   addGroup("Steering");
+      addField( "jetForce", TypeF32, Offset(jetForce, VehicleData),
+         "@brief Additional force applied to the vehicle when it is jetting.\n\n"
+         "For WheeledVehicles, the force is applied in the forward direction. For "
+         "FlyingVehicles, the force is applied in the thrust direction." );
+      addField( "jetEnergyDrain", TypeF32, Offset(jetEnergyDrain, VehicleData),
+      "@brief Energy amount to drain for each tick the vehicle is jetting.\n\n"
+         "Once the vehicle's energy level reaches 0, it will no longer be able to jet." );
+      addField( "minJetEnergy", TypeF32, Offset(minJetEnergy, VehicleData),
+      "Minimum vehicle energy level to begin jetting." );
+      addField( "maxSteeringAngle", TypeF32, Offset(maxSteeringAngle, VehicleData),
+         "Maximum yaw (horizontal) and pitch (vertical) steering angle in radians." );
+   endGroup("Steering");
 
 
-   Parent::initPersistFields();
+   addGroup("AutoCorrection");
+   addField( "powerSteering", TypeBool, Offset(powerSteering, VehicleData),
+      "If true, steering does not auto-centre while the vehicle is being steered by its driver." );
+   addField( "steeringReturn", TypeF32, Offset(steeringReturn, VehicleData),
+      "Rate at which the vehicle's steering returns to forwards when it is moving." );
+   addField( "steeringReturnSpeedScale", TypeF32, Offset(steeringReturnSpeedScale, VehicleData),
+      "Amount of effect the vehicle's speed has on its rate of steering return." );
+   endGroup("AutoCorrection");
 }
 }
 
 
 
 
@@ -1100,6 +1109,7 @@ void Vehicle::consoleInit()
 
 
 void Vehicle::initPersistFields()
 void Vehicle::initPersistFields()
 {
 {
+   docsURL;
    addField( "disableMove", TypeBool, Offset(mDisableMove, Vehicle),
    addField( "disableMove", TypeBool, Offset(mDisableMove, Vehicle),
       "When this flag is set, the vehicle will ignore throttle changes." );
       "When this flag is set, the vehicle will ignore throttle changes." );
 
 

+ 1 - 0
Engine/source/T3D/vehicles/vehicleBlocker.cpp

@@ -59,6 +59,7 @@ VehicleBlocker::~VehicleBlocker()
 //--------------------------------------------------------------------------
 //--------------------------------------------------------------------------
 void VehicleBlocker::initPersistFields()
 void VehicleBlocker::initPersistFields()
 {
 {
+   docsURL;
    addField("dimensions", TypePoint3F, Offset(mDimensions, VehicleBlocker));
    addField("dimensions", TypePoint3F, Offset(mDimensions, VehicleBlocker));
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }

+ 14 - 5
Engine/source/T3D/vehicles/wheeledVehicle.cpp

@@ -112,6 +112,7 @@ bool WheeledVehicleTire::preload(bool server, String &errorStr)
 
 
 void WheeledVehicleTire::initPersistFields()
 void WheeledVehicleTire::initPersistFields()
 {
 {
+   docsURL;
    INITPERSISTFIELD_SHAPEASSET(Shape, WheeledVehicleTire, "The shape to use for the wheel.");
    INITPERSISTFIELD_SHAPEASSET(Shape, WheeledVehicleTire, "The shape to use for the wheel.");
 
 
    addField( "mass", TypeF32, Offset(mass, WheeledVehicleTire),
    addField( "mass", TypeF32, Offset(mass, WheeledVehicleTire),
@@ -233,6 +234,7 @@ WheeledVehicleSpring::WheeledVehicleSpring()
 
 
 void WheeledVehicleSpring::initPersistFields()
 void WheeledVehicleSpring::initPersistFields()
 {
 {
+   docsURL;
    addField( "length", TypeF32, Offset(length, WheeledVehicleSpring),
    addField( "length", TypeF32, Offset(length, WheeledVehicleSpring),
       "@brief Maximum spring length. ie. how far the wheel can extend from the "
       "@brief Maximum spring length. ie. how far the wheel can extend from the "
       "root hub position.\n\n"
       "root hub position.\n\n"
@@ -448,13 +450,20 @@ bool WheeledVehicleData::mirrorWheel(Wheel* we)
 
 
 void WheeledVehicleData::initPersistFields()
 void WheeledVehicleData::initPersistFields()
 {
 {
+   docsURL;
+   Parent::initPersistFields();
+
+   addGroup("Particle Effects");
+   addField("tireEmitter", TYPEID< ParticleEmitterData >(), Offset(tireEmitter, WheeledVehicleData),
+      "ParticleEmitterData datablock used to generate particles from each wheel "
+      "when the vehicle is moving and the wheel is in contact with the ground.");
+   endGroup("Particle Effects");
+
    addGroup("Sounds");
    addGroup("Sounds");
    INITPERSISTFIELD_SOUNDASSET_ENUMED(WheeledVehicleSounds, WheeledVehicleSoundsEnum, MaxSounds, WheeledVehicleData, "Sounds related to wheeled vehicle.");
    INITPERSISTFIELD_SOUNDASSET_ENUMED(WheeledVehicleSounds, WheeledVehicleSoundsEnum, MaxSounds, WheeledVehicleData, "Sounds related to wheeled vehicle.");
    endGroup("Sounds");
    endGroup("Sounds");
 
 
-   addField("tireEmitter",TYPEID< ParticleEmitterData >(), Offset(tireEmitter, WheeledVehicleData),
-      "ParticleEmitterData datablock used to generate particles from each wheel "
-      "when the vehicle is moving and the wheel is in contact with the ground.");
+   addGroup("Steering");
    addField("maxWheelSpeed", TypeF32, Offset(maxWheelSpeed, WheeledVehicleData),
    addField("maxWheelSpeed", TypeF32, Offset(maxWheelSpeed, WheeledVehicleData),
       "@brief Maximum linear velocity of each wheel.\n\n"
       "@brief Maximum linear velocity of each wheel.\n\n"
       "This caps the maximum speed of the vehicle." );
       "This caps the maximum speed of the vehicle." );
@@ -468,8 +477,7 @@ void WheeledVehicleData::initPersistFields()
    addField("brakeTorque", TypeF32, Offset(brakeTorque, WheeledVehicleData),
    addField("brakeTorque", TypeF32, Offset(brakeTorque, WheeledVehicleData),
       "@brief Torque applied when braking.\n\n"
       "@brief Torque applied when braking.\n\n"
       "This controls how fast the vehicle will stop when the brakes are applied." );
       "This controls how fast the vehicle will stop when the brakes are applied." );
-   
-   Parent::initPersistFields();
+   endGroup("Steering");
 }
 }
 
 
 
 
@@ -555,6 +563,7 @@ WheeledVehicle::~WheeledVehicle()
 
 
 void WheeledVehicle::initPersistFields()
 void WheeledVehicle::initPersistFields()
 {
 {
+   docsURL;
    Parent::initPersistFields();
    Parent::initPersistFields();
 }
 }
 
 

+ 1 - 0
Engine/source/T3D/zone.cpp

@@ -85,6 +85,7 @@ void Zone::consoleInit()
 #ifdef TORQUE_TOOLS
 #ifdef TORQUE_TOOLS
 void Zone::initPersistFields()
 void Zone::initPersistFields()
 {
 {
+   docsURL;
    addProtectedField("selectAll", TypeBool, Offset(mSelecting, Zone),
    addProtectedField("selectAll", TypeBool, Offset(mSelecting, Zone),
       &_doSelect, &defaultProtectedGetFn, "Select all in this zone", AbstractClassRep::FieldFlags::FIELD_ComponentInspectors);
       &_doSelect, &defaultProtectedGetFn, "Select all in this zone", AbstractClassRep::FieldFlags::FIELD_ComponentInspectors);
 
 

+ 2 - 1
Engine/source/Verve/Core/VController.cpp

@@ -60,8 +60,9 @@ VController::~VController( void )
     // Void.
     // Void.
 }
 }
 
 
-void VController::initPersistFields( void )
+void VController::initPersistFields()
 {
 {
+   docsURL;
     addGroup( "Controller" );
     addGroup( "Controller" );
         addProtectedField( "Time",      TypeS32,  Offset( mTime,              VController ), &setTime,      &defaultProtectedGetFn, "Current position of the Controller (in milliseconds)." );
         addProtectedField( "Time",      TypeS32,  Offset( mTime,              VController ), &setTime,      &defaultProtectedGetFn, "Current position of the Controller (in milliseconds)." );
         addProtectedField( "Duration",  TypeS32,  Offset( mDuration,          VController ), &setDuration,  &defaultProtectedGetFn, "Total length of the sequence (in milliseconds)." );
         addProtectedField( "Duration",  TypeS32,  Offset( mDuration,          VController ), &setDuration,  &defaultProtectedGetFn, "Total length of the sequence (in milliseconds)." );

+ 1 - 1
Engine/source/Verve/Core/VController.h

@@ -152,7 +152,7 @@ public:
     VController();
     VController();
     ~VController();
     ~VController();
 
 
-    static  void    initPersistFields( void );
+    static  void    initPersistFields();
 
 
     // ITickable.
     // ITickable.
 
 

+ 3 - 2
Engine/source/Verve/Core/VEvent.cpp

@@ -40,8 +40,9 @@ VEvent::VEvent( void ) :
     setLabel( "DefaultEvent" );
     setLabel( "DefaultEvent" );
 }
 }
 
 
-void VEvent::initPersistFields( void )
+void VEvent::initPersistFields()
 {
 {
+   docsURL;
     Parent::initPersistFields();
     Parent::initPersistFields();
 
 
     addProtectedField( "TriggerTime", TypeS32, Offset( mTriggerTime, VEvent ), &setTriggerTime, &defaultProtectedGetFn, "The time that this event is triggered." );
     addProtectedField( "TriggerTime", TypeS32, Offset( mTriggerTime, VEvent ), &setTriggerTime, &defaultProtectedGetFn, "The time that this event is triggered." );
@@ -403,4 +404,4 @@ void VEvent::setDuration( const S32 &pDuration )
 
 
     // Apply Duration.
     // Apply Duration.
     mDuration = pDuration;
     mDuration = pDuration;
-}
+}

+ 1 - 1
Engine/source/Verve/Core/VEvent.h

@@ -48,7 +48,7 @@ public:
 
 
     VEvent( void );
     VEvent( void );
 
 
-    static  void    initPersistFields( void );
+    static  void    initPersistFields();
 
 
     // Controller Methods.
     // Controller Methods.
 
 

+ 2 - 1
Engine/source/Verve/Core/VObject.cpp

@@ -42,8 +42,9 @@ VObject::~VObject( void )
     remove();
     remove();
 }
 }
 
 
-void VObject::initPersistFields( void )
+void VObject::initPersistFields()
 {
 {
+   docsURL;
     // Don't Use Parent Fields.
     // Don't Use Parent Fields.
     // Parent::initPersistFields();
     // Parent::initPersistFields();
 
 

+ 1 - 1
Engine/source/Verve/Core/VObject.h

@@ -66,7 +66,7 @@ public:
     VObject( void );
     VObject( void );
     virtual ~VObject( void );
     virtual ~VObject( void );
 
 
-    static  void           initPersistFields( void );
+    static  void           initPersistFields();
 
 
     // Reference Methods.
     // Reference Methods.
 
 

+ 3 - 2
Engine/source/Verve/Extension/Animation/VShapeAnimationEvent.cpp

@@ -38,8 +38,9 @@ VShapeAnimationEvent::VShapeAnimationEvent( void ) :
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-void VShapeAnimationEvent::initPersistFields( void )
+void VShapeAnimationEvent::initPersistFields()
 {
 {
+   docsURL;
     Parent::initPersistFields();
     Parent::initPersistFields();
 
 
     addField( "AnimationData", TypeRealString, Offset( mAnimationData, VShapeAnimationEvent ), "The name of the Animation Sequence to play upon triggering." );
     addField( "AnimationData", TypeRealString, Offset( mAnimationData, VShapeAnimationEvent ), "The name of the Animation Sequence to play upon triggering." );
@@ -151,4 +152,4 @@ F32 VShapeAnimationEvent::getAnimationPosition( const S32 &pTime )
     const S32 loopInterp = S32( mDuration * interp ) % duration;
     const S32 loopInterp = S32( mDuration * interp ) % duration;
 
 
     return ( F32 )loopInterp / ( F32 )duration;
     return ( F32 )loopInterp / ( F32 )duration;
-}
+}

+ 1 - 1
Engine/source/Verve/Extension/Animation/VShapeAnimationEvent.h

@@ -46,7 +46,7 @@ public:
 
 
     VShapeAnimationEvent( void );
     VShapeAnimationEvent( void );
 
 
-    static void     initPersistFields( void );
+    static void     initPersistFields();
 
 
     // Callback Methods.
     // Callback Methods.
 
 

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio