/****************************************************************************
 * Copyright (c) 2025 MAK Technologies, Inc.
 * All rights reserved.
 ****************************************************************************/

/*****************************************************************************/
/**
 **  \page changelog  DI-Guy Changes and Version History
 **
 **  \tableofcontents
 **
 **  \section Version125Data DI-Guy Data History
 **
 **  For an overview of data changes please see release notes:
 *-    - <a href="../../DI-Guy_11_feature_list.pdf">DI-Guy_11_feature_list.pdf</a>
 *-    - <a href="../../DI-Guy_12_feature_list.pdf">DI-Guy_12_feature_list.pdf</a>
 *-    - <a href="../../DI-Guy_125_feature_list.pdf">DI-Guy_125_feature_list.pdf</a>
 *-    - <a href="../../DI-Guy_13.0_Release_Notes.pdf">DI-Guy_13.0_Release_Notes.pdf</a>
 *-    - <a href="../../DI-Guy_13.0.1_Release_Notes.pdf">DI-Guy_13.0.1_Release_Notes.pdf</a>
 *-    - <a href="../../DI-Guy_13.1_Release_Notes.pdf">DI-Guy_13.1_Release_Notes.pdf</a>
 *-    - <a href="../../DI-Guy_13.2_Release_Notes.pdf">DI-Guy_13.2_Release_Notes.pdf</a>
 *-    - <a href="../../DI-Guy_13.4_Release_Notes.pdf">DI-Guy_13.4_Release_Notes.pdf</a>
 *-    - <a href="../../DI-Guy_13.5_Release_Notes.pdf">DI-Guy_13.5_Release_Notes.pdf</a>
 **
 *****************************************************************************
 *****************************************************************************
 *****************************************************************************
 **
 **  \section NewerReleases DI-Guy Newer Releases
 **
 **************************************
 ** \subsection  v137+ DI-Guy Newer Release Notes
 **************************************
 **
 *-   - For the latest changes, please refer to the release notes in the 'doc' folder.
 **
 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version136 DI-Guy Version 13.6
 **
 **************************************
 ** \subsection  v136 DI-Guy 13.6
 **************************************
 **
 *-   - Added FBX model support.
 *-   - Clean up some specular and diffuse issues in sample lighting shaders, (clamp instead of max leading to improper
 *-     overbright handling.)
 *-   - Clean up some missing functionality in action graphs.
 *-   - Modifications to when the link matrix uniform is sent to include more complex hierarchies, data is now in
 *-     the diguyDrawCallData and should be sent when mesh is drawn. There is also diguyGraphicsShape::get_mesh_transform_at_index_for_lod()
 *-     for retained mode renders to cache the transform for each sub mesh that isn't the identity matrix.
 *-   - Improvements to blend shape infrastructure, fbx can support multiple morph targets, support for
 *-     animation and api control of blend shape weights. Shaders now use an SSBO to store blend shapes,
 *-     and a vec4f and vec4i to represent up to 4 active blend shapes, most of the shaders have been
 *-     upgraded to support changes. diguyGraphicsMesh now inclues access to ssbo data diguyGraphicsMesh::get_data_as_blend_shape_verts() and
 *-     diguyGraphicsMesh::get_blend_shape_vertex_buffer_size(). DIGUY_GRAPHICS_VERTEX_FORMAT_V4_N4_T4 Is the format for SSBO data
 *-     Added diguyCharacter::set_blend_shape_weight() for controlling blend shape
 *-   - Arm and rank Patches now support multi-texturing diguyGraphicsState::get_texture_array() added to support access to that data.
 *-     Texture units enums DIGUY_TEXTURE_MAP_TYPE_DECAL_SPECULAR and DIGUY_TEXTURE_MAP_TYPE_DECAL_BUMP added as well.
 *-     diguyTextureUniformPatchLocations added for lookup accessors.
 *-   - Patch control api was revisited, added:
 *-       - diguyCharacter::set_unit_patch_by_name()
 *-       - diguyCharacter::get_unit_patch_name()
 *-       - diguyCharacter::set_personal_unit_patch_by_name()
 *-       - diguyCharacter::get_personal_unit_patch_name()
 *-       - diguyCharacter::set_unit_patch()
 *-       - diguyCharacter::get_unit_patch()
 *-       - diguyCharacter::set_personal_unit_patch()
 *-       - diguyCharacter::get_personal_unit_patch()
 *-       - diguyCharacter::set_rank_patch_by_name()
 *-       - diguyCharacter::get_rank_patch_name()
 *-       - diguyCharacter::set_rank_patch()
 *-       - diguyCharacter::get_rank_patch()
 *-   - diguyGraphicsLink::fill_out_tbo_position_matrix() SIGNATURE has changed to take an LOD parameter, this was needed
 *-     for more complex model support.
 *-   - Added diguyCharacter::get_connection_point_info_at_index() and diguyCharacter::find_connection_point()
 *-     query functions for getting connection point information.
 *-   - add diguyScenario::async_load_appearance() and diguyScenario::async_load_hand_item() adds a new background loader
 *-     for paging in appearances in the background.
 *-   - Improved internal file loading after appearance change requests. Should shorten stall when a number
 *-     of characters change appearances at the same time.
 *-   - Restructured geometry loading code to be runnable in multiple threads.
 *-   - Parenting works better in high precision far from origin databases
 *-   - Fix bug where appearance changes to a parented character could double up their offset.
 *-   - Improved variation system to use seed values, added diguyCharacter::set_texture_variation_seed() to allow multiple
 *-     runs and channels to have identical visuals.
 *-   - Setting the character's position should update the position of child characters as well, should fix a 1
 *-     frame shudder identified in a test case.
 *-   - Fixes to calculation of diguyCharacter::global_to_character_local() when character is parented.
 *-   - Fixes to getting the link position when the character is parented, should no longer return parent link position.
 *-   - IK works better in high precision far from origin databases.
 *-   - Added diguyCharacter::set_ik_target_character() allows targeting another object and having IK system look it up
 *-     every frame.
 *-   - Added the following API files:
 *-       - diguyCharacterTypeMapFieldValues.h
 *-       - diguyActionParameters.h
 *-       - diguyPatchIdentifier.h
 *
 *-   - Added override for diguyCharacter::set_desired_action() and diguyCharacter::force_action() that uses new diguyActionParameters
 *-     struct for options.
 *-   - Added option to set separate action and transition speed (or speed scale) when
 *-     using diguyCharacter::set_desired_action() and diguyCharacter::force_action()
 *
 *-   - Added diguyCharacterTypeMapFieldValues class for specifying type maps.
 *-     for querying for type maps matching a given set of values.
 *-   - Added accessors returning diguyCharacterTypeMapFieldValues to diguyCharacterTypeMap.
 *-   - Added diguyScenario::get_num_matching_type_maps() and diguyScenario::get_matching_type_map_at_index()
 *-   - Added diguyCharacterTypeMap::match_level function to allow for manually performing checks against other type maps.
 *-   - Moved diguyCharacterTypeMapField enumeration to diguy_constants.h
 *-   - OSG demo code now builds against a more modern version of OSG (3.5.6)
 *-   - Added diguyScenario::get_appearance_default_patch_index() and diguyScenario::get_appearance_default_patch_id() for getting the
 *-     index or ID of the default patch for a given appearance.
 *-   - Added display name configuration for actions and diguyScenario::get_character_type_action_display_name() for querying.
 *-   - No longer installqt message handler by default.
 *-   - Fixed some regressions with facefx demo and optional misc blood and grime texture maps,
 *-     diguyGraphicsShape::set_material_parameter_4f() no longer requires preset uniform names.
 **
 ** \subsection  v1360divc DI-Guy Character Viewer
 **
 *-   - Many UI Improvements, left click joint focus, right click context menus.
 *-   - Show/hide shape controls.
 *-   - Appearance editor improvements, more features for editing hand items and heads, weapon data.
 *-   - Visualization menu centralizes view options.
 *-   - Filter UI on most of the listboxes
 *-   - Dark Mode
 *-   - Appearance editor can now edit weapon data and munition data.
 *-   - When working with unencrypted data, right clicking on dae/fbx and textures in the geometry viewer now
 *-     shows an option to "Open the file in Editor" this will open the file in the default program for that file type.
 *-   - Added action info display
 **
 ** \subsection  v1360dime DI-Guy Motion Editor
 *
 *-   - Fixed left/right export bug
 *-   - Fixed a number of UI regressions in animation blend tree tester
 *-   - Added FBX animation import support.
 *-   - Added ability to strip off parts of fbx import animation string names, needed for multi-character
 *-     performance import from maya.
 *-   - Fixed a number of bugs in gesture creation and editing.
 *-   - added UI for editing aim motion division frames
 *-   - added UI for exporting dae from motion editor project window.
 *-   - Added visualization of rotation and translation and other data to motion editor outliner widget.
 **
 ** \subsection  v1360digs DI-Guy Scenario
 **
 *-   - safe mode now turns off movie maker
 **
 ** \subsection  v1360dinet Networking:
 **
 *-   - The link index that a character is parented to will now go out in the station number PDU entry.
 **
 ** \subsection  v1360data Data
 **
 *b   New Appearances:
 **
 *-     - Belgian soldier
 *-     - Canadian sailors
 *-     - Colombian Air Force, Army, and police.
 *-     - Dutch Soldier
 *-     - Additional US Swat appearances
 **
 *b   New Hand Items:
 **
 *-     - HK MP5 (submachine gun)
 *-     - Baton
 *-     - Baton and shield
 *-     - Bernelli shotgun
 *-     - galil cordova rifle
 *-     - I85a2 ugl
 *-     - Riot shield
 *-     - Binoculars

 **
 *b  Removed Data
 **
 *-     - The segmented felin soldier and various felin character types have been removed, new skinned model should
 **       provide most of the missing content
 *
 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version135 DI-Guy Version 13.5
 **
 **************************************
 ** \subsection  v135 DI-Guy 13.5
 **************************************
 **
 *b   Build Changes : New directory structure:
 **
 *-   - The directory structure for DI-Guy applications has been updated to be more in line with other MAK products.
 *-   - Bin directories have been unified into a single bin64 directory. Path changes to run applications no longer needed.
 *-   - Applications run from the bin directory will correctly locate resources without need for environment variables.
 *-   - To run applications from outside the bin directory, DIGUY environment variable can be set so resources can be located.
 *-   - Installer no longer sets DIGUY variable by default, option to set variable can be enabled during the install.
 *-   - Runtime objects no longer indicate build type using md/mdd/mdn suffix. Release uses base name, and debug uses 'd' suffix.
 *-   - Due to some internal changes programming examples no longer use visual studio property sheets. But they are still
 *-     available in programming_examples/vs_property_sheets and they are used in programming_examples/diguy_ogl/vs_prop_sheets.
 **
 *b   New Equipment System:
 **
 *-   Allows character to mix and match additional shapes at run-time without defining new appearances.
 *-   This allows more helmet and head customization, as well as backpacks and other accessories. The
 *-   equipment list is based around the current character skeleton (actor), the end user is currently responsible
 *-   to not wind up with combinations that aren't visually perfect.
 *-     - Character Viewer now includes UI demoing equipment
 *-     - DI-Guy Digest now outputs data needed to support equipment.
 **
 *b   Equipment API:
 **
 *-   - diguyCharacter::get_current_hand_item_type()
 *-   - diguyCharacter::add_equipment_appearance()
 *-   - diguyCharacter::add_equipment_by_index()
 *-   - diguyCharacter::reset_equipment_appearance()
 *-   - diguyCharacter::get_num_equipment();
 *-   - diguyCharacter::get_equipment_name_at_index()
 *-   - diguyCharacter::get_equipment_type_at_index()
 *-   - diguyCharacter::get_equipment_index_at_index()
 **
 *b    Query API:
 **
 *-   - diguyScenario::get_actor_name()
 *-   - diguyScenario::get_num_equipment_for_actor()
 *-   - diguyScenario::get_equipment_name_for_actor()
 *-   - diguyScenario::get_equipment_type_for_actor()
 *-   - diguyScenario::get_num_equipment_for_appearance()
 *-   - diguyScenario::get_equipment_name_for_appearance()
 *-   - diguyScenario::get_equipment_type_for_appearance()
 **
 *b   New Character Customization Tools:
 **
 *-   DI-Guy now supports configurable uniform arm, rank and name label patches. Currently there's only
 *-   one appearance that supports these but we expect to roll out more in an upcoming release.
 *-   Uniform patches require subclassing diguyGraphicsTextureArray, Name patches require implementing
 *-   text rendering to a texture in diguyGraphicsShape. A sample implementation is provided.
 *-   The Following api calls were added:
 *-   - diguyCharacter::set_unit_name()
 *-   - diguyCharacter::set_unit_index()
 *-   - diguyCharacter::set_rank_name()
 *-   - diguyCharacter::set_rank_index()
 *-   - diguyCharacter::set_uniform_label_text()
 **
 *b    Query API:
 **
 *-   - diguyScenario::get_num_patches_for_appearance()
 *-   - diguyScenario::get_appearance_patch_name_at_index()
 **
 *b   Graphics API changes:
 **
 *-   - <b>API BREAKAGE</b> diguyGraphicsTexture::asyncronous_post_load() function name spelling was
 *-     fixed now diguyGraphicsTexture::asynchronous_post_load()
 *-   - diguyGraphicsTextureArray acts as a wrapper around an opengl texture array object, needed for
 *-     rendering arm patches.
 *-   - Added diguy_graphics_set_texture_array_create_func()
 *-   - Default implementation of diguyOglGraphicsTexture now streams mipmaps down over multiple frames,
 *-     controlled by diguyApp::set_stream_textures_to_gpu();
 *-   - Default implementation of diguyOglGraphicsTexture uses more efficient glTexStorage2D (3x speed up
 *-     on texture memory transfer)
 *-   - Default implementation of diguyOglGraphicsMesh now sends gpu mesh data when object is first drawn,
 *-     modification that allows for support for background loading of mesh data. Added code for arm
 *-     patches and name patch objects.
 *-   - Fix opengl memory bug in diguyOglUniformBuffer.cpp
 *-   - Added LOD fade out via alpha to coverage. Some meshes (equipment and patches) have now been tagged
 *-     to fade out close to the edge of the LOD. 1st render pass should have A2C enabled, 2nd render pass
 *-     GL_BLEND enabled. We recommend switching from diguyScenario::draw() to diguyScenario::draw_pass1()
 *-     followed by diguyScenario::draw_pass2() to allow proper per pass settings.
 *-     diguyCharacter::set_graphics_lod() now takes a float and diguyCharacter::get_graphics_lod_fraction()
 *-     has been added. Fade info is now part of Instancing TBO per drawable data (index 2 (counting from zero))
 *-     or query-able from the shape for non instanced render path.
 **
 *b   diguyGraphicsShape added:
 *-   - diguyGraphicsShape::update_name_texture()
 *-   - diguyGraphicsShape::get_decal_index()
 *-   - diguyGraphicsShape::set_decal_index(int index);
 *-   - diguyGraphicsShape::get_decal_text();
 *-   - Various diguyGraphicsShape::update_name_texture() subclasses contain a sample implementation of rendering a text
 *-     string to a texture using open source code.
 *-   - diguyGraphicsShape::get_graphics_lod_fraction();
 *-   - diguyGraphicsShape::get_lod_fades_out();
 **
 *b   Performance Improvements:
 **
 *-   - Architectural redesign of LOD calculation and shadow pass calculation lod and culling calculations
 *-     are done in multiple threads and now reused for shadow pass and main pass. This avoids reculling
 *-     the character list.
 *-     Added function to expand character radius ( diguyScenario::set_cull_bounds_scale_factor() ).
 *-     Typically a 2x increase is enough to capture anyone that's outside of the main view frustum.
 *-     Characters that aren't instanced are inserted into a much smaller list of characters to draw one at a time.
 *-     These are sorted and drawn front to back for pass 1 and back to front for pass2.
 *-     These changes yield a massive speedup for large scenes with instancing system on, as well as significant
 *-     improvements even without the instancing system.
 *-      - Added diguyScenario::set_cull_bounds_scale_factor() diguyScenario::get_cull_bounds_scale_factor();
 *-      - Added diguyScenario::calculate_character_lods() which is required before drawing.
 *-   - We've switched to just using tbb thread controls. diguyApp::get_num_threads() now defaults  to -1 which will
 *-     just allow tbb to choose. call diguyApp::set_num_threads(1) to turn things single threaded or pick a number
 *-     to limit diguy to using that number of cores.
 *-   - Removed:
 *-     - diguyApp::set_use_qt_threading_infrastructure()
 *-     - diguyApp::get_use_qt_threading_infrastructure(),
 *-     - diguyApp::set_use_intel_threading_infrastructure()
 *-     - diguyApp::get_use_intel_threading_infrastructure()
 *-     - diguyApp::reserve_num_threads()
 **
 *-   - Multi-threaded pipeline code is now on by default in the SDK.
 *-   - Performance improvements to calculating character animation position update.
 *-   - Performance improvements to generating transparency pass data, will reuse data from pass1.
 *-   - Instancing system now supports the 99% of models, previously some flt hierarchy layouts could break instancing,
 *-     flight LOD nodes and other node structures should work now.
 *-   - <b> All together a test 6400 character scene with shadows on has gone from 65ms to 10ms! Shadow pass is almost free now.</b>
 **
 *b   Misc changes:
 **
 *-   - Graphics LOD switching is now on by default
 *-   - New gesture query class diguyGestureMetadata and diguyScenario::get_character_type_gesture_meta_data_at_index()
 *-   - Added diguyApp::set_use_update_phase_1_multithreading()
 *-   - Overhauled load manager to try and make it more useful
 *-      - added support for interpolating between zones.
 *-      - automatically increase pose speed while transitioning.
 *-     The load manager is still only really useful for very high entity count sims.
 *-   - Added bdiGraphicsInitGraphicsAPI::use_qt_license_dialog and bdiGraphicsInitOgl::use_qt_license_dialog allows skipping
 *-     the showing of licensing dialogs.
 *-   - Fixed serialization bug that caused some dae models with hierarchy to serialize nodes 2x
 **
 ** \subsection  v1350disc DI-Guy Scenario
 **
 *-   - Improved networking UI and networking logic to allow for changing protocols through the UI.
 *-   - Network protocol no longer needs to be set with a command line option, although doing so changes the default on startup.
 *-   - UI layout settings are now saved using Qt's save/restore logic, which allows for saving more detailed UI info.
 *-   - Older UI preferences files are no longer compatible with 13.5.
 **
 ** \subsection  v1350divc DI-Guy Character Viewer
 **
 *-   - Added Equipment configuration UI
 *-   - Added networking support and UI for testing simple publishing of character data.
 *-   - Networking works like scenario does now. Protocol can be changed via UI.
 *-   - UI layout settings are now saved using Qt's save/restore logic, which allows for saving more detailed UI info.
 *-   - Older UI preferences files are no longer compatible with 13.5.
 *-   - Many improvements to LOD testing Mode.
 *-   - Improvement to mesh selection display.
 *-   - Additional debug visualizations
 *-   - Added PBR testing GUI.
 **
 ** \subsection  v1350dime DI-Guy Motion Editor and animation system
 **
 *-   - UI improvements to gesture editing.
 *-   - UI improvements to action table editing
 *-   - UI improvements to animation blend tree nodes.
 **
 *b    New Action Graph Editor:
 **
 *-    - A new modern transition editing system that replaces NxN transition tables with
 **      groups of shared transitions and a stream lined finite state machine, soldier_action_graph is first character
 **      type to use the system.
 **
 *b    New Animation Blend Tree Features:
 **
 *-   - Selector supports posture and Hand Item type.
 *-   - Blenders can now use instantaneous animation velocity or initial animation velocity, can allow nicer blends in
 *-     locomotion system, initial animation velocity stores the speed at the beginning of the current motion loop and
 *-     then blends into the next motion loop when the velocity is changing. but makes things less responsive.
 **
 **  \section Version133 DI-Guy Version 13.3/13.4
 **
 **************************************
 ** \subsection  v133 DI-Guy 13.3/13.4
 **************************************
 **
 *-   - Upgrade to Qt 5.
 *-   - Fixed issue where unpaused characters would immediately update the total amount of time
 *-     they were paused for, usually skipping to the end of the action. Now, unpausing resumes
 *-     where the character left off.
 *-   - IK link points: links or connections points can now be used to define both target points and
 *-     the IK chain endpoint. IK solver looks for target points "l_grip_1" and "l_grip_2", and IK
 *-     endpoint "l_palm". If found, these links override offsets defined in Weapon Supplemental Data.
 *-   - Memory and performance improvements to the instancing system and per-character memory.
 *-   - Improved animation system performance on complex blend trees.
 *-   - Added support for asynchronous texture loading to retained mode renderers.
 *-     See diguyApp::run_background_load_update().
 *-   - OSG Examples now demonstrate asynchronous texture loading logic.
 *-   - Added support for Microsoft Concurrency Visualizer markers and spans.
 *-     See diguyApp::set_enable_concurrency_visualizer_markers().
 *-   - The new diguyCharacter callback (CALLBACK_ID_CURRENT_ARC_CHANGED) can be used
 *-     to listen for character motion arc changes.
 *-   - The Action PDU now includes an optional offset field and a "use action positioning" flag.
 *-     These can be used to specify a position correction (offset), and whether the character should
 *-     be allowed to move from their starting position when transitioning to the given action.
 *-   - Fixed minor UI issues with DI-Guy Scenario.
 *-   - Fixed issue with Time Control Dialog, where changes wouldn't take effect immediately.
 *-   - HLA Connections can now specify RPR FOM Version instead of relying on defaults.
 *-   - Resolved issue where the arm_r_3s_you_know5 gesture affected the left arm instead of the right.
 *-   - Fixed intermittent crash when deleting multiple published characters from a crowd.
 *-   - Fixed bug where embarked entities/particle systems would stop updating if parent was culled.
 *-   - Fixed crash when using head/tail lights on DI-Guy vehicles.
 *-   - Fixed crash in navmesh processing on real-time systems.
 *-   - Fixed foot sliding issue with Javelin character.
 *-   - Fixed mouse input issue with ECOSim lua scripts.
 *-   - Improved appearance of police uniform.
 *-   - Fixed math issue in PBR shaders.
 **
 *b   Motion changes and improvements:
 **
 *-   - Character motions are now loaded as needed instead of being loaded when a character is
 *-      initialized, which allows for faster initial character creation.
 *-   - Improved collision avoidance logic for crowds.
 *-   - Improved motions and transitions for getting into and out of vehicles.
 *-   - Added standing injured head.
 *-   - Improved horse and rider motions.
 *-   - Fixed suspect_09 issue with stand_180_hand_cuffed action causing upside-down flickering.
 *-   - Changed how animation interpolation on locomotion animations work. Locomotion animation now
 *-     blend between animation cycles but don't change velocity during the cycle, makes them lag
 *-     slightly but the slider control api did that already. And this makes the necessity of
 *-     interpolating slider values over the animation cycle superfluous.
 **
 *b   Added item/weapons:
 **
 *-   - Binoculars.
 *-   - FAMAS rifle.
 *-   - MPT-76 rifle.
 *-   - M17 pistol (Figure 1), replacing the M9 as a standard.
 **
 *b   Added new soldier models:
 **
 *-   - Fighter pilot.
 *-   - Paratrooper.
 *-   - FELIN (France).
 *-   - Countries: Canada, Germany, India, Israel, South Korea, North Korea, Pakistan, Qatar,
 *-     Saudi Arabia, Singapore, and Turkey. For examples, please see Figure 2, Figure 3, and Figure 4.

 **************************************
 ** \subsection  v133diguyAPI DI-Guy 13.3/13.4 Core SDK
 **************************************
 **
 *-   - Added support for asynchronous texture loading to retained mode renderers.
 *-     see diguyApp::run_background_load_update();
 *-   - Added support for delayed motion loading diguyApp::set_delayed_motion_loading()
 *-   - Added support for some MS Concurrency Visualizer markers and spans see
 *-     diguyApp::set_enable_concurrency_visualizer_markers()
 *-   - Added new character callback: diguyCharacter::CALLBACK_ID_CURRENT_ARC_CHANGED
 *-   - Added optional arguments to DIGUY_CUSTOM_PDU_ID_SET_CHAR_ACTION.
 *-   - Added diguyCharacter::force_action_with_offset method for applying offset to
 *-     character's position when transitioning to forced action.
 *-   - BDI_DLL definition no longer needs required to link against the API.
 *-   - Added diguyCharacter::force_action_with_offset, which behaves like force_action but
 *-     allows an additional offset to be applied to the character’s position.
 *-   - Added a new lookup method for transition information: diguyScenario::get_character_type_transition_info.
 *-     Use this to look up the motion used to transition between two actions for a given character
 *-     type. The details on the transition are returned in the diguyTransitionInfo struct.
 *-   - Updated Graphics API to work with OSG 3.6.3.

 *****************************************************************************
 **************************************
 ** \subsection  v132diguyAPI DI-Guy 13.2 Core SDK
 **************************************
 **
 *-   - Hand IK system now looks for named joints or connection points to
 *-     define the target and chain end points. Currently supported point
 *-     names are "l_grip_1", "l_grip_2", and "l_palm". l_grip_1 and 2 define
 *-     target points to use when the Motion Arc Hand IK is set to Offset 1
 *-     or 2, respectively. These override the target points previously
 *-     defined in weapon_supplemental_data as offsets from rifle_joint.
 *-     l_palm defines a new, optional chain end point to be moved to align
 *-     with the target point. If l_palm does not exist, the IK system falls
 *-     back to using wrist_1 as it did before. Typically, l_palm would be
 *-     added as a child of wrist_1, and l_grip_1/2 as children of rifle_joint.

 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version132 DI-Guy Version 13.2
 **
 *****************************************************************************
 **************************************
 ** \subsection  v1321 DI-Guy 13.2.1
 **************************************
 **
 *-   - Embarked entities are now published with proper parenting attributes.
 *-   - Reflected embarked entities are parented to the host entity and rendered as such.
 **
 **************************************
 ** \subsection  v132adiguyAPI DI-Guy 13.2.0a
 **************************************
 **
 *-   - Fixed significant performance regression with instancing system due to
 *-     over-aggressive variation texture update.
 *-
 **************************************
 ** \subsection  v132diguyAPI DI-Guy 13.2 Core SDK
 **************************************
 **
 *b  Critical API Changes
 *>
 *-   - diguyGraphicsMesh::get_current_graphics_state() has been removed.
 *-   - <b>The function prototype for diguyGraphicsMesh::draw()
 *-     has changed to diguyGraphicsMesh::draw(diguyDrawCallData * data);
 *-     this allows both our instance and non-instanced code to share a mesh drawing path, and
 *-     allows us to make further refinements without breaking API compatibility.</b>
 *<
 **
 *b    Geometry Pipeline:
 **
 *-    - Fixed mesh count calculation for flight file xrefs
 *-    - Delayed mesh count calculation since it's rarely needed by immediate mode apis
 *-    - Improved calculation of bump and transparency bits so they are available to the
 *-      graphics api.
 *-    - Fixed support for alpha to coverage clip maps.
 *-    - Fix issues with draw pass debugger in character viewer
 *-    - Fix hard crash when optimizing mesh with null textures.
 *-    - Fixed material optimization bug that lead to shininess values of 0 on many flt files.
 *-    - New global ambient material override system, unifies all ambient responses regardless of source
 *-      per model ambient customization really should be at the per pixel level via ao maps.
 *-      This gives end users more high level control of the look of their diguy content .
 **
 *b    Gesture System:
 **
 *-    - New option for gestures to be done additively based on 1st pose of gesture frame.
 *-      useful for recoil animations
 *-    - Gestures with no weighted vars now play animation on all bones.
 *-    - diguyCharacter::execute_gesture() now supports playing arbitrary bdm files off disk.
 *-      this can be useful for end users who aren't concerned with setting up action/transition tables
 **
 *b    Performance:
 **
 *-    - Streamlined memory usage of links, lowers the size of every simulated joint diguy manages.
 *-      Removed underlying static offset matrix, unified data into dynamic matrix and simplified
 *-      matrix math operations.
 *-    - Streamlined memory usage of pose override system, impacts gazing, pointing, aiming.
 **
 *b    Joint Control API:
 **
 *-    - Adding diguyLinkController a new api for doing link control at the link level. Much simpler
 *-      then pose override class and able to be scripted with features to let it automatically animate.
 **
 *b    Particles:
 **
 *-    - Fixed default bounding radius initialization in particle system constructor, could cause effect
 *-      characters to not update properly due to being mistakenly culled out. (Seen in OSG)
 *-    - Improvements to multi-threading of particle systems
 *-    - Add support for transient fire effects with link offsets.
 *-    - Improvements to support transient particle systems driving external particle systems, and properly
 *-      timing out
 *-    - Transient particles that are flagged as mergeable will now attempt to move existing emitter and
 *-      restart the system. Most weapon effects are now flagged as mergeable, allowing many characters to
 *-      create muzzle smoke, and shell eject casings efficiently.
 *-    - Fixes to collision with world/animated spinning
 **
 *b    Munition System:
 **
 *-    - removed diguyCharacter::set_weapon_shell_eject_enabled() get_weapon_shell_eject_enabled()
 *-      set_weapon_smoke_enabled() get_weapon_smoke_enabled() these now all key off of
 *-      diguyScenario::get_weapon_fire_effects_enabled()
 *-    - Munitions type effects can now inherit other munitions, makes it easier to author one set
 *-      of effects and share it with all the various tanks or other weapons with just a different
 *-      septet.
 *-    - Tanks now have a smoke explosion when firing and a recoil for their barrel.
 *-    - People have an additive kickback gesture that works regardless of the characters aiming direction.
 *-      Puff of smoke at muzzle point, and shell eject on the right side of most weapons. Tracer fire has
 *-      been improved as well.
 *-
 *b    Misc:
 **
 *-    - Adding particle movement animation module, object will move at the exact speed requested via animation_velocity api.
 *-    - Improvements to lod calculation for large objects, fixed bug where motion lod would make
 *-      a ground clamping car spin through the ground
 *-    - Improved gaze at angle to work better in arbitrary coordinate systems, regardless of movement of
 *-      character.
 *-    - Adding multi-threaded read/write lock mutex to protect octtree from editing while testing, fixes crashes
 *-      with moving props.
 *-    - Improved movement visuals to not appear inside of vehicles.
 *-    - Added visualization of angular velocity
 *-    - Improved calculation of angular velocity from vehicles.
 *-    - Regression Fixed ground bounds calculation to work with turreted vehicles again.
 *-    - Changing the character appearance should attempt to retain more of the animation system state.
 *-    - Stationary motions will no longer get scaled by character height. This looked pretty bad/didn't
 *-      make sense on shorter characters.
 *-    - Switched sound module to openAL-soft, older version was locking up with vc12 on windows 8/10
 *-    - Added support for scale to physics simulation.
 *-    - Added caching for local space bounding box retrieval.
 *-    - Added warning for bad rigging on vehicles.
 *-
 *b    New API Classes:
 **
 *-    - diguyLinkController - a simple class that allows end users to override a character's animation
 *-      on a joint level without the complexity of the diguyPoseOverride class.
 *-    - diguyUniformBufferUpdater - a virtual interface class that wraps all uniform buffer management.
 *-    - diguyGraphicsFrameBuffer - a virtual interface class that allows diguy to create frame buffers
 *-      for shadows and intersection testing.
 **
 *b   New API functions:
 **
 *-    - diguyCharacter::get_supports_texture_variations()
 *-    - diguyCharacter::get_supports_weight_variations()
 *-    - diguyCharacter::set_weight_scale()
 *-    - diguyCharacter::get_weight_scale()
 *-    - diguyCharacter::set_allow_instancing()
 *-    - diguyCharacter::get_allow_instancing()
 *-    - diguyCharacter::get_is_instanced()
 *-    - diguyCharacter::set_final_tbo_position_matrix()
 *-    - diguyCharacter::get_shader_technique();
 *-    - diguyCharacter::set_aim_variable_interpolation_time()
 *-    - diguyCharacter::get_aim_variable_interpolation_time()
 *-    - diguyCharacter::get_link_controller()
 *-    - diguyCharacter::set_link_translation_override()
 *-    - diguyCharacter::set_link_translation_override()
 *-    - diguyCharacter::end_link_translation_override()
 *-    - diguyCharacter::set_link_rotation_override()
 *-    - diguyCharacter::set_link_rotation_override()
 *-    - diguyCharacter::end_link_rotation_override()
 *-    - diguyCharacter::get_num_articulated_parts()
 *-    - diguyCharacter::get_articulated_part_link_name()
 *-    - diguyCharacter::get_articulated_part_id()
 *-    - diguyCharacter::map_articulated_part_id_to_link()
 *-    - diguyCharacterPoseOverride::set_weight_array_modifier()
 *-    - diguyCharacterPoseOverride::get_weight_array_modifier()
 *-    - diguyGraphicsInstanceGroup::get_show_debug_colors()
 *-    - diguyGraphicsLink::set_shape_switch_override()
 *-    - diguyGraphicsLink::get_initial_translation()
 *-    - diguyScenario::set_visualize_instance_groups()
 *-    - diguyScenario::get_visualize_instance_groups()
 *-    - diguyScenario::set_instancing_tbo_patching_enabled()
 *-    - diguyScenario::get_instancing_tbo_patching_enabled()
 *-    - diguyScenario::set_instancing_position_callback_enabled()
 *-    - diguyScenario::get_instancing_position_callback_enabled()
 *-    - diguyScenario::set_num_extra_per_instance_data_floats()
 *-    - diguyScenario::get_num_extra_per_instance_data_floats()
 *-    - diguyScenario::build_instance_groups()
 *-    - diguyScenario::update_instancing_data()
 *-    - diguyScenario::draw_particles()
 *-    - diguyScenario::get_num_appearances_of_appearance_type()
 *-    - diguyScenario::get_appearance_name_at_index()
 *-    - diguyScenario::set_use_override_ambient_material()
 *-    - diguyScenario::get_use_override_ambient_material()
 *-    - diguyScenario::set_global_ambient_material()
 *-    - diguyScenario::get_global_ambient_material()
 *-    - diguyGraphicsMesh::get_is_blend_shape()
 *-    - diguyGraphicsMesh::get_blend_shape()
 *-    - diguyGraphicsMesh::get_num_blend_shapes()
 *-    - diguyViewPainter::draw_opengl_primitive()
 **
 *****************************************************************************
 **
 *******************************************************
 ** \subsection  v1320digs DI-Guy Scenario Version 13.2
 *******************************************************
 **
 *b    General:
 **
 *-    - Added scene object instancing system that speeds up rendering of xrefs and other
 *-      duplicated geometry.
 *-    - Between improvements to instancing system, improved renderer and xref instancing
 *-      Large Scenes can see a 2x speed up in rendering.
 *-    - Action bead can now calculate velocity for locomotion actions when deriving duration.
 *-    - Added scene rendering debugging tools.
 *-    - Added geometry viewing tools for characters and scene objects
 *-    - Added UI for controlling global ambient material values
 **
 *b    Networking:
 **
 *-    - Upgraded to vrlink 5.3.0
 *-    - Adding support for multi-threaded publishing.
 *-    - Fixed bug where reflected characters had variation textures on by default.
 *-    - New Networking debugging panel
 *>
 *-       - Incoming and outgoing packet info visualization aids
 *-       - Packet indicators pop little spheres over the heads of characters when they
 *-         either send or receive a new movement packet. Outgoing limited to DIS currently.
 *<
 *-    - Support for enabling log messages from VRlink
 *-    - New network adapter chooser that should help set the transmit to IP UI.
 *-    - Fixed bug with sending rotational velocity, was reversed compared with DIS spec.
 *-    - Fixed bug with dead reckoning individual that was moving backwards, led to very
 *-      incorrect behavior.
 *-    - Better distribute pdu heartbeat events in time.
 *-    - Fixed bug preventing send_xc_ commands from rewinding/resetting remote scenario
 *-    - Added acceleration publishing
 *-    - Vehicles without custom pdus will have rotating wheels.
 *-    - DIGUY_CUSTOM_PDU_ID_CHARACTER_SCALE has been modified to include an additional 4th value for weight scale.
 **
 *b    Camera System Changes:
 **
 *-    - Camera zipping is once again triggered by shift-click.
 *-    - A tracked character can only be watched from a stationary position, unless the user puts the camera
 *-      into orbit mode. If not, the tracking will stop as soon as the camera is moved.
 *-    - Double-clicking on a character will put the camera into orbit mode around it.
**
 ***********************************************************
 ** \subsection  v1320dime DI-Guy Motion Editor Version 13.2
 ***********************************************************
 **
 *b   General:
 **
 *-    - New Outliner UI, nicer way to see and edit all the joints in a skeleton,
 *-      The Joint editor UI buttons now trigger the new Outliner UI.
 *-    - Fixed crashes on processing degenerate animation files.
 *-    - dae animations with static parts are now properly imported into motion editor.
 *-    - Fixed bugs creating collada animation files from diguy motions.
 *-    - Unified advanced and regular export motion dialog box. Made it possible to export
 *-      blended motion without idealizing.
 *-    - Adding support for a scripting interface to motion editor export process via diguyMotionExporter class.
 *-    - Improved Gesture UI to work with more gesture types
 *-    - Gesture weights UI now just allow editing of a unified rotation weight, more accurately
 *-      reflect the behavior of the underlying code.
 **
 **************************************
 ** \subsection  v1320diguyGFXAPIChanges DI-Guy 13.2 Graphics API and Rendering Pipeline Changes
 **************************************
 **
 *b   Rendering Pipeline
 **
 *-    - The Core DI-Guy rendering pipeline has been upgraded to use OpenGL 3.2, we have removed deprecated
 *-      fixed function code from our 2 OpenGL Renderers, all of our programming examples, DI-Guy Scenario,
 *-      Character Viewer and Motion Editor. You should be able to debug all of our code with Nvidia's NSight as well.
 *>
 *-      - Legacy OpenGL 2.1 shaders are now located in geometry/shaders/opengl_21, these are still actively
 *-        used by OSG reference implementation. Modern Shaders are located in the opengl_32 subdirectory.
 *-      - diguyGraphicsShaderProgram::derive_diguy_shader_source_filename() now takes a subdirectory argument
 *-        to allow us to have the same shader description with different implementations.
 *-      - All OpenGL 3.2 shaders have been rewritten to use a shared library ( diguy_shared_library.glsl ) this
 *-        centralizes the use and implementation of uniform buffers, standard uniforms, and attributes.
 *-        Shared functions that are used by many shaders have also moved there.
 *-      - The built-in fixed function uniforms have been removed from all modern shaders.
 *-      - The various lod shaders and instancing shaders have been cleaned up to remove slight lighting
 *-        discrepancies between the shader lods.
 *-      - Bump mapping has been streamlined to remove the need for a number of per object uniforms, this has
 *-        simplified bump map uniform set up in diguyGraphicsLink::begin_character_draw() (ie it's gone) It's
 *-        also simplified the whole lighting pipeline.
 *-      - Ambient light in shaders now falls off when normals point down, models ambient light mostly coming from the sky.
 *-      - Bump mapped shaders have changed quite a bit, they do more work in the pixel shader but that was the
 *-        cleanest way to support multiple bump mapped lights as well as improve uniformity between shader stages.
 *-      - Bump mapped and Per Pixel shaders now include improved specular highlight handling including Fresnel and
 *-        some parts of a Physically Based Shader pipeline. Objects can now specify on a per shape basis if they have
 *-        been updated to use PBR style lighting. This provides more realistic metal and non-metal specularity and lighting.
 *<
 *-    - Long term we intend to remove the libdiguy_graphics_ogl implementation and move all of our Applications (DI-Guy Scenario)
 *-      and sample code to the diguy_graphics_api, the diguyOglParticleSystemRenderer and the diguyOglUniformBufferUpdater
 *-      for example are now used by both the diguy_ogl examples and the diguyGraphicsAPI OpenGL examples, and
 *-      DI-Guy Scenario. The justification for this is many faceted:
 *-        -  Eliminate the need to maintain two OpenGL code bases. One closed source and one public source
 *-        -  Guarantee that any thing that can be done with the closed source code is doable with the public api
 *-           and implementation.
 *-        -  Recognize the reality that with the removal of the fixed function pipeline and fixed function
 *-            OpenGL state the closed source libdiguy_graphics_ogl renderer is not going useful for many people.
 **
 *-    - Mesh classes now support rendering additional blend shape data sourced from Collada files.
 *-      currently used for a weight variation system on some of the characters.
 *-    - glew and glm are now required by all of our OpenGL programming examples.
 *-    - The function prototype for diguyGraphicsMesh::draw() has changed to diguyGraphicsMesh::draw(diguyDrawCallData * data)
 *-      this allows both our instance and non-instanced code to share a mesh drawing path, and
 *-      allows us to make further refinements without breaking API compatibility. Your diguyGraphicsMesh
 *-      implementation is now responsible for binding geometry material and texture state and managing
 *-      early outing for transparency, diguyOglGraphicsMesh now demonstrates all of that.
 *-    - Instancing system now supports our variation system. The sample code for the
 *-      variation now combines all variation textures into one large 4096 texture. This avoids
 *-      creating hundreds of tiny textures. This also allows the instancing system to use it.
 *-      A uniform for specifying the row of the shared variation texture has been added.
 *-      And it is now encoded as part of the TBO data that is sent to the video card.
 *-    - Instancing system now has a shadow pass shader.
 *-    - Instancing system supports respacing the data in the TBO, this allows end users to add additional per
 *-      character data to the tbo.
 *-    - Unlit shader now included variation texture support. (Avoids popping)
 *-    - Instancing now defaults to LOD 4, kicks on much earlier but new variation support
 *-      makes it less noticeable.
 *-    - Fixed bug where num rendering passes was defaulting to 1 not 2. Caused transparency to look bad.
 *-      Change requires that diguyScenario::draw_pass1() and then diguyScenario::draw_pass2() are called
 *-      with different blend settings.
 *-    - Fixed a number of issues with how we loaded and managed specularity from flt and collada files.
 *-      Some models that were sourced as shiny were loosing that data. This improves the look of a bunch of
 *-      models, but also calls out for more specular maps.
 **
 *b   DirectX 11 Sample
 **
 *-    -We've added a very bare bones sample of using diguy with DirectX 11. This is a very rough around the edges
 *-     proof of concept, but all the major pieces to get a character on the screen are there.
 **
 *b   OSG Improvements
 **
 *-    - OSG now demonstrates using the DI-Guy ogl immediate mode particle renderer
 *-      as an add-on drawable.
 *-    - Fixed scale bug where character scaling was applied 2x.
 *-    - Streamlined mesh loading, added support for blend shapes applied to meshes.
 *-      Currently limited by OSG's infrastructure.
 **
 *b   Cleanups
 **
 *-    - Removed diguyGraphicsLink::get_offset_translation() and diguyGraphicsLink::get_offset_rotation()
 *-      we no longer have links that combine a static offset matrix and a dynamic matrix, all information
 *-      is now in the dynamic matrix. Trying to match authoring tools and reduce confusion.
 *-    - Removed DIGUY_GRAPHICS_INDEX_TYPE_D3D_WORD, and some unused vertex array formats
 *-    - Removed bdiGraphicsInitGraphicsAPI.use_array_format_for_vertex_buffer_data
 *-    - Removed bdiGraphicsInitGraphicsAPI.use_linear_traversal_draw
 *-    - Removed bdiGraphicsInitGraphicsAPI.use_shaders
 *-    - Removed bdiGraphicsInitGraphicsAPI.default_vertex_type, this really shouldn't have ever
 *-      been a preference index data is either a ushort or uint depending on the size of the mesh.
 *-    - bdiGraphicsInitGraphicsAPI.characters_have_world_space_triangle_query now defaults to 1 in gfx api.
 *-      this allows bounding box calculations to work, this really is only there for historical reasons when we
 *-      didn't always control our geometry pipeline.
 *-    - Cleaned up bdiGraphicsInitOgl, removing options that no longer made sense:
 *-      - Removed bdiGraphicsInitOgl.texture_unit
 *-      - Removed bdiGraphicsInitOgl.use_multitexture_extension
 *-      - Removed bdiGraphicsInitOgl.use_shaders
 *-      - Removed bdiGraphicsInitOgl.use_VBOs
 *-    - Removed diguyGraphicsShaderProgram::reload() simpler to just require that load()
 *-      properly handle being called multiple times.
 *-    - Removed diguy_ogl_render_shadow_map() replaced with diguyOglUtils::render_shadow_map()
 *-    - Fixed bug in diguyCharacter::get_link_relative_position(), will no longer include the first link's offset.
 *-
 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version131 DI-Guy Version 13.1
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 ** \subsection  v1310digs DI-Guy Scenario Version 13.1.0
 **************************************
 **
 *-    - New camera control scheme, uses click-and-drag operations for
 *-      pan, zoom, and rotate.
 *-    - New aircraft guide demo. Interactive scenario including different
 *-      air vehicles and a missile launcher. Also demonstrates different
 *-      ways to use camera.
 **
 **************************************
 ** \subsection  v131diguyAPI DI-Guy 13.1 Core SDK
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 ** \subsubsection  v1310api Version 13.1.0
 **
 *b    General
 *-    - Improved UID generation supports larger number of characters with less performance
 *-      impact.
 *-    - Fixed soldier aiming jitters when targeting a point close to the gun muzzle.
 *-    - Improved RenderGizmo:draw_wedge_with_normal drawing of small-scale wedges.
 *-    - Improved calculation for shadow render frustum so that the edge of the shadow
 *-      volume is not so easily visible in scene
 *-    - Improved blocked-cell calculations for more reliable nav mesh generation.
 *-    - Fixed issue where diguyScenario::destroy_character did not always remove character
 *-      from groups immediately
 *-    - More work on supporting alternative coordinate systems via diguyCharacter::set_local_to_world_orientation_matrix()
 *-    - Adding support for general emissive textures in the alpha channel of spec/gloss/ao map.
 *-    - Reference shaders do a nicer job balancing emissive and point lights brightness
 *-      with general scene ambient.
 *-    - Added bdiScenarioPluginCharacterFunction, this is now used for the plug-in mid_update function
 *-      instead of bdiScenarioPluginFunction this is potentially called by multiple threads simultaneously.
 *-    - Minimized the number of times shape build and unbuild is run.
 *-    - Update Loop changes:
 *>
 *-      - diguyScenario core update loop has been cleaned up to try and yield more stable
 *-        results when long dt's longer then the simulation frame rate are presented.
 *-      - The diguyScenario::set_max_ticks_behind_until_drop() default value is now 0 in the DI-Guy SDK,
 *-        In DI-Guy Scenario it is 2, this keeps our application deterministic but the general SDK will
 *-        try to allow a bit less perfection in scenario playback in exchange for better performance.
 *<
 **
 *b    Performance Improvements
 *-    - Improved performance of link updates, animation variable are now required to have
 *-      quaternion layouts (needs rw), allows simplifies code path through our update infrastructure.
 *-      Custom character types may need to be updated.
 *-    - Removed recursive update of links switched to a simpler linear array traversal.
 *-    - 4x4 Matrix multiplies now use SSE to speed up math.
 *-    - Multi-threaded update pipeline can now use the Intel Threaded Building Blocks parallel scheduler
 *-      appears to 10% faster then qt parallel for system. Currently we do not provide
 *-      controls for how many threads it uses and we are using it's recommended defaults.
 *-    - Minimizing updates for culled characters:
 *-      we've added new logic to diguy to delay updates of culled characters, characters that
 *-      are drawn the previous frame will get link matrix and shader matrices updates inside the
 *-      multi-threaded pipeline, otherwise the update of links, shapes and shader matrices will be
 *-      done on a as needed basis, eg when character is being drawn or code calls
 *-      diguyCharacter::get_link_position(). This guarantees that characters who are aiming or gazing
 *-      at off screen entities still do the right thing. This provides massive speed boost for folks
 *-      that are completely off screen without degrading the quality of the simulation.
 *-      The following functions will need to be called to enable this system diguyScenario::pre_draw_cull_state_reset()
 *-      diguyScenario::post_draw_cull_state_save() and in a retained mode render: diguyCharacter::set_is_culled(false)
 *-    - OSG reference sample has a new way of sending uniform arrays that is much faster.
 **
 *b    Content Pipeline Improvements
 *-    - A single mesh with more then 65k verts should be handled better, was blowing out ushort index buffer,
 *-      now converted to uint
 *-    - Procedurally created links from dae models will now get properly destroyed when
 *-      appearance is changed.
 *-    - Procedurally created links properly set initial translation and initial rotation.
 *-    - Added support for procedurally created links from non skinned dae's, enables collada weapons to specify
 *-      muzzle location
 *-    - Fixed handling of dae animation translation scale
 **
 *b    Vehicle Improvements
 *-    - Added code for damaged and destroyed appearance functionality. Will now auto switch
 *-      if character is killed, or if diguyCharacter::set_DIS_damage_state() is called.
 *-      Will go over network, and secondary appearance should load at the same time as initial
 *-      appearance. Added diguyCharacter::get_damage_state_appearance_name()
 *-    - Vehicle ground clamping system has been improved, uses 4 intersection points and avoids
 *-      some ugly edge cases
 *-    - Vehicles without articulated skeletons (ie vehicles not vehicle_09s)'s ground footprint
 *-      is calculated better.
 *-    - Vehicles with articulated skeletons can now be used as vehicles, wheels will rotate
 *-      automatically. This uses a new physics simulation mode DIGUY_VEHICLE_SIMULATION_MODE_WHEELS.
 *-    - Vehicles can have up to 12 wheels that will automatically rotate. (useful for tanks)
 *-    - Added character guide algorithms for aircraft, missiles, helicopters, and ballistic projectiles.
 *-      Visit aircraft guide demo in DI-Guy Scenario to see these in action.
 **
 *b    Camera Improvements
 *-    - Camera system now organized around base position, base orientation, position offset, and
 *-      orientation offset. There is lots of flexibility in how these are applied. See class-level
 *-      notes in diguyViewCamera.
 *-    - Camera can still dolly and track as it did before. Setting a dolly character will cause
 *-      base position and base orientation to be overridden.
 *-    - Behavior of camera in dollied state is now mathematically correct and consistent. If,
 *-      for example, camera is attached to wing of aircraft, it will remain in consistent place
 *-      relative to aircraft, no matter how it turns, pitches, and roll.
 *-    - Restored camera behavior that existed in 12.5. In this version, when both a dolly and track
 *-      character were set, the camera would move behind the dolly character to keep both in view.
 *-      This behavior is now called "special track mode", but is turned off by default.
 *-    - Deprecated a number of functions.
 **
 *b    Appearance Editor:
 *-      The character viewer now includes a new appearance editing component that allows for real
 *-      time editing of Appearance and shape set configuration data.
 **
 *b    Particles/Appearance Effects:
 *-    - Many Bug fixes to appearance effects system.
 *-    - Fixed a number of bugs with stopping appearance effects that had been specialized for
 *-      specific character types.
 *-    - Any particle system in the current scenario can now be used as an appearance effect without
 *-      modifying any configuration files.
 *-    - Appearance Effects can now be specified as part of appearance configuration data.
 *-    - Appearance Effects list in decision beads are no longer hard coded.
 *-    - Removed legacy Appearance Effects system. Had been unused since diguy 10.x
 *-    - Removed independent particle system dll, code moved into libdiguy.
 *-    - Adding support for the rendering of particle systems to the graphics api see diguyParticleSystem and
 *-      diguyOglParticleSystemRenderer
 *-    - Adding support to the graphics API retrieving a list of active light sources, OpenGL simple_playback demonstrates.
 *-    - Adding support for the mapping of diguy particle systems to an external particle system renderer see
 *-      diguyParticleSystem for details.
 *-    - Particle System engine update is now multi-threaded
 *-    - Added support for parsing lights from collada dae. head lights and tail light are automatically
 *-      hooked up to appropriate networking bits based on names.
 *-    - Particles associated with characters that are flagged as invisible won't draw.
 **
 *b    Lighting/Shader Improvements
 *-    - Added support for emissivity maps as the alpha channel of spec/glos/ao maps. These default to on,
 *-      and for vehicles will respond automatically to the power plant dis flag.
 *b    - Note: in order to enable this functionality you'll need to update how emissivity is sent to the
 *b      graphics card, it's now done on a per character basis, not per material.
 *-    - Point and emissivity lights are now balanced against the amount of ambient light in the primary
 *-      directional light in the shader. This lowers blow out in daytime but still has desired impact at night.
 **
 *b    Connection Point System:
 **
 *-    - New connection point system, allows adding extra locations to a model without any runtime cost.
 *-      Connection points can be added to appearances or shape sets. Connection points can be marked with
 *-      metadata (see diguyConnectionPointType ) to help locate things like vehicle/prop entry and exit points.
 *-      All functions that take link names can now also take connection point names.
 **
 *-    - New Connection Point functions:
 *>
 *-      - diguyCharacter::get_num_connection_points()
 *-      - diguyCharacter::get_connection_point_name_at_index()
 *-      - diguyCharacter::get_num_connection_points_with_type()
 *-      - diguyCharacter::get_connection_point_name_with_type()
 *<
 **
 *b    Networking
 *-   - Upgraded VR-Link to 5.1.3a.
 *-    - HLA Evolved supports new interactions: AI messaging, appearance effects, gestures,
 *-      and reset command
 *-    - Reflected characters are properly culled/unculled when they leave/enter the space
 *-      being simulated locally
 *-    - In HLA Evolved, networked characters referenced by VR-Link global ID string. In practice,
 *-      this will contain a value such as "66_77_soldier07-0"
 *-    - Attempt is made to choose version-specific FOM file when connecting DI-Guy instances
 *-      over the network. Will be named DIGuyModule_1310.xml. Also, the search for available
 *-      FOM files covers both the DIGUY_CUSTOM folder and the base config folder.
 *-    - HLA 1516e FOM Mapper support: FOM Mapper DLLs may be placed in the networking folder
 *-      alongside the associated FOM file. The FOM Mapper DLL name must match the FOM filename
 *-      (excluding file extension, ex: MyFOM.xml and MyFOM.dll).
 *-    - Added "Federate Name" and "Federate Type" fields to network properties. These
 *-      may be set from DIGS Network Settings window, or via API calls to
 *-      diguyNetInterface::set_federate_name/set_federate_type. NOTE: "Federate Name" replaces
 *-      auto-generated federate name based on site/host id.
 *-    - Added Aggregate Publishing: Crowds now have option (default FALSE) to Publish as
 *-      an Aggregate Entity.
 *-    - Improvements to sending and receiving articulated vehicles and steering.
 *-    - Added basic support for visualizing laser designators.
 *-    - Munition type septets now support wildcards in munition_types.cfg, allows mapping
 *-      many septets to a standard suitable detonation config.
 **
 **
 **************************************
 ** \subsection  v1310diguyGFXAPIChanges DI-Guy 13.1 Graphics API Changes
 **************************************
 **
 *b   OSG Improvements
 **
 *-    - fixed bug in diguy_graphics_get_osg_defaults() where transpose_shader_matrices was incorrectly set to 0.
 *-    - Reference code now uses memcopy to set up low level animation matrices in diguyOsgGraphicsShape.h
 *-    - Modified examples to use diguyScenario::pre_draw_cull_state_reset() diguyScenario::post_draw_cull_state_save()
 *-      and diguyCharacter::set_is_culled(false), hooks into new optimization system that limits updates on culled characters.
 **
 **************************************
 ** \subsection  v1310diguyAPIChanges DI-Guy 13.1.0 API Changes
 **************************************
 **
 *b   New Classes
 **
 *-    - diguyParticleSystem
 *-    - diguyParticleSystemRenderer
 **
 *b   New API functions
 **
 *-    - diguyApp::set_use_qt_threading_infrastructure()
 *-    - diguyApp::get_use_qt_threading_infrastructure()
 *-    - diguyApp::set_use_intel_threading_infrastructure()
 *-    - diguyApp::get_use_intel_threading_infrastructure()
 *-    - diguyCharacter::set_link_visibility()
 *-    - diguyCharacter::get_aim_at_character()
 *-    - diguyCharacter:get_character_class_type()
 *-    - diguyCharacter::get_was_drawn_last_frame()
 *-    - diguyCharacter::set_was_drawn_last_frame()
 *-    - diguyCharacter::get_is_culled()
 *-    - diguyCharacter::set_is_culled()
 *-    - diguyCharacter::get_desired_speed()
 *-    - diguyCharacter::set_emissivity()
 *-    - diguyCharacter::get_emissivity()
 *-    - diguyCharacter::set_head_lights_state()
 *-    - diguyCharacter::get_head_lights_state()
 *-    - diguyCharacter::set_tail_lights_state()
 *-    - diguyCharacter::get_tail_lights_state()
 *-    - diguyCharacter::agent_set_use_speed_zones_on_paths()
 *-    - diguyCharacter::agent_get_use_speed_zones_on_paths()
 *-    - diguyCharacterGuide:get_guide_algorithm()
 *-    - diguyCharacterGuide:set_guide_algorithm_vector_parameter()
 *-    - diguyCharacterGuide:get_guide_algorithm_vector_parameter()
 *-    - diguyCharacterPath::destroy_waypoint()
 *-    - diguyCrowd::set_network_marking();
 *-    - diguyCrowd::get_network_marking();
 *-    - diguyCrowd::set_is_network_published();
 *-    - diguyCrowd::get_is_network_published();
 *-    - diguyCrowd::get_vrlink_entity_state_repository();
 *-    - diguyCrowd::get_is_network_reflected();
 *-    - diguyCrowd::get_is_network_paused();
 *-    - diguyCrowd::set_is_network_paused();
 *-    - diguyCrowd::get_network_entity_number();
 *-    - diguyFormation::set_follower_instance()
 *-    - diguyGraphicsShape::get_has_offset_matrix()
 *-    - diguyGraphicsShape::get_offset_matrix_4x4_ptr()
 *-    - diguyGraphicsShape::set_is_hidden()
 *-    - diguyGraphicsInstanceGroup::get_start_base_offset() const;
 *-    - diguyGraphicsInstanceGroup::get_instance_base_data();
 *-    - diguyGraphicsInstanceGroup::get_instance_base_data_size();
 *-    - diguyGraphicsInstanceGroup::get_instance_link_data();
 *-    - diguyGraphicsInstanceGroup::get_instance_link_data_size();
 *-    - Modified Signature: diguyGraphicsInstanceGroup::bind_instance_group_data(int base_start, int link_start, int count)
 *-    - diguyPathShape::destroy_waypoint()
 *-    - diguyNetInterface::set_federate_name();
 *-    - diguyNetInterface::set_federate_type();
 *-    - diguyNetInterface::set_draw_laser_designators_effects();
 *-    - diguyNetInterface::get_draw_laser_designators_effects()
 *-    - diguyNetInterface::set_laser_designators_effects_visible()
 *-    - diguyNetInterface::set_draw_laser_designators_lines()
 *-    - diguyNetInterface::get_draw_laser_designators_lines()
 *-    - diguyScenario::find_or_create_sensor_region()
 *-    - diguyScenario::set_draw_authoring_visuals()
 *-    - diguyScenario::get_draw_authoring_visuals()
 *-    - diguyScenario::get_num_active_lights()
 *-    - diguyScenario::sort_active_lights()
 *-    - diguyScenario::get_active_light_data()
 *-    - diguyScenario::send_message()
 *-    - diguyScenario::broadcast_message()
 *-    - diguyScenario::broadcast_message_to_group()
 *-    - diguyScenario::destroy_character_later()
 *-    - diguySensorRegion::get_min()
 *-    - diguySensorRegion::set_min()
 *-    - diguySensorRegion::get_max()
 *-    - diguySensorRegion::set_max()
 **
 *-    - New label functions:
 *-      - diguyViewLabel::set_font()
 *-      - diguyViewLabel::get_font()
 *-      - Set and get position of labels in world-space
 *-        - diguyViewLabel::set_world_xyz()
 *-        - diguyViewLabel::get_world_xyz()
 **
 *-      - Set and get a final offset in screen-space:
 *-        - diguyViewLabel::set_offset_x()
 *-        - diguyViewLabel::get_offset_x()
 *-        - diguyViewLabel::set_offset_y()
 *-        - diguyViewLabel::get_offset_y()
 **
 *-    - New camera functions:
 *-      - diguyViewCamera::set_degimbalize_angle();
 *-      - diguyViewCamera::get_degimbalize_angle();
 *-      - diguyViewCamera::set_orientation_offset();
 *-      - diguyViewCamera::get_orientation_offset();
 *-      - diguyViewCamera::set_desired_orientation_offset();
 *-      - diguyViewCamera::release_fix();
 *-      - diguyViewCamera::set_base_position_double();
 *-      - diguyViewCamera::get_base_position_double();
 *-      - diguyViewCamera::set_orientation_offset_is_relative();
 *-      - diguyViewCamera::get_orientation_offset_is_relative();
 *-      - diguyViewCamera::set_use_special_track_mode();
 *-      - diguyViewCamera::get_use_special_track_mode();
 **
 *b    Removed Deprecated API functions:
 **
 *-    - diguySceneObject::set_switch_state()
 *-    - diguySceneObject::get_switch_state()
 *-    - diguySceneObject::set_dof_state()
 *-    - diguySceneObject::set_dof_state_flt();
 *-    - diguySceneObject::get_dof_state();
 *-    - diguySceneObject::get_dof_state_flt();
 *-    - diguySceneObject::add_switch_target();
 *-    - diguySceneObject::abort_all_switch_targets();
 *-    - diguySceneObject::add_dof_target();
 *-    - diguySceneObject::add_dof_target_flt();
 *-    - diguySceneObject::abort_all_dof_targets();
 **
 *b   Deprecated API functions:
 **
 *-    - diguyCharacter::set_up_vector(): replaced with
 *-      diguyCharacter::set_up_vector_type(). Same applies to several other
 *-      up_vector functions.
 **
 *b   New API callbacks:
 **
 *-    - Callbacks for point select mode:
 *-      - diguyCharacter::CALLBACK_ID_UI_LEFT_CLICK
 *-      - diguyCharacter::CALLBACK_ID_UI_RIGHT_CLICK
 *-      - diguyCharacter::CALLBACK_ID_UI_DOUBLE_CLICK
 *-      - diguyCharacter::CALLBACK_ID_UI_MIDDLE_CLICK
 *-      - diguyCharacter::CALLBACK_ID_UI_SCROLL_UP
 *-      - diguyCharacter::CALLBACK_ID_UI_SCROLL_DOWN
 **
 *-    - Scene click callbacks:
 *-      - diguyScenario::CALLBACK_ID_LEFT_CLICK_SCENE
 *-      - diguyScenario::CALLBACK_ID_RIGHT_CLICK_SCENE
 **
 *-    - Label UI callbacks:
 *-      - diguyViewLabel::CALLBACK_ID_MOUSE_DOWN
 *-      - diguyViewLabel::CALLBACK_ID_MOUSE_UP
 *-      - diguyViewLabel::CALLBACK_ID_LEFT_CLICK
 *-      - diguyViewLabel::CALLBACK_ID_RIGHT_CLICK
 *-      - diguyViewLabel::CALLBACK_ID_MIDDLE_CLICK
 *-      - diguyViewLabel::CALLBACK_ID_DOUBLE_CLICK
 *-      - diguyViewLabel::CALLBACK_ID_BEGIN_DRAG
 *-      - diguyViewLabel::CALLBACK_ID_END_DRAG
 **
 *-    - Character callback:
 *-      - diguyCharacter::CALLBACK_ID_CHARACTER_CLICKED
 **
 *b    - New input mode:
 *-      - DIGUY_SCENARIO_INPUT_MODE_POINT_SELECT_WITH_CAMERA
 **
 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version1300 DI-Guy Version 13.0.x
 **
 *****************************************************************************
 *****************************************************************************
 **
 ** \subsection  v1301b_diguyAPIChangesb DI-Guy 13.0.1 API Changes
 **
 *-    - minimized the number of times shape build and unbuild is run.
 **
 ** \subsection  v1301a_api Version 13.0.1a
 **
 *-    - Fixed hard crash when browsing scene objects
 **
 ** \subsection  v1301_api Version 13.0.1
 **
 *b    Import Pipeline
 *-    - Improved support for collada mesh data exported from Maya.
 *-    - Fixed issue where capitalized FLT extension could confuse material system.
 **
 *b    Animation System:
 *-    - Animation system regression fix to 12.5, restored a while loop that was
 *-      needed when update loop was fed a long time step.
 *-    - Fixed potential issue in animation system when update loop was fed a
 *-      long time step.
 *-    - Fixed animation rotation interpolation on joints when imported into motion editor
 *-      via collada.
 *-    - Fixed calculation of script/decision bead position when multi-arc rep
 *-      motion instances are used.
 *-    - Regression fix, diguyCharacter::create_and_force_bridge_path() didn't work properly due
 *-      to action editing improvements.
 *-    - Added diguyCharacter::set_desired_position_double() and get_desired_position_double()
 *-    - Improved guide code to handle large value locations better.
 *-    - Increased precision of positions to better support geocentric coords.
 *-    - Fixed a crash that could occur when a character playing an animation had it's
 *-      character type changed, (reasonably possible with networking lib)
 *-    - Characters with custom up vectors will move better along the coordinate system
 *-      that the up vector defines. previously limited to motions with forward direction
 *-      and other limitations.
 *-    - Fixed bug where characters that had their default hand item set and then the item that
 *-      the default actually equaled could loose what was in their hand.
 *-    - Fixed bug where ground clamped vehicles weren't following the terrain, (broken in 13.0.0)
 *-    - Calling diguyCharacter::set_speed() while a character is transitioning into a still motion,
 *-      will now no-op. Previously setting speed to 0 when a character played certain dead transitions could
 *-      wind up freezing the character in mid fall.
 *-    - Motions that are slowed down will automatically interpolate.
 *-    - Increased the max speed of iguy strafing.
 *-    - Added diguyCharacter::set_local_to_world_orientation_matrix() experimental function
 *-      allowing a rotated plane to be used for character movement displacement calculations.
 *-      useful for geocentric rendering and animation.
 *-    - Improved diguyCharacter::force_action() with a speed, to no longer speed warp transition animations.
 *-    - Fixed a number of speed scale and velocity scaling issue. Regressions to 12.5 as well as
 *-      long standing issues
 *-    - Fixed force action with a non-default speed with a scaled character/or different skeleton then expected
 *-      (eg female soldier)
 *-    - force action with default speed on a scaled/or different skeleton will now scale the speed
 *-      of the motion to match the expected action value.
 *-    - Improved IK system to properly handle uniformly scaled characters.
 *-    - Changing character appearance no longer resets a specified hand item, but will
 *-      still change to a new default if no item is specified.
 *-    - Fixed bug where up vector setting was being ignored on vehicle_09's on reset.
 *-    - Fixed bug where vehicles on reset could have oddly behaving wheels.
 *-    - Improved Vehicle based I-Guy to turn camera better, ground clamp properly and be
 *-      generally nicer.
 *-    - Fixed bug where changing turreted vehicle's appearances could have incorrect
 *-      aiming/firing behavior.
 *-    - Regression fix, preloading a character type did not properly preload animation data.
 *-    - Fixed but with reporting initial action for a path with an action that didn't have a transition out.
 *-    - Fixed a number of non-growing memory leaks, and memory access issues.
 *-    - Tweaked anisotropic filtering default to be 1.0 not 0.0 matches OpenGL spec.
 **
 *b    Camera:
 *-    - Merged 12.5.4 camera functionality dealing with supporting camera roll into 13.0.1
 *-    - Better handling of camera smoothing, keeps camera motion smooth while resolving jitter
 *-      when tracking characters.
 **
 *b    Networking:
 *-    - Upgraded VR-Link to 5.1.2.
 *-    - Fixed hard crash when networked entity goes on/off-line and changes appearance.
 *-    - Added debugging visuals for received actions.
 *-    - Added culling to debugging visuals to keep performance reasonable.
 *-    - Added diguyCharacter::set_is_network_paused() allows end users to duplicate network
 *-      paused behavior without using our network layer.
 *-    - Improved warning messages from lua when invoked from script bead, couple other fixes.
 *-    - Fixed hard crash interaction between destroying networked characters and instancing
 *-    - Fixed issue where diguy 12.5 style DIS packets were being sent.
 *-    - Fixed network teleporting on reset and other large discontinuous position updates.
 *-    - Fixed a number of drift and adaptive guide parameter bugs.
 *-    - Networking module will always send out action speed as part of custom PDU, was only
 *-      happening if it was a non-default speed.
 *-    - Added new z velocity threshold option for forcing a packet update, this can help with
 *-    - up and down movement over the network.
 *-    - Added a new UI for editing packet thresholds.
 *-    - Fixed bug where teleporting vehicles did not have proper orientation.
 *-    - Rewrote data that went out describing human articulated aiming data. Previous solution
 *-      was world space xyz positions, that wouldn't really work in other coordinate systems.
 *-      We are now sending more portable azimuth and elevation data that should be cleaner.
 *-      A similar change was made for gaze descriptions.
 *-    - DI-Guys have marking text set to their names by default
 **
 *b    Instancing
 *-    - Updated instancing to respect texture swaps.  Can be toggled off for increased performance.
 *-      Added instancing_respect_graphics_state_switch to bdiGraphicsInitGraphicsAPI struct.
 *-    - Fixed networking sending of velocity of characters playing speed scaled motions.
 **
 *b    Rendering
 *-    - Fixed asynchronous texture load shader ugliness when switching between shaders when
 *-      spec/normal maps haven't been loaded yet.
 **
 *b   AI:
 *-    - Fixed issue where dragging an AI could reset their mind and confuse their location.
 *-    - Fixed small nav mesh glitch which caused a failure to detect some impassable polygons.
 **
 *b  Sound:
 *-    - Fixed Doppler Effect bugs: improper velocity updates caused stuck/distorted sounds.
 **
 *b  Misc:
 *-    - Fixed fatal errors in lqt when dealing with certain widget types.
 **
 *b  Draw Passes
 **
 *-    - New draw pass system allows client applications to register draw passes
 *-      with DI-Guy that are called instead of the native rendering when calling
 *-      diguyScenario::draw().  Clients can add any number of draw passes each with
 *-      an optional preDraw() and postDraw() callback.
 *-    - The example programming_examples/diguy_plugin/diguy_plugin_sensor_fusion exercises
 *-      the draw pass functionality.

 **************************************
 ** \subsection  v1301_diguyAPIChanges DI-Guy 13.0.1 API Changes
 **************************************
 **
 *b   New API functions
 **
 *-    - diguyApp::add_draw_pass()
 *-    - diguyApp::remove_all_draw_passes()
 *-    - diguyCharacter::get_lod_ranges()
 *-    - diguyCharacter::get_num_lods()
 *-    - diguyScenario::calculate_character_lods()
 *-    - diguyGraphicsInstanceGroup::get_graphics_state_switch_index()
 **
 **
 *b   New API Classes
 **
 *-    - diguyDrawPass
 **
 **************************************
 ** \subsection  v1301_diguyGFXAPIChanges DI-Guy 13.0.x Graphics API Changes
 **************************************
 **
 ** \subsubsection  v1301_gapi Version 13.0
 *-    - Fixed issues with diguyGraphicsLinks::get_rotation_euler(), and diguyGraphicsLinks::get_rotation_quat()
 *-      to return valid values even if the underlying data is still in eulers or quats (currently happens with some vehicles.)
 **
 *b   OpenGL reference Code
 **
 *-    - Added nicer support for asynchronous texture loading proxy textures.
 *-      see diguyOglGraphicsTexture::build_opengl_texture() for updated sample code.
 **
 *b   OSG reference Code
 **
 *-    - Large rewrite of culling/lod system, a new custom node early outs culling based
 *-      on simplified bounding volume. Also short circuits LOD picking and OSG character traversal.
 *-      drops cost of culling by 90%.
 *-    - Added custom TBO class to remove limitation of instancing only working on OSG 3.2 or greater.
 *-    - Changed diguyOsgGraphicsShape::update() to check for transposed shader matrices
 *-      before pushing data to OSG instead of via an #ifdef guard.
 **
 ** \subsubsection  v1300_api Version 13.0
 **
 *b Defaulting to VC10
 **
 *-    - DI-Guy Applications are now compiled with Visual Studio 2010 which is now
 *-      the default compile target.
 *-    - VC10 project files are now available for most programming examples. These make
 *-      use of property sheets to share variables and configurations between many different
 *-      examples and configuration targets.
 **
 *b  Appearance System
 **
 *-    - New hand item appearance system, reduces the need for hundreds of appearances.
 *-      Character types now specify information about what hand items are appropriate
 *-      and configuration information applies that to existing appearances.
 *-    - Fixed bug with decision beads. No head appearances were being shown after
 *-      revamping the head appearance system.
 *-    - Fixed bug where current body/head/hands appearances weren't restored to
 *-      defaults on reset.
 *-    - Motion engine is no longer reset when changing heads or hands.
 **
 *b Real time IK system
 **
 *-    - New system for leg and hand/gun real-time adjustments. Feet stick better to terrain/stairs.
 *-      Hands can now be made to adapt to different weapons without creating new animations.
 **
 *b   Core Animation API
 **
 *-    - Quaternion pipeline is now on by default, this can yield a 10-15% update speed up.
 *-      If this causes any issues it can be turned off by calling
 *-      diguyApp::set_precompute_quaternions_enabled(0).
 *-    - Rewrote portions of spline interpolation code to give consistent velocity results
 *-      regardless of number of segments used. Most notable on vehicles with long paths that
 *-      could exhibit sawtooth velocities in the past.
 *-    - Fixed bug in set orientation that could allow > 2 PI orientations.
 *-    - Modified action lookup to return closer speed based action if alternative variant
 *-      is specified.
 *-    - Waypoint segment changes should now affect visuals.
 *-    - Large internal rewrites of systems to support blend tree system, animations play back in
 *-      normalized time, position accumulation works off of dt instead of absolute animation time.
 *-      Please report any regressions to DI-Guy.
 **
 *b  Blend Tree system
 **
 *-    - New animation blend tree system. Enables new multi-direction locomotion animations,
 *-      aiming while running, and using one action to map to multiple animations. For example
 *-      1 character type can now have a stand_ready action that maps to a number of
 *-      different animations based on what's in their hand.
 *-      Available animation nodes include 1D blender, 2D blender, 2 Animation priority
 *-      weight masker, motion selector.
 *-    - Added demoing tools for locomotion, aiming and tool use to DIGuyCharacterViewer.
 *-    - New Node graph editor in Motion Editor.
 *-    - New system for triggering events from within animations, scripts and decisions are available.
 **
 *b   Motion Editor
 **
 *-    - Fixed many motion export issues.
 *-    - Added Collada Dae animation file import to Motion Editor.
 *-    - Added bdm2dae, a new bdm to Collada converter to allow animations to be edited in 3ds Max
 *-      or Maya.
 *-    - Added animation blend tree node editor for authoring animation nodes.
 *-    - Added new DI-Guy extras window includes tools for evaluating different DI-Guy
 *-      appearances (hand/head) with motions, turning on/off IK and visualizing.
 *-    - Fixed hard crash in Motion Editor when reversing short motions.
 *-    - Fixed Motion Editor mirroring functionality.
 *-    - Added new editor for adding script/decision events to animations (experimental).
 **
 *b  Aiming
 **
 *-    - Slowed down aim tracking when character is on top of target. Aiming could
 *-      oscillate badly before.
 *-    - Fixes to aiming deflection code. Fixes bug where character could sometimes ignore
 *-      extreme aim at azimuths.
 *-    - Cleaned up aim converge code, only takes one argument on/off now.
 *-    - diguyCharacter::force_action() will no longer reset aimer.
 **
 *b   DI-Guy AI
 **
 *-    - Removed DIGUY_DYNAMIC_AVOIDANCE_METHOD_SIMPLE. It wasn't being used.
 *-    - Added diguyDynamicAvoidanceMethod DIGUY_DYNAMIC_AVOIDANCE_METHOD_REPULSION_ZONES_AND_PROJECTED_FORCES, a
 *-      new algorithm that incorporates facing direction and character velocity into influence calculations.
 *-      Crowds with repulsion_zone set in dss get automatically upgraded to the new force model.
 *-    - Influence forces are now visualized by increasing red amount in influence disk to represent
 *-      strength of force on character.
 *-    - Desired force heading line is now green-to-red to better differentiate from repulsion force.
 *-    - Fixed bug where repulsion zone on/off didn't actually work.
 *-    - Fixed bugs in 'teleport at end of path' travel option.
 *-    - The velocity of the current action no longer affects the strength of the force
 *-      contribution. This makes running characters less likely to plow through crowds.
 *-    - Added smoothing to accumulated crowd forces. Lowers the amount of jittering from
 *-      the new force model.
 **
 **
 *b Networking
 **
 *-    - Upgraded VR-Link to 5.0.1.
 *-    - HLA configuration files now live in $DIGUY/config/diguy/networking you may need to update your
 *-      RTI_CONFIG environment variable.
 *-    - Added support for HLA Evolved.
 *-    - Added new DI-Guy HLA Evolved module.
 *-    - New HLA FOM for 1.3 and 1516, adding support for head and hand appearances.
 *-      Older FOMs will default to sending 12.5 compatible appearances.
 *-    - DIS custom pdu DIGUY_CUSTOM_PDU_ID_SET_CHAR_APPEARANCE now contains 3rd string for hand appearance.
 *-    - DIS custom pdu DIGUY_CUSTOM_PDU_ID_SET_SHAPE_VARIATION has been deprecated see
 *-      DIGUY_CUSTOM_PDU_ID_SET_SHAPE_VARIATION_2 for a hardened version of this pdu.
 *-    - Characters now publish angular velocity every frame.
 *-    - Most of the math in the drift guide has been rewritten:
 *>
 *-      - Now integrates the desired position forward based on desired velocity.
 *-      - Uses desired angular velocity to modify the orientation over time.
 *-      - Uses desired angular velocity to modify desired velocity.
 *-      - Faster non asymptotic drifting to desired location/orientation.
 *-      - Removed course error concept from guide.
 *<
 *-    - Fixed bug with new female casuals with skin tones getting sent over network.
 *-    - Fixed logic bug with DIGUY_CUSTOM_PDU_ID_SET_SHAPE_VARIATION handling and
 *-      multiple variation textures.
 *-    - Updated sample code demonstrating processing DIGUY_CUSTOM_PDU_ID_SET_SHAPE_VARIATION packet.
 *-    - Use transition time and velocity ramping to better slow down decelerating characters who are
 *-      transitioning to stationary motions.
 *-    - We now only sync speed for characters that don't have custom PDUs being sent, we rely on the
 *-      initial speed from the action PDU. Fixes issues with crawling, and transition speed.
 *-    - Change publishing code to send the desired action instead of the current action. Lets
 *-      transitions go out over the network at the start of transition instead of after it's completed.
 *-    - Published velocity is now the average velocity for characters performing most simple actions, this
 *-      avoids slow or fast packets and yields better dead reckoning results. Character's transitioning or
 *-      colliding with objects should send raw velocity.
 *-    - Guide example has been heavily rewritten.
 *-    - Tweaked network guide defaults a bit.
 *-    - network.cfg now saves to disk when going on line not off-line.
 *-    - Added adaptive guide value to network.cfg.
 *-    - Added code to better handle characters playing locomotion animations over the network.
 **
 *b   DI-Guy For Unity
 **
 *-    - Added support for material swaps to renderer, (used by most skinned characters)
 *-    - Added support for gloss and spec maps to renderer.
 *-    - Textures needed by scenario should now unlz4 and place themselves into the resource directory
 *-      on the fly.
 **
 *b   DI-Guy General API
 **
 *-    - Improvements to changing character types while on a path, still not well supported.
 *-    - Fix bug where diguyCharacter::CALLBACK_ID_CURRENT_ACTION_CHANGED would not go off for
 *-      characters on paths.
 *-    - Fixed Collada files to use short indices for index buffer, 10% memory/disk improvement.
 *-    - Improved index buffer ordering to better make use of vertex cache, provides frame rate
 *-      speedup.
 *-    - Intersection callbacks will now test DI-Guy props after calling out to C++ user level code.
 *-    - Improved speed and memory usage of octtree generation.
 *-    - Fixed issues with intersecting non-uniformly scaled props.
 *-    - Fixed issues loading xrefs with multiple "../" in path names, and a number of other xref
 *-      transform issues.
 **
 *b   DI-Guy Graphics API Changes
 **
 *-   - diguyGraphicsLink::get_transformation_matrix_4x4_ptr() now returns a matrix that has scale incorporated
 *-     in. Removes need for calling glScalef and diguyCharacter::get_scale(), simplifies rendering code and helps
 *-     support instancing system, please update your code.
 *-   - virtual overridable calls diguyGraphicsLink::attach_to_link() and diguyGraphicsLink::detach_from_link()
 *-     have been removed, were only used by OSG and architecture improvements have meant that parented object
 *-     are managed the same way as non-parented objects, this should fix parenting in OSG.
 *-   - diguyGraphicsShape sample code no longer uses get_offset_translation/rotation/scale(), code has been deprecated.
 *-   - Support for Recursive Link Drawing has been removed.
 **
 **************************************
 ** \subsection  v13diguyAPIData DI-Guy 13.0.x Content Data
 **************************************
 **
 ** \subsubsection  v131data Version 13.0.1
 **
 *-    - Restored visibility of javelin, at4 soldiers.
 *-    - Changed character type usmc_smaw to soldier_smaw replaces an older deprecated model
 *-    - Modified medic to default to standing
 **
 ** \subsubsection  v130_data Version 13.0
 **
 *-    - Removed vast majority of unneeded appearances that have been replaced by hand item system.
 *-    - Upgraded Male/Female Bikers, Cameraman and Wheelchairs, Flight deck crew to be skinned
 *-      character compatible.
 *-    - Configuration setup for characters with secondary items (hoses, bikes, wheelchairs) has
 *-      been simplified to not require additional actors.
 *-    - New car appearances authored via modern pipeline, skinned objects needing only 2 draw
 *-      calls with bump/spec/AO/variation.
 *-    - New Female casual appearances.
 *-    - New Male casual appearances.
 *-    - New Opfor appearances.
 *-    - New Construction Worker character type.
 *-    - Animation blend tree functionality is now used in soldier_07/mideast_soldier_07 character
 *-      types, this adds support for:
 *>
 *-      - multi-directional movement is now supported via new actions upright_movement,
 *-        crouched_movement and prone_movement.
 *-      - all moving aim animations now support aiming different directions by combining original
 *-        motion with stand_aim data.
 *<
 *-    - Added movement locomotion action to all vehicle character types as well as bikers and wheelchairs,
 *-      can use diguyCharacter::set_animation_local_velocity() to go at any speed, not just quantized
 *-      values in the past.
 *-    - All character animation configuration files have been upgraded to support quaternion pipeline.
 **
 **************************************
 ** \subsection  v13diguyAPIChanges DI-Guy 13 API Changes
 **************************************
 **
 *b   New API functions
 **
 *-    - diguyIGuyController::get_is_colliding()
 *-    - diguyScenario::get_hand_item_class()
 *-    - diguyScenario::get_num_hand_items_in_class()
 *-    - diguyScenario::get_hand_item_from_class()
 *-    - diguyScenario::set_realtime_ik_enabled()
 *-    - diguyScenario::get_realtime_ik_enabled()
 *-    - diguyScenario::set_draw_ik_visuals()
 *-    - diguyScenario::get_draw_ik_visuals()
 *-    - diguyScenario::set_draw_skeletons()
 *-    - diguyScenario::get_draw_skeletons()
 *-    - diguyScenario::draw_character_labels()
 *-    - diguyScenario::update_character_labels()
 *-    - diguyCharacter::get_desired_action_index()
 *-    - diguyCharacter::get_current_action_index()
 *-    - diguyCharacter::get_current_action_direction()
 *-    - diguyCharacter::set_animation_target_el()
 *-    - diguyCharacter::get_animation_target_el()
 *-    - diguyCharacter::set_animation_target_az()
 *-    - diguyCharacter::get_animation_target_az()
 *-    - diguyCharacter::set_animation_velocity()
 *-    - diguyCharacter::get_animation_velocity()
 *-    - diguyCharacter::set_animation_local_velocity()
 *-    - diguyCharacter::get_animation_local_velocity()
 *-    - diguyCharacter::set_animation_angular_velocity()
 *-    - diguyCharacter::get_animation_angular_velocity()
 *-    - diguyCharacter::get_desired_velocity()
 *-    - diguyCharacter::set_desired_angular_velocity()
 *-    - diguyCharacter::get_desired_angular_velocity()
 *-    - diguyCharacter::get_num_ik_chains()
 *-    - diguyCharacter::get_ik_chain_name_at_index()
 *-    - diguyCharacter::set_ik_target_world()
 *-    - diguyCharacter::set_ik_target_local()
 *-    - diguyCharacter::disable_ik_target()
 *-    - diguyCharacter::set_distance_to_primary_camera()
 *-    - diguyCharacter::get_distance_to_primary_camera()
 *-    - diguyCharacter::get_motion_engine_snapshot()
 *-    - diguyCharacter::apply_motion_engine_snapshot()
 *-    - diguyViewPainter::debug_pa_add_2d_point( )
 *-    - diguyViewPainter::debug_pa_add_3d_point( )
 *-    - diguyViewPainter::debug_pa_set_param_color( )
 *-    - diguyViewPainter::debug_pa_set_param_style( )
 *-    - diguyViewPainter::debug_pa_reset( name)
 *-    - diguyViewPainter::draw_point_arrays()
 **
 *b     DI-Guy Networking
 *-    - diguyNetInterface::set_fom_file_name( )
 *-    - diguyNetInterface::set_base_module_name( )
 **
 *b     DI-Guy AI
 *>
 *-    - diguyCrowdProfile::set_hand_item()
 *-    - diguyCrowdProfile::get_hand_item()
 *-    - diguyAgentParams::set_influence_box_forward_multiplier()
 *-    - diguyAgentParams::get_influence_box_forward_multiplier()
 *-    - diguyAgentParams::set_influence_box_sideways_multiplier()
 *-    - diguyAgentParams::get_influence_box_sideways_multiplier()
 *-    - diguyAgentParams::set_influence_box_angular_multiplier()
 *-    - diguyAgentParams::get_influence_box_angular_multiplier()
 *-    - diguyAgentParams::get_near_destination_distance()
 *-    - diguyAgentParams::set_near_destination_distance()
 *-    - diguyAgentParams::get_navpath_current_waypoint_index()
 *-    - diguyAgentParams::get_navpath_num_waypoints()
 *-    - diguyAgentParams::get_navpath_path()
 *-    - diguyAgentParams::get_navpath_travel_direction()
 *-    - diguyAgentParams::get_navpath_offset_y()
 *-    - diguyAgentParams::set_navpath_offset_y()
 *<
 **
 *b     DI-Guy Graphics API
 *>
 *-    - diguyGraphicsLink::get_rotation_euler()
 *-    - diguyGraphicsLink::get_rotation_quat()
 *-    - diguyGraphicsLink::instancing_state_changed()
 *-    - diguyGraphicsMesh::draw_instance_group()
 *-    - diguyGraphicsShaderProgram::get_shader_version()
 *-    - diguyGraphicsShape::instancing_state_changed()
 *-    - diguyGraphicsShape::get_link_to_matrix_table()
 *-    - diguyGraphicsShape::get_bone_index_from_link_index()
 *-    - diguyGraphicsShape::get_num_variations()
 *-    - diguyGraphicsShape::get_variation_name()
 *-    - diguyGraphicsShape::set_variation_index()
 *-    - diguyGraphicsShape::get_has_custom_variation()
 *-    - diguyGraphicsShape::get_num_variation_components()
 *-    - diguyGraphicsShape::get_variation_component_name()
 *-    - diguyGraphicsShape::get_variation_component_index()
 *-    - diguyGraphicsShape::set_variation_component_value()
 *-    - diguyGraphicsShape::set_state_switch_index(  )
 *<
 **
 *b   New API Classes
 **
 *-    - diguyMotionEngineSnapshot
 **
 *b    API's functions modified
 **
 *-    - diguyScenario::create_character()
 **
 *b   Deprecated the following functions:
 *-      - diguyGraphicsShape offset api, was never actually used in modern models.
 *>
 *-      - diguyGraphicsShape::get_has_offset_translation()
 *-      - diguyGraphicsShape::get_offset_translation()
 *-      - diguyGraphicsShape::get_has_offset_rotation()
 *-      - diguyGraphicsShape::get_offset_rotation()
 *-      - diguyGraphicsShape::get_has_offset_scale()
 *-      - diguyGraphicsShape::get_offset_scale()
 *<
 *b   Deprecated functions Removed
 *-    - Removed the following deprecated functions (see diguyCharacter.h for recommended replacements):
 *>
 *-      - diguyCharacter::get_base_link()
 *-      - diguyCharacter::set_apply_actor_scale_to_action_bead_xy_travel()
 *-      - diguyCharacter::get_apply_actor_scale_to_action_bead_xy_travel()
 *-      - diguyCharacter::set_default_weapon_sound()
 *-      - diguyCharacter::get_default_weapon_sound()
 *-      - diguyCharacter::set_default_weapon_sound_gain()
 *-      - diguyCharacter::get_default_weapon_sound_gain()
 *-      - diguyCharacter::set_weapon_munition_type()
 *-      - diguyCharacter::get_weapon_munition_type()
 *-      - diguyCharacter::set_weapon_horizontal_error()
 *-      - diguyCharacter::get_weapon_horizontal_error()
 *-      - diguyCharacter::set_weapon_vertical_error()
 *-      - diguyCharacter::get_weapon_vertical_error()
 *-      - diguyCharacter::set_shader_program()
 *-      - diguyCharacter::get_recommended_appearance_shader_program_name()
 *-      - diguyCharacter::merge_asset()
 *-      - diguyCharacter::set_DIS_smoke_trail_state()
 *-      - diguyCharacter::get_DIS_smoke_trail_state()
 *<


 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version125 DI-Guy Version 12.5
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 ** \subsection  v125diguyAPI DI-Guy Core SDK
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 ** \subsubsection  v1254api Version 12.5.4
 **
 *-    - Fixed hard crash when receiving a variation network packet from DI-Guy 13 that didn't
 *-      match character's expected layout.
 *-    - Orientations assigned to the camera will be applied in the order of yaw, pitch, and roll
 *-      (from the perspective of an imaginary "pilot" interacting with control sticks inside the
 *-      camera), starting with the camera facing along the +x world axis
 *-    - If the camera is attached to a dolly entity and set_orientation_offset_is_relative() has been
 *-      called, the orientation setting will actually be relative to the direction in which the
 *-      dolly entity is facing. Otherwise, the orientation will be applied relative to the world
 *-      axes, as it is normally.
 *-    - The camera attempts to maintain the roll setting given to it through the API. Thus, the
 *-      camera could be tracking a character, but tilted to one side or another.
 *-    - Added set_orientation_offset_is_relative()
 *-    - turned on LARGEADDRESSAWARE flag for 32-bit DI-Guy Scenario allows a larger memory footprint.
 **
 ** \subsubsection  v1253api Version 12.5.3
 **
 *-    - Fixed a bug in diguyApp::set_num_rendering_passes() where it would not effect
 *-      rendering in the graphics API.
 *-    - Added support for two pass transparency rendering in the Graphics API
 *-    - Fixed appearances not instantly broadcasting a PDU when character appearance changed.
 *-    - Fixed position pop when character appearance changed.
 *-    - Fixed hard crash when preloading appearances with legacy character types.
 *-    - Fixed bug with handling of uppercase extensions on geometry data.
 **
 ** \subsubsection  v1252api Version 12.5.2
 **
 *-    - Fixed precision issue in diguyCharacter::get_position_double().
 *-    - Fixed xref bounds issue on initial scene object load.
 *-    - Fixed dae LOD issue where lod's after 0 were not loaded.
 *-    - Added diguyCharacter::get_num_appearances_of_type() and
 *-      diguyCharacter::get_appearance_name_at_index() accessors for various appearances.
 *-    - Vehicles that aren't sending custom PDU's will still generate repulsive
 *-      bounds for crowds.
 **
 ** \subsubsection  v1251api Version 12.5.1
 **
 *-    - Fixed bug where customer sourced dds files failed to load because we assumed
 *-      they were lz4'ed.
 *-    - Fixed bug where files with capitalized extensions eg "FLT" failed to load.
 *-    - Fixed bug where invalid xrefs caused parent bounding boxes to fail to register
 *-      as possibly valid.
 *-    - Fixed hard crash when drawing empty octtree.
 *-    - Fixed matrix state glitch when drawing octtree and scene object bounds
 *-    - Fixed path planning bug in funnel code when far above the z origin.
 *-    - Fixed bug where browsing for a new scene object file name didn't force octtree
 *-      recreation.
 *-    - Fixed logic bug in check visibility code.
 *-    - Fixed bug where changing appearances could cause single frame muzzle flashes and
 *-      loss of character skinning matrices.
 *-    - Fixed bug where flt files were unable to have their material edited by
 *-      the character viewer
 *-    - Fixed bug where changing character type caused all action beads to collapse
 *-      on a path.
 *-    - Added additional guide example showing differences between similar and dissimilar
 *-      character types.
 *-    - Fixed bug in built-in OpenGL renderer where fixed function mode didn't properly
 *-      bind textures. Fixes textureless segmented characters rendering in Motion Editor.
 *-    - Fixed joystick not properly loading in I-Guy mode.
 *-    - Fixed ray testing against scaled scene objects.
 *-    - Fixed off by one error in link combo in character viewer.
 *-    - Fixed bug in Lua debugger. "Step over" and "Step out" buttons were not working correctly
 *-    - General improvements to code that tests get_enabled() and get_dead() on a character,
 *-      the code will now also test the character's t_out compared to current time
 *-    - Added diguyAgentParams:set_influence_box_enabled() (and get)
 *-    - Fixed bug with ground clamping on large scenarios.
 *-    - Fixed performance issue with receiving props over the network.
 *-    - Improved shadow pass rendering performance.
 *-    - Shader cleanup.
 *-    - Changed Graphics API shader samples to default point light #define to off.
 *-    - Fixed crash when executing gesture that wasn't made for a character.
 *-    - Fixed crash when loading degenerate flt file xrefs.
 *-    - Improved memory use when decompressing many dds files.
 *-    - diguyCharacter::set_orientation() now checks if the character has a vehicle
 *-      controller and if so, it now allows the caller to hard-set the vehicle's
 *-      orientation. Previously, only the vehicle controller determined this.
 *-    - diguyCharacter::find_path() now checks if the character_type contains the
 *-      substring 'vehicle' and if so, the path produced will be wide enough to allow
 *-      the character to pass, based upon character's bounding-box's width.
 *-    - Added a number of try/catch blocks to deal with running out of memory while
 *-      loading extremely large scenarios.
 *-    - Added code/UI to allow DI-Guy Scenario to unload textures when not used for
 *-      a long time. Off by default.
 *-    - Added a number of experimental diguyApp memory management functions:
 *>
 *-      - diguyApp::set_threshold_to_unload_textures()
 *-      - diguyApp::get_threshold_to_unload_textures()
 *-      - diguyApp::set_texture_unload_frequency()
 *-      - diguyApp::get_texture_unload_frequency()
 *-      - diguyApp::get_unload_unused_after_scenario_load()
 *-      - diguyApp::set_unload_unused_after_scenario_load()
 *<
 **
 ** \subsubsection  v1250api Version 12.5.0
 **
 *b  CRITICAL api changes
 *-    - C++ callback:<br>
 *b       float AltitudeFunction( diguyScenario* scenario, float x, float y, float old_z); <br>
 *-      has been replaced with <br>
 *b       float AltitudeFunction( diguyScenario* scenario, float x, float y, float old_z, int * valid);<br>
 *-      code will need to be updated before recompiling.
 *-    - Graphics API
 *>
 *-      - bdiGraphicsInitGraphicsAPI.use_4x3_shader_matrices must be set to 0 if you
 *-        aren't planning on upgrading shaders to use 4x3 matrices.
 *-      - As a performance optimization we are no longer transposing our internal matrix
 *-        representation in C++ before sending to OpenGL.
 *-        4x4 matrix bind should get updated to
 *e          glUniformMatrix4fv(m_bind_location_ufrm_link_matrices,   // uniform var location
 *e            num_mats,    // number of matrices
 *e            !get_transposed_matrix_data(),    // whether to transpose matrix
 *e            mat_data);   // pointer to matrix data
 *-        where bdiGraphicsInitGraphicsAPI.transpose_shader_matrices has been properly set
 *-        see diguyOglGraphicsShaderProgram.cpp for example.
 *<
 **
 *b  New Features
 *-    - New adaptive guide allowing characters to fix dead reckoning errors with appropriate
 *-      step and strafe motions. Now the default in the networking system as well as featured
 *-      in the guide example.
 *-    - New texture variation system allowing for infinite variations on next-gen
 *-      characters. See diguyCharacter::set_use_texture_variations().
 *-    - Next-gen characters now have a number of multiple available head appearances.
 *-    - Motion engine should now be fully multi-threaded, thread control api is part of diguyApp.
 *-    - New C++ documentation system, utilizing doxygen.
 *-    - Fixed matrix update issues with motion lod system and skinned characters,
 *-      motion lod system can be used again with them, same issues had been happening with
 *-      segmented characters as well. We recommend using multi-threaded pipeline instead
 *-      of motion lods at this point.
 *-    - New ground clamp option 'g' - approximation based on ground clamping vehicle bounds
 *-    - Scene objects can now be collada DAEs.
 *-    - Added support for bump maps on scene objects.
 *-    - New multi-threaded asynchronous texture loader, controllable via scenario UI and
 *-      diguyCharacter::set_texture_load_behavior() and diguySceneObject::set_texture_load_behavior()
 *-
 *-    - Collision Infrastructure Improvements:
 *>
 *-        - Improved performance of ray tests with scenes with many props.
 *-        - Scene Object spatial partitioning system has been overhauled allowing scene objects
 *-          to be repositioned without recreating the octtree.
 *-        - Performance improvement for adding/deleting/transforming scene objects.
 *-        - Octtree memory usage has been reduced by 10%.
 *-        - Octtree is now available for end users who's objects are not flt files, see
 *-          scene_object_mesh programming example.
 *<
 *-    - New Scene Object collision control API functions:
 *>
 *-        - diguyScenario::create_user_defined_scene_object()
 *-        - diguySceneObject::add_vertex_to_user_defined()
 *-        - diguySceneObject::add_triangle_to_user_defined()
 *-        - diguySceneObject::add_vertex_array_to_user_defined();
 *-        - diguySceneObject::add_triangle_array_to_user_defined()
 *-        - diguySceneObject::add_triangle_to_user_defined();
 *-        - diguySceneObject::build_user_defined();
 *<
 *-    - New API functions:
 *>
 *-        - diguyCharacter::get_facefx_node_value()
 *-        - diguyCharacter::get_max_shader_quality_level()
 *-        - diguyCharacter::get_texture_load_behavior()
 *-        - diguyCharacter::get_use_texture_variations()
 *-        - diguyCharacter::set_max_shader_quality_level()
 *-        - diguyCharacter::set_texture_load_behavior()
 *-        - diguyCharacter::set_use_texture_variations()
 *-        - diguyImpact::get_impact_velocity(float* x, float* y, float* z)
 *-        - diguyImpact::get_is_from_net_detonation()
 *-        - diguyImpact::get_DIS_munition_septet_value(int septet_index)
 *-        - diguyImpact::get_DIS_site()
 *-        - diguyImpact::get_DIS_host()
 *-        - diguyImpact::get_DIS_event_number()
 *-        - diguyImpact::get_DIS_munition_number()
 *-        - diguyImpact::get_DIS_detonation_result()
 *-        - diguyImpact::get_DIS_burst_warhead_type()
 *-        - diguyImpact::get_DIS_burst_fuze()
 *-        - diguyImpact::get_DIS_burst_quantity()
 *-        - diguyImpact::get_DIS_burst_rate()
 *-        - diguyScenario::get_character_type_from_appearance();
 *-        - diguyScenario::get_num_character_types_with_appearance()
 *-        - diguyScenario::get_weapon_fire_effects_enabled()
 *-        - diguyScenario::set_default_intersection_function()
 *-        - diguyScenario::set_intersection_function()
 *-        - diguyScenario::set_particle_module_disabled()
 *-        - diguyScenario::set_weapon_fire_effects_enabled()
 *-        - diguySceneObject::get_max_shader_quality_level()
 *-        - diguySceneObject::get_texture_load_behavior()
 *-        - diguySceneObject::set_max_shader_quality_level()
 *-        - diguySceneObject::set_texture_load_behavior()
 *-        - diguy_ogl_apply_active_lights();
 *<
 *-    - Upgraded lua/C++ binding library. Should greatly improve the readablity of error warnings
 *-      when lua improperly calls C++.
 *-    - diguyCharacter::get_ai_state_string() signature has changed to have flags for
 *-      optionally including callstack info.
 *-    - diguyCharacter::is_within_distance_n_of_member_of_group() factors in if a character
 *-      is enabled.
 *-    - Fixes to the bead constraints system (and user interface) renamed beads should
 *-      keep the script and decision constraints attached to them.
 *-    - Fixed bugs where script and decision beads attached to the end of paths and stop
 *-      signs didn't always trigger, or triggered later then might be expected. This might
 *-      introduce slight timing changes to existing scenarios.
 *-    - Characters are now sorted before drawing, and depending on the rendering pass
 *-      drawn front to back or back to front.
 *-    - Fixed bug in diguyCharacter::force_partial_path() when a target action bead is specified.
 *-    - Fixed crash in diguyScenario::preload_appearance() when a non-existant appearance is specified.
 *-    - diguyScenario::preload_appearance() should now preload textures for appearances
 *-      that are based on material swaps.
 *-    - References to aim algorithm 7 have been removed.
 *-    - Deprecated Functions Removed:
 *>
 *-      - diguyApp::create_load_manager() replaced with diguyScenario::create_load_manager()
 *-      - diguyApp::get_load_manager() replaced with diguyScenario::get_character_load_manager()
 *-      - diguyApp::get_load_manager() replaced with diguyScenario::get_character_load_manager()->set_enabled(0)
 *-      - diguyCharacter::set_max_impact_hits() replaced with diguyCharacter::set_weapon_max_impacts()
 *-      - diguyCharacter::get_paused() replaced with diguyCharacter::get_is_network_paused()
 *-      - diguyCharacter::get_visible() replaced with diguyCharacter::get_is_drawn()
 *-      - diguyCharacter::set_aim_param_desired_locate_time()
 *-      - diguyCharacter::get_aim_param_desired_locate_time()
 *-      - diguyCharacter::set_aim_param_seek_tolerance()
 *-      - diguyCharacter::get_aim_param_seek_tolerance()
 *-      - diguyCharacter::set_aim_interpolation_flag()
 *-      - diguyCharacter::get_aim_interpolation_flag()
 *-      - diguyCharacter::set_aim_smooth_flag()
 *-      - diguyCharacter::get_aim_smooth_flag()
 *-      - diguyCharacter::set_aim_divisions()
 *-      - diguyCharacter::set_aim_param_time_constant() replaced with set_aim_param_acquire_factor()
 *-      - diguyCharacter::get_aim_param_time_constant() replaced with get_aim_param_acquire_factor()
 *-      - diguyCharacter::set_aim_param_time_constant2() replaced with set_aim_param_new_aim_duration()
 *-      - diguyCharacter::get_aim_param_time_constant2() replaced with get_aim_param_new_aim_duration()
 *-      - diguyCharacter::set_aim_param_reset_time_constant() replaced with set_aim_param_new_aim_factor()
 *-      - diguyCharacter::get_aim_param_reset_time_constant() replaced with get_aim_param_new_aim_factor()
 *<
 *-    - Deprecated Callbacks Removed:
 *>
 *-      - diguyCrowd::CALLBACK_ID_NEW_FOCUS_CHARACTER use diguyCharacter::CALLBACK_ID_AGENT_NEW_FOCUS_CHARACTER
 *-      - diguyCrowd::CALLBACK_ID_ATTACKER_OUT_OF_TARGETS use diguyCharacter::CALLBACK_ID_AGENT_ATTACK_OUT_OF_TARGETS
 *-      - diguyCrowd::CALLBACK_ID_ATTACKER_NO_VISIBLE_TARGETS use diguyCharacter::CALLBACK_ID_AGENT_ATTACK_NO_VISIBLE_TARGETS
 *-      - diguyCrowd::CALLBACK_ID_PURSUED_CHARACTER_REACHED use diguyCharacter::CALLBACK_ID_AGENT_PURSUE_TARGET_REACHED
 *-      - diguyCrowd::CALLBACK_ID_WANDER_TARGET_REACHED use diguyCharacter::CALLBACK_ID_AGENT_WANDER_TARGET_REACHED
 *<
 *-    - Fixed bug with T-in/T-out and review data on scene object characters.
 *-    - Updated perl header file examples with lua equivalents.
 *-    - Character viewer debug shader can now be used on scene objects
 *-    - Fixed bug on blinking characters when t-in was not 0.
 *-    - Fixed Expressive Faces pop when interacting with gaze code.
 *-    - Added the ability to pause the shadow map update and lower the update frequency.
 *-    - Added controls for adjusting the shadow map frustum and shadow acne fudge factor.
 *-    - Character culling is now based on the base link, not the position link.
 *-    - New DI-Guy Author APIs:
 *>
 *-      - diguyAuthorInterface
 *-      - diguyAuthorVisualMaterial
 *-      - diguyAuthorVisualMultiline
 *-      - diguyAuthorVisualObjectHandle
 *-      - diguyAuthorVisualObjectHandle
 *-      - diguyAuthorVisualRegionMesh
 *-      - diguyAuthorVisualRegionPaintbrush
 *-      - diguyAuthorVisualWaypoint
 *<
 **
 **************************************
 **  \subsection v125digs DI-Guy Scenario
 **************************************
 **
 ** \subsubsection v1250digs  Version 12.5.0
 **
 *-    - New lighting system triggered by particle effects and weapons fire.
 *-    - Improvements to 3d visuals for path editing.
 *-    - Merged some subwidgets in character page.
 *-    - Improved interactive Face Expression Editing.
 *-    - Improved determinism of fast forward, and setting current time via the VCR UI.
 *-    - Streamlined performance settings. Crowd Load Manager, Load Manager tabs have
 *-      been phased out, settings are now located in the performance page.
 *-    - Changing camera settings will now force a motion update on all characters.
 *-    - Property tree UI's now have slider widgets, easier to change values interactively.
 *-    - Labels above character's heads now autoscale and draw z-sorted.
 *-    - Right click menu now contains a shortcut to turning on the debug label.
 *-    - Right click on log window selection can now go to package selected or Character
 *-      selected.
 *-    - Shader UI includes the ability to edit character variation texture colors.
 *-    - Physx library has been rewritten to use Physx 3.2, this is upgraded from version 2.8, Physx
 *-      installer should no longer be needed.
 *-    - Fixed a number of sound looping issues.
 **
 **************************************
 ** \subsection  v125DIGuyAI DI-Guy AI
 **************************************
 **
 ** \subsubsection  v1250AI  Version 12.5.0
 **
 *-    - Improved turning motion system, now on by default.
 *-    - Variant system now treats the normal variant as an indicator to automatically
 *-      pick an appropriate variant for the character. Controlled by
 *-      diguyCharacter::agent_set_auto_variant_selection()
 *-    - System will now cycle through appropriate motions randomly.
 *-    - LuaCharacter - sleep_ignore_messages avoids resuming the coroutine.
 *-    - AI movement callbacks are now queued up and triggered at the end of the
 *-      multi-threaded update.
 *-    - New AI State Inspector - mini lua watch window, activate via right click menu.
 *-    - Added diguyCrowdProfile::create_character() short cut for using a profile to
 *-      create a character.
 *-    - Significantly improved speed of collision influence calculation for crowds.
 *-    - Crowd profiles have been updated to use new variation system.
 *-    - New API functions:
 *>
 *-        - diguyAgentParams::set_turning_motions_enabled()
 *-        - diguyAgentParams::get_turning_motions_enabled()
 *-        - diguyCharacter::agent_set_auto_variant_selection()
 *-        - diguyCharacter::agent_get_auto_variant_selection()
 *-        - diguyCrowdProfile::create_character()
 *<
 ***
 **************************************
 ** \subsection  v125gapi  Graphics API Changes
 **
 ** \subsubsection  v1253gapi  Version 12.5.3
 *-    - Fix for automatic graphics LOD switching not working in graphics api.
 **
 ** \subsubsection  v1252gapi  Version 12.5.2
 *-    - Fix in OpenSceneGraph implementation for leaking nodes when using
 *-      variation textures.
 **
 ** \subsubsection  v1251gapi  Version 12.5.1
 **
 *-    - Added functionality to support color picking intersection testing for
 *-      scene graph implementations.
 *-    - Added sample code demonstrating intersection testing with OpenSceneGraph.
 *-    - New API Functions:
 *>
 *-        - diguyCharacter::trigger_shader_refresh()
 *-        - diguyGraphicsShape::get_bind_color_array()
 *<
 **
 ** \subsubsection  v1250gapi  Version 12.5.0
 **
 *-    - Modified diguyOsgGraphicsMesh::build() to load appearance textures
 *-      on demand instead of pre-loading all appearance textures.
 *-    - Added support for 4x3 skinned matrices, saves 25% of the bandwidth and
 *-      uniform constants sent per character draw call. Now the default for OpenGL.
 *-      Configurable via bdiGraphicsInitOgl.use_4x3_shader_matrices and
 *-      bdiGraphicsInitGraphicsAPI.use_4x3_shader_matrices.
 *-      diguy_graphics_get_osg_defaults() and diguy_graphics_get_dx9_defaults()
 *-      have been added to make it a bit easier to get the defaults set up.
 *-    - Added sample code demonstrating use of 4x3 matrices for transform data.
 *-    - Greatly expanded shader techniques API, diguyGraphicsShaderTechnique can
 *-      now be subclassed and end users can create new shaders on the fly with
 *-      diguyGraphicsShaderTechnique::find_or_create_shader_variation(). End users
 *-      can override existing functionality and return alternatively compiled shaders
 *-      depending on their own criteria, sample code is provided demonstrating
 *-      conditionally compiling in point light support but only using shader when
 *-      necessary.
 *-    - Fixed matrix transpose mistake in diguyOglGraphicsLink.cpp
 *-    - Cleaned up computation of local space camera.
 *-    - Removed use of display lists from diguyOglGraphicsMaterial.cpp
 *-    - Cleaned up diguyOglGraphicsShaderInstance.cpp to reflect the use of shader
 *-      techniques.
 *-    - Added sample code demonstrating updating lighting state for simple point
 *-      lights on characters.
 *-    - Added sample code demonstrating using #defines to control compilation of
 *-      various shader features.
 *-    - Added support for variation system to sample code, this is shown in diguyOglGraphicsShape
 *-      and diguyOsgGraphicsShape.
 *-    - Added diguyOglGraphicsShaderTechnique demonstrating how to modify built-in
 *-      shaders and overriding our existing shader LOD system.
 *-    - New API Functions:
 *>
 *-        - diguyGraphicsShaderProgram::get_num_additional_feature_names()
 *-        - diguyGraphicsShaderProgram::get_additional_feature_name()
 *-        - diguyGraphicsShaderProgram::has_additional_feature()
 *-        - diguyGraphicsShaderProgram::get_vertex_shader_filename()
 *-        - diguyGraphicsShaderProgram::get_pixel_shader_filename()
 *-        - diguyGraphicsShaderProgram::get_transposed_matrix_data()
 *-        - diguyGraphicsShaderProgram::load()
 *-        - diguyGraphicsShaderProgram::get_use_4x3_shader_matrix_data()
 *-        - diguyGraphicsShaderTechnique::get_shader_by_distance()
 *-        - diguyGraphicsShaderTechnique::get_program_index_by_distance()
 *-        - diguyGraphicsShaderTechnique::get_shadow_pass_shader()
 *-        - diguyGraphicsShaderTechnique::find_or_create_shader_variation()
 *-        - diguyGraphicsShaderTechnique::pick_shader_program()
 *-        - diguyGraphicsShaderTechnique::build();
 *-        - diguyGraphicsShaderTechnique::add_additional_shader()
 *-        - diguyGraphicsShaderTechnique::get_num_additional_shaders()
 *-        - diguyGraphicsShaderTechnique::get_additional_shader_at_index()
 *-        - diguyGraphicsShape::get_variation_texture()
 *-        - diguyGraphicsShape::get_variation_texture_size()
 *-        - diguyGraphicsShape::update_variation_texture()
 *-        - Init params: bdiGraphicsInitGraphicsAPI.transpose_shader_matrices
 *-        - Init params: bdiGraphicsInitGraphicsAPI.use_4x3_shader_matrices
 *<
 **************************************
 ** \subsection v12diguynet  DI-Guy Networking
 **************************************
 **
 ** \subsubsection  v125  Version 12.5
 **
 *-    - New API Functions:
 *>
 *-        - diguyNetInterface::set_use_adaptive_guide()
 *-        - diguyNetInterface::get_use_adaptive_guide()
 *<
 *-    - New Custom PDU's ( Note: Functionality currently limited to DIS. )
 *>
 *-        - DIGUY_CUSTOM_PDU_ID_SET_SHAPE_VARIATION replicates variation texture over the network
 *-        - DIGUY_CUSTOM_PDU_ID_EXECUTE_GESTURE replicates the diguyCharacter::execute_gesture()
 *-          call over the network
 *-        - DIGUY_CUSTOM_PDU_ID_CHARACTER_SCALE replicates the diguyCharacter::set_scale()
 *-          value over the network.
 *<
 *-    - DIGUY_CUSTOM_PDU_ID_SET_CHAR_APPEARANCE Now contains a second optional
 *-      string for head appearances



 *****************************************************************************
 *****************************************************************************
 **
 **  \section Version120 DI-Guy Version 12.0
 **
 *****************************************************************************
 *****************************************************************************

 **************************************
 **  \subsection v12digs DI-Guy Scenario
 **************************************
 **
 ** \subsubsection  v1201digs  Version 12.0.1
 **
 *-    - Added visualization option for gaze vectors.
 *-    - Restored missing default face expressions and chain settings
 *-      libraries to new.dss.
 *-    - Added display of more callback information to the Event Mapper User
 *-      Interface.
 *-    - Fixed bugs with water shader.
 **
 **************************************
 ** \subsection  v12diguyAPI DI-Guy API
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 **
 ** \subsubsection v1203api   Version 12.0.3
 **
 *-    - Updated network model map for vehicles and also resolved issue with vehicles
 *-      stuttering on paths.
 *-    - Made fire and detonation PDUs use matching event ids. Added velocities to Fire
 *-      PDUs. M16 velocity is used by default for all weapons but can be overridden in
 *-      munition config file.
 *-    - Fixed DI-Guy Scenario bugs in copy/paste paths, action spreadsheet.
 *-    - Fixed minor content bugs involving missing torso on insurgent.
 **
 **
 ** \subsubsection v1202api   Version 12.0.2
 **
 *-    - Fixed diguyApp::reload_shader_programs() to support the graphics API.
 *-      See diguyOglGraphicsShaderProgram.cpp for minor change: shaders that
 *-      are already loaded must be detached on reload.
 *-    - Added diguyCharacter::set_shader_lod() and
 *-      diguyCharacter::get_shader_lod().
 *-    - Modified diguyCharacter::set_face_expression() to support a strength
 *-      multiplier.
 *-    - Modified diguyOsgGraphicsMesh::build() to load appearance textures
 *-      on demand instead of pre-loading all appearance textures.
 *-    - Call callbacks with id CALLBACK_ID_SCENE_OBJECT_IMPACT if
 *-      diguyScenario::trigger_detonation() or
 *-      diguyCharacter::trigger_detonation_on_character() are called.
 *-    - Values in diguy_dis_constants.h now available in scripting.
 *-    - Added a number of DIS detonation data values to diguyImpact; e.g.,
 *-      diguyImpact::get_DIS_detonation_result().
 **
 ** \subsubsection v1201api   Version 12.0.1
 **
 *-    - AI flee code now properly uses feeler callback to pick the longest
 *-      available flee route when near buildings.
 *-    - Fleshed out FaceFX api, fixed a number of after action review issues,
 *-      added the following functions:
 *>
 *-      - diguyCharacter::stop_facefx_animations()
 *-      - diguyCharacter::get_num_facefx_nodes();
 *-      - diguyCharacter::get_facefx_node_name();
 *-      - diguyCharacter::find_facefx_node_index();
 *-      - diguyCharacter::set_facefx_node_value();
 *<
 *-    - Updates to FaceFX sample content.
 **
 *-    - Added the following functions to help enable advanced shader materials
 *-      in the graphics api:
 *>
 *-      - diguyOglGraphicsShaderProgram::bind_uniform_with_location()
 *-      - diguyOglGraphicsShaderProgram::bind_uniform_with_location()
 *-      - diguyOglGraphicsShaderProgram::get_attrib_bind_location()
 *-      - diguyOglGraphicsShaderProgram::get_uniform_bind_location()
 *<
 *-    - Streamlined shader bind and unbind calls.
 *-    - Fixed issue where even with only 1 update thread was used some of the
 *-      multi-threaded infrastructure was active.
 *-    - Added warnings to various add_callback_script functions to warn if
 *-      the same callback is repeatedly added.
 *-    - Update Middle Eastern AI's to avoid perpetual memory growth.
 *-
 *-    - Changed multi-threading to only use the Qt threading framework when
 *-      more than one thread is allocated to DI-Guy.
 **
 ** \subsubsection v1200api   Version 12.0.0
 **
 *-    - In API programs shadow disks are off by default.  Now the
 *-      "set_draw_character_shadow_disks" setting in .dss files will be
 *-      ignored.  To turn shadow disks on or off an explicit call to
 *-      diguyScenario::set_draw_character_shadow_disks() needs to be made.
 *-    - Fixed diguyCharacter::agent_set_current_params_from_profile() so
 *-      arguments are in proper order.  *Note*: If you have existing calls
 *-      to agent_set_initial_params_from_profile(), verify that you are
 *-      getting proper behavior.
 *-    - Added the following functions:
 *>
 *-        - diguyAgentParams::set_wander_max_wander_dist()
 *-        - diguyAgentParams::set_wander_sets_desired_orientation()
 *<
 *-    - Removed the following experimental functions; should use minds
 *-      instead:
 *>
 *-        - diguyCharacter::add_state_machine_instance()
 *-        - diguyCharacter::remove_state_machine_instance()
 *-        - diguyCharacter::remove_all_state_machine_instances()
 *-        - diguyCharacter::find_state_machine_instance()
 *-        - diguyScenario::get_num_state_machines()
 *-        - diguyScenario::create_state_machine()
 *-        - diguyScenario::destroy_state_machine()
 *-        - diguyScenario::get_state_machine_at_index()
 *-        - diguyScenario::find_state_machine()
 *-        - diguyScenario::get_num_state_machine_instances()
 *-        - diguyScenario::add_state_machine_instance()
 *-        - diguyScenario::remove_state_machine_instance()
 *-        - diguyScenario::get_this_state_machine_instance()
 *-        - diguyCrowd::all_members_add_state_machine_instance()
 *-        - diguyCrowd::all_members_remove_state_machine_instance()
 *<
 *-    - Removed the following deprecated functions:
 *>
 *-        - diguyApp::set_student_log_callback()
 *-        - diguyApp::student_log_print()
 *-        - diguyApp::set_user_query_yes_no_callback()
 *-        - diguyApp::user_query_yes_no()
 *-        - diguyApp::set_user_query_text_callback()
 *-        - diguyApp::set_user_query_item_callback()
 *-        - diguyApp::user_query_item()
 *-        - diguyApp::set_user_inform_callback()
 *-        - diguyApp::user_inform()
 *<

 **************************************
 ** \subsection  v12DIGuyAI DI-Guy AI
 **************************************
 **
 **
 **************************************
 ** \subsection  v12gapi  Graphics API Changes
 **
 *-    - See the 11-12 transition guide in the SDK user manual for a complete
 *-      overview of the changes between 11 and 12

 *****************************************************************************
 *****************************************************************************
 **
 ** \section v11diguy DI-Guy Version 11
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 ** \subsection  v11diguyapi  DI-Guy API
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 ** \subsubsection  v1160api  Version 11.6.0
 **
 *-    - Added diguyRegionPaintbrushMode enum to diguy_constants.h.
 *-    - Fixed problem with agent_set_current_params_from_profile() use in
 *-      decision clauses.
 *-    - Made the following functions callable from decisions:
 *>
 *-        - diguyCharacter::agent_move_on()
 *-        - diguyCharacter::agent_move_to_region()
 *-        - diguyCharacter::agent_path_follow()
 *-        - diguyCharacter::agent_resume_path_follow()
 *-        - diguyCharacter::agent_set_current_focus_character()
 *-        - diguyCharacter::agent_set_current_focus_group()
 *<
 *-    - Added the following functions:
 *>
 *-        - diguyApp::set_region_paintbrush_mode()
 *-        - diguyApp::get_region_paintbrush_mode()
 *-        - diguyApp::set_munition_type_DIS_impact_septet()
 *-        - diguyApp::set_munition_type_DIS_tracer_septet()
 *-        - diguyCharacter::trigger_detonation_on_character()
 *-        - diguyCharacter::get_vehicle_body_orientation()
 *-        - diguyScenario::trigger_decision_delayed()
 *-        - diguyScenario::trigger_script_delayed()
 *-        - diguyScenario::get_altitude_from_point()
 *-        - diguyScenario::destroy_region()
 *-        - diguyScenario::save()
 *-        - diguyScenario::save_as()
 *-        - diguyScenario::get_filename()
 *-        - diguyScenario::get_filename_without_directory()
 *-        - diguyScenario::get_unsaved()
 *-        - diguyScenario::set_unsaved(int unsaved)
 *-        - diguyRegion::get_random_factor()
 *<
 *-    - Remove unused playback mode enum DIGUY_SCENARIO_PLAYBACK_MODE_RECORD.
 *-    - Made changes to some scenario call operations.  Previously the
 *-      diguyScenario::post_draw() call had no effect; it now allows various
 *-      post draw type operations to be optionally invoked.  Previously
 *-      these operations were automatically done at the end of
 *-      diguyScenario::draw_pass2().
 *-    - Added the following functions:
 *>
 *-        - diguyScenario::set_overall_history_type()
 *-        - diguyScenario::get_overall_history_type()
 *-        - diguyScenario::manually_invoke_callbacks_now()
 *-        - diguyScenario::set_current_region()
 *-        - diguyScenario::get_current_region()
 *<
 **
 **************************************
 ** \subsection  gapi  Graphics API Changes
 **************************************
 **
 ** \subsubsection  v1160gapi  Version 11.6.0
 **
 *-    - Moved the following functions from diguyGraphicsShaderInstance to
 *-      diguyGraphicsShaderProgram:
 *>
 *-        - diguyGraphicsShaderInstance::bind_link_matrices()
 *-        - diguyGraphicsShaderInstance::bind_color_array()
 *<
 **     Your Graphics API subclasses will need to be updated.
 **     bind_link_matrices() will now potentially be called multiple times per
 **     character depending on its complexity.  For example, animated faces
 **     from facefx will cause multiple matrix binds.
 **
 **     The signature for diguyGraphicsTexture::bind_now() has changed to
 **     diguyGraphicsTexture::bind_now(diguyTextureMapType texture_type) to
 **     support multi-texturing.  Your Graphics API subclasses need to be
 **     updated.
 **
 **************************************
 ** \subsubsection  v110xapi  Version 11.0.x
 **
 *-    - Added ability to hear sounds when history is enabled and time is
 *-      rewound to a point midway in the sound.  Note that the function
 *-      diguyScenario::set_history_max_sound_instances() lets users set how
 *-      many sound instances to be remembered; default is 100.
 *-    - Updated where DI-Guy looks for its license file.  It is looked for
 *-      in this order:
 *>
 *-        - file specified by the environment variable DIGUY_LICENSE_FILE
 *-        - file specified by the environment variable BDILM_LICENSE_FILE
 *-        - file specified by the environment variable LM_LICENSE_FILE
 *-        - license.dat in DI-Guy installation flexlm subdir
 *<
 *-    - Turned off character shadow disks by default when using SDK; they're
 *-      still on by default in DI-Guy Scenario.
 **
 ** \subsubsection  v1104api  Version 11.0.4
 **
 *-    - Resolved issues with wheeled vehicles on paths, force_action, and resume_path
 *>
 *-       - Problem with vehicles not resuming their path and remaining motionless after force_action("still")
 *-       - Problem with vehicles resuming path and wheels not spinning
 *-       - Problems with position discontinuities when force_action("still") is applied to a vehicle on a path
 *<
 ** \subsubsection  v1102api  Version 11.0.2
 **
 *-    - Updated where DI-Guy looks for its license file.  It is looked for
 *-      in this order:
 *>
 *-        - file specified by the environment variable DIGUY_LICENSE_FILE
 *-        - file specified by the environment variable BDILM_LICENSE_FILE
 *-        - file specified by the environment variable LM_LICENSE_FILE
 *-        - license.dat in DI-Guy installation flexlm subdir
 *<
 *-    - Turned off character shadow disks by default when using SDK; they're
 *-      still on by default in DI-Guy Scenario.
 *-    - Removed use of glCallList in materials for the Graphics API sample
 *-      code and the internal OpenGL renderer.  Call lists are deprecated
 *-      and have more overhead then just calling material functions
 *-      directly.
 *-    - Added early out sample code for materials to graphics API; end users
 *-      should now    have the tools to skip unnecessary material binds.
 *-    - Added a new geode/mesh merge as part of the bdg creation; should
 *-      cut number of meshes and draw calls in half for most of the non-
 *-      skinned characters.
 *-    - Added new draw stats profiler to improve feedback on pipeline
 *-      bottlenecks.  Profiler now available in Character Viewer.  (Press
 *-      Ctrl-P a few times.)
 *-    - Added linear draw pipeline init argument.
 *-    - Updated Benchmark sample program with new options and statistics.
 *-    - Fixed bug where get link positions would not take character scale
 *-      into effect.
 *-    - Added the following functions to DI-Guy Graphics API:
 *>
 *-        - diguyGraphicsLink::get_link_transformation_matrix()
 *-        - diguyGraphicsLink::begin_character_draw()
 *-        - diguyGraphicsLink::end_character_draw()
 *-        - diguyGraphicsLink::get_use_linear_traversal_draw()
 *-        - diguyGraphicsLink::set_use_linear_traversal_draw()
 *-        - diguyGraphicsTexture::get_last_bound_texture()
 *-        - diguyGraphicsTexture::clear_last_bound_texture()
 *<
 *-    - Added sample code to the OpenGL graphics API reference
 *-      implementation demonstrating the use of the link local
 *-      transformation matrix to simplify the number of OpenGL function
 *-      made.
 *-    - Added sample code to the OpenGL graphics API reference
 *-      implementation to demonstrate using
 *-      diguyGraphicsTexture::get_last_bound_texture() to minimize state
 *-      changes.
 *-    - Added the following functions to DI-Guy OpenGL rendering API:
 *>
 *-        - diguy_ogl_get_num_frame_stats()
 *-        - diguy_ogl_frame_stat_name()
 *-        - diguy_ogl_get_frame_stat();
 *-        - diguy_ogl_clear_all_frame_stats()
 *<
 ** \subsubsection  v1101api  Version 11.0.1
 **
 *-    - Added the following functions to DI-Guy Graphics API:
 *>
 *-        - diguyGraphicsMaterial::get_last_bound_material()
 *-        - diguyGraphicsMaterial::clear_last_bound_material()
 *<
 *-    - Added sample code to the OpenGL Graphics API reference
 *-      implementation to demonstrate using
 *-      diguyGraphicsMaterial::get_last_bound_material() to minimize state
 *-      changes.
 *-    - Fixed binary geometry serialization bug on x64 machines.
 *-    - Added diguyScenario::is_valid_character_group_pointer()
 **
 ** \subsubsection  v1100api  Version 11.0.0
 **
 *-    - Removed deprecated functions:
 *>
 *-        - diguyChainSimulation::set_connection_character()
 *<
 *-    - New APIs:
 *>
 *-        - diguyFormation
 *-        - diguyVehicleController
 *-        - diguyViewButtonPanel (DI-Guy Scenario only)
 *<
 ** \subsubsection  v1051api  Version 10.5.1
 **
 *-    - Removed deprecated functions:
 *>
 *-        - diguyScenario::set_tin()
 *-        - diguyScenario::get_tin()
 *-        - diguyScenario::trigger_script_event()
 *-        - diguyScenario::add_custom_appearance()
 *-        - diguyScenario::add_custom_appearance_based_on_existing_appearance()
 *-        - diguyScenario::add_named_callback()
 *-        - diguyScenario::remove_named_callback()
 *-        - diguyScenario::call_named_callback()
 *-        - diguyScenario::set_iguy_character()
 *<
 **
 ** \subsubsection  v1017api  Version 10.1.7
 **
 *-    - Added the following functions:
 *>
 *-        - diguyCharacter::set_max_unprocessed_impacts()
 *-        - diguyCharacter::get_max_unprocessed_impacts()
 *-        - diguyScenario::set_max_unprocessed_impacts()
 *-        - diguyScenario::get_max_unprocessed_impacts()
 *-        - diguyCharacter::reset_shader_program_to_default()
 *-        - diguySceneObject::reset_shader_program_to_default()
 *<
 ** \subsubsection  v1016api  Version 10.1.6
 **
 *-    - Added functions to diguyViewCamera and diguyViewCameraSettings:
 *>
 *-        - diguyViewCamera::set_speed_fov_degrees_per_wheel_click()
 *-        - diguyViewCamera::get_speed_fov_degrees_per_wheel_click()
 *-        - diguyViewCameraSettings::set_speed_fov_degrees_per_wheel_click()
 *-        - diguyViewCameraSettings::get_speed_fov_degrees_per_wheel_click()
 *<
 *-    - Added flag to diguyScenario that explicitly enables or disables
 *-      tout ("T Out") for the scenario, instead of using the arbitrary
 *-      value of 60000 seconds to mean tout should have no effect.
 *-    - Added flag similar to above that enables or disables character tout.
 *>
 *-        - diguyScenario::set_tout_enabled()
 *-        - diguyScenario::get_tout_enabled()
 *-        - diguyCharacter::set_tout_enabled()
 *-        - diguyCharacter::get_tout_enabled()
 *<
 *-    - Added the following functions:
 *>
 *-        - diguyCharacter::get_muzzle_link()
 *-        - diguyCharacter::get_muzzle_offset()
 *-        - diguyCharacter::stop_appearance_effect()
 *-        - diguyCharacter::set_weapon_tracers_enabled()
 *-        - diguyCharacter::get_weapon_tracers_enabled()
 *-        - diguyCharacter::set_weapon_shell_eject_enabled()
 *-        - diguyCharacter::get_weapon_shell_eject_enabled()
 *-        - diguyCharacter::set_weapon_smoke_enabled()
 *-        - diguyCharacter::get_weapon_smoke_enabled()
 *<
 ** \subsubsection  v1014api  Version 10.1.4
 **
 *-    - Added diguyCharacter::CALLBACK_ID_AGENT_MIND_CURRENT_STATE_CHANGED.
 *-    - Added the following functions for getting and setting mind data.
 *>
 *-        - diguyCharacter::get_mind_current_state_name()
 *-        - diguyCharacter::set_mind_field_as_string()
 *-        - diguyCharacter::set_mind_field_as_float()
 *-        - diguyCharacter::get_mind_field_as_float()
 *-        - diguyCharacter::set_mind_field_as_int()
 *-        - diguyCharacter::get_mind_field_as_int()
 *<
 *-    - Added the following functions for setting agent params, and other
 *-      agent behavior.
 *>
 *-        - diguyCharacter::agent_set_initial_params_from_profile()
 *-        - diguyCrowd::set_initial_params_from_profile()
 *-        - diguyAgentParams::set_move_on_t_min()
 *-        - diguyAgentParams::get_move_on_t_min()
 *-        - diguyAgentParams::set_move_on_t_max()
 *-        - diguyAgentParams::get_move_on_t_max()
 *-        - diguyCharacter::agent_move_on()
 *<
 ** \subsubsection  v1013api  Version 10.1.3
 **
 *-    - Added the following blink functions to diguyCharacter.
 *>
 *-        - diguyCharacter::set_automatic_blink_duration_in()
 *-        - diguyCharacter::get_automatic_blink_duration_in()
 *-        - diguyCharacter::set_automatic_blink_duration_out()
 *-        - diguyCharacter::get_automatic_blink_duration_out()
 *-        - diguyCharacter::set_automatic_blink_target_in()
 *-        - diguyCharacter::get_automatic_blink_target_in()
 *-        - diguyCharacter::set_automatic_blink_target_out()
 *-        - diguyCharacter::get_automatic_blink_target_out()
 *-        - diguyCharacter::set_automatic_blinks_enabled()
 *-        - diguyCharacter::get_automatic_blinks_enabled()
 *<
 *-    - Added the following gesture functions to diguyCharacter.
 *>
 *-        - diguyCharacter::execute_table_gesture()
 *-        - diguyCharacter::set_executing_table_gesture_desired_action()
 *-        - diguyCharacter::end_executing_gesture()
 *-        - diguyCharacter::abort_executing_gesture()
 *<
 *-    - Added the following misc functions to diguyCharacter.
 *>
 *-        - diguyCharacter::get_gaze_is_active()
 *-        - diguyCharacter::get_lpoint_is_active()
 *<
 ** \subsubsection  v1011api  Version 10.1.1
 **
 *-    - Added the following functions to diguyCharacter.
 *>
 *-        - diguyCharacter::get_is_aiming()
 *<
 ** \subsubsection  v1010api  Version 10.1.0
 **
 *-    - Added the following functions for improved LOD handling.
 *>
 *-        - diguyScenario::set_scale_graphics_lod_ranges_from_view_settings()
 *-        - diguyScenario::get_scale_graphics_lod_ranges_from_view_settings()
 *-        - diguyLoadManager::set_scale_zone_extents_from_view_settings()
 *-        - diguyLoadManager::get_scale_zone_extents_from_view_settings()
 *<
 *-    - Added the following functions to diguyCharacter.
 *>
 *-        - diguyCharacter::set_graphics_ptr()
 *-        - diguyCharacter::get_num_pose_overrides()
 *-        - diguyCharacter::get_pose_override_at_index()
 *<
 **
 **************************************
 ** \subsection v11digs  DI-Guy Scenario
 **************************************
 **
 ** \subsubsection  v1151digs  Version 11.5.1
 **
 *-    - Fixed intersection test issue with scene objects
 *-    - Fixed bogus fog changed notification
 *-    - Improved sound history recording and playback
 **
 ** \subsubsection  v1101digs  Version 11.0.1
 **
 *-    - Fixed crash with using qt_invoke without lqt loaded.
 **
 **************************************
 **  \subsection v11ME   DI-Guy Motion Editor
 **************************************
 **
 ** \subsubsection  v1101ME  Version 11.0.1
 **
 *-    - Fixed Motion Arc extended info handling.
 *-    - Fixed issue with the poser not being available on some skinned
 *-      character links.
 **
 ** \subsubsection  v1100ME  Version 11.0.0
 **
 *-    - Initial support for handling skinned characters.
 **
 **************************************
 ** \subsection v11diguycv   DI-Guy Character Viewer
 **************************************
 **
 ** \subsubsection  v11cv  Version 11
 **
 *-    - Added Shadow and normal previewer.
 *-    - Added LOD picker.
 **
 **************************************
 ** \subsection v11vpdiguy  DI-Guy for Vega Prime
 **************************************
 **
 ** \subsubsection  v1151vpdiguy    Version 11.5.1
 **
 *-    - Initial support for vegaPrime 5.x.
 *-    - fixed crash on exit using some modules.
 *-    - Changed setScriptPerlEnable default from true to false.
 **
 ** \subsubsection  v1101vpdiguy  Version 11.0.1
 **
 *-    - Initial support for vegaPrime 4.x.
 **
 **************************************
 ** \subsection v11diguynet  DI-Guy Networking
 **************************************
 **
 ** \subsubsection  v1101net  Version 11.0.1
 **
 *-    - Fixed a number of bugs with transmitting gazing and aiming behavior
 *-      over network.
 *-    - Improvements to log messages.
 **
 */
