Game Development Community

Torque 3D Beta 4 Released (Features, Improvements, Fixes, and Known Issues)

by Matt Fairfax · in Torque 3D Professional · 07/17/2009 (11:47 am) · 18 replies

Torque 3D Beta 4 has been released! Check out the blog for all of the shininess!

Here is the detailed changelog for your viewing pleasure:

New Features

  • Added the new Datablock Editor
  • Added dynamic lighting support to Basic Lighting
  • Added a Cubemap Editor and exposed it to the Material Editor
  • Added support for Specular Maps to the Material Editor (with gloss mapping support)
  • Vastly improved Depth of Field PostFX
  • Mac Toolbox now supports launching a game project into the web via the Play in Web button
  • Exposed Player collision rendering to World Editor Visibility Tool
  • Added BasicClouds which support the "classic" three layers of scrolling clouds
  • Added RenderObjectExample, RenderMeshExample, and RenderShapeExample as examples of how to render with the current version of the GFX graphics layer
  • The World Editor tool panels should resize properly for resolutions less than 1024x768
  • Added support for non-triangular geometry to the Collada loader (all polygonal geometry is now supported and auto-converted to triangles)
  • Added refresh and clear Material functionality from the Material Editor
  • Material Selector now supports deleting Materials (beware the dependencies!)
  • You can now scale the SpotLight and PointLight with the Axis Gizmo in the WorldEditor and set absolute dimensions via its scale
  • Added a new Object->Transform Selection menu item to the World Editor. This opens a window that provides a number of numeric input fields to modify the selected objects' position, rotation and scale.
  • Added the ability to load a polysoup collision mesh for a TSStatic
  • The World Editor tree view now has a right-click context menu for SimGroup objects that allows to add or remove their children from the active selection
  • Undercity level is now included in the FPS Genre Kit

Improvements

  • GuiControl::mScriptFile is now a String and can be set with GuiControl::setScriptFile()
  • GUI Editor handles name clashes when creating new GUI (asks to replace existing GuiControls and rejects operation for other existing objects)
  • Gui Editor no longer lists editor guis for editing (causes some serious issues)
  • Added $Con::ReplaceExistingObjects script variable to control whether object instantiation deletes existing objects on re-definition rather than erroring out
  • Enabled MRT support for D3D9 targets
  • Renamed/removed confusing lightmap parameters on lights
  • Added new "AdvancedLightmapSupport" option to LevelInfo - defaults to false
  • Enabled full support for mixing lightmaps and Advanced Lighting (you can do most things without the new option in LevelInfo)
  • Updated Advanced Lighting point/vector/spot shaders
  • Removed unused "samples" field from ScatterSky
  • Simplified the lightmap/shadowmap control variables
  • River Tool, Decal Road Tool, and Mesh Road Tool now properly dirty the level file so that you will be prompted to save on exit if you edit them
  • River Tool, Decal Road Tool, and Mesh Road Tool prevent you from accidentally editing them by selecting them
  • SimObject's now support saving out field names that have more than 32 characters
  • Improved TerrainBlock saving to better handle new levels and multiple TerrainBlock's in a single level
  • Cleaned up the TerrainBlock API. Moved the grid based functions to TerrainFile.
  • Changed prefix on all Advanced Lighting materials and shaders to "AL_" for clarity
  • Lights that have a zero brightness are now skipped
  • Removed all the blur code from the lighting/shadowMap source as its no longer used
  • Changed ShadowMapParams::_validate() to allow a 2048 sized splits for a 4 split PSSM
  • Added 3DS Max PhysX Guide to the Official Documentation
  • Added 'Disable Shadows' to World Editor Visibility Tool
  • World Editor is smarter about when to save a changed level
  • No longer spamming the console with warnings about Material's that don't have a "mapTo"
  • Added a new light specular power visualization for Advanced Lighting
  • CloudLayer now supports a height which affects the shape of the vertex buffer generated
  • CloudLayer now supports a texture rather than a Material which makes creating a new CustomMaterial in script unnecessary
  • Changed the World Editor "Tools" menu to read as "Editors" for clarity
  • Removed the useless TypeCubemap and added TypeCubemapName which allows the Inspector to show a dropdown of all actual CubemapData(s)
  • Moved rippleTex, foamTex, and cubeMap from the CustomMaterial to WaterBlock
  • Major cleanup of the Water shaders
  • Disabling fullReflect on Water now uses the user-specified CubeMap instead of just the ambient color
  • Re-ordered the persistent fields for all objects to make them easier to edit in the World Editor
  • Refactored how lights are gathered for DTS objects and gets sent to the Material's
  • Removed old light vars from MeshRenderInst - it now has LightInfo* lights[8]
  • SceneGraphData now has the same light array as MeshRenderInst
  • Purged the old and currently unused TSMeshLightPlugin and InteriorLightPlugin code
  • Removed the unused RIT_InteriorDynamicLighting, RIT_MeshDynamicLighting, and RenderMeshDynamicLightingMgr
  • Removed the two RenderMeshDynamicLightingMgr render bins from initRenderManager()
  • Added an initial implementation of Platform::enumeratePlatformFonts() for the Mac
  • World Editor "Align by Bounds" and "Align by Axis" actions are now undoable
  • The World Editor's submitUndo() method now allows for an optional label that is used on the Edit menu
  • FPS Genre Kit - moved thePprojectile damage "support" functions into their own file instead of leaving them in radiusDamage.cs
  • ColorF now has a Point3F operator
  • Added new light scoring and prioritization to LightManager
  • Changed LightManager::setupLights() to take a sphere
  • Removed LightManager::setupLights( LightReceiver* )
  • The base LightManager class now provides a default implementation of setupLights(), getBestLights(), and resetLights()
  • Added LightInfo mPriority and mScore
  • Exposed the new LightInfo priority to LightBase for point and spotlights
  • Fixed uses of setupLights() to not happen during shadow rendering
  • FPS Genre Kit - Reorganized "scripts/client/init.cs" to help make it more obvious what are GUI controlling scripts vs "client" scripts
  • DecalManager::addDecal() now properly randomizes when the decalTexIndex is -1
  • GuiDecalEditorCtrl now allows for decalTexIndex randomization during placement
  • Added DecalData::MAX_TEXCOORD_COUNT to replace the hard coded 16
  • Added comment docs for the DecalManager::addDecal() functions
  • FPS Genre Kit - Added clientCMD TeamGameEnd() to handle the 'GameEnd' for team games. Setup to show the team scores in the EndGameGui.
  • GroundPlane can now be moved and rotated
  • Added post-load and unload signals for Resources
  • New script callback "TSShapeConstructor::onUnload()" called when associated shape is unloaded
  • Window collapsing has been moved to its own class - GuiWindowCollapseCtrl
  • Removed a bunch of empty onWake() functions from various editor GUIs
  • The Terrain Editors' Brush Size text edit control now validates its value (the correct brush size range is 1-40)
  • Added keyboard shortcuts to increase and decrease the brush size in the Terrain Editors (+ or = to increase, and - to decrease)
  • Added setTimeOfDay(), setPlay(), and setDayLength() script functions to the TimeOfDay object to allow script control of the time outside of World Editor (www.garagegames.com/community/forums/viewthread/94733)
  • In the Terrain Painter the keys 1-9 and 0 are now dynamically attached to the first 10 TerrainMaterial's. Pressing one of these keys makes that TerrainMaterial the current one. Each TerrainMaterial's tool tip now has its shortcut key in brackets, just like all of the other tools.
  • Changed the colours that the brushes are rendered with in the Terrain Editor. Now green indicates the grid points that will changes, and red indicates those that should not be touched (this also matches how the brushes are rendered in the Terrain Painter).
  • Improved decal selection
  • Added Torque::FS::GetFSPath() for returning a true file system path without virtual mounts
  • Added a 'for_each' interator function like the one in STL along with a 'delete_pointer' functor
  • Added dAligned_malloc() and dAligned_free()
  • TSMesh now converts its internal data storage into an aligned structure after loading (greatly improves performance)
  • TSSkinnedMesh now builds a batching structure which can store two kinds of batches: batch-by-vertex (previous implementation ordering) and batch-by-transform (new implementation). Wrote an SSE intrinsic versions of batch-by-transform which hugely improves skinning performance.
  • GFXD3D9Shader::_compileShader() now resolves virtualized mounts (like shadergen:/ or game:/) for better error messages and automatic opening of HLSL in Pix
  • Changed ShaderIncludeDependency::print() to print an #include since both HLSL and GLSL support them now
  • Made minor improvements to resourceDump()
  • Added some PROFILE_SCOPE's to GroundPlane
  • Moved corona code (field/rendering/etc) out of LightFlareData and into Sun. This simplifies LightFlareData a bit since it now only handles the "flare" effects and Sun is the only class that needs the special "corona" rendering anyway.
  • SceneState now holds the diffuse camera transform (MatrixF) rather than just its position
  • Tweaked the example LightFlareData's so they look better
  • Changed GroundPlane to generate a smaller, thicker convex centered around the query box and to update the existing convex's as the query box changes (this generates convexes that are more reliable against the Rigid-based collisions)
  • Added a ObjectBuilderGui::buildObject() function that handles stock object building for objects that don't need any special fields/data/processing to instantiate them
  • Removed the defunct/unused/redundant build<Class> functions from ObjectBuilderGui
  • Added some stock Datablock creation functions to objectBuilderGui.ed.gui so that they no longer have to rely on the various implementations in server/scripts
  • Added Container::findObjectList( U32 mask, Vector<SceneObject*> *outFound )
  • The stock RT lighting, bumpmap, and specular lighting ShaderGen features now operate in world space instead of tangent space
  • MFT_PixSpecular now only works if MFT_RTLighting is enabled
  • Removed old MFT_DynamicXXXX features which were left over from SynapseGaming lighting
  • Moved 'calcSpecular' from lightingUtils.hlsl to torque.hlsl
  • Light registration system is now shared from the base LightManager class
  • Removed the slTranslatedSunlightType special light type...the vector lights now handle the position translation themselves
  • Removed unused mVertexSpecular flag from Material system
  • Removed useLightDir from MaterialFeatureData...this is being generalized
  • Moved $worldToObj shader constant to base ProcessedShaderMaterial... removed it from PrePassMatInstance
  • GFXTexHandle constructors now call the matching set() instead of implementing the same functionality
  • GFXTexHandle::set() now calls free() first to release the existing texture before allocating a new one
  • Protected against a NULL texture when setting the debug string for a GFXTexHandle
  • Disabled multithread support in the D3D device by default (large performance increase)
  • Removed unused reflectTexSize constant from water shaders
  • Added an optional grid/groundplane view to Shape Editor
  • Terrain now renders using a base only material when outside of the maximum detail distance range
  • TerrainCellMaterial now supports making a base only material
  • Added getSqDistanceTo() and getDistanceTo() for getting a spherical distance in TerrainCell
  • TerrCell::cullCells() now uses a spherical distance for lod calculations
  • Added $TerrainBlock::lodScale and $TerrainBlock::detailScale for overall terrain performance tweaking
  • Changed $terrain::debugRender to $TerrainBlock::debugRender
  • Added the View->Snap Options menu item to the World Editor which opens the Snap Options window. From here the user may activate Terrain and Soft Snapping (much like from the toolbar). There are also two tabs: Terrain Snap and Soft Snap.
  • Added the Object->Drop Location->Below Selection menu item to the World Editor. This does what the "to ground" was changed to in Beta 3: cast a ray down from the selection origin and stop on the first static-like object (inc. terrain). As this only casts down, be sure to place all objects above the surface to be dropped on first.
  • The Terrain snap feature has been changed back to terrain only. This is handy for placing objects outdoors, such as rocks and trees since it handles snapping down and up to match the terrain (don't forget the new auto alignment function!)
  • Moved Object->Drop Camera to Selection menu item over to Camera->Place Camera at Selection. This collects all camera movement commands under the same menu.
  • Renamed all of the Drop commands under the Camera menu to now read as "Place" to be a little more intuitive
  • The Collada loader now ignores all absolute texture paths (the textures must be in the model folder instead)
  • Added a SystemInfoReady Signal to Platform (triggered in platformCPU.cpp)
  • Added a shortcut constructor for GFXShaderMacro
  • GFXShader is now reference counted via StrongRefBase
  • Fixed places where an strong ref was needed by converting them to GFXShaderRef
  • Removed the old/unused GFXShaderMgr classes
  • Removed GFXDevice::destroyShader() - just call delete instead
  • Added DeletePrefs and DeleteDSOs command files for the Mac
  • Gave SFX thread pool a fixed amount of two threads to work with (for now, this is enough for what the SFX pool does)
  • Added EditTSCtrl::renderBox()
  • Disabled backface culling for EditTSCtrl::renderSphere() when the camera is inside the sphere so that spheres remain visible
  • Added SFXEmitter::isInRange() and SFXEmitter::getPlaybackStatus() and exposed them to script
  • Added some really basic rendering for SFXEmitters when in the World Editor
  • Added new SFX Effects system with an implementation of fade-in and fade-out
  • Removing the various exec's for the Player TSShapeConstructors since they are now automatically exec()'ed
  • Exposed position, normal, width and depth editable text fields to the Decal Road, River, and Mesh Road Editors
  • Added an empty virtual destructor to Swizzle to make GCC more happy
  • Made platformNet more friendly to non-Win32 winsock platforms
  • Now sorting the input data for mesh skinning based on order of output. This should make prefetching more effective for the output on mesh skinning (since it needs to read from the output struct to accumulate).
  • Material Selector preview images should be a lot more accurate now
  • OPCODE ray casts now support returning the Material
  • Added support for a user specified material name prefix to TSShapeConstructor
  • Refactored GFXShader and ShaderData to allow multiple instanced shaders
  • Fixed all uses of ShaderData to use macro instanced GFXShaderRef instead of GFXShader*
  • GFXShader::init() now implements some common features and the new virtual _init() does the overloaded shader initialization
  • Added GFXShader::reload() which recreates the shader from disk without the need of file/macro parameters
  • Moved shader live update feature from ShaderData to GFXShader
  • Moved ConditionerFeature updates to GFXShader and removed old ShaderData dependencies
  • Removed previousFeature parameter passed to all ConditionerFeatures
  • Added BaseMatInstance::addShaderMacro() which like addStateBlockDesc() allows one to pass custom macros down to the ProcessMaterial
  • Refactored ProcessedCustomMaterial to more gracefully handle shader initialization failure as well as macro instancing in ShaderData
  • ShaderConstHandles::init() now queries the GFXShader directly to get the mTexHandlesSCs
  • Added MatTextureTarget::getTargetShaderMacros() and fixed places creating macros manually to use it
  • Renamed isEqual() and clampToZero() to mIsEqual() and mClampToZero()
  • Expanded executef() to allow one more argument
  • Improved the CPU info on the Mac (www.garagegames.com/community/forums/viewthread/81815)
  • Made a slight change to multi-processor reporting on Windows
  • FPS Genre Kit - added a Handbomb weapon (basically a grenade) press 'g' to mount, fire/throw like normal
  • FPS Genre Kit - added a better explosion decal
  • Sun objects can now be manipulated by TimeOfDay as well as ScatterSky objects
  • Exposed the set/get filename SimObject calls to script
  • Added the ability to bypass the object id comparisson with selection in the GuiTreeViewCtrl
  • Pitch can now be set through SFXDescriptions
  • Pitch and fades exposed in object builder gui of SFXEmitter in the World Editor
  • Updated Terrain Editor tooltips and shortcuts
  • Added Point3F::MIN and Point3F::MAX
  • Removed old and unused GameRenderFilters() function
  • Refactor of the Reflection Manager to not depend on PlayGui (allows for it to work across multiple viewports)
  • Removed REFLECTMGR update from GuiCanvas::renderFrame and moved it so that the GuiTSCtrl now does reflection updates
  • GuiTSCtrl now keeps a list of awake viewports in smAwakeTSCtrls
  • Each GuiTSCtrl has its own mReflectPriority which controls the amount of overall reflection time each gets
  • GuiTSCtrl::onRender() now sets the gClientSceneGraph->setNonClipProjection() as some objects depend on it in non-reflection cases
  • ReflectorBase refactored to have less public member variables (more accessors and methods)
  • Added ReflectorBase::isRendering() so that objects can skip rendering into their own reflections
  • Reflector objects now only register if they are actively generating reflections
  • PlaneReflector now accounts for the camera movement when prioritizing updates
  • ScatterSky now supports a cubemap to be faded in during night-time
  • ScatterSky now uses the tResponseCurve class (new helper math class) internally for interpolating between day/night values
  • ScatterSky can now render a moon texture during night-time and use it as a directional light
  • Reworked Collada loading code to support loading collision and los collision meshes into the correct details
  • AppMesh::getName() now takes an optional flag to keep it from automatically appended the fixed detail number
  • Added some keyboard shortcuts for the World Editor Object->Transform Selection, Camera->Standard and Camera->Orbit Camera menu items
  • The World Editor camera is now moved forwards and back using the mouse wheel when in standard camera mode. You can also strafe Up/Down/Left/Right by holding down the mouse wheel button and drag
  • Renamed MaxCollisionShapes to LOSOverrideOffset to better reflect it's purpose
  • FPS Genre Kit - added an assault buggy (the standard buggy with two steam blasters mounted on it)
  • FPS Genre Kit - setup footprint decals for the default Player
  • PhysX Demo - added a WeaponHud image for the Gravity Gun
  • Replaced BlobShadow with ProjectedShadow in Basic Lighting
  • Cleaned up ShaderGenVars to remove old ones from Synapse Gaming lighting
  • Added GuiMaterialPreview::deleteModel() for deleting the preview model
  • Removed old and unused 'shadowDirty' flag from TSShapeInstance
  • Removing the unused PhysXDocs level from the PhysX demo
  • Added default Decal Road Material
  • GuiBitmapButtonCtrl should display an unavailable picture when there is no/erroneous data found
  • onEnter() should cause text fields to lose focus (guiConsoleEditCtrl is the only exception)
  • Removed unneeded GuiWindowCtrl forward declaration from guiControl.h
  • Removed a couple of isDecoy fields from Road Editor GUIs
  • Implemented Event handler for Menu opening on Mac
  • Moved per-Menu event handlers to the Menubar, as only one is needed (it also makes unregistering event handlers is much easier)
  • Updated the saving and load of Settings xml to save in a much better hierarchical format
  • Added Settings::setDefaultValue() to be a global default stored value that doesn't get saved out
  • Added PersistenceManager::saveDirtyObject() method and exposed it to script which allows you to just save out a single object instead of all dirty objects
  • The Tools now call onDeactivated() on the current tool if you quit completely out of the editor, before calling destroy()
  • Precipitation was changed to set useTrueBillboards to be false by default (www.garagegames.com/community/forums/viewthread/96615)
  • Material instances cope gracefully with shadergen failures instead of crashing with a null pointer access
  • SFX packet size is now set correctly for wrap-around packets in looping streams
  • GuiWindowCtrl::findHitEdges() now correctly calculates bounds (www.garagegames.com/community/forums/viewthread/89919)
  • Fixed more GCC warnings in httpObject.cpp and astNodes.cpp
  • Terrain Painter edit button is invisible if no TerrainMaterial is selected

Fixes

  • Gui Editor remembers files on first save (www.garagegames.com/community/forums/viewthread/95209)
  • Fixed a couple of crashes related to the change of the Platform::outputDebugString() semantics
  • Made use of TORQUE_TOOLS path expansion functions depend on availability
  • Gui Editor now reloads existing GUIs from files (no more spurious "created with old version" warnings; allows to revert to saved version again)
  • Robustified/fixed MRT support for ShaderGen
  • Engine now properly treats materals with vertex-color lightmaps as lightmapped
  • Fixed mixing of vertex-color-baked lightmaps and dynamic lighting
  • Disabled rendering of Emissive flagged Materials to shadowmaps
  • Changed alpha blend state on the StateBlock for the vector light shader
  • Removed mixing of standard RTLightingFeatHLSL (Basic Lighting) feature with Lightmaps, Tonemaps, and VertLit features
  • Fixed resizing issues with GuiRolloutCtrl
  • Highlighted cells in GuiPopUpMenuCtrl and GuiPopUpMenuCtrlEx don't draw over the border
  • TerrainBlock::buildPolyList() now works properly for terrains below 0
  • Mesh Roads will now load in the proper locations
  • Mesh Roads properly clean up their Material's when they are deleted
  • The IE plugin should properly handle "reserved" keyboard accelerators (TAB/BACKSPACE/ALT, etc)
  • Removed the old DirectX9 version checking code which was overly complex and slowing down the startup process
  • Removed all the old/unused D3DX DLLs from the SDK
  • Creating an unnamed object after creating a named one in the World Editor is supported again
  • Inactive gui button controls no longer respond to mouse over
  • Thread::start() default argument no longer overwrites the argument supplied to constructor
  • Added a flag to GuiTreeViewCtrl items which controls which items are allowed to have children. This prevents the World Editor from incorrectly allowing SceneObject's to be used as SimGroup's
  • Basic Lighting Water shader now obeys rippleMagnitude
  • ThreadPool should properly spawn threads on single-core systems
  • Torque 3D should no longer hardlock on exit on single-core systems
  • SFX will work properly on single-core systems
  • ThreadPool properly handle cases where physical cores were reported as logical processors - multi-core systems should report correctly now
  • TerrainBlock::_updateBaseTexture() now properly begin/ends the scene if it's not already
  • FPS Genre Kit - Fixed Player spawning for different game types
  • FPS Genre Kit - ControlsHelpDlg was missing "noCursor"
  • ProcessedShaderMaterial::_setTextureTransforms() was not reading the animation info from the current pass (www.garagegames.com/community/forums/viewthread/95491)
  • The Decal Editor properly restores the Axis Gizmo settings on activation
  • SFXSource playback virtualization works properly now (www.garagegames.com/community/forums/viewthread/95427)
  • DecalDataFile::addDecal() now protects against the decalTexIndex being larger than the array size
  • Filename comparison in TSShapeConstructor now case-insensitive
  • TSShapeConstructor now correctly handles unloading of shapes
  • TSShapeConstructor methods check whether shape is loaded rather than crashing
  • GroundPlane's frustrum culling properly transforms the frustrum into object space
  • Fixed a possible filename overflow bug in the old ResManager
  • Fixed wrong details and possible crashes when adding or removing meshes in the Shape Editor
  • Added code to prevent a crash when adding a skinned mesh using TSShapeConstructor::addMesh()
  • Terrain Editor brush rendering now matches the area the tool actually operates on
  • A brush size of 1 is now correctly drawn in the Terrain Editors
  • The box brush may now manipulate multiple TerrainBlocks just as the ellipse brush does
  • Corrected a problem with TerrainEditor::getGridInfos() counting the primary terrain twice, which doubled the selected grid points for the ellipse brush
  • Fixed a possible divide by zero issue with the small box brushes in the Terrain Editors
  • MathUtils::capsuleCapsuleOverlap() now uses the correct radius for comparisons (www.garagegames.com/community/forums/viewthread/94901)
  • Fixed a lockup in TimeOfDay if given a 0 day length
  • Procedural shader headers now say 'Torque' and not 'TGEA'
  • Adding objects in the World Editor will properly apply their "placed" position before adding them to the scene (www.garagegames.com/community/forums/viewthread/95403)
  • Transforms from the World Editor's Inspector are being properly applied to TSStatics and InteriorInstances
  • The functionality in _gfxD3DXInclude::Open() now matches how GFXGLShader resolves include paths accurately
  • Fixed uninitialised smallestVisibleDL value when loading Collada shapes
  • Removed multiplier on thread pool count - it's one thread per processor now
  • Reflector classes now properly save the diffuse camera (transform) in SceneState before a reflection pass
  • Flares and coronas now render in reflections
  • LightFlares work correctly with ScatterSky
  • SceneLighting no longer leaves registered lights without clearing them
  • blTerrainProxy::light() protects against non-vector lights now
  • Fixed crash bug in TerrainCellMaterial::init() caused by bad cleanup on failure
  • Disabled .RAW as a heightfield import format since it was never properly supported
  • Fixed a failure case with the PersistenceManager that was preventing it from writing out empty strings
  • Fixed some missing lines in the plane grid
  • Fixed Shape Editor not zooming correctly when switching to the Shape Editor from the World Editor with a shape object selected
  • Fix TSShape::getMeshName() and TSShape::getNodeName() returning an empty string for name index of 0
  • Fixed Collada loader to generate proper paths for its materials.cs
  • Fixed inaccurate distance calc in TerrainDetailMapFeatHLSL
  • Uncommented SceneRoot::prepRenderImage() line that sets the default frustum for the outside zone, which fixes a few different issues with Interior and zone/portal rendering
  • Fixed a crash when auto-executing TSShapeConstructor script from within itself
  • FMOD device no longer ignores virtually all sound settings (caused by the deferred assignment of FMOD channels)
  • Fixed SFXEmitter to properly re-initialize
  • SFXEmitter::playOnAdd() now works when not using profile
  • Cursor positioning is now correct when resuming from virtualized playback in SFX
  • Fixed a few incorrect usages of String in the SFX code
  • Fixed respawning in the Full Template
  • Added the missing toggleZoomFOV() function to the Full Template
  • GFXDrawUtil::_drawSolidCube() no longer swaps face orientation for every other face
  • Fixed SHIFT-TAB to move backwards through text fields again
  • Fixed for GuiTextEditCtrl's selectAllText() method so that it will correctly select the entire displayed text
  • Decal Editor node properties update properly now when using the Axis Gizmo
  • Improper undo positions for all of the Road Editors should be gone now
  • Torque::FS::ReadFile() no longer incorrectly returns false when reading an empty file
  • Asserts in Journal.cpp now will actually be triggered
  • Fixed the deadlocks caused by Platform::forceShutdown()
  • Fixed a crash when attempting to load malformed Collada model (bad <p> array in <polylist> element)
  • Fixed a memory leaks in Settings
  • Made SimXMLDocument play nice with the Torque Memory Manager
  • Fixed a potential crash in voices for streaming SFX buffers when when they failed to load
  • Fixed a memory leak in GuiControlArrayControl::updateArray()
  • Added headroom to SFXXAudioBuffer playback queue to avoid crashes due to timing discrepancies
  • GenericConstBuffer/GenericConstBufferLayout no longer indexes outside of the mParams array when the shader fails to compile
  • Fixed _gfxD3DXInclude::Open() to no longer fail if the #included file is of zero length
  • Removed GFXShader::process() and changed all uses to GFX->setShader()
  • Fixed NULL pointer crash in MATINSTPARAMSET macro when shader fails to initialize/reload properly
  • The Material Selector no longer uses the Material Editor's PersistenceManager
  • LightBase::inspectPostApply() now calls its parent
  • Removed duplicate function isZero() for mIsZero()
  • Fixed a bug that was causing mesh elements with differing visibility to get batched together with the result that all pieces were rendered with the visibility of the first
  • Removed the assert when deleting SFXVoices that failed initialization
  • Fixed the wrong type on ShapeBaseImageData::stateEmitterNode field (www.garagegames.com/community/forums/viewthread/24082)
  • Added a workaround for SamplesPlayed not resetting on XAudio2 voices (fixes seeking bug with XAudio)
  • Fixed a missing const on GFXVideoMode::toString()
  • The Inspector in the World Editor hides the Transform group if it doesn't contain any fields
  • Removed the rebuilding of the World Editor's GuiTreeViewCtrl's data every 30 renders and instead fully supported the existing rebuild flag so only updates when needed
  • Fixed not displaying transform group for GUI Editor objects
  • WaterPlane::setupVBIB() no longer sets unused primitives in its index buffer
  • Fixed TSShapeConstructor::addSequence()'s incorrect parsing of the source sequence name
  • fxFoliageReplicator now modulates against the Sun ambient color
  • fxFoliageReplicator StateBlock now rebuilds on inspector changes (alphaCutoff now works when edited)
  • ScatterSky properly sets the Cubemap texture to NULL when not using it
  • Created Materials should be set in correct groups when instantiated
  • Fixed a bug in GuiTextListCtrl where it was never able to clear a selection
  • Added a fix to the Terrain Painter to protect against "editing nothing" in the Terrain Painter Material Selector
  • Removed old TerrainDetailLayers class predeclare
  • Adjusted point light emulation in Sun and ScatterSky to have little perceivable falloff
  • Restored light brightness control to ScatterSky
  • TerrainBlock now collects and passes the best light list for each cell down to the material
  • The ConditionerFeature list starts dirty now so that we at least have an empty autogenConditioners.h at startup. This removes the failed #include asserts when compiling shaders shader when starting in Basic Lighting mode.
  • LightBase::inspectPostApply() no longer calls parent as it was forcing the object scale to always set the radius/range/angles of the light
  • Terrain Editor properly compares between object ids, instead of object id to object name (www.garagegames.com/community/forums/viewthread/95395)
  • Enabled drag and drop in the GUI Editor tree view
  • Editing an object's transform in the Inspector should properly updates its bounds and axis in the World Editor (www.garagegames.com/community/forums/viewthread/95743)
  • Advanced Lighting now supports the new forward lighting in the base RTLighting feature
  • Terrain now renders into the shadow pass properly
  • Fixed a memory leak in the reflection code
  • MaterialEd::quit() now deletes the preview model. This was causing a crash as it was deleting the Materials leaving MatInstances in the preview model that had bad Material*s.
  • Made results of normal transform in BumpFeatHLSL more explicit
  • TSSkinMesh now keeps a 'lastTime' to track the last Sim::getCurrentTime() when the skin mesh was updated. This ensures that the skin mesh is updated once per time advance even if its just rendered to the shadow map.
  • destory<EditorName>() now gets called properly in the tools/main.cs
  • String::insert() no longer asserts when inserting zero-length string (it just returns the original string)
  • Fixed a possible crash due to SFX voices being destroyed after buffers in SFX cleanup
  • Removed all AL_ASSERTS - OpenAL error states seem to be global and not per-thread causing spurious errors
  • Fixed a DecalDataFile leak caused by DecalManager when the file already existed
  • Using ReadWrite in FileStream now creates a file if it doesn't exist (www.garagegames.com/community/forums/viewthread/96755)
  • AL_DefaultShadowMaterial now has a single Material so that it can properly create a shadow material from it. Terrain is now being rendered into the shadow maps so that it no longer causes resolution artifacts in the shadows.
  • GIF loading properly handles loading a GIF file without a global color map
  • Fixed a possible null pointer dereference crash in the Inspector
  • Material edit button in Terrain Painter now works correctly with the currently selected TerrainMaterial

Known Issues

  • SetEmpty button does nothing in the Terrain Editor
  • GuiShapeNameHud has rendering issues
  • TSStatic's don't have any collision when set to "Bounds" mode in a PhysX enabled project
  • Mac Basic Lighting is clamped to 1 dynamic light instead of 4
  • Changing Cubemap's on a Material will occaissionally cause a crash
  • Specular is incorrect when using dynamic lights in Basic Lighting
  • Some of the Editors don't display correctly at 800x600 resolution
  • Advanced Lighting is disabled by default on the Mac (must uncomment $pref::machax::enableAdvancedLighting in core/main.cs to enable it). There are still some issues to be resolved with it.
  • PostFX is non-functional on the Mac (shaders need porting to GLSL)
  • Mac underwater fog appears to not be working
  • No PhysX support on the Mac (we are in touch with nVidia)
  • Mac web deployment isn't fully finished (disabled for now)
  • Mac version won't compile against 10.5 SDK (works against 10.4 which is the default)
  • Can not enable Glow on transparent objects
  • There are still some ATI related rendering issues
  • Rocket explosion decals occasionally applied strangely when shooting building or object edges
  • More performance and refinement for Advanced Lighting (including SM2 support) on its way
  • World Editor - If you set an object to be locked in the Tree View it won't immediately update the dynamic field to reflect this
  • Switching to an editor that requires a an object to exist in the scene (like the Terrain Editor requiring a TerrainBlock) will still switch back to the Object Editor even if you choose to create the object
  • Torque Toolbox comment system isn't fully implemented, no way to currently add, edit, or remove them
  • Terrain Editor is currently missing the equivalent of "Set Empty", "Clear Empty" and "Set Height" tools
  • Terrain Painter will wrap the painting the edge of a terrain block to the opposite end of the terrain
  • All of the bugs listed in the Beta 4 Bugs forum

About the author

I am a Game Designer at PopCap who has worked on PvZ Adventures, PvZ2, Peggle Blast, and Bejeweled Skies. I am an ex-GarageGames employee who helped ship TGE, TGEA, Torque 3D, and Constructor.


#1
07/17/2009 (12:28 pm)
Quote:
Fixed a possible divide by zero issue

Thank the Great Magnet for that!
#2
07/17/2009 (1:02 pm)
Man, this is a little like waiting on santa clause.
#3
07/17/2009 (1:29 pm)
Omg.. that's gona take me at least an hour to digest !!

Well all done GG T3D devs :D
#4
07/17/2009 (2:01 pm)
Quote:# Terrain Editor is currently missing the equivalent of "Set Empty", "Clear Empty" and "Set Height" tools
# Terrain Painter will wrap the painting the edge of a terrain block to the opposite end of the terrain

Dang... I was hoping this would be the beta that would have the terrain fully working with stuff like that. Hoping it gets in for Beta 5... dare I wish that it might also be a release candidate

Quote:Man, this is a little like waiting on santa clause.
I hope your avatar didn't hear you say that... ^__^
#5
07/17/2009 (2:05 pm)
That was fast since B3 and man is that a lot of fixes and new stuff. Two thumbs up!
#6
07/17/2009 (2:55 pm)
I wish you guys would wait and put this up when you put up the Download the anticipation is gonna give me a stroke.;p
#7
07/17/2009 (3:02 pm)
Quote:PostFX is non-functional on the Mac (shaders need porting to GLSL)

might want to take a look at this for quick start.
HLSL2GLSL
#9
07/17/2009 (3:19 pm)
Nice :)
#10
07/17/2009 (3:24 pm)
downloading... and i thought it was probably going to take till the end of the month, boy you guys have improved.
#11
07/17/2009 (3:45 pm)
AAAH! I walk away from my computer for 10 minutes and you put up the Beta 4 download. I almost expected the release tomorrow.
#12
07/17/2009 (5:03 pm)
I don't really like the new double-click in the editor's object treeview thing.

Plus I don't see it mentioned - hence I thought my PC had locked for a moment!
#13
07/18/2009 (1:14 am)
nice work, and wow what a list :)
#14
07/18/2009 (7:29 am)
I do not know why but all the Torque3D release (since Beta2) that I downloaded from GG are quarantined by MacAfee. MacAfee is finding a generic trojan named Artemis...
#15
07/18/2009 (7:42 am)
@Frank
Not really helpful here but I ditched "big name" virus protection years ago due to it never working correctly. I can get free stuff which doesn't work correctly! ;)

I'm using AVG now, and during late TGE/early TGEA it loved to classify it all as infected. After a while they updated their antivirus and this annoyance went away.

It just must be something to do with the installer, and how constantly changing antivirus detection misreads things.
#16
07/18/2009 (11:44 am)
don't have that problem with Nortons :) not much help I know. But seems better.
#17
07/18/2009 (5:12 pm)
Just found the show "player collision" and "specular visibility" layers, groovey!

@JulianR - Norton was what I was thinking about, say 5 years back. grrrr
#18
07/24/2009 (3:50 am)
@Frank

Don't have that problem now, but have had false-positives in the past. They generally only go away if _at least one_ person submits a false positive report to whomever is maintaining your antivirus database.

I see McAfee hides their submission process for false positives behind a required chat session, so you'd have to sit through the annoying 1st-level tech support script to get the e-mail address needed. (In addition to feeling annoyed, I feel bad for them having to stay on script, and usually have to suppress a little cheer every time I get them off script if it is over the phone.)

I learned that just waiting _sometimes_ gets you nothing years ago. Odds are rare that _no one_ submits a ticket, but _someone_ has to and you may as well step up. My AV software was getting the willies over Komplete. It was about a month after I e-mailed them that it finally stopped quarantining it. If it takes too long to fix I'd take Steve's suggestion to go with something free -- at least temporarily -- as a way to get your T3D back...