Game Development Community

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

by Matthew Langley · in Torque 3D Professional · 08/10/2009 (4:06 pm) · 12 replies

Torque 3D Beta 5 has been released! Check out the blog!

Here is the detailed changelog for your viewing pleasure:

New Features

  • Added a Particle Editor
  • Added Projected Shadow for basic lighting
  • TerrainBlock supports setting empty squares
  • Live Asset Updating is now supported on the Mac
  • Added a PostEffectVis class that exposes ConsoleStaticFunctions for debug visualizing PostEffects including PfxVis::open( PostEffect ), PfxVis::clear(), PfxVis::hide(), and PfxVis::show()
  • Particles can now be toggled to use offscreen particle rendering (will increase performance but may cause some visual artifacts...set highResOnly to false on the datablock)
  • Torque Toolbox now fully supports project comments
  • Torque Toolbox now has a Documentation tab for easy access to the Official Docs
  • Glow PostEffect works with Basic Lighting
  • Collada meshes with more than 10K polsy will now handle splitting up the mesh automatically so that they can load properly
  • GUI Editor has recieved a lot of updates to make it more functional and useful
  • GUI Editor - Added group and ungroup commands (in edit menu, CTRL/CMD-G = group, SHIFT-CTRL/CMD-G = ungroup)
  • GUI Editor - Added edge and center drag-snapping (toggles in the Edit menu - ALT to restrict to horizontal, CTRL to restrict to vertical)
  • GUI Editor - Edge and center snap can be toggled with ALT-SHIFT-E and ALT-SHIFT-C respectively
  • GUI Editor - Locked controls can be selected (they remain unaffected by editing commands)
  • GUI Editor - Added lock and unlock commands (in edit menu; CTRL/CMD-L = lock; SHIFT-CTRL/CMD-L = unlock)
  • GUI Editor - Invisible controls now show their state in the treeview
  • GUI Editor - Added hide and unhide commands (in edit menu; CTRL/CMD-H = hide; SHIFT-CTRL/CMD-H = unhide)
  • GUI Editor - Remapped align commands from CTRL/CMD-L|R|T|B to CTRL-CMD-LEFT|RIGHT|UP|DOWN
  • GUI Editor - Removed the unused Apply button and control Name field
  • GUI Editor - GUI control palette now has an additional treeview that displays class categories
  • GUI Editor - The All and Categorized panes in control palette show tooltips with class descriptions (where available)
  • GUI Editor - Added class description tooltips in Common page of GUI editor control palette
  • GUI Editor - Switch to a solid profile for GuiDragAndDropControl when dragging out of GUI editor control palette. This gives visual feedback for classes without a default visible rendering
  • GUI Editor - The treeview updates on hierarchy changes
  • GUI Editor - Copy/paste properly handles name clashes
  • GUI Editor - Added "Save Selected To File..." to save selected GUI control hierarchy to a specified file
  • GUI Editor - Fixed "Revert Gui" to properly revert GUI's to the last save
  • GUI Editor - Added "Add Gui From File..." function to load a GUI from file and add to current content control
  • GUI Editor - The property documentation now shows in the Inspector like it does in the World Editor
  • GUI Editor - Made the World Editor button correctly drop into the World Editor (creates new mission when triggered from main menu)
  • GUI Editor - Made the GUI Editor switch to editing the PlayGui instead of the World Editor GUI (unless $pref::GuiEditor::toggleIntoEditorGui is set)
  • GUI Editor - Added $pref::GUIEditor::showEditorGuis to allow the World and GUI Editor GUI's show up in the editable GUI's list
  • GUI Editor - The overlays now all render transparent
  • GUI Editor - Smart snaps show reference controls with transparent outlines
  • GUI Editor - Rectangular selection renders as a transparent overlay
  • GUI Editor - Improved the look/usability of the position guides along control edges (can be toggled off altogether with $pref::GuiEditor::drawPositionGuides)
  • GUI Editor - Dragging an unselected control will immediately select it and start a move
  • GUI Editor - Dragging in top level control will start a drag selection
  • GUI Editor - ALT-dragging from anywhere will start a drag selection (remember to let go of ALT if you don't want parent exclusion which happens on mouse-up)
  • GUI Editor - Holding CTRL/CMD on mouse-up will add to current selection
  • GUI Editor - Holding ALT on mouse-up will exclude parents from being selected when one or more of their children get selected too
  • GUI Editor - Holding SHIFT on mouse-up will exclude children from being selected when their parent control gets selected too
  • GUI Editor - Selecting a container control will now make it the current add set
  • GUI Editor - Clicking a class in the control palette will instantly create a control and place it in the current add set
  • GUI Editor - Big nudge in GUI Editor now moves by one grid unit instead of two
  • GUI Editor - Grid rendering is less obtrusive and always renders on entire canvas
  • GUI Editor - Grid size text edit box in preferences now updates the slider (also respects minimum grid size - currently set at 3)
  • GUI Editor - Resizing now works with multiple selections
  • GUI Editor - Added a new deselect command in GUI Editor ("Edit -> Deselect All"; CTRL/CMD-D)
  • GUI Editor - Added guides and guide snapping similar to Photoshop
  • GUI Editor - Rearranged menus in GUI Editor and added a Help menu that mirrors World Editor Help menu
  • Removed unused members variables from ShapeBaseData and ShapeBase

  • Improvements

    [ul]
  • Terrain heightmap and opacity map exporting is now supported (http://www.garagegames.com/community/forums/viewthread/91013/3#comment-623087  )
  • TSStatic's can now automatically play an "ambient" animation when they are loaded
  • Added script callbacks to GameTSCtrl for mouse events
  • Added new console functions project() and unproject() for GuiTSCtrl
  • Torque 3D now compiles against the Mac OS X 10.4 and 10.5 SDKs
  • Mac can now build with GCC 4.2
  • Enabled the River and Mesh Road Editors to work against any static object type
  • The World Editor now supports camera bookmarks that are saved with the level. Check out the Camera menu for adding and managing them. The bookmarks display as a blue cone and camera icon within the editor.
  • Added driver-forced MSAA detection (it attempts to detect driver-forced MSAA and warns the user via message box then enable Basic Lighting instead to avoid rendering artifacts that occurs in Advanced Lighting)
  • Reduced and/or eliminated the seam on Dual Paraboloid shadows (not single pass, though, that is there to stay until we move off DX9)
  • SFX now properly supports Live Asset Updating
  • Added Triangle List Optimization (Forsyth's algorithm) to TSMesh::disassemble()
  • Implemented TypeCommand console type which will pop up a mini text editor will pop up when changing TypeCommand fields in the World Editor's Inspector (like for SpawnSphere's "spawnCommand" property)
  • Added SAMPLE_VECTOR and SAMPLE_MATRIX macros
  • Linear and logarithmic distance attenuation for 3D sounds can be chosen by the user ($pref::SFX::distanceModel, sfxGetDistanceModel(), and sfxSetDistanceModel())
  • Rolloff factor for logarithmic distance attenuation for SFX can be set by user ($pref::SFX::rolloffFactor, sfxGetRolloffFactor(), and sfxSetRolloffFactor())
  • Doppler shift in SFX can be customized by user ($pref::SFX::dopplerFactor, sfxGetDopplerFactor(), and sfxSetDopplerFactor())
  • Added support for named notification markers on SFXSources (SFXSource.addMarker())
  • Added SFXSource.setCone()
  • Refactored SFXEffect system
  • Added some SFXDevice updates for DirectSound
  • Added TerrainEmptyFeatHLSL to clip on empty triangles
  • Refactored SetEmptyAction::process() to avoid storing redundant undo info and to properly set the material change flag
  • Removed the unused ClearEmptyAction
  • Sped up loading animated Collada models by caching the default (t=0) and last computed node transforms
  • Can now import GIF and JPG files as terrain heightmaps and opacity maps
  • DoF PostEffect now has a much better Gaussian blur shader
  • Tweaked the params of the DoF PostFX to not be quite so excessive
  • Made DDS texture loading fail gracefully when parameter validation fails
  • Made DDS texture uploading fail gracefully on pitch mismatches
  • Mips can now be dropped from DDS files when loading into texture objects
  • Added distance field generation util code (See Valve paper)
  • Renamed Material::normalizeCube to smNormalizeCube
  • Capitalized Material::getNormalizeCube()
  • Added debug events to PostEffects (makes PIX much nicer to look at)
  • Triggers and PhysicalZones now render in the world editor (orange and green, respectively) in a similar manner as Zones and Portals
  • Added options to render all PhysicalZones and Triggers in the World Editor Visibility tool
  • PostEffect now has a "skip" field useful for debugging
  • PostEffect will now update its GFXStateBlock when reload is called
  • GuiWindowCtrl now sets $ThisControl when evaling the closeCommand
  • SFXStatusBlocked no longer exposed by SFXSource
  • Added SFXSource.getStatus()
  • Added a util file for calculating screenspace offset/scale for targets and consolidated the engine uses of this functionality
  • Switched Mac version to use command key in most places instead of CTRL
  • Removed references to the now unused mElapsedTime in WaterObject
  • Fixed all GCC 4.0 warnings
  • Added a few developer helpers to ConsoleDlg - ConsoleDlg.hideWindow()/showWindow() toggles the scrollgui/text visibility leaving the TextEditCtrl intact, ConsoleDlg.setAlpha( %alpha ) sets the alpha of the console window's background
  • Removing many references to JCF in the code comments
  • Added U32 GFXShader::mReloadKey which is incremented whenever reload is called on a shader
  • Advanced Lighting System now adds the GBuffer Conditioner instead of hacking it into PrePass ShaderGen features
  • Added a linear eye depth only pre-pass conditioner
  • Split out edge detection into its own PostEffect, which draws to "#edge" which can be used by other PostEffect's
  • Added a "requirements" field to PostEffect
  • Fixed some improper file cases for case-sensitive filesystems
  • PopupMenu::setItem() implemented on the Mac (menu item texts now change state)
  • Added and exposed new script functions GuiEditCtrl.getContentCtrl(), GuiEditCtrl.getSelectionBounds(), GuiEditCtrl.getSelectionGlobalBounds(), and GuiControl::findHitControls (intersects controls with region)
  • Added and exposed new script function GuiTreeViewCtrl.hideSelection()
  • Added a hit enable flag to GuiControl to allow exclusion from findHitControl(s) without clobbering visibility flags
  • SimObject::isHidden(), SimObject::setHidden(), SimObject::isLocked(), and SimObject::setLocked() are virtual now
  • The visibility state of GuiControl's are properly keyed to their hidden status
  • Added GuiParticleGraphCtrl from T2D
  • Updated GuiMLTextEditCtrl so that it now properly captures input when it has focus
  • FPS Genre Kit - Added an AssualtBuggy example
  • Script defined shader constants in PostEffect are now stored in a hash table to improve speed
  • We now resolve PostEffect::EffectConst handles when being set on the buffer
  • PostEffect::setShaderConst() now takes the string name of the constant instead of an integer
  • Removed PostEffect::addShaderConst() - use setShaderConst instead
  • Removed "addShaderConsts" callback for PostEffect's
  • Fixed up HDRPostFx to better calculate the HDR diffuse buffer as well as to avoid out of control tone mapping
  • Added the DECLARE_CATEGORY macro to allow you to declare categories for console classes
  • Added the DECLARE_DESCRIPTION macro to allow you to declare descriptions for console classes
  • Added and exposed new script functions enumerateConsoleClassesByCategory(), getCategoryOfClass(), and getDescriptionOfClass()
  • Added and exposed new script functions GuiTreeViewCtrl.setItemTooltip() (allows for custom tooltips on treeview items) and GuiTreeViewCtrl.isParentItem()
  • Added and exposed new script function GuiListBoxCtrl.setItemTooltip() which allows for custom tooltips on listbox items
  • Added a new script callback of onMouseDragged() for GuiTreeViewCtrl::onMouseDragged()
  • Use smarter comparisons for Shape Editor node/sequence hints to handle names with spaces that are exported as underscores by some apps (like Bip01_Pelvis) and arrayed names (like mount0-32)
  • Added some generic VehicleData functions to help handle such things as Player mounting/dismounting, passengers, and damage
  • GuiListBoxCtrl::addItem() returns index of new the item
  • Changed the default server name to "Torque 3D" in Templates/Full
  • Updated the cloud textures in Templates/Full
  • GFXGLVertexBuffer now treats all non-position/color/normal semantics as texture coordinates
  • GLSL ShaderGen now deals with arbitrary semantics
  • Added and exposed a new script function VectorLerp()
  • FPS Genre Kit - Hooked up the rifle zoom to turn on DOF and unzoom to turn it off
  • Developed an interface for setting the DoF PostEffect parameters from the game code
  • The DoF PostEffect autofocus is now using a different technique which does a better job of putting the focus depth "really" in focus
  • WaterObject switched back to using GFXOcclusionQuery
  • Removed GFXDummyOcclusionQuery and GFX->supportsOcclusionQuery() and switched GFX->createOcclusionQuery() to return NULL if it isn't supported
  • Implemented client-side triggers (set the "clientSide" property on the Trigger datablock, and the Trigger will fire on clients instead of the server)
  • Added the "tickCommand" field to Trigger to allow you to edit it from the World Editor's Inspector
  • Removed the unused parameters "enumerate" and "resizeCell" from GuiTextListCtrl
  • Made GuiEditCtrl trigger an "onHierarchyChanged" callback when rearranging GuiControls
  • FPS Genre Kit - additional methods for damage and hints at power enabling/disabling, animations, etc for StaticShape's
  • $Con::replaceExisting is now $Con::redefineBehavior - implemented values are "replaceExisting" (deletes existing object on name clash) and "renameNew" (appends number to new object to make a unique name)
  • RenderOcclusionMgr can now render a sphere or box to represent its occlusion testing
  • RenderOcclusionMgr can now show the rendered shapes for debug rendering by setting $RenderOcclusionMgr::debugRender to true
  • The parameters for OcclusionRenderInst were changed to be a bit more straightforward
  • LightFlareData tests for occlusion using a hardware query rather than the simple raycast if it is supported (Note: this change does not apply to ScatterSky)
  • The GUI control palette in the GUI Editor now preserves its state
  • Improved the error reporting in MatInstance::processMaterial()
  • Added Con::getStringArg()
  • Did some clean up on GuiDirectoryFileListCtrl
  • Tweaked GFont::create() to allow cacheDirectory to be omitted
  • Improved the startup time of the Torque Toolbox
  • Added the new volume channel $MusicAudioType and a number of streaming profiles for music playback
  • Cleaned up existing audio profiles cleaned up and renamed the exisiting "Looping" versions to "Loop"
  • Basic Light Manager now guards against invalid light color and position shader constants
  • Bumped the number of lights in the GL version of Basic Lighting to 2 (3 or more causes a driver meltdown unless you have OS X 10.5.8)
  • TerrainBlock::getNormal now can optionally return a normal even on empty squares
  • Upped projectDistance in GizmoProfile to 10000 to make object manipulate in large scenes
  • The World Editor Creator can now show "friendly" names for object types
  • Implemented "Player Drop Point" and "Observer Drop Point" creator objects as SpawnSphere's which will be added to "PlayerDropPoints" or "ObserverDropPoints" SimGroups respectively
  • Added a GLSL assert macro in torque.glsl
  • GFXOcclusionQuery::getStatus() can now optionally pass back the pixel count
  • Added OpenGL occlusion query support
  • Added an optional second GFXOcclusionQuery to OccluderRenderInst for purposes of returning the "full pixel" count
  • Added ability to select a SimGroup as the destination for new objects to the right-click context menu in the Scene Tree in the World Editor (indicated by an open folder icon)
  • FPS Genre Kit - added helper function ShapeBase::doRaycast(%this, %range, %mask) to help keep from duplicating code whenever a raycast search is needed
  • FPS Genre Kit - switched Vehicle mounting from a collision event to a keypress (defaults to "e")
  • FPS Genre Kit - made Vehicle "nametags" configurable
  • Added the isAllTextSelected() and clearSelectedText() methods to GuiTextEditCtrl and exposed them to script
  • Exposed the GuiWindowCtrl selectWindow() method to script (allows for a window to be brought to the front)
  • Exposed the GuiControl controlIsChild(), getFirstResponder(), and clearFirstResponder() methods to script
  • Added a right-click context menu to Gui Editor Tree View which mirrors the context menu present in the World Editor
  • Added progress dialog to Collada loader (useful when loading large models)
  • Added GFXVertexPNTBT for explicit tangent and binormal in vertex format
  • Added class icons for Portal's, Zone's, and BasicClouds for the World Editor's Scene Tree
  • Added a new ConsoleFunction isClass() which returns if the passed string is a defined class name
  • Added a vert-tuple cache to Collada loader to speed up searching for duplicate verts
  • Reworked the mouse scaling operations in GUI Editor
  • Disabled the unused AIManager for the time being (it's super annoying when using trace() to debug script)
  • GuiCheckBoxCtrl now supports optional disabled images in its bitmap array (indicies 4 and 5 are disabled unchecked and disabled checked respectively)
  • GuiControl's clearFirstResponder() now accepts an optional flag indicating if the control should also be sent onLoseFirstResponder()
  • FPS Genre Kit - Updated weapon scripts to account for potential energy based (no-ammo) weapons (this also prevents console spam when mounting a weapon that doesn't use ammo)
  • The Snap Options and Transform Selection windows in the World Editor are now collapsible by clicking on their title bars
  • The Transform Selection window in the World Editor now has two tabs at the bottom: Scale and Size. The new Size tab allows for the relative or absolute size of all selected objects to be set (size is always measured about the object's origin and in object space)
  • Protected against getting a contact report in pxCapsulePlayer with an actor that does not have a PxUserData
  • Protecting against having a NULL datablock in PxMultiActor::onAdd()
  • Updated Camera FX so that the updated transform is applied to any type of camera, not just for Player in first person view
  • Added fields and methods to allow for Particle Emitter Nodes to cease/start emitting particles
  • Added the ability to edit the TimeScale and Position of script animation threads for ShapeBase
  • FPS Genre Kit - added unique tire and spring types for both the DefaultCar and the AssaultBuggy
  • FPS Genre Kit - parenting in place for WheeledVehicleData to VehicleData (this should make it easier for people to simply drop in new (simple) vehicles)
  • Switched out the unused ScatterSky and CloudLayer in Undercity to boost performance
  • Updated the Zones and Portals in Undercity
  • Removed the D3D API call to GetDirect3D() in GFXD3D9CardProfiler::_queryFormat()
  • We now avoid calling IDirect3DSurface9::GetDesc() in most cases in GFXD3D9TextureTarget::getSize() (optimization)
  • Vector, Cubemap, and Spotlight shadows now use the same ShadowMatHook material (optimization)
  • Added LightShadowMap::hasShadowTex() to properly detect if a valid shadow texture is available for a light
  • "onMouseUp" script callback in GuiTreeViewCtrl now passes ID of item on which mouse is being released
  • Added a new "onMouseUp" script callback for GuiListBoxCtrl
  • Split out GFXD3D9WindowTarget into its own CPP file
  • Added comment to PostEffectManager to indicate that the fall-through in the case statement in PostEffectManager::_handleDeviceEvent() was intentional
  • FPS Genre Kit - Vehicles are now destroyable (exploding Vehicles do radius damage)
  • Removed calculation of depth squared in DepthOutHLSL::processPix() as its no longer used
  • Removed Material::isEmissive() in favor of Material::castsShadows()
  • Added the ability to enable/disable light animations and methods allowing you to update/change the current animation datablock
  • Removed the Mesh Road Editor and the River Editor's dependency on terrain
  • Added test version of a new script bound gui control functionality: DropDownTextEditCtrl
  • String-ified GFXCardProfiler
  • Now display a '*' in the Shape Editor window title when the current shape has unsaved changes
  • The Shape Editor preview window now renders the selected node even if show nodes is off
  • Removed all GFXTextureManager methods pertaining to amount of texture memory (refer to GFXCardProfiler::getVideoMemoryInMB() for total VRAM)
  • When the sequence selection changes in the Shape Editor, playback is halted and the current frame to the first frame in the new sequence
  • When an object is selected from the Shape Editor Scene tree, its class type is used to initialize the node and sequence Hints menu
  • ShapeBaseData::shadowEnable is honored again
  • Made getWin32WindowHandle() return handle of first window when none is focused
  • Hooked up the improved splash and ripple effects to Templates/Full
  • Double-clicking on a node or sequence hint in the Shape Editor will automatically add it to the shape
  • Exposed a new script function GuiTreeViewCtrl::sort() that allows sorting of the tree view (including entire hierarchies)
  • Datablock Editor now sorts its tree view alphabetically
  • DecalManager::_createFile() now opens existing an existing decal file if there is one
  • DecalManager now sends a clear signal
  • CTRL/CMD-clicking a GuiRolloutCtrl's header now instant-collapses all sibling GuiRolloutCtrl's
  • Datablocks can now also be created by double-clicking on the class name in Datablock Editor type list
  • Name prompt showing when creating a new datablock in the Datablock Editor now selects default text for easy overwriting
  • Improved BasicSceneObjectLightingPlugin list memory management
  • Made changes to the pureLIGHT demo levels to make them look better
  • Added more Mac friendly menu shortcuts to the World Editor
  • The World Editor now supports a new object info HUD display format: "name|internal" (this will display the object's internal name if a sim name is not defined)
  • Improved lighting and shadows in Warrior Camp
  • Removed some superfluous includes of old resManager.h
  • Collada loader now removes empty meshes and objects from loaded Collada models (can happen when a mesh contains unsupported collada geometry elements like <line>)
  • Removed unused DebugDrawPass method for rendering debug draws (debug draws are drawn in GuiTSCtrl)
  • Added an "invert" parameter to the SceneState constructor which be used to invert the frustum/culling on any pass (no more assumptions based on scene pass type)
  • Added a "nearPlaneWorld" shader variable for future use
  • Changed iteration of RenderPassManager bins to Vector::const_iterator based iteration
  • Gbuffer supports 128-bit render targets now for debugging
  • Exposed the GuiCanvas resize event as a script callback (http://www.garagegames.com/community/resources/view/17961  )
  • Changed sampling type on point light shadows to POINT instead of LINEAR
  • fxFoliageReplicator can now render (optionally) as a "true billboard" (it faces the camera in all axes instead of its normal x and y only facing)
  • String now does most of its initialization in its constructors instead of in operator new()
  • LightingShaderConstants now default initializes all of its member variables to NULL
  • Renamed the ShapeBaseImageData field from lightTime to lightDuration and corrected all references
  • Corrected ProjectileData definitions ( across several projects ) to use the lightDesc field
  • LightDescription field "radius" renamed to "range" to reflect the same change done in LightInfo
  • Removed the unused GuiMLTextCtrl::mMinSensibleWidth
  • Renamed GFXShaderConstHandle type members to consistently use the "SC" suffix
  • Added the capability to add and remove decals from script
  • When the Collada loader is generating materials.cs for Collada models it now replaces spaces in names with underscores
  • The Collada loader now warns about, but does not modify, potentially bad collada bind_shape_matrix elements
  • The World Editor's Scene tree view now displays the item's text as a tool tip if the text is cut off (this allows for the viewing of long class and object names without having to widen the tree view)
  • Decal Editor supports specifying the uvs for multiple decals in a sheet via rows and columns
  • Renamed Portal to "Zone Portal" in the World Editor to better indicate its dependency and relationship with Zones
  • New SSAO technique that should perform much better ( still some work to be done )
  • FMOD headers updated to version 4.26 (fixes FMOD errors with recent DLLs)
  • GuiMusicPlayer had some cosmetic changes

Fixes

  • Fixed broken Multiplayer (http://www.garagegames.com/community/forums/viewthread/97313  )
  • The Terrain Editor and Painter properly detach from the previous TerrainBlock when switching levels
  • Fixed a crash caused by an invalid index when loading the Terrain Editor via a commandline argument
  • SFX now preserves playback state when switching devices
  • Added some protection against overlapping fade effects
  • Added missing distance models to the OpenAL headers
  • ShaderGenComponentFactoryHLSL now passes nonstandard semantics as TEXCOORDs
  • Fixed TerrainFile to again encode empty squares into the grid for collision
  • Fixed mesh order getting messed up when using TSShapeConstructor::setMeshSize()
  • Changed Terrain Import and CreateNewTerrain gui to correctly add the new terrain to the world (dirty the World Editor, add to Scene Tree)
  • Fixed an intermittent NULL ptr dereference bug when deleting TerrainBlock's
  • Fixed Terrain render bugs/crash when importing terrain with an incomplete material list
  • Threading queue nodes pending updates now release their resources when expected
  • Fixed a texture/uv offset issue in the DoF PostEffect
  • The shape bounds is now calculated correctly for Collada models with multiple detail levels
  • Fixed the name of the pureLIGHT torsion file
  • Resolved double-delete of normalizeCube in Material::onRemove()
  • Removed MaterialList::unload(), which could cause double-destruction of held GFXTexHandles
  • Sizing and centering windows in Win32 now properly handles a working area and/or client extent smaller than the requested resolution size
  • Win32 window sizing code properly gets the size of the monitor that the window is on rather than always getting the size of the primary monitor
  • EditTSCtrl now skips the onEditorRender() script callback for objects that have rendering disabled in their class
  • The Null SFX device does not trigger buffer streaming anymore
  • Moving and SFXSource from paused to stopped works again
  • Fixed a bug in GenericTimeSource::setPosition() that was forcing the timer into paused state (also affected virtual SFXSource playback)
  • GuiTextEditCtrl::drawText() properly validate characters before calling getCharWidth()
  • GuiSliderCtrl no longer stomps the slider value in onWake() if the slider isn't bound to a console variable
  • Multiple selections in the GUI Editor tree are now added to the selection set of GuiEditCtrl
  • Added code to prevent a GuiControl from getting added to selection set multiple times in GuiEditCtrl::addSelection()
  • Fixed an issue with VS2005 and nameless structs
  • dStrcmp no longer returns an erroneous result when comparing an empty string against any other string
  • Fixed an issue in the Datablock Editor where it wasn't parenting the datablocks to their types in the tree and it was instead showing them all in one big list
  • Fixed render order for the DoF PostEffect to include all transparent objects (except Particles)
  • Fixed some comparisons with const char* against "" which were incorrectly using == or != instead of dStrcmp
  • Fixed a possible buffer overflow in TypeStringFilename
  • The Sun now properly removes itself from the TimeOfDay update signal in onRemove() (http://www.garagegames.com/community/forums/viewthread/97337  )
  • Fixed a bogus assert in TsShapeContruct
  • Fully removed the old TGE Crossbow
  • Fixed a crash bug in LightFlareData
  • PostEffect now properly dirties its EffectConsts when the shader is reloaded
  • Triggers and PhysicalZones now properly call Parent::postInspectApply()
  • Mac PopupMenu code now releases CFStrings correctly
  • GuiEditCtrl.setRoot() renamed to setContentControl() ("root" already has a different meaning for GuiControls)
  • GuiTreeViewCtrl::buildIconTable() properly tokenizes icon list and allows for empty fields
  • Fixed a copy/paste issue in the SpecualMapGLSL ShaderGen feature
  • Fixed the Shape Editor so that the controls will correctly reposition when changing width of of the Shape Editor properties window
  • Reset the hover and selected node indices in the Shape Editor Preview window to prevent out-of-range access when switching models with different number of nodes
  • Changed behavior behind CodeBlock::exec() so that if the requested stack frame doesn't exist, a new one is created
  • Fixed the World Editor so that the active Editor Mode is maintained if a Plugin failed to activate
  • Fixed an endian conversion issue in SFXWavStream (thanks Xavier!)
  • Fixed the lookup of AbstractClassReps to be case-insensitive
  • Fixed GuiSolidDefaultProfile to work properly again
  • Fixed an infinite recursion state between GFXGLDevice::_updateRenderTargets() and GFXDevice::updateStates()
  • Fixed bug where HLSL shader comp was ignoring element index
  • Fixed a crash if the format is uninitialized in LinearEyeDepthConditioner
  • Fixed the GUI control palette in the GUI Editor to not intialize scratch on every wake
  • Replaced references to the "first" window with the proper references to the "focus" window
  • Modified a bunch of GUI files to correctly load in GUI Editor
  • Fixed the scrolling set up in the GUI Editor when toggling in and out with oversized content already scrolled from top
  • Fixed GuiFileTreeCtrl to match any file when the filter list is empty
  • Adding GuiWindowCollapseCtrl through the Gui Editor no longer causes a crash
  • Undo/redo will stay enabled even when nothing is selected in the GUI Editor
  • TerrainCell now gets correct normals in empty squares
  • Fixed flickering of light flares at a distance
  • Parallax now works properly with tangentW change and with texture rotation animations (moved parallax offset function to torque.hlsl)
  • GuiWindowCollapseCtrl now correctly collapses when the World Editor first starts up
  • GuiTextEditCtrl in numbers only mode now accepts a minus sign when all of the text is selected
  • Play Game button of GUI Editor now says "Play Game" in the tooltip
  • Moving controls in the GUI Editor now properly preserves control hierarchies
  • Fixed the GroundPlane's binormal (parallax and normal maps now work correctly)
  • Fixed visual glitch for certain progress values when rendering the progress bitmap (reversed progress)
  • Emissive materials are now checked to see if all layers are emissive, instead of if any layers are emissive (http://www.garagegames.com/community/forums/viewthread/97833  )
  • GuiInspector::clearGroups() now triggers updatePanes()
  • Fixed the NightCubemap artwork and material name Templates/Full
  • Removed the use of scaled validators in projectile.cpp/h and funneled them via a protected field set/get to do the conversion so the user can edit the value as best as possible (this which vastly improves the real-time editing experience for Projectile datablocks)
  • Fixed cases where non-pointers were being passed to delete
  • Resolved an ambiguous call to dStrrchr() in the old ResourceManager
  • Fixed a crash when loading a mesh containing a billboard detail level
  • WaterObject ripple, foam, and cubemap textures will now be set on the correct registers in GLSL shaders (added MaterialParameterHandle::getSamplerRegister( U32 pass ))
  • PostEffect::_setupTarget() now properly resizes named targets when the window size changes
  • enumerateConsoleClasses() does not return first class found twice anymore
  • Save-disabled (canSave=false) GuiControl's and those with save-disabled parent controls can now be copied to GUI Editor clipboard
  • Fixed some bad assert logic in ShaderData::getSamplerName()
  • Dual Paraboloid shadow maps now sample properly from pointLightP
  • Cubemap shadows properly render
  • PostEffect's now getting transforms set per-frame
  • Solved the case where detail texturing is lost when using more than 4-5 detail textures on terrain (we now lerp blend the additional diffuse passes as well to keep from clearing the previous ones) (http://www.garagegames.com/community/forums/viewthread/95415  )
  • Potential ghosting crash in TerrainEditor::getClientTerrain() resolved by using NetObject method for retrieving the client object (http://www.garagegames.com/community/forums/viewthread/97733  )
  • ReflectPlane no longer creates/destroys a render target once per frame
  • Particle Emitter no longer rebuilds for non-diffuse render passes
  • Remedied a GuiSliderCtrl bug that caused the mouse to keep control of the thumb even after an onMouseUp() function call
  • Protected GFXCardProfiler::loadProfileScript() against buffer overflows
  • Errors during DirectSound device initialization are now properly handled
  • SFXStreams are now consistently using ThreadSafeRefs to ensure proper memory management
  • Shape Editor will use the current World Editor selection as the initial shape
  • Enabled doubleSided on AL_DefaultShadowMaterial so that we don't leak light through the side of terrain at sunset/rise (http://www.garagegames.com/community/forums/viewthread/94683  )
  • SFXProfiles default to AudioSim SFXDescription if none is set (http://www.garagegames.com/community/forums/viewthread/98119  )
  • GuiRolloutCtrls can now be saved (http://www.garagegames.com/community/forums/viewthread/98085  )
  • Fixed a memory overrun caused by out of order delete in Con::getFormattedData()
  • Fixed a crash in Con::getFormattedData() when it was trying to format datablock types
  • GuiInspectGroup::inspectGroup() now correctly allocates buffers for array field names
  • Made the asserts in dSprintf and dVsprintf more accurate and useful
  • Cleared up warings in GuiEditCtrl
  • Fixed and simplified depth packing shader code
  • FPS Genre Kit - RocketLauncherExplosion and VehicleExplosion no longer exceeds valid light radius values
  • Fixed issue with Player failing to render when in third person and crossing Zone/Portal boundaries
  • LightBase was not a console object, so the ConsoleMethods for light animations were not being exposed
  • Removed unused modelview matrix passed to SceneState
  • Zoned scene states which required a flipped frustum are now being properly created in SceneTraversal
  • Dual Paraboloid shadow maps (both single pass, and regular) are now functional
  • Terrain now checks to see if it can open its cache file before converting bitmap->DDS
  • Fixed the ShapeBase::pointInWater() test
  • "windSpeed" on a CloudLayer now properly affects the texture scrolling speed
  • Changing "windSpeed" or other texture scrolling properties on CloudLayer will no longer cause the visible texture to "jerk"
  • Fix some issues with Collada transforms and up_axis conversion
  • Collada loader now handles negative <scale> elements (ie. mesh mirroring)
  • Fix ColladaAppSequence::getName() method not overriding base virtual method
  • FPS Genre Kit - GuiShapeNameHud is no longer off-center
  • Weapon lights now work properly when the same ShapeBaseImageData is equipped on more than one onscreen Player (http://www.garagegames.com/community/forums/viewthread/94913  )
  • Fixed some uninitialized members in GuiMLTextCtrl, PostEffect, and ShapeBase
  • WaterObject now properly sets its texCUBE sampler to NULL in all cases when it is not using it (http://www.garagegames.com/community/forums/viewthread/97555/1#comment-658209  )
  • World Editor Transform Selection window now deals correctly with selected SimGroups (and other non-SceneObject's)
  • You may now delete a selection in the World Editor even if one or more of the selected objects is locked (the locked objects remain unaffected)
  • Calling ShapeBase::getMass() will now return the datablock specified mass + MountedImage mass (as was intended)
  • Fixed vertex size allocation issue in TSMesh (http://www.garagegames.com/community/forums/viewthread/98109  )
  • World Editor drag selection now works if you start the drag with the mouse on an object (http://www.garagegames.com/community/forums/viewthread/90357  )
  • Depth encoding should now work without striations
  • Hackfix for both the no lighting on flat surfaces issue as well as lighting artifacts on GeForce 8800's (http://www.garagegames.com/community/forums/viewthread/95603/1#comment-658459  )
  • Shape Editor now has lighting in its preview window when using Basic Lighting
  • Changed TerrainParallaxMapFeatHLSL to use torque.hlsl util function like ParallaxFeatHLSL
  • Datablock Editor windows should correctly resize windows when opening up with 800x600 resolution
  • Fixed a crash bug when switching to Basic Lighting for the second time in a session
  • Removed old sun animation key binds from FPS Genre Kit
  • Sounds no longer incorrectly inherit pitch settings under DirectSound
  • Driver enabled MSAA will not corrupt Advanced Lighting
  • Disabled SSAO by default... still work to be done.
  • fix for possible thread hang at exit
  • ArrayObject.setValue() and ArrayObject.setKey() now correctly parse their index argument
  • removed the group "AdvCoordManipulation" out of the inspector.
  • DecalData column and row/direct coordinate check should work now.
  • Decals properly using rows and columns should display all idx's correctly.
  • More accurate system spec detection on Mac (thanks Sean! http://www.garagegames.com/community/forums/viewthread/81815 )
  • The Material Preview should be able to properly render a lit preview object when in basic lighting mode.
  • Decal Road Editor should no longer try to grab node rotation values.
  • Sanity check EditorIconRegistry's search for images. If the source object is no longer valid; return the default image.

Known Issues

  • 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 2 dynamic light instead of 4 (unless you use OS X 10.5.8)
  • Changing Cubemap's on a Material will occasionally cause a crash
  • Specular is incorrect when using dynamic lights in Basic Lighting
  • 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)
  • No PhysX support on the Mac (we are in touch with nVidia)
  • Mac web deployment isn't fully finished (disabled for now)
  • Can not enable Glow on transparent objects
  • SSAO PostEffect still needs further refinement
  • There are still some ATI related rendering issues
  • Basic Lighting doesn't support spotlights (it may never)
  • 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
  • Terrain Editor is currently missing the equivalent of the "Set Height"
  • Terrain Painter will wrap the painting the edge of a terrain block to the opposite end of the terrain
  • Can not delete Terrain layers in the Terrain Painter
  • Can not sort Terrain layers in the Terrain Painter
  • Side Projection doesn't work correctly on the TerrainMaterial's
  • Comments in the Torque Toolbox don't update immediately
  • Crashes on exiting levels on Macs
  • Toolbox Comments doesn't update the most recent comment until you select another and select back
  • Toolbox Comments Editor preview box doesn't update properly

About the author

Was a GG Associate and then joined GG in 2005. Lead tool dev for T2D and T3D. In 2011 joined mobile company ngmoco/DeNA and spent about 4 years working game and server tech. 2014 joined startup Merigo Games developing server technology.


#1
08/10/2009 (5:11 pm)
wow
#2
08/10/2009 (6:53 pm)
Glad to see the updates, thanks GG for the efforts on these.

Quote:Glow Post Effect in Basic Ligthing

How about the other post effect? in previous release, Glow depends on PrepassBuffer which is only opend for Advance Lighting, now it could also be accessed by Basic Lighting?
#3
08/10/2009 (7:08 pm)
You guys almost snuck that by me! I checked right before this was posted.

Thanks for the update :)
#4
08/10/2009 (7:41 pm)
Quote:No PhysX support on the Mac (we are in touch with nVidia)
It would be awesome if Mac got PhysX support as a result of your efforts. Great going GG, whether or not PhysX ever works on Mac.
#5
08/10/2009 (7:56 pm)
Dang :/ Again time to hit the code! Hit it hard and hit it long.
#6
08/11/2009 (3:01 am)
Awesome!
#7
08/11/2009 (3:14 am)
Quote:Dang :/ Again time to hit the code! Hit it hard and hit it long.
see avatar for details...
#8
08/11/2009 (4:48 am)
That is a freaking long list of changes. Go Team!
#9
08/11/2009 (11:11 am)
Excellent.. GG GG!
#10
08/11/2009 (6:08 pm)
You mention that it's clamped to 2 lights on Mac instead of 4 (unless on 10.5.8) - does this mean if I run on 10.5.8 it will automatically jump to 4 (I'm assuming no as Undercity's lighting is still COMPLETELY whacked-out), or is there somewhere in the code I can make the change to enable all 4 lights since I am running on 10.5.8 on my machine...


--

edit:
Looks like a simple define in the lighting.glsl shader...
Setting that to 4 made it LESS whacked, but still breaks a good bit - to be honest I'm not sure if it's possible to work properly in that level as the sheer number of lights is insane...
This would be an example of a level not being made for Basic Lighting I guess :)
#11
08/20/2009 (7:42 am)
I have an observation on Terrains, and didnt really feel it was neccesary to create another thread (so sorry for the hijack). Why with the terrain editor, are we limited to a max size of 50, for the brush? and why, do the Lower & Raise tools, only do it by 2 units?

Could we have more flexibility?
It would be ideal if we could, set how much we want to lower & raise terrains by.

It would also be ideal if the max unit size was something like 500, is their an engine limitation that stops us having anything bigger than 50?
#12
09/10/2009 (4:26 am)
Maybe this isn’t the correct area but I have a small improvement idea, utilising the back mouse button on the side of the mouse when moving around in your editor when browsing meshes/level etc.

eg: If I browse for a model in the Library > Meshes >Art>Shapes> model1 and want to select another model having the ability to using the back /sidemouse button to move back up a level to the Meshes parent would be ideal as an extra to the small side button you have provided. Cheers