Release: HeroEngine 2.5
Internal Branch Versions
- Quartz: 2.5.13381
- Quartz.a: 2.5.13781
- Quartz.b: 2.5.13838
- Quartz.c: 2.5.13888
- Quartz.d: 2.5.17365
- Quartz.e: 2.5.17601
Release Dates: March 2014 - Present
Quartz is a major inter-release update to HeroEngine Sapphire. This release includes a number of major feature, functionality, and performance changes and improvements.
This page contains information and links on new features, changes, and fixes in the current HeroEngine 2.5 Quartz.d or later release. Information on prior releases can be found at HeroEngine Quartz (Older Revisions).
Obtaining the Release
- Source or object licensees contact your support list
- HeroCloud users please check the [forum] for additional information
Supported Operating Systems
Windows Vista is now the minimum supported client operating system. 64-bit (x64) versions of Windows 8.1 or Windows 10 are recommended.
In a future, major release, HeroEngine clients will require a 64-bit (x64) client operating system. This will increase client performance, and allow the client to access and utilize more memory than the current 32 bit (x86) executable client.
The HeroEngine Art Pipeline 2015.1 requires a 64-bit (x64) operating system.
Major Feature Summary
The following is a list of major features expected to be included in this release and is not a guarantee of the availability of the feature in the final release.
- New: DOM Editor 2.0
- New: LOD System 2.0
- New: Repository Browser 3.0
- New: HeroScript Editor 3.0
- New: FMOD Studio with support for FMOD Studio Projects, WAV, MP3, and XMA audio files
DirectMusic has been removed. This should not be an issue, as only the legacy Hero's Journey Reference worlds were using this legacy API. A discussion of how Hero's Journey was updated from DirectMusic to FMOD Studio can be found on the FMOD Studio page.
If you are starting a new project, or have not started audio work on an existing project, we recommend using the new FMOD Studio, instead of the older FMOD Ex which has been discontinued by FMOD developer Firelight.
FMOD Studio not only supports project-based files, but also supports a full-range of options for WAV, MP3, and XMA audio files as well.
Please note that the HeroEngine Art Pipeline 2015.1 requires a 64-bit (x64) operating system.
- New: FMOD Studio 1.05.14
- Updated: granny 18.104.22.168
- Updated: FMOD Ex 4.44.39
- Updated: Freetype 2.5.3
- Updated: Cryptopp 5.6.2
- Updated: SQLite 3.8.6
- Updated: boost 1.55.0
- Requires: Microsoft Visual Studio 2013
- Replaced: STLport with Microsoft / Dinkum STL
- Replaced: Syncfusion with portable C#
- Replaced: DirectMusic with FMOD Studio
- This release will utilize portions of our new deployment and installation infrastructure updates, changes to which reflect our ongoing work to move to a more modern installation experience which will ultimately include support for torrent-based downloads, developer initiated deployment and differential content patches.
All client and server GUI's are now localizable.
Updated Korean language strings strings are included in the release.
Breaking GUI Editor / GUI XML Changes
Some existing GUI XML files may have been missing texture coordinates, or may have had incorrect texture coordinates for some textures. This is seen as incorrect rendering of textured GUI elements in the new release. Opening the affected GUI in the GUI Editor, fixing the texture coordinates, and re-saving will fix the problem.
Some existing GUI controls may have been rendered without the correct textureFilter setting taken into account. A GUI control with a crisp and sharp texture should have the textureFilter set to FALSE. Setting textureFilter to TRUE will cause the GUI control with a texture to linearly filter the texture which can be used to remove jaggy lines from images used in the GUI.
HeroScript Language (HSL), DOM, Database, and Foundation Framework
- external function GetScreenSpacePositionOfHBNode
- Takes in a noderef to a visable HBNode from the world and returns the 2d screen space location.
- external function GetScreenSpacePositionOfGUINode
- Replaces GetScreenSpacePosition which returns the screen space postion of a GUI control. GetScreenSpacePosition still exisit for legacy code. Documentation has been updated to reflect this.
- This is a list of stats with the name of the stat being array and the value of the stat being array. This lists basic statistics about an area server process such as node count.
- external function FMODStudioListEventPaths
- external function FMODStudioListBanksUsed
- external function FMODStudioGetEventParameter
- external function FMODStudioSetEventParameter
- external function FMODStudioListEventParameters
- Area Server function "ListServerStatistics() as list of array of string"
- bool AudioSetListenerToActiveCharacter();
- by default, the audio listener / ear is attached to the camera. this function allows you to move the listener to the active character. if the active character changes, the listener will automatically change to the new character as well
- external function bool AudioSetListenerToNode(Node node)
- by default, the audio listener / ear is attached to the camera. this function allows you to move the listener to an arbitrary node.
- external function bool AudioSetListenerToActiveCamera()
- by default, the audio listener / ear is attached to the camera. if it has been changed to the active character or an arbitrary node, this will set it back to the active camera.
- This function will 1) unload a root node if present, and 2) clear all root node tracker references to node, even if not present
- vector3 GetNodeUpVector(Node node)
- returns the post world transform up vector for the node
- vector3 GetNodeForwardVector(Node node)
- returns the post world transform forward vector for the node
GetGraphicsOptionValue / SetGraphicsOptionValue Changes
- New options to support limiting max texture sizes
- MaxTextureSizeMesh: default 0 (no limit). valid values: [512,unlimited)
- MaxTextureSizeHeightMap: default 0 (no limit). valid values: [512,unlimited)
- MaxTextureSizeEnvironment: default 0 (no limit). valid values: [512,unlimited)
- MaxTextureSizeEffects: default 0 (no limit). valid values: [512,unlimited)
- MaxTextureSizeSpeedtree: default 0 (no limit). valid values: [512,unlimited)
- new: MaxShadowCasterDistance.
- Maximum distance (in meters) that a shadow caster will cast a shadow. This global setting overrides any other per instance node shadow casting values.
- Default: -1 (disabled).
- Valid ranges: disabled (-MAX_FLOAT, +1). enabled [1, MAX_FLOAT).
- The distance to the shadow caster is calculated as the distance from the active camera view to the edge of the bounding radius of the shadow caster
Audio / Sound External Function Changes
More information on these functions can be found on the Sound functions page.
For completeness, FMOD Ex versions of these functions have also been created. However, please keep in mind that their functionality is very limited compared to what's available through FMOD Studio.
Enhancements & Corrections
- change: external function 'ListRoutines' now returns a list of string instead of a lookuplist indexed by string of list of string
- change: external function AngleBetween( v1 as vector3, v2 as vector3) as vector3
Returns: X = Pitch, Y = Heading, Z = 0, in degrees. Z is hardcoded to 0 as this function only builds a heading vector, and doesn’t have an up vector to use to calculate the roll. Previous documentation indicated that this function returned a valid Z/roll value, which is not correct
Quartz.E Enhancements & Corrections
- fix: HSL external function StopSound could crash due to invalid data
- fix: bug in HSL compiler which caused PARTIALMATCH to be incorrectly interpreted and potentially fail
HeroBlade Editor and Player Client
- new: HeroScript Editor 3.0
- new: FMOD Studio with support for FMOD Studio Projects, WAV, MP3, and XMA audio files
- new: LOD System 2.0
- new: DOM Editor 2.0
- new: support for meshes with more than 64k vertices. in debug mode, a performance warning is issued to output
- new: support for limiting the maximum size of mesh, heightmap, environment, effect, or speedtree textures. default: load all Mip levels, don’t reduce single levels
- new: generalized tooltip localization support
- new: form manager saves and restores positions and sizes of all moveable dialogs. values are stored in the registry at HKCU/Software/HeroEngine/Windows/...
- new:The Console and script error panels now have right-click menu options to turn storing of duplicate bugs off.
- new: The Console and Script Error panels right-click menu clear options also clear out the stored duplicate bug history.
- new: models, meshes, skeletons, and animations are now supported by an abstract interface, the HeroEngine Mesh Plugin system
- new: IsLocalRepositoryAuthoratative config value
- new: fmod studio output/ error/ logging is now tied into client logging and will output to HeroBlade UI console or error windows as appropriate
- new: if a user attempts to create a HeroScript file with a leading underscore, they are warned that this naming convention is reserved for clean engine scripts, and that if they really want to do this, the file may be replaced or deleted by a future heroengine update
- new: dom editor automatically selects a new datatype definition after it is created
- new: in the heroscript editor, important information either appeared only as transient message boxes or status updates. the heroscript editor now has a console message window which also displays important status or message box information (that is still displayed via those other methods)
- new: in heroscript editor, all bookmarks are automatically persisted
- new: heroscript editor now lists the 10 most recently loaded files under the file -> “recent files” menu option
- new: heroscript editor can now save and reload all the currently open scripts using the file menu options “save file group” and “load file group”. the 10 most recently loaded groups are listed under file -> “recent groups”
- new: heroscript history window now allows you to view an older version of a script, and to compare two existing revisions
- new: heroscript history window completely rewritten. new buttons to view, diff revision vs current, and diff two revisions. comments are displayed at the bottom for the selected file
- new: login UI now allows list of worlds to be sorted by clicking on the column headers
- new: so that they are better seen and acted on by the user, validation-related informational, warning, and error messages are being converted over to pop-up messages, in addition to just a console or error window message
Quartz.E New Features
- new: material instance overrides: no illumination, no fog, ambient only, full glow, glow color, modulation, glow intensity multiplier
- new: dom editor filter terms are propagated on tab change if the old tab has a filter term, and the new tab does not
- new: dom editor uses a splitter between the datatype definition list and the display / editing in order to provide more flexibility in space usage
- new: per material shader glow intensity multiplier, and glow color modulator
- new: material instance ui has options to display texture thumbnails as rgba, rgb-only (no alpha), or alpha channel only
- new: although not exposed through the UI yet, now that glow mask and full glow are exposed through shader effect flags, any shader can use them in order to support either effect
- change: decrease frame limiter from 8 ms / frame, 125 fps to 7 ms / frame, 142 fps. since the old value was near 120 hz (LCD fullscreen refresh, or 2x tube / old refresh), you'd often come in right below it halving your frame rate. this allows the extra headroom to consistently hit the refresh rate if you're otherwise able
- Change: Oversized mesh nodes will only issue physics warnings if the object is set to have physics
- change: portable spline solution for path follower nodes
- change: File Browser UI: if you click select an image, it stays selected until you click off of it or change directories. this means no longer trying to remember what the image looked like since you can make it “stick” until you unstick it
- change: independent DLL’s for frustum culling and DPVS integration have been integrated directly into the client itself
- change: DOM Confirm Command is now a Yes/No/Cancel dialog
- yes: confirms the command and executes it, discards pending state that was submitted
- no: clears the modified datatype definition detail and discards pending state
- cancel: returns user to edit the datatype definition detail with state intact
- change: increased max single-threaded client frame rate (167 hz) in order to accommodate gsync 144 hz refresh rate
- change: removed (hid) Dream Manager user enabled checkbox since it’s not currently relevant
- change: repository file dialog (fsselector) now uses a button for the “heroengine path” or other alternate path, instead of a checkbox. this simplifies the usability, and fixes a number of defects
- change: removed the Degree option from the Spline properties of the pathfollower; now we just do the right thing
- change: you are now informed if you open a local copy of a server HeroScript file, and the version of the file the local copy is based on
- change: in the heroscript editor, find & replace informational messages are now displayed in the status bar, instead of always popping up message boxes - like a modern IDE
- change: in heroscript editor, the “close all” and “close all except active” menu options have been moved to the windows menu
- change: remove unused “glow” settings from environment schemes.
- change: a number of tabbed containers including panel docking, heroscript editor, asset library, and others now display tabs in multiple rows if there are too many to fit on a single line
- change: added usability message to terrain brush pattern texture selection to indicate that it's only enabled when the brush is set to perlin or texture
- change: as heightmap sizes larger than 64 are non-optimal for culling, seamless, and other performance reasons, the user is warned and prompted to continue if they attempt to use a value greater than 64
- change: there’s no reason not to allow heightmap regridding / merging down to 2 (instead of 8)
- change: since we recommend below max 64 heightmap regrid, default is now 32 (instead of 64)
- change: minor reorganization of the dom editor to place “read only”, refresh, and “confirm changes” together in a more logical grouping instead of being scattered around the ui
- change: removed global texture filter setting. all heightmap and mesh rendering will default to anisotropic
- change: texture filtering is now per material
- change: default texture filter (texfilter) to anisotropic (value: 3)
- change: dom editor panels are now dockable
- change/ fix: remove all the duplicate legacy dom architecture, which will improve performance, simplify the code, and address update issues
- change: dom editor read-only mode switch applies to both dom’s instead of just one
- change: dom editor class field allows user to enter field name and validate against list, instead of just picking from list
- fix: a number of uninitialized variables in camera node could cause incorrect behaviors
- fix: rain would either render correctly, or not render at all, or render with artifacts and then render correctly, based on an uninitialized variable that was never set to anything
- fix: shadows for a given mesh would either render correctly, or not render at all, or render with artifacts and then render correctly, based on an uninitialized variable that was never set to anything
- fix: random materials would either render correctly, or not render at all, or render with artifacts and then render correctly, based on an uninitialized variable that was never set to anything
- fix: uninitialized environment scheme data which could lead to incorrect results
- fix: EnviroSchemeWrapper data, including fog and wind, might not be set correctly. this could cause rendering artifacts or inconsistencies
- fix: under some cases, clouds might not have the correct blend weight
- fix: uninitialized variables in UI system that could lead to incorrect rendering
- fix: uninitialized variables in particle node that could lead to incorrect rendering
- fix: uninitialized variables in character node that could lead to incorrect rendering or physics
- fix: change invalid floating point control word error from message box to assertion so it doesn't appear in release builds
- fix: camera node would recompute frustum too frequently since dirty aspect ratio was never cleared
- fix: camera node cached viewport values were not updated on viewport change
- fix: HSL function GetAspectRatio incorrectly called legacy code instead of current camera code, resulting in incorrect values
- fix: concatenated meshes, (e.g.: dynamic detail meshes) were hardcoded to 32 bit index buffer, which would always cause a performance hit. they now allocate 16 bit indices if possible. this could have also caused other problems, as no other code that handled index buffers was 32 bit aware.
- fix: rain was hardcoded to 32 bit index buffer, which would always cause a performance hit
- fix: part of StitchedMeshBuilder understood 32 bit index buffers, and part of it didn’t. this could cause problems with incorrectly interpreting and processing input data
- fix: speedtree billboards were hardcoded to 32 bit index buffer, which would always cause a performance hit
- fix: improved Dream Manager UI parsing of user ID vs user name, and error handling when no Dream Manager server is available (4116)
- fix: invalid DDS texture whose length was less than the size of a valid DDS header (124 bytes) would cause a crash (4215)
- fix: mesh parts were flagged as successfully loaded even if it failed, this could cause errors or crashes later
- fix: Corrects a crash when attempting to remove null replication group reference (4256)
- fix: corrects a crash with replication when attempting to release a node (4100)
- fix: Speedtree asset reloading would cause graphics resource leak
- fix: Speedtree asset spec conflated initialization and graphics device resource allocation. if the device was lost or unable to allocate resources, the spec would never be loaded and the assets never correctly setup or rendered (4266)
- fix: Speedtree geometry loading could crash due to null pointers
- fix: HSE errors double clicked in the task list will go to the error
- fix: UI layout issues due to internationalization
- fix: additional code to make sure that dynamic detail processing list is cleared if heightmap is resized. it appears to already be cleared under all conditions, however, reports of a non-repro-able crash still exist
- fix: File Browser UI: cleanup / fix / simplify file view logic
- fix: File Browser UI: fix column width in list mode
- fix: File Browser UI: initial directory might not always appear “selected” or in the visible portion of the UI, even if its contents were displayed in the file list
- fix: File Browser UI: post-directory selection now correctly interprets arguments instead of relying on hacky flags added to the class. this prevents a number of problems including recursion, flooding requests, and arbitrarily unselecting items
- fix: File Browser UI: selected directory might not always appear “selected” or in the visible portion of the UI, even if its contents were displayed in the file list
- fix: File Browser UI: image preview could get into weird state due to hiding / showing. now, we just clear the image when you’re not over an image
- fix: File Browser UI: image preview is now visible as long as you’ve got an image selected instead of showing and hiding all the time
- fix: File Browser UI: view could be changed programmatically from outside the control, resulting in incorrect state and display
- fix: File Browser UI: directory trees are now always fully displayed, with the correct starting directory selected, even when using world or engine specific paths
- fix: File Browser UI: remove sort menu option as it’s an incomplete subset of what you get just by clicking on the file column headers
- fix: File Browser UI: if you opened a directory that pushed the selected directory offscreen, the list would “pop” upwards pushing the opened directory offscreen.
- fix: if billboard config path UI names aren't set, default UI text to "HeroEngine Path"
- fix: material instance UI texture thumbnail often wouldn’t update when the diffuse map was changed due to multiple issues, including race conditions and string comparison issues
- fix: material instance UI could have problems updating thumbnails because file view returns DOS paths instead of FQN paths
- fix: file browser UI: sometimes directories wouldn’t display all contents if thumbnail view was selected
- fix: change texture manager internal maps from older unordered hash maps to standard ordered hash maps to fix issue finding values
- fix: multiple, conflicting or incorrect C# UI settings in anim ability controls
- fix: vector input UI would recursively pop up error messages due to bad formatting. removed message, fixed error cleanup, added UI help text
- fix: anim ability controls now have minimum size restrictions
- fix: billboard node GUI controls would not render
- fix: simplified billboard rendering logic
- fix: billboard might not render correctly after direct3d 9 device was restored due to incorrect logic
- fix: billboard selection was not seamless-aware
- fix: billboard nodes render with user memory since they only contain 8 vertices. this fixes a big performance issue due to previously having to continually allocate, lock, fill, render, repeat a direct3d buffer. it also allows the billboard to cache unchanging data which reduces the number of operations when an update is required
- fix: prevent re-entry into error logging function (primarily due to long message causing spillover which causes an error message, repeat ad infinitum)
- fix: log system uses buffers from a pool instead of allocating huge buffers on the stack, which could cause a stack overflow
- fix: path panel was using multiple splitters, which is a non-standard UX case that can confuse users. and, it still needed scroll bars at very small sizes
- fix: path panel now has a minimum width so the controls don't get messed up or hidden
- fix: Node::GetTypeName could cause obvious garbage values in UI’s, and in some cases randomly incorrect logic execution due to comparison to a potentially invalid value
- fix: exception due to invalid selected texture index returning null
- fix: dynamic detail pool could leak direct3d resources. this could eventually cause an OOM
- fix: incorrect handling of begin scene return value could continue execution even though direct3d 9 device was not available
- fix: incorrect handling of shader effect annotation return value could cause a null pointer exception
- fix: incorrect handling of locked texture rect return value could cause an exception in particles
- fix: incorrect handling of locked texture rect return value could cause an exception in UI
- fix: under low memory conditions, copying a very large memory block to the clipboard could fail and cause a null pointer exception
- fix: since we don’t support 16 bit windows, removed the deprecated GMEM_DDESHARE from clipboard memory allocation
- fix: potential stack overrun loading heightmap plugins due to very large local variables
- fix: potential stack overrun in HeroBlade log observer
- fix: shader sprintf was benignly incorrect
- fix: mirror node not using scalar deletion
- fix: rain could inadvertently fail due to incorrectly passing HRESULT instead of a BOOL
- fix: rain could cause an exception by incorrectly interpreting the return value of vertex declaration creation
- fix: registry query could fail, leaving uninitialized values in indeterminate state
- fix: billboard particle texture coordinate selection could have been incorrect due to uninitialized data
- fix: HDR reset did not correctly clear star textures. this could lead to artifacts, and also was a reference to invalid data which could lead to a potential memory overwrite or crash
- fix: memory overwrite in physics deform vertex. this could lead to incorrect results
- fix: file delimiter was incorrectly ASCII instead of Unicode, which could cause issues building paths
- fix: if you reload a mesh with an updated material, the material will correctly update instead of giving a redefinition error
- fix: multiple, incorrect math problems causing UI textures to be off by half a texel which would cause artifacts
- fix: due to conflicting render states and data in GUI rendering, a control with a texture could render incorrectly - either compressed and surrounded by garbage, or overly magnified
- fix: removed incorrect display styles from path planning panel
- fix: path planning panel is now shorter and more compact, and has scrollbars if needed
- fix: splash screen color and filtering were incorrect
- fix: flare color was incorrect
- fix: flares did not correctly restore state after rendering. this could potentially cause issues in rendering that takes place after flares
- fix: particle trail color was incorrect
- fix: particle trail texture usage did not ensure correct filtering mode
- fix: particle trails did not correctly restore render states, which could lead to issues in subsequent systems
- fix: GUI is now rendered using shaders instead of legacy fixed function pipeline
- fix: GUI colors were incorrect
- fix: GUI texel / pixel alignment is better
- fix: GUI did not correctly restore render states, which could potentially cause problems in later systems
- fix: GUI would not render correctly with debug Direct3D enabled
- fix: uninitialized pointer in AnimationSequence could cause a crash. other uninitialized data could potentially cause incorrect behavior
- fix: uninitialized data in AnimSeqAbilityRotateBone could potentially cause incorrect behavior
- fix: skeleton crash due to uninitialized variable (4692)
- fix: spot light directional arrow is correctly sorted into the scene
- Fix:Replication groups will reset fields when adding new decodings correcting a crash.
- fix: material compare fails if the type of material is not valid. previously, it could continue leading to erroneous results
- fix: numerous string handling functions could cause incorrect behavior or infinite loops due to data truncation
- fix: flare occlusion didn’t save and restore render state, and either left it dirty or arbitrarily set it to something
- fix: when selected, flares were needlessly rendered twice
- fix: bone trackers are correctly depth sorted into the scene
- fix: input processing can cause additional layers to be pushed onto the input layer list, which could cause a crash due to reallocation
- fix: fmod ex and fmod studio forward vector could be partially garbaged. this could result in incorrect audio spatialization
- fix: uninitialized client globals could cause UI to not render
- fix: potential null pointer exception in custom skeleton validation
- fix: HeSGScene and HeSGSceneDPVS were incorrectly built with multibyte character set instead of unicode. this could cause weird behavior and/ or crashes
- fix: remove unused umbra.dll that was being redistributed
- fix: abandoning a HeroScript change would only update the script, it would not correctly re-request all information including history
- fix: some Organizer GUI operations would lose the icon associated with tree view entry
- fix: logic error in potential SpeedTree loading error due to misinterpretation of “texture promise” vs “actual texture”
- fix: SpeedTree loading could thrash repository requests and kill performance if an asset had a detail map, but no detail texture coordinates
- fix: hair now renders correctly vs dynamic details
- fix: Move to Room menu correctly sizes entries when you have long room names
- fix: Repository file system (FS) selector would end up in a weird state if it couldn’t find the default directory that was requested. If this occurs, it now resets the default directory to the root and re-issues the request
- fix: when the terrain panel dynamic detail mesh list is cleared, the selected indices are also cleared. this prevents an issue where entries appeared to be selected but were not
- fix: bottom portion of terrain panel could be cutoff due to incorrect minimum sizing
- fix: dynamic detail mesh could incorrectly fade to invisible
- fix: dynamic detail mesh distance culling was not correct
- fix: dynamic detail bounding data was incorrectly stored pre-transformed for seamless. this could cause rendering issues when actually crossing a seamless boundary
- fix: dynamic detail mesh UI no longer requires clicking off and back on any pre-populated entries in order to activate the Change button
- fix: dynamic detail recyling didn’t check for validity of dynamic detail node, so it could waste a lot of time processing NULLs
- fix: fixes an issue where an invalid dynamic detail node could end up in potentially visible set calculation
- fix: rewrote major portions of render scene system in order to simplify code, fix bugs (dynamic detail rendering dropouts, light affectors, etc), and improve performance on CPU and GPU
- fix: visual nodes are now correctly tested against lights in order to determine which lights are affectors and which can be ignored
- fix: if fogged particle shader generation failed, execution continued with a null pointer causing a crash
- fix: particle sorting comparator incorrectly used <= instead of <, which could result in data being locally unordered from frame to frame
- fix: billboard particles arbitrarily set state instead of restoring it to previous values, which could cause intermittent rendering artifacts
- fix: PVS callback is broken out from actual rendering step for all nodes
- fix: normals, bi-normals, tangents are now rendered after post-processing so they aren’t affected by HDR or other post-processing
- fix: state is set and restored around normal, bi-normal, and tangent rendering so that it doesn’t potentially effect later rendering
- fix: potential memory overwrite in character deformation due to ill thought out “re-usable” memory buffers that could cause corrupted animations
- fix: skyboxes are no longer included in directional shadow rendering
- fix: checks for duplicate creation of the same texture had been removed at some point
- fix: client textures that are created during execution no longer are inadvertently shared with each other due to naming collision
- fix: client textures that are created during execution with conflicting names are no longer potentially incorrectly destroyed leaving some other system with invalid data or a crash. this would manifest in fonts becoming corrupted after going through a stack that shared the same font
- fix: full glow and mask glow are now completely handled by new code in the light permutation shader
- fix: full glow objects no longer interact with directional lights
- fix: skydomes / skyboxes are now excluded from minimap handling
- fix: conflicting and redundant render states used by dynamic sky code vs shader
- fix: render state review and cleanup. reduced number of state render settings outside renderer by ~50%
- fix: modified renderer debug / visualizer functions to accept more parameters to remove explicit state setting from client
- fix: nodes that are rendered as visualizers (e.g.: lights, emitters, etc) are now rendered after post-processing so they are not affected by HDR, etc
- fix: force disable z-writes is now handled in the renderer instead of the client in order to centralize handling inside the render state system, remove redundant code, and prevent accidental state changes in C++ or fx files
- fix: multiple places that disable z-writes now check and restore the actual setting instead of arbitrarily disabling it
- fix: translucent objects are excluded from shadow casting
- fix: dynamic detail channel placement data is fully cleared when the dynamic detail texture or mesh is removed / deleted. this fixes an issue where dead data hangs around in a partial state, and adding a new texture or mesh to the channel surprises you with mystery placements
- fix: shift-paint deleting a dynamic detail channel correctly cleans up the channel placement data. this fixes an issue with invalid PVS data and/ or crashing
- fix: a seamless area would have multiple skyboxes / skydomes rendering at once - one for each area. now, only the skybox / skydome from the active area is rendered
- fix: rewrote material and dynamic texture bank allocation systems in order to better track them, fix data corruption issues, fix potential crashes, and reduce memory consumption
- fix: dynamic details incorrectly called resolution adjustment twice which would cause dynamic detail density to be incorrect for non-standard resolution heightmaps
- fix: dynamic detail composite weight calculation now short circuits and returns if the inputs are both zero
- fix: switch back to older (slower) dynamic detail random number generator due to stability and distribution issues
- fix: simplified and fixed several logic errors in particle rendering
- fix: if screen resolution changed during initialization, crash could occur due to null weather system pointer
- fix: fullscreen render display mode might not be correctly set
- fix: multiple logic errors in GUI move panel could cause bad coordinates resulting in weird behavior including GUI’s disappearing
- fix: deleting a dream manager story link could cause an exception
- Fix: LoadSystem objects now accuire a mutex to access the list of loaded items preventing a crash when two theads edit the list at the sametime , FogBugz 5177
- fix: if local shader debugging is enabled, changes to non-shader files in the local directory are ignored
- fix: a visual object could end up with the wrong environment map if an environment map had been set for the previous object, and none existed for the current object (which would then be rendered with the previous objects environment map).
- note: that this may cause some objects which were previously rendered “dull” or “darker” to be rendered with a correct “brighter” or “lighter” color
- fix: a node’s environment map reflection % would be incorrect if there was no material current for the node (it would just use whatever previous value had been set)
- fix: clone undo group wasn’t initialized correctly, which could cause a crash
- fix: GUIXML error state reset when GUIXML is initially loaded. this fixes an issue where subsequent HSL scripts couldn’t be edited after an attempt to edit an invalid script
- fix: GUIXML specific error messages are displayed along with the fact that an error has occurred (in addition to being added to the error console output)
- fix: some types of GUIXML errors caused the GUI editor to be uncloseable
- fix: the status bar viewport sizing now exits maximized mode if needed
- fix: we now fake a default value for the color picker so that it's populated with valid data everywhere, and it clears out any previous usage
- fix: dream manager story links now allow you to select the entire row
- fix: terrain panel tab is now correctly spelled “dynamic details”
- fix: login ui was incorrectly resized on load
- fix: repository file dialog (fsselector) now correctly remembers the selected directory - defect due to lack of centralized handling
- fix: repository file dialog (fsselector) now correctly cancels outstanding directory requests in all cases when you change the selected directory
- fix: organizer copy and cut now work with multiple item selection
- fix: repositioning an animation sequence no longer crashes when it's potentially beyond the end of the list
- fix: make sure the new GUI font is valid before we destroy the old one
- fix: if we fail to create the requested font, we drop back to the previous one (or, at least a known default font)
- fix: a bad font would leave a control in an indeterminate state (usually appearing blank)
- fix: The server blocks attempts to add the same organized entry in the same folder/level.
- fix: toggling on path follower visibility can crash HeroBlade
- fix: refactor model reset notification into pre- and post- reset events in order to fix crash due to dynamic update of model with LODs
- fix: invalid / null string(s) passed to HSL external logging function could cause a crash
- fix: added extra error checking to logging system to prevent null data and crashes
- fix: it was possible to edit a clean engine HeroScript file even after cancelling the attempt
- fix: currently selected HeroScript history entry is highlighted
- fix: HeroScript Editor functions and methods window could become stale if it was hidden during an update. it is now always updated when necessary
- fix: heroscript editor find & replace dialog missing caption
- fix: heroscript editor status message foreground color was not correct
- fix: due to the graphite color scheme, certain heroscript status messages output in garish colors were difficult to read
- fix: in heroscript editor, all uses of “mark” are now called “Bookmark”
- fix: repository file selector (fsselector) no longer uses owner-draw code to display the directory tree as this as unnecessary and partially incorrect
- fix: repository file selector (fsselector) directory tree would flicker or otherwise act funky because it was re-sorted each time a file was received. now, we insert directly into the correct sorted order placement in the tree
- fix: repository file selector (fsselector) directory tree is no longer all lowercase as this doesn’t represent the actual capitalization of directories in the repository
- fix: strings logged from heroscript are scrubbed to automatically escape % to %% and \ to \\ in order to correctly output the intended characters instead of incorrectly interpreting them as formatting
- fix: heroscript editor failed to pause its update timer on timer entry, and restart it when completed. this could cause concurrency issues
- fix: repository file browser (fsselector) pump can throw exceptions, which were not handled. that could lead to a crash if they occurred.
- fix: the repository file browser (fsselector) timer wasn't correctly disabled and enabled, which could potentially cause weird behavior due to timer messages stacking up
- fix: CLI Name property no longer stack overflows when accessed.
- fix: previously, if it was determined that the floating point control word was in an invalid state we would throw up a message and crash. now, we tell the user once via messagebox, console, and error windows. this is indicative of a serious low-level operating system issue, e.g.: invalid install due to poor antivirus, invalid motherboard / miniport drivers, invalid system drivers, or the presence of a rootkit
- fix: you are now warned to select a heroscript template before closing the “new script” dialog, instead of afterwards.
- fix: heroscript editor would not prompt you that a script was modified and unsaved when you attempted to close it. cleaned up “close script” logic
- fix: simplified “new script” dialog return logic
- fix: unsupported or non-working features for Fmod Ex and FMod Studio, including: seamless transitions, heroscript integration, prop buckets, and behaviors
- fix: re-organized terrain panel brush/ import page to be more sensible
- fix: material comparison would incorrectly return false when trying to parse non-heromaterial fields. this could cause an erroneous comparison
- fix: add bulletproofing to fix crash attempting to find missing or incorrectly named track mask in skeleton (8578, 8579)
- fix: panels could be updated even if they were not the current, visible panel. this could cause a performance hit
- fix: several crashes due to empty dynamic texture bank material or bank
- fix: lights in the default/ everywhere room now effect all rooms, instead of just the default/ everywhere room
- fix: the shader associated with a material is re-selected after material override changes in order to pick-up any effecting changes
- fix: incorrect logic handling hair shaders would prevent general shader selection logic from working correctly
- fix: material override alpha type handling called the wrong function, which left the material in an indeterminate state
- fix: lights didn’t correctly illuminate meshes due to incorrectly modulating in alpha value as scalar.
- fix: gui control image texturefilter was not setting the correct mip filter when enabled
- fix: crash handling named package groups in dom editor. cleaned up npg definition so it derives from standard dom datatype definition
- fix: class archetype should never be editable after initial creation
- fix: copying a dom class was incorrectly using the source dom for id values
- fix: heroscript editor - opening a file group and thereby closing open scripts could cause an exception and crash
- fix: it was possible for texture filtering to be incorrect
- fix: rewrote material instance string handling to make it more robust
- fix: material instance editor alpha list validation issue
- fix: multiple small bugs with material instance overrides
- fix: lights didn’t correctly illuminate meshes due to incorrectly modulating in alpha value as scalar.
- fix: replaced property panel, undo panel splitter controls with split containers to fix UI issues
- fix: bone rotation regression due to abstracting third party animation system
- fix: make the gui mouse alpha test texture format error more informative
- fix: texels from lit meshes with final alpha values <= 8 are discarded. this prevents some strange lighting issues due to poor / interpolated alpha and/ or other engine options which can push alpha slightly above zero when it should be invisible
- fix: material instance alpha type listbox selection was easily confused
- fix: lod 2.0 broke asset library icon creation due to inadvertently overlapping delimiter set. asset library messages now uses a different delimiter
- fix: dom editor filtering should be faster, removing progress bar
- fix: tab order in dom and dream manager ui's
- fix: sorting a dom datatype grid by clicking on the column headers could cause the listed data to reset
- fix: class archetype defaults to data
- fix: when using a glow mask, the diffuse texture (mask in w channel) is loaded to a separate point sampler. we assume the mask is linear color, and not default gamma corrected color
- fix: glow mask materials fade out at the same rate as other non-alpha materials
- fix: area instance group didn’t correctly initialize multiple data members, potentially leading to incorrect behavior and/ or a crash
- fix: area spec didn’t correctly initialize multiple data members, potentially leading to incorrect behavior and/ or a crash
- fix: effect spec didn’t correctly set last time lighting was updated, so it was possible for lighting to be incorrect for the effect
- fix: gauntlet lightweight node class vars were not correctly initialized, which could cause incorrect behavior or a crash when the node is torn down
- fix: camera had uninitialized variable which could initially cause incorrect panning
- fix: rooms may not have been updated due to uninitialized variable
- fix: mouse over detection for a waypoint node could be incorrect until it was rendered the first time
- fix: heightmap slope limiter rendering could be initially incorrect due to uninitialized variable
- fix: some logging functions didn’t cleanup correctly, which could lead to weird behavior or crashes
- fix: physics dynamics interpolation was passing similar but not identical, underived structure to lerp function. for safety there’s now a separate function to lerp both data structures
- fix: dynamic model skin texture could be incorrect due to uninitialized index value
- fix: dynamic texture layer could be incorrect due to uninitialized index value
- fix: dynamic parts could crash due to invalid iterator
- fix: facegen could cause a crash due to invalid value cast due to signed cast to unsigned
- fix: environment scheme group could get into a weird state due to invalid data
- fix: forcing a key binding would signal it failed even though it succeeded because the success value wasn’t actually returned
- fix: some resource requests could fail because the signed guid (indicating local or remote) was converted to an unsigned value
- fix: server service nodes didn’t correctly initialize their crash indicator flag, which could result in believing it had crashed when it hadn’t
- fix: misc uninitialized variables are now correctly initialized
- fix: misc C++ conformance and performance improvements
- fix: material instance ui specular channel in normal map didn’t always work correctly due to failure to reset effect on change
- fix: material instance ui options are enabled or disabled based on texture(s) being correctly set
- fix: due to multi-pass lighting, some effects such as glow were run for each light instead of once during the ambient environment light pass
- fix: moderately reduced the number of shader effect permutations by moving glow from conditional compiles to flags. this is a potentially big performance improvement due to the smaller number of shaders
- fix: enabled heightmap “vertex color only” on a heightmap with a texture would cause a crash
- fix: multiple systems now set and restore their rendering state to prevent breaking other systems
- fix: render state is explicitly restored after rendering hair
- fix: unneeded legacy stencil setup resulted in bad rendering state
- fix: regular translucent rendering path interfered with not quite so regular dynamic detail node translucent rendering path
- fix: updated physics warning strings to correctly parse HSL node ids
- fix: client side replication destinations can be set correctly though the DOM Editor
- fix: corrected copy to client/server issue when copying dom definitions
- fix: The property panel for editing GUIs and Emitters shows correctly
- fix: Corrected a crash when saving dom editor information
- fix: correct bug with GetScreenSpacePositionOfHBNode
- fix: Field Definitions are listed correctly in the Server DOM Editor
- fix: The DOM Editor now enforces a minimum size before a scroll bar appears to prevent controls from being cut off on lower resolutions.
- fix: corrected an issue with invalid local repository path in loadLocalRepositoryData when loading files from the LRC.
- fix: corrected tab order when creating a dom field.
- fix: The client destination in the Sever DOM Editor for class field replication lists the correct fields.
- fix: the property panel will now get focus after adding a control to a GUI while editing it.
- fix: Corrected bug with glow options when multisampling was turned on.
Quartz.H Corrections and Updates
- New: Copy/Paste works in the server field replication destination inputboxes.
- New: Middle mouse clicking on a tab in the HeroBlade closes that tab.
- New: Copy/Paste works with server class replication destinations.
- Fix: The last item in a DOM tab is no longer cut off along with the scrollbar.
- Fix: Organizer entry descriptions are persisted correctly.
- Fix: Editing field replication destinations recognizes changes more consistently.
- Fix: Clearing the client/server replication destination for a field will allow you remove replication settings for a field.
- Fix: Class replication destinations will persit more reliably.
- Fix: The definition list for the dom editor panel will correctly resize when being filtered.
- Fix: New areas will always be added to the area organizer correctly.
This section includes Player Client specific changes. General client changes are listed above under HeroBlade
- new: Player client 2.0, a C#-based player client wrapper that is simpler to use and easier to maintain than the C++ version (which is still supported)
- new: if client disconnects due to network failure, player client will display an error message (and no longer just exit to desktop without warning)
- new: added 'Register New Account' button in player client
- new: console, error, and state callback are exposed to player clients. C++ player client uses the default implementation. C# player client provides its own implementation
- new: Player client service directory connections are now made asynchronously; the world listing updates in real-time, and users have the option to interrupt the process at any time to log into a world
- new: Added toggle to suppress errors during service directory connection; this is used to prevent superfluous error dialogs and to only generate a fatal error if no service directories can be contacted.
- change: both 'register new account' and 'reset password' may have their default URIs overridden by adding appropriate game.cfg config entries
- change: player client API interface has changed due to parameter datatype cleanup. player clients will require a recompile
- fix: mouse cursor handling was incorrect in both player clients, and was “fixed” in the client engine through incorrect #ifdef’s
- fix: mouse cursor wasn’t correctly set and restored around client connection in either player client
- fix: Service directory connection no longer signals an error if a single connection attempt immediately fails.
Please note there is an implicit 2 GB size limit on uploaded file size, and 4 GB size limit on downloaded file size. In practice, and due to memory addressing limitations, the 32-bit (x86) Repository Browser is limited to maximum upload sizes of approximately 512 MB - 1 GB, and slightly larger maximum download sizes. In a future release, the 64-bit (x64) Repository Browser is able to upload and download the maximum supported file sizes.
- new: form manager saves and restores positions and sizes of all moveable dialogs. values are stored in the registry at HKCU/Software/HeroEngine/Windows/...
- new: Support for connecting to any number of service directories added.
- new: console and error output windows. all information, warning, and error are now output to these windows (in addition to message box on warning or error)
- new: local file context menu option to open Explorer window at that directory
- new: LRC Maintenance is a separate mode from dragging/dropping files between local directories and the repository server. it is enabled by clicking the LRC Maintenance Mode checkbox on the login screen. this mode allows you to add or remove multiple files or directories, or the whole repository, from the LRC using the right click context menus of the server file tree view and file list
- new: clipboard key controls in local file window
- CTRL+C: copy directory path or selected file path to clipboard
- CTRL+V: go to directory file path on clipboard
- new: context menu Upload option for local files and directories (alternative to drag & drop) to selected repository directory. this also acts as a unit test and simplifies testing by programmatically chaining calls to the local file system drag and the repository drop, without additional user intervention
- new: file uploads and downloads can now be cancelled - although, we can only do so much about outstanding files
- new: right click context menu on console, error, and file transfer windows to copy data to the clipboard; or, to clear the data
- new: notes are now displayed on the history / version dialog
- new: all selected file properties are now displayed on the history / version dialog
- new: CTRL+C and CTRL+V copies current repository directory path or selected file path to clipboard as text, or changes the current directory to what’s on the clipboard
- new: repository browser allows you to filter local and remote files by filename and extension. filtering also applies to downloading and LRC population
- change: Clarified wording of failed authentication messages during login to service directory and world.
- change: by default, the Repository Browser will not modify the LRC (it now starts in LRC read-only mode). this allows the user to copy files to/ from the remote repository server as efficiently as possible. Priming the LRC is now handled separately
- change: server label now displays currently selected path
- change: all mapped local drives are now included in the local view
- change: history now includes additional file properties for the current version of the file (with even more info in debug mode)
- change: a number of context menu entries that either duplicate functionality, or whose functionality was broken or no longer relevant, have been removed
- change: a number of partially implemented or unsupported features were removed, including: server MIPmap generation, thumbnail generation, security options, locking, synchronize
- change: lockstep mode has been streamlined as a set of toolstrip buttons
- change: informational messages are logged to the console for all repository (firestorm) layer server interfaces (except uploading or downloading files, which appear in the file transfer window)
- change: removed “cancel” button from replace-file dialog, as “no to all” is the same thing (since files aren’t processed until all replace-file logic has executed)
- change: you can drag & drop files and directories between the following targets
- local window => local window
- local window => remote repository window
- remote repository window => local window
- Windows Explorer => local window
- Windows Explorer => remote repository window
For performance reasons, you cannot drag & drop files from the remote repository window to Windows Explorer. If necessary, drag & drop the files from the remote repository window directly into the local directory in the local directory window.
- fix: some error messages weren’t not specific as to actual problem
- fix: many string comparisons were not wholly correct which could cause logic problems
- fix: if file size integer conversion fails, the file size is now set to zero instead of some potentially random value
- fix: dragging onto the root of the repository would cause an exception attempting to parse the directory path
- fix: directory watcher would throw an exception due to very long paths
- fix: connects once to repository at login, not for every file or information or request. this will reduce traffic and speed up server interactions
- fix: remove extra data copies during file downloading in order to improve performance
- fix: file transfer info display was not wide enough and would incorrectly wrap
- fix: remove old settings and dialog, and replace relevant ones with menu items
- fix: remove Help menu and just move About onto main menu line
- fix: added an extra null file pointer check before writing to local file copy
- fix: exception due to empty local file tree
- fix: exception due to null local directory root
- fix: the file transfer window “k” indicating kilobits was incorrect, as we actually tell you “K” kilobytes
- fix: missing localization on some forms
- fix: a number of data structures were not strongly typed, which could lead to errors due to inadvertently inserting or casting the wrong data type
- fix: the repository list would force select the selected tree node after it was already selected causing extra work
- fix: reading the registry settings could cause an exception due to bad data
- fix: registry settings are now per repository, instead of an odd mix of global and per repository settings
- fix: deleted legacy registry entries
- fix: registry settings could crash if an exception occurred during saving
- fix: scanning a local directory was an O(2n + n^2) operation. it’s now linear
- fix: wait cursors were not correctly set or reset around some long operations
- fix: local hidden and temporary directories are now ignored
- fix: local system, hidden, and temporary files are now ignored
- fix: when restoring a selected local directory, it’s now scrolled into view so it’s always visible
- fix: removed extra re-scan of local selected directory on startup
- fix: adding directories to display from the repository was an O(2n + n^2) operation. it’s now linear
- fix: default column widths in local and repository were not wide enough for average data length
- fix: saved registry settings were loaded too early during initialization, which could cause invalid data
- fix: dragging from the local file view directory tree would re-select the selected directory, even if it was already selected. this caused a bunch of redundant work to be performed
- fix: you couldn’t drag a top level root directory from the local file view to the repository. this would break users who’d done the right thing and mapped a drive to the root of their local asset directory
- fix: dropping files on repository redundantly attempted to determine where the user intended
- fix: pause/ resume file transfer art was wonky
- fix: dragging files to the repository could end up in the incorrect directory due to failure to make the target directory current
- fix: uploading or downloading a directory would cause side-effect directory creation events for every file in a directory, instead of just once
- fix: file item data structure for transfers didn’t initialize all data, nor did it correctly copy all data if using the copy ctor. this could cause whacky problems
- fix: uploading or downloading a directory was > O(n^2) operation due to checking the UI list for every file. this is now linear
- fix: file sizes of zero were passed around, and a GUI listview was used as a fallback to find the value. we now assert on bad file sizes, and force the correct values to be passed
- fix: some file data was missing or potentially out of date, and worse case, looked up in multiple passes over GUI control lists (performance hit). this has been fixed
- fix: it was possible to attempt to copy more or fewer files than believed from local to the repository, and/ or perform unnecessary work, by forcibly rescanning the current directory being copied
- fix: very large file size values could be truncated due to improper data type handling
- fix: data rate calculations could be incorrect due to negative values
- fix: selecting a local or repository directory automatically expands it
- fix: populating list of sub-repositories was O(2n + n^2), it’s now linear
- fix: if you had more than one repository sub-directory with the same name, you could end up with the wrong one
- fix: lockstep mode might not work correctly
- fix: populating repository directories was O(2n + n^2), it’s now linear
- fix: repository file list could end up flashing and being slow since disabling UI updates was inside the update loop instead of wrapping it
- fix: added exception handling around drag & drop into repository
- fix: named package group data was conflated with regular file data, and is now split out separately
- fix: data for deleting or restoring directories was conflated with regular file data, and is now split out separately
- fix: the delegate for viewing / opening a local file was incorrectly added multiple times
- fix: rewrote clipboard handling and drop & drop so there’s not three copies of data in flight using different methods, including our crazy custom clipboard alternative
- fix: file size for asset version history could be incorrect
- fix: removed the local drive file watcher that attempted to detect an update to info that was copied to the clipboard.
- fix: downloading files or priming the LRC no longer has the wasted effort or potential side-effect of creating new server repository directories
- fix: local file tree view target drop code wasn’t correct (now works like the server side)
- fix: history window is now properly sized by default
- fix: use the “deleted” flag to indicate state, instead of relying on font color
- fix: clicking on a repository tree node with a button other than the left mouse button automatically selects and expands it, so you don’t end up in weird “i’m working with this, but something else is actually selected” situations
- fix: add Large Address Aware flag in order to increase the 32 bit address space - and, therefore maximum upload and download sizes (32 bit / x86 only)
- fix: add more exception handling in the unlikely event we can catch a memory failure and recover
- fix: re-ordered file history columns to match regular repository display, and added missing columns
- fix: it was possible that spurious data directories could be created in the root of C:\ on exit due to incorrect cleanup logic
- fix: If you drag a directory to the root of the repo, it actually creates the directory there instead of duplicating the root and then creating the directory under that
- fix: repository view logic for displaying context menu with multiple files selected was incorrect. now, if any selected file is marked as deleted, all the files in the set are treated as deleted in order to eliminate spurious or confusing warnings or errors
- fix: transfers are cleared when changing repositories
- fix: potential exception in repository browser due to attempting to save null repository info to registry if you log into a world you've never logged into and immediately exit
- new: The DOM coordinator will report the type of change that was attempted when a timeout occurs.
- new: configInt for a director process called 'PublishToServiceDirector' that controls if a director publishes its information to service directory.
- New: ConfigInt values to control if the serverscreamer messages are on and if you want them to go to the world chat channel.
- new: seamless and non-seamless travel request timeouts are now configurable via the universe config parameter 'AreaMoveRequestTimeoutInSeconds'
- fix: replace service listing usage of hash_map containers replaced with ordered map containers
- fix: HSL compiler package check could over read its validation array and return incorrect data
- fix: Changed AreaSpinup time out logic to properly call HSL's failure callback '_OnAreaLoadFailed' if an area fails to spinup during a timeout.
- fix: less restrictive forced root node unloading; log an error message rather than script erroring.
- fix: Seamless travel no longer causes player root nodes to hang forever in limbo if the client fails to ready itself before the destination server times out the move request.
- fix: some DOM coordinator variables were not correctly initialized, which could cause a crash
- fix: REQUEST_ROOT_LOAD could cause a world server crash due to bad iterator
- fix: repository server addResourceData didn’t actually null the resource data pointer after freeing the data, which would cause anyone who subsequently tried to use it to get bad data and/ or crash
- fix: live push server shutdown could crash due to dereferencing iterator after it was erased
- fix: bug in HSL compiler which caused PARTIALMATCH to be incorrectly interpreted and potentially fail
- fix: server push api interface correctly resets from database connection failure
Master Control Console
- new: form manager saves and restores positions and sizes of all moveable dialogs. values are stored in the registry at HKCU/Software/HeroEngine/Windows/...
- new: will not let you shutdown or terminate processes named 'FIREUP_DAEMON'
- New: Log to file option in MCC menu. Clicking the button will open a file selector dialog. Clicking the button a second time will stop logging. Files selected will be created or appened to.
- change: menu options and buttons will be locked down based on authorizations.
- Change: MCC now colors shutdown , crashed, and disconnected processes differently so a user can tell easily what world is having issues. Red = crashed/problem with process or subprocess, Grey = all subprocesses shutdown, Violet = disconnected. This also unifies all colors into easy look up tables with priorities for tree views so new states and color changes are easier to add.
- fix: users are now warned if they can not edit configs when attempting to open the edit configs menu
- fix: Clicking edit configs when not authorized does not lock up Master Control Console
- Fix: process list correctly formats scientific notation and has more digits of precision
- new: WorldPush gives more feedback when applying non-area selected changes.