/*****************************************************************************
 **
 *t  DI-Guy Changes and Version History
 */
/****************************************************************************/

/*****************************************************************************
 *****************************************************************************
 **
 *2  DI-Guy Version 12.5
 **
 *****************************************************************************
 *****************************************************************************
 **

 **************************************
 *3  DI-Guy API
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    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.
 **
 *4    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.
 **
 *4    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 diguyCharacter::trigger_shader_refresh(), a function that triggers
 *-      a refresh of the shader for a character.
 *-    - 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()
 **
 *4    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 reposition without recreating the octtree.
 *-        - 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()
 *-        - diguyCharacter::set_use_texture_variations()
 *-        - diguyCharacter::set_current_hand_item_appearance(const char* hand_item_appearance)
 *-        - diguyCharacter::get_current_hand_item_appearance()
 *-        - diguyCharacter::get_num_supplementary_appearances_of_type(diguySupplementaryAppearanceTypes appearance_type)
 *-        - diguyCharacter::get_supplementary_appearance_name(diguySupplementaryAppearanceTypes appearance_type, int index)
 *-        - 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
 *<
 **
 **************************************
 *3   DI-Guy Scenario
 **************************************
 **
 *4    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.
 *-      - Hand items are no longer baked into separate character appearances, but are selectable from a
 *-      menu of multiple options associated with a single character appearance. This is similar to
 *-      how head appearances work.
 **
 **************************************
 *3  DI-Guy AI
 **************************************
 **
 *4    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.
 *-    - Performance improvement for adding/deleting/transforming scene objects.
 *-    - Performance improvement for intersection testing against scene objects and props.
 *-    - 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()
 *<
 ***
 **************************************
 *3    Graphics API Changes
 **
 *4    Version 12.5.3
 *-    - Fix for automatic graphics LOD switching not working in graphics api.
 **
 *4    Version 12.5.2
 *-    - Fix in OpenSceneGraph implementation for leaking nodes when using
 *-      variation textures.
 **
 *4    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:
 *>
 *-        - diguyGraphicsShape::get_bind_color_array()
 *<
 *4    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
 *<
 **************************************
 *3    DI-Guy Networking  Changes
 **************************************
 **
 *4    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

 *****************************************************************************
 *****************************************************************************
 **
 *2  DI-Guy Version 12.0
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 *3   DI-Guy Scenario
 **************************************
 **
 *4    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.
 **

 **************************************
 *3  DI-Guy AI
 **************************************
 **
 **************************************
 *3  DI-Guy API
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    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.
 **
 *4    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().
 **
 *4    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.
 **
 *4    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()
 *<
 **************************************
 *4    Graphics API Changes
 **
 */

/*****************************************************************************
 *****************************************************************************
 **
 *2  DI-Guy Version 11
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 *3  DI-Guy API
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    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_paintrush_mode()
 *-        - diguyApp::get_region_paintrush_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()
 *<
 **
 **************************************
 *4    Graphics API Changes
 **
 *-    - 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.
 **
 **************************************
 *4    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.
 **
 *4    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
 *<
 *4    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()
 *<
 *4    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()
 **
 *4    Version 11.0.0
 **
 *-    - Removed deprecated functions:
 *>
 *-        - diguyChainSimulation::set_connection_character()
 *<
 *-    - New APIs:
 *>
 *-        - diguyFormation
 *-        - diguyVehicleController
 *-        - diguyViewButtonPanel (DI-Guy Scenario only)
 *<
 *4    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()
 *<
 **
 *4    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()
 *<
 *4    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()
 *<
 *4    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()
 *<
 *4    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()
 *<
 *4    Version 10.1.1
 **
 *-    - Added the following functions to diguyCharacter.
 *>
 *-        - diguyCharacter::get_is_aiming()
 *<
 *4    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()
 *<
 **
 **************************************
 *3   DI-Guy Scenario
 **************************************
 **
 *4    Version 11.5.1
 **
 *-    - Fixed intersection test issue with scene objects
 *-    - Fixed bogus fog changed notification
 *-    - Improved sound history recording and playback
 **
 *4    Version 11.0.1
 **
 *-    - Fixed crash with using qt_invoke without lqt loaded.
 **
 **************************************
 *3   DI-Guy Motion Editor
 **************************************
 **
 *4    Version 11.0.1
 **
 *-    - Fixed Motion Arc extended info handling.
 *-    - Fixed issue with the poser not being available on some skinned
 *-      character links.
 **
 *4    Version 11.0.0
 **
 *-    - Initial support for handling skinned characters.
 **
 **************************************
 *3   DI-Guy Character Viewer
 **************************************
 **
 *4    Version 11
 **
 *-    - Added Shadow and normal previewer.
 *-    - Added LOD picker.
 **
 **************************************
 *3   DI-Guy for Vega Prime
 **************************************
 **
 *4    Version 11.5.1
 **
 *-    - Initial support for vegaPrime 5.x.
 *-    - fixed crash on exit using some modules.
 *-    - Changed setScriptPerlEnable default from true to false.
 **
 *4    Version 11.0.1
 **
 *-    - Initial support for vegaPrime 4.x.
 **
 **************************************
 *3   DI-Guy Networking
 **************************************
 **
 *4    Version 11.0.1
 **
 *-    - Fixed a number of bugs with transmitting gazing and aiming behavior
 *-      over network.
 *-    - Improvements to log messages.
 **
 */

/*****************************************************************************
 *****************************************************************************
 **
 *2  DI-Guy Applications Version 10
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 *3  DI-Guy API 10
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    Version 10.0.10
 **
 *-    - Impact processing on characters now considers mind wakeup callbacks
 *-      when deciding how the impact affects the character, in addition to
 *-      the straight callbacks that are considered now.
 *-    - Added functions:
 *>
 *-        - diguyAgentParams::set_vehicle_base_influence_box()
 *-        - diguyAgentParams::get_vehicle_base_influence_box()
 *<
 *-    - Added the following diguyCharacter callbacks that report when
 *-      an agent is being push around by other characters of vehicles.
 *>
 *-        - diguyCharacter::CALLBACK_ID_AGENT_NON_ZERO_REPULSION
 *-        - diguyCharacter::CALLBACK_ID_AGENT_ZERO_REPULSION
 *<
 **
 *4    Version 10.0.8
 **
 *-    - Added merging of regions during scenario merge.
 *-    - Fixed merging of crowds to include merging of crowd behavior
 *-      regions.
 *-    - Added diguyScenario::CALLBACK_ID_PLAYBACK_MODE_CHANGED.
 *-    - Added diguy_set_diguy_base_dir_path() function.
 *-    - Added remove_on_scenario_load argument to most
 *-      add_default_*_callback() functions; allows for "permanent" callbacks
 *-      to be added that persist through scenario loads.  The default is
 *-      0, meaning remove the callback when a scenario is loaded.
 *-
 *4    Version 10.0.6
 **
 *-    - Fixed visual issues of skinned appearances when the character is
 *-      scaled or is using a motion LOD greater than 1.
 *-    - Fixed issue where default scenario callbacks were not being called.
 *-    - Added functions:
 *>
 *-        - diguyCharacter::set_graphics_api_node_ptr()
 *-        - diguyCharacter::get_graphics_api_node_ptr()
 *-        - diguyScenario::set_graphics_api_node_ptr()
 *-        - diguyScenario::get_graphics_api_node_ptr()
 *<
 *4    Version 10.0.5
 **
 *-    - Fixed hard crashes with on-screen labels outside of the ogl pipeline.
 *-    - Fixed issues with octtree creation and visibility checks.
 *-    - Fix for vc8 mdd examples using lua.
 *-    - Added missing header file for DI-Guy Bench Marking example.
 *-    - Added infrastructure for hooking up callbacks so visibility tests
 *-      can work in the SDK.  See the following functions:
 *>
 *-        - diguyScenario::set_default_point_los_function()
 *-        - diguyScenario::set_default_character_los_function()
 *-        - diguyCharacter::set_point_los_function()
 *-        - diguyCharacter::get_point_los_function()
 *-        - diguyCharacter::set_character_los_function()
 *-        - diguyCharacter::get_character_los_function()
 *<
 *4    Version 10.0.4
 **
 *-    - Fixed bug where green boxes were appearing at the origin in some
 *-      DI-Guy Graphics API examples.
 *-    - Characters with skinned appearances specified will switch to their
 *-      default unskinned appearance on platforms without skinning support.
 *-    - Added diguyScenario::get_altitude_function() and
 *-      diguyScenario::set_altitude_function() mainly needed for force local
 *-      path via the API.
 *-    - Added bdiGraphicsInitGraphicsAPI::characters_have_world_space_triangle_query
 *-      and bdiGraphicsInitGraphicsAPI::scene_objects_have_world_space_triangle_query
 *-      function allow octtree to be built from internally loaded scene objects.
 *-      *Note*: this functionality requires that diguyGraphicsMesh::free_loader_memory()
 *-      not be called.
 **
 *4    Version 10.0.3
 **
 *-    - Changed diguyScenario::set_default_lod_ranges() to accept "all"
 *-      for the character type.  Passing "all" will set the default LOD
 *-      ranges for all character types, not just one specific one.
 *-    - Added the following functions to DI-Guy Graphics API for more
 *-      flexibility in handling graphics LODs.
 *>
 *-        - diguyGraphicsShape::set_graphics_lod_ranges()
 *-        - diguyGraphicsShape::set_graphics_lod()
 *-        - diguyGraphicsShape::get_graphics_lod()
 *<
 *4    Version 10.0.1
 **
 *-    - Fixed bugs with intersecting characters added to the octtree.
 *-    - Fixed bugs where custom directory env variable was being ignored when
 *-      looking up lua scripts.
 *-    - Added functions diguyCharacter::create_complete_pose_override() and
 *-      diguyCharacter::destroy_complete_pose_override().
 *-    - Fixed bug where OGL skinned characters were missing some polygons;
 *-      please see graphics API samples if you are seeing this bug.  Your VBO
 *-      class may need slight changes.
 **
 *4    Version 10.0.0
 **
 *-    - Added support for character "type maps".  Type maps add extra data
 *-      to characters that make it easier to decide which character type
 *-      and appearance best match the desired role for characters to be
 *-      added to the scenario.  See the class diguyCharacterTypeMap, and
 *-      information about the "Appearance Wizard" for DI-Guy Scenario.
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::get_nearest_character_type_map()
 *<
 *-    - The DI-Guy Graphics API example directories osg_12_examples and
 *-      osg_22_examples have been removed.  They have been replaced with
 *-      osg_2_examples.
 *-    - The osg_2_examples reference implementation now has support for
 *-      skinned appearances.  It uses the DI-Guy built-in geometry loader
 *-      instead of OSG's, as DI-Guy has some specific requirements for
 *-      loaded skinned geometry.
 *-    - diguyScenario::add_callback() and diguyScenario::add_callback_script()
 *-      have been modified with an addition argument that specifies whether
 *-      the callback should remain after a new scenario has been loaded.  The
 *-      previous behavior was for the callback to not be removed, which could
 *-      cause problems. Users will now need to explicitly request  that the
 *-      callback remain.
 **
 *4    Version 9.1.5
 **
 *-    - The ability to show bar graph information has been added to the
 *-      diguyViewLabel class.  See diguyViewLabel::enable_bar_graph().
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::set_weapon_munition_type_override()
 *-        - diguyCharacter::get_weapon_munition_type_override()
 *-        - diguyCharacter::get_weapon_muzzle_munition_type()
 *-        - diguyCharacter::get_default_muzzle_munition_type()
 *<
 *-    - Added the following functions to DI-Guy Graphics API:
 *>
 *-        - diguyGraphicsLink::post_build()
 *-        - diguyGraphicsLink::set_shader_instance()
 *-        - diguyGraphicsMaterial::get_is_unlit()
 *<
 *-    - Added new DI-Guy Graphics API classes: diguyGraphicsShaderProgram
 *-      and diguyGraphicsShaderInstance.
 *-    - Added time_to_live to network.cfg file.
 *-    - Removed the following experimental functions:
 *>
 *-        - diguyScenario::load_shader()
 *-        - diguyScenario::reload_shader_programs()
 *<
 *-    - Added new DI-Guy functions to allow SDK users to intercept fire
 *-      requests and plug in their own intersection test; see
 *-      diguyScenario::set_fire_weapon_intersection_function() for more info.
 **
 *4    Version 9.1.4
 **
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::set_initial_path()
 *-        - diguyCharacter::get_initial_path()
 *<
 *-    - The way that weapon sounds are handled has been changed.
 *>
 *-          Previously weapon sounds were largely determined by the
 *-          character's default weapon sound setting, as set by
 *-          set_default_weapon_sound().  Weapon sounds (and other data) are
 *-          now set automatically based on the munition type(s) of the weapon
 *-          the character is carrying.  The default munition type sound can
 *-          be overridden by calling set_weapon_sound_override().  Note that
 *-          existing, deprecated calls to set_default_weapon_sound() will
 *-          have the same effect as calling set_weapon_sound_override().
 **
 *-        - The following functions have been deprecated:
 *>
 *-            - diguyCharacter::set_default_weapon_sound()
 *-            - diguyCharacter::get_default_weapon_sound()
 *-            - diguyCharacter::set_default_weapon_sound_gain()
 *-            - diguyCharacter::get_default_weapon_sound_gain()
 *<
 *-        - The above deprecated functions are replaced by:
 *>
 *-            - diguyCharacter::set_weapon_sound_override()
 *-            - diguyCharacter::get_weapon_sound_override()
 *-            - diguyCharacter::set_weapon_sound_gain_override()
 *-            - diguyCharacter::get_weapon_sound_gain_override()
 *<
 *<
 *-    - Added the following diguyCharacter callbacks to make it easier to
 *-      tie events to editing characters in the UI.
 *>
 *-        - diguyCharacter::CALLBACK_ID_UI_MOUSE_DOWN
 *-        - diguyCharacter::CALLBACK_ID_UI_MOUSE_UP
 *<
 *-    - Added diguyViewPainter class that allows the drawing of lines and
 **      other primitives in DI-Guy Scenario 3D view windows.  For access to
 **      this object call diguyApp::get_painter().
 *-    - Added diguyScenario::CALLBACK_ID_POST_DRAW, allowing the scripting
 *-      engine a chance to draw in the 3D view in DI-Guy Scenario.
 *-      Characters with minds are also given the opportunity to draw; see
 *-      the default luaCharacter script.
 **
 *4    Version 9.1.2
 **
 *-    - Added diguyImpact::get_impact_type() and diguyImpact::get_impact_type_string()
 *-      which provide information about how the impact was generated.  New
 *-      accessors for querying normal information are also available.
 *-    - Added new Lua Scripting module:
 *>
 *-        - The Lua module has all the functionality of the current Perl
 *-          module.
 *-        - Lua is popular in the game development industry for it's speed
 *-          and efficiency.  Lua script execution is much less performance
 *-          intensive than a similar Perl script.
 *-        - Lua is the basis for the new DI-Guy AI Mind framework.
 *<
 *-    - Scripts are no longer limited in length (was 32K).
 *-    - Deprecated functions:
 *>
 *-        - diguyCharacter::get_base_link() replaced with
 *-          diguyCharacter::get_position_link()
 *<
 *-    - Added the following diguyCharacter callbacks to make it easier to
 *-      tie events to editing characters in the UI.
 *>
 *-        - diguyCharacter::CALLBACK_ID_UI_PRE_TRANSLATION
 *-        - diguyCharacter::CALLBACK_ID_UI_POST_TRANSLATION
 *<
 **
 *4    Version 9.1.1
 **
 *-    - Added the following function to diguyCharacter API:
 *>
 *-        - diguyCharacter::get_random_factor()
 *<
 *-    - Added the following functions to diguyCharacter API for getting
 *-      and setting character variables with a compact function name:
 *>
 *-        - diguyCharacter::set_ivar()
 *-        - diguyCharacter::get_ivar()
 *-        - diguyCharacter::set_fvar()
 *-        - diguyCharacter::get_fvar()
 *-        - diguyCharacter::set_svar()
 *-        - diguyCharacter::get_svar()
 *<
 *-    - Sound Module Improvements:
 *>
 *-        - Adding looping flag to diguyCharacter::play_3d_sound() and
 *-          diguyCharacter::play_sound() allows sounds to repeat until
 *-          explicitly stopped with diguyCharacter::stop_sound() or
 *-          diguyCharacter::stop_all_sounds()
 *-        - 3D Sounds should now Doppler shift depending on the velocity of
 *-          the emitter and listener.
 *-        - More a number of diguySound functions have been added to allow
 *-          querying a sounds properties.
 *<
 *-    - Fixed problem with the OpenFlight geometry loader.  Light point
 *-      records were causing the loader to fail.
 *-    - Added two new diguyCharacter callback ids:
 *>
 *-        - diguyCharacter::CALLBACK_ID_POST_CREATE_GEOMETRY
 *-        - diguyCharacter::CALLBACK_ID_PRE_DESTROY_GEOMETRY
 *<
 *-    - Added new plugin function, post_reset().  Allows plugins to do
 *-      reset operations at the end of a scenario reset, instead of only
 *-      at the beginning.
 **
 *4    Version 9.1.0
 **
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::get_current_traveled_path_is()
 *-        - diguyCharacter::get_current_appearance_is()
 *-        - diguyCharacter::get_current_head_appearance_is()
 *-        - diguyCharacter::execute_table_gesture()
 *<
 **
 **************************************
 *3   DI-Guy Scenario 10
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    Version 10.0.2
 **
 *-    - Fixed the appearance of state functions in the code browser.
 **
 *4    Version 10.0.0
 **
 *-    - Added the "Appearance Wizard" to places where character type and
 *-      appearance can be selected.  The Appearance Wizard provides an
 *-      interactive UI for selecting desired attributes of the character
 *-      to be created, such as category, age, sex, race, military branch,
 *-      carried object, etc.
 *-    - Character types and appearances are now marked as "Recommended" and
 *-      "Not Recommended".  Many older character types and appearances have
 *-      been nominally replaced with newer versions which should be
 *-      preferred over the older ones.  By default DI-Guy Scenario will show
 *-      only the preferred ones, but can be changed to show all of them.
 *-      Scenarios that currently use now not-recommended character types and
 *-      appearances will still work as before.
 **
 *4    Version 9.1.3
 **
 *-    - Improvements to autocomplete, including DIGUY_* constants as well as
 *-      dynamic analysis of lua objects.
 **
 *4    Version 9.1.2
 **
 *-    - Added new documentation viewer, accessible under the help menu.
 **
 *4    Version 9.1.1
 **
 *-    - When selecting which agents' parameters are going to be edited,
 *-      multi-select can now be used.
 *-    - Replaced Scenario Elements, Character Elements, View Settings,
 *-      Event Handlers, and DI-Guy AI Elements windows with a single
 *-      revamped Scenario Elements window that has collapsible tab groups.
 *-    - Removed experimental, incomplete "Merge Blitz" capability.
 **
 *4    Version 9.1.0
 **
 *-    - Script editing now uses an editing component based on Scintilla,
 *-      this provides syntax highlighting/coloring, line numbering, basic
 *-      auto-complete, and code folding.
 *-      Currently supported control keys:
 *>
 *-       - Ctrl '{' or Ctrl '}' - jump to matching brace
 *-       - Ctrl f - find dialog
 *-       - F3     - find again
 *<
 *-    - Added a number of ui improvements:
 *>
 *-       - Beads now display the time they occur instead of just an index.
 *-       - The Action Spreadsheet is available in the character elements
 *-         page.
 *-       - A number of element types can now be sorted in their selector
 *-         view at the top of the page.  Most widgets can be sorted by index
 *-         and name.  Some add the ability to be sorted by time, appearance,
 *-         character type, etc.
 *-       - The path page has a sorted list of all beads on a path.
 *<
 **
 **************************************
 *3  DI-Guy AI 10
 **************************************
 **
 *4    Version 10.0.4
 **
 *-    - Added new AI_Populate SDK example; demonstrates populating the
 *-      environment with lua minds based Agents via the SDK.
 **
 *4    Version 10.0.3
 **
 *-    - Improved behavior of paintbrush far from origin and at different
 *-      heights.
 *-    - Added bright red log/package indicator on lua syntax errors.
 *-    - Improved behavior of code browser recompile button, pops up log
 *-      window on syntax errors.
 **
 *4    Version 10.0.2
 **
 **    - Fixed hard crash in path planner when pursuing with no behavior
 **      region set.
 **    - Fixed a number of bugs with agents colliding with props.
 **    - Fixed bug with crowd awareness code far from the origin.
 **
 *4    Version 9.1.4
 **
 *-    - Significant improvements to A* path planning performance, 10x speed
 *-      up in most cases.
 **
 *4    Version 9.1.3
 **
 *-    - Improvements to path planning API, added the following functions to
 *-      diguyCharacter API for navigating the world
 *>
 *-        - diguyCharacter::agent_move_to_point()
 *-        - diguyCharacter::agent_move_to_point_via_subregions()
 *-        - diguyCharacter::agent_move_to_region()
 *-        - diguyCharacter::agent_move_to_region_via_subregions()
 *<
 **
 *4    Version 9.1.2
 **
 *-    - New Lua based mind framework:
 *>
 *-        - New Lua Mind Editor in UI
 *-        - The crowd/people blitzers can now create characters with minds.
 *<
 **
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::agent_get_crowd()
 *-        - diguyCharacter::agent_flee_crowd()
 *<
 *-    - Added diguyCharacter::CALLBACK_ID_AGENT_VEHICLE_COLLISION; this
 *-      callback is triggered on a vehicle when a vehicle hits an agent.
 *-    - Added diguyRegion, an API wrapper for painted meshes.  Retrievable
 *-      with the function diguyScenario::find_region().
 *-    - Vehicle bounds are now smoothed when the vehicle changes speed.
 *-    - Added simple gazing model into agent focus behavior.
 *-    - Added Idle Behavior, agent will stop moving and be responsive
 *-      to focus and simple requests but won't spontaneously move.
 *-    - Added diguyCharacter::agent_begin_behavior() allows starting a
 *-      behavior by name. Typically some of the more elaborate functions are
 *-      preferred, but this can be useful for idling and such.
 *-    - Changes to None behavior.  Agent will attempt to do less and clear
 *-      out some transient state to make the behavior of the behavior more
 *-      consistent.
 **
 *4    Version 9.1.1
 **
 *-    - The following diguyCrowd callbacks are deprecated, and have been
 *-      replaced with diguyCharacter equivalents.
 *>
 *-        - diguyCrowd::CALLBACK_ID_NEW_FOCUS_CHARACTER
 *-        - diguyCrowd::CALLBACK_ID_ATTACKER_NO_VISIBLE_TARGETS
 *-        - diguyCrowd::CALLBACK_ID_ATTACKER_OUT_OF_TARGETS
 *-        - diguyCrowd::CALLBACK_ID_PURSUED_CHARACTER_REACHED
 *-        - diguyCrowd::CALLBACK_ID_WANDER_TARGET_REACHED
 *-        - diguyCrowd::agents_flee_crowd()
 *<
 *-    - Added the following diguyCharacter callbacks to make it easier to
 *-      detect important events in agent behavior.
 *>
 *-        - diguyCharacter::CALLBACK_ID_AGENT_NEW_BEHAVIOR
 *-        - diguyCharacter::CALLBACK_ID_AGENT_NEW_FOCUS_CHARACTER
 *-        - diguyCharacter::CALLBACK_ID_AGENT_ATTACK_OUT_OF_TARGETS
 *-        - diguyCharacter::CALLBACK_ID_AGENT_ATTACK_NO_VISIBLE_TARGETS
 *-        - diguyCharacter::CALLBACK_ID_AGENT_PURSUE_TARGET_REACHED
 *-        - diguyCharacter::CALLBACK_ID_AGENT_PURSUE_TARGET_LOST
 *-        - diguyCharacter::CALLBACK_ID_AGENT_MINGLE_TARGET_REACHED
 *-        - diguyCharacter::CALLBACK_ID_AGENT_MINGLE_TARGET_LOST
 *-        - diguyCharacter::CALLBACK_ID_AGENT_WANDER_TARGET_REACHED
 *-        - diguyCharacter::CALLBACK_ID_AGENT_WANDER_TARGET_LOST
 *-        - diguyCharacter::CALLBACK_ID_AGENT_FLEE_AREA_LEFT
 *-        - diguyCharacter::CALLBACK_ID_AGENT_FLEE_AREA_ENTERED
 *-        - diguyCharacter::CALLBACK_ID_AGENT_TRAVEL_WAYPOINT_REACHED
 *-        - diguyCharacter::CALLBACK_ID_AGENT_TRAVEL_FORWARD_DEST_REACHED
 *-        - diguyCharacter::CALLBACK_ID_AGENT_TRAVEL_BACKWARD_DEST_REACHED
 *<
 *-    - DI-Guy AI agents can now flee from multiple characters, groups, and
 *-      locations instead of just one.
 *-    - Functions diguyCharacter::agent_set_current_params_from_profile()
 *-      and diguyCrowd::set_current_params_from_profile() have a new
 *-      argument, retain_focus_objects.  Setting this to 1 allows the
 *-      specified to be loaded without changing the agents' current focus
 *-      character or group.
 **
 **************************************
 *3   DI-Guy Motion Editor
 **************************************
 **
 *-    - Added support for filtering the action table editor, eases editing
 *-      of large action tables.
 *-    - Added code to reverse motions.
 *-    - Grabbing a pose on a Linear Offset should interpolate properly.
 *-    - Motion arc list and action table motion list are now in sync.
 **
 **************************************
 *3   DI-Guy Character Viewer 10
 **************************************
 **
 *4    Version 10.0.0
 **
 *-    - Added "Appearance Wizard" button to make selecting an appropriate
 *-      character type and appearance easier.
 **
 **************************************
 *3   DI-Guy for Vega Prime 10
 **************************************
 **
 *4    Version 10.0.4
 **
 *-    - Initial release compiling with vp 3.0.
 **
 *4    Version 9.1.2
 **
 *-    - Added support for turning on DI-Guy AI from vpDiguySettings UI.
 *-      DI-Guy AI functionality is limited inside of Vega Prime
 *-    - Added support for turning on Lua scripting module from the
 *-      the UI.
 *-    - Fixed long standing issue with character's having link offsets
 *-      applied  multiple times. (Also in 9.0.4)
 **
 **************************************
 *3   DI-Guy Networking
 **************************************
 **
 *4    Version 9.1.6
 **
 *-    - Fire PDUs position should now be the muzzle of the gun, the entity
 *-      type should match the munition type fired, and the velocity should
 *-      be the normalized direction of the muzzle.
 *-    - Fixed issue where agents on non-flat terrains were sending erroneous
 *-      z values.
 **
 **
 */

/*****************************************************************************
 *****************************************************************************
 **
 *2  DI-Guy Applications, 9.0 and Earlier
 **
 *****************************************************************************
 *****************************************************************************
 **
 **************************************
 *3  DI-Guy API
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    Version 9.0.4
 **
 *-    - Added new argument to diguyCharacter::force_action() that allows
 *-      the forced action to begin partway into the action.
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::get_most_recent_forced_action()
 *-        - diguyCharacter::get_most_recent_forced_action_t()
 *-        - diguyCharacter::get_most_recent_forced_action_t_offset()
 *<
 *4    Version 9.0.1
 **
 *-    - Added new guide example, see $DIGUY/programming_examples/diguy_ogl/guide_example
 *-    - Added the following functions to diguyCharacter API:
 *>
 *-        - diguyCharacter::get_distance_to_impact()
 *-        - diguyCharacter::set_is_scene_object()
 *-        - diguyCharacter::get_is_scene_object()
 *-        - diguyCharacter::set_apply_actor_scale_to_action_bead_xy_travel() deprecated;
 *-          use diguyCharacter::set_apply_actor_scale_to_action_bead_travel() instead
 *-        - diguyCharacter::get_apply_actor_scale_to_action_bead_xy_travel() deprecated;
 *-          use diguyCharacter::get_apply_actor_scale_to_action_bead_travel() instead
 *<
 *-    - Manually invoking a diguyCharacter perl script callback via
 *-      diguyCharacter::manually_invoke_event_handler() will now have the
 *-      $callback_object variable properly set.
 *-    - Minor munition system improvements:
 *>
 *-        - Munitions sound effects now include sound gain.
 *-        - Added diguyScenario::trigger_detonation(), a function for
 *-          creating a detonation at an arbitrary xyz location.
 *-        - Fixed bug with location of munition particle effects.
 *<
 *-    - Added new Munition system demonstration; see AI_Munitions_Demo.dss in
 *-      scenarios directory.
 *-    - Improved default 3d sound behavior; prior default 3d sound falloff
 *-      was much too aggressive.  Future DI-Guy releases will make more of
 *-      these values tuneable.
 **
 *4    Version 9.0.0
 **
 *-    - Promoted the following functions from experimental to
 *-      official status:
 *>
 *-        - diguyScenario::find_character_at_screen_coords()
 *-        - diguyScenario::get_impact_at_screen_coords()
 *-        - diguyScenario::get_intersection_at_screen_coords()
 *-        - diguyScenario::force_octtree_generation()
 *-        - diguyScenario::intersect_static_geometry()
 *-        - diguyScenario::add_character_to_octtree()
 *-        - diguyScenario::remove_character_from_octtree()
 *-        - diguyCharacter::set_apply_actor_scale_to_action_bead_xy_travel()
 *-        - diguyCharacter::get_apply_actor_scale_to_action_bead_xy_travel()
 *<
 *-    - Added functions to allow user to specify custom feeler functions:
 *>
 *-        - diguyScenario::set_default_agent_feeler_function()
 *-        - diguyCharacter::agent_set_feeler_function()
 *-        - diguyCharacter::agent_get_feeler_function()
 *<
 *-    - Fixed more issues with recent changes to reduce path memory overhead.
 *-    - Changing current appearance will now complain less if the resulting
 *-      change doesn't require recompilation of path data.
 *-    - diguy_dis_constants.h now includes custom PDU enumeration.
 *-    - Changes made to aim algorithm 8 parameter functions in an effort
 *-      to make them more descriptive.  Note that only the set functions
 *-      are listed; the corresponding get functions have changed, too.
 *>
 *-        - diguyCharacter::set_aim_param_time_constant() deprecated;
 *-          use diguyCharacter::set_aim_param_acquire_factor() instead
 *-        - diguyCharacter::set_aim_param_reset_time_constant() deprecated;
 *-          use diguyCharacter::set_aim_param_new_aim_factor() instead
 *-        - diguyCharacter::set_aim_param_time_constant2() deprecated;
 *-          use diguyCharacter::set_aim_param_new_aim_duration() instead
 *<
 *4    Version 8.6.3
 **
 *-    - Fixed some issues with recent changes to reduce path memory overhead.
 **
 *4    Version 8.6.2
 **
 *-    - Changes made to support multiple active formations.  New arguments
 *-      added to diguyCharacter::call_formation() and
 *-      diguyCharacter::break_formation() to support multiple formations.
 *-      Default behavior remains the same as before.
 *-    - Significant memory savings when dealing with characters with
 *-      long paths.
 *-    - Added new argument to diguyCharacter::set_current_appearance()
 *-      function: allow_actor_change.  Previously changes to a character's
 *-      appearance that would result in an actor (size of character) change
 *-      were not allowed.  Passing 1 (the default) for this argument now
 *-      allows such a change.
 **
 *4    Version 8.6.1
 **
 *-    - Added function diguyCharacter::get_current_traveled_path().
 *-    - Improved logic for picking dead action.
 *-    - Removed deprecated functions:
 *>
 *-        - diguyLoadManager::set_max_update_period()
 *-        - diguyLoadManager::set_nonvisible_update_rate()
 *-        - diguyLoadManager::set_zone_bounds()
 *-        - diguyLoadManager::set_zone_parameters()
 *<
 *-    - Improved DIS/HLA Networking:
 *>
 *-        - Added support for Flat Earth and Geocentric coordinates.
 *-        - Coordinate system changes can now be applied while the system is
 *-          connected to the network.
 *-        - DI-Guy characters can now have different Munition types which are
 *-          sent over the network as part of the detonation pdus.
 *<
 *-    - Improved Munition Support:
 *>
 **        Heavy rewrite/solidification of our munition and detonation code.
 *>
 *-        - Characters now have a munition type, defaults to "m16".
 *-        - Munition definitions are stored in the munition_type.cfg file.
 *-          They have a number of required and optional fields including
 *-          septet, radius, and special effects to create when triggered.
 *-        - The munition name and radius is now part of diguyImpact
 *-          structure.  This allows the end user to build damage models in
 *-          scripts that are based on the munition type of an impact, along
 *-          with fall-off effects based on distance from impact location.
 *-        - Characters hit by broadcast detonations will now call the
 *-          CALLBACK_ID_IMPACT callback if they have one, this emulates what
 *-          happens when characters are shot by other DI-Guys. If they are
 *-          members of a crowd and the crowd has an impact callback that will
 *-          be called, if no impact callback exists they will die.
 *-        - Crowds should now react to remote detonations.
 *-        - Impacting a scene object will now transmit a detonation.
 *<
 *<
 *4    Version 8.5.0
 **
 *-    - Many new function calls available from decisions.
 *-    - Changed default aim algorithm from 7 to 8.  To change it back to 7,
 *-      call diguyCharacter::set_aim_algorithm(), passing 7 as the
 *-      aim_algorithm argument.
 *-    - Improved diguyCharacter::check_character_visibility().  Character
 *-      will now use the cervical joint as the source point, and test
 *-      multiple positions on the target.
 *-    - Promoted diguyCharacter version 8 aim algorithm functions from
 *-      experimental to official.
 *-    - Characters that are flagged as scene object are no longer baked
 *-      into the world octtree.  Editing them no longer requires an expensive
 *-      octtree rebuild.
 *-    - Fixed access bug in diguyScenario::find_path_shape().
 *-    - Added functions:
 *>
 *-        - diguyCharacter::get_last_impact_is_from_vehicle()
 *-        - diguyCharacter::get_last_impact_speed_is_greater_than()
 *-        - diguyCharacterGuide::set_position_acquired()
 *-        - diguyCharacterGuide::set_orientation_acquired()
 *-        - diguyImpact::get_impact_speed()
 *<
 *4    Version 8.1.0
 **
 *-    - Added function diguyScenario::preload_sound()
 *-    - Added callback id diguyScenario::CALLBACK_ID_SAVE_SCENARIO_FILE
 *-    - Added experimental functions:
 *>
 *-        - diguyCharacter::get_nearest_waypoint_index_in_path()
 *-        - diguyCharacter::set_desired_orientation_to_current_orientation()
 *-        - diguyCharacter::check_character_visibility()
 *<
 *4    Version 8.0.6
 **
 *-    - Fixed issue where turreted vehicles broadcast angle did not match
 *-      the DIS standard.
 *-    - Added experimental aim functions.  These functions are for the new
 *-      DI-Guy version 8 aim algorithm.
 *>
 *-        - diguyCharacter::set_aim_algorithm()
 *-        - diguyCharacter::get_aim_algorithm()
 *-        - diguyCharacter::set_aim_param_seek_tolerance()
 *-        - diguyCharacter::get_aim_param_seek_tolerance()
 *-        - diguyCharacter::set_aim_param_time_constant()
 *-        - diguyCharacter::get_aim_param_time_constant()
 *-        - diguyCharacter::set_aim_param_time_constant2()
 *-        - diguyCharacter::get_aim_param_time_constant2()
 *-        - diguyCharacter::set_aim_param_reset_time_constant()
 *-        - diguyCharacter::get_aim_param_reset_time_constant()
 *-        - diguyCharacter::set_aim_param_azimuth_acquired_range()
 *-        - diguyCharacter::get_aim_param_azimuth_acquired_range()
 *-        - diguyCharacter::set_aim_param_elevation_acquired_range()
 *-        - diguyCharacter::get_aim_param_elevation_acquired_range()
 *-        - diguyCharacter::set_aim_param_max_per_frame_adj_factor()
 *-        - diguyCharacter::get_aim_param_max_per_frame_adj_factor()
 *-        - diguyCharacter::set_aim_converge_every_frame()
 *-        - diguyCharacter::get_aim_converge_every_frame()
 *-        - diguyCharacter::aim_converge()
 *<
 *4    Version 8.0.5
 **
 *-    - Fixed issue with TXP geometry loader.  If external textures are
 *-      marked as "Unknown" format, the actual format is now derived from
 *-      the filename extension in the case of .rgb, .rgba, .int, and .inta
 *-      texture files.
 **
 *4    Version 8.0.4
 **
 *-    - Improved documentation for function diguyScenario::update().
 *-    - Fixed some issues with I-Guy and its use of joystick input.  I-Guy
 *-      input for DI-Guy 8 now more closely matches that of previous
 *-      versions.
 *-    - Fixed some issues with muzzle flashes.  In particular, muzzle
 *-      flashes were not consistently showing up in DI-Guy Scenario, both
 *-      during initial simulation and during review data playback.
 *-    - DI-Guy now includes a DIGuyLicenseTool application that makes it
 *-      easier to gather the appropriate information needed to request a
 *-      license from Boston Dynamics.  This utility program can be run
 *-      during Applications installation, or, after installation is
 *-      complete, from the DI-Guy folder in the Start Menu.
 *-    - Fixed a problem with programming examples that used OpenAL
 *-      with the VC7 static libs (Makefile.vc7_md, for example)
 *-      would crash when an .ogg file was loaded.
 **
 *4    Version 8.0.3
 **
 *-    - Fixed some issues with I-Guy:
 *>
 *-        - Firing the I-Guy's weapon now correctly uses the trajectory
 *-          to the crosshair, instead of along the weapon barrel.
 *-        - Keyboard control of looking up and down now possible; use
 *-          'Page Up' and 'Page Down' keys.
 *<
 *-    - Fixed problem with networked characters climbing hills.
 *-    - Fixed problem with networked characters transitioning too quickly.
 *-    - Added Visual Studio 7.1 solution for diguy_ogl/simple_playback
 *-      example.
 *-    - Fixed issue with diguyCharacter::stop_all_sounds() and
 *-      diguyScenario::stop_all_sounds() not saving history events.
 **
 *4    Version 8.0.2
 **
 *-    - Fixed problem with some textures not loading properly.
 *-    - Fixed problem with DirectX examples not shutting down cleanly
 *-      if there is a license problem.
 **
 *4    Version 8.0.1
 **
 *-    - Fixed issues with temporary characters not always being destroyed.
 *-    - Fixed issues with temporary characters showing up in review
 *-      playback.
 *-    - Fixed issues with appearance effects being recycled properly.
 *-    - Fixed problem with eyes not participating in gazing.
 *-    - Rework of many examples in the programming_examples directory.
 *-      Some new examples added, some older ones removed.
 *-    - Added README.txt files to diguy_plugin examples that better describe
 *-      what the examples show, and how to use them in DI-Guy Scenario.
 **
 *4    Version 8.0.0
 **
 *-    - Initial 8.0 release candidate.
 *-    - Setting of tin (T In) and tout (T Out) calls for characters have
 *-      been tightened up.  For example, a character's tin can no longer
 *-      be set to before the current scenario t.  It could be before, but
 *-      would cause potential problems.  Warning messages are printed to
 *-      the log when improper tin or tout times are attempted.
 **
 *4    Version 7.1.20
 **
 *-    - Added new diguySignal and diguyScenario functions:
 *>
 *-        - diguySignal::set_info_text()
 *-        - diguySignal::get_info_text()
 *-        - diguyScenario::signal_palette_show_all()
 *-        - diguyScenario::signal_palette_hide_all()
 *<
 *-    - The signal info_text field allows signals to be tagged in the DI-Guy
 *-      Scenario Signal Palette with text different than the signal name.
 *-      The new show all and hide all functions take an optional filter
 *-      that can be used to make the operation work on a subset of the
 *-      signals.
 **
 *4    Version 7.1.19
 **
 *-    - Fixed problem with vehicle_wheels character in which first frame
 *-      of playback had wheels in incorrect position.
 *-    - Improved documentation for diguyCharacter Performance Functions.
 *-    - Improved documentation for diguyCharacter functions that
 *-      deal with enabling and disabling characters in various ways.
 *-    - Added functions:
 *>
 *-        - diguyLoadManager::set_zone_all_blends_disabled()
 *-        - diguyLoadManager::get_zone_all_blends_disabled()
 *-        - diguyLoadManager::set_zone_shape_switches_disabled()
 *-        - diguyLoadManager::get_zone_shape_switches_disabled()
 *-        - diguyLoadManager::set_zone_shape_callbacks_disabled()
 *-        - diguyLoadManager::get_zone_shape_callbacks_disabled()
 *-        - diguyLoadManager::set_zone_graphics_api_shape_update_disabled()
 *-        - diguyLoadManager::get_zone_graphics_api_shape_update_disabled()
 *-        - diguyCharacter::get_is_active()
 *-        - diguyCharacter::set_invisible_flag()
 *-        - diguyCharacter::get_invisible_flag()
 *<
 *-    - Added function diguyCharacterGroup::get_is_network_paused(), and
 *-      deprecated function diguyCharacterGroup::get_paused()
 *-    - Added function diguyCharacterGroup::get_visible(), and
 *-      deprecated function diguyCharacterGroup::get_is_drawn()
 *-    - Made the following functions callable from decisions:
 *>
 *-        - diguyCharacter::get_is_network_paused()
 *-        - diguyCharacter::get_is_network_published()
 *-        - diguyCharacter::get_is_network_reflected()
 *<
 *4    Version 7.1.18
 **
 *-    - Added functions:
 *>
 *-        - diguy_extract_translation_and_euler_angles_from_matrix()
 *-        - diguy_create_matrix_from_translation_and_euler_angles()
 *-        - diguyCharacter::set_appearance()
 *-        - diguyCharacter::get_aim_is_possible()
 *<
 *-    - Changed the name of several experimental functions:
 *>
 *-        - diguyCharacter::start_appearance_effect() -> diguyCharacter::begin_appearance_effect()
 *-        - diguyCharacter::stop_appearance_effect()  -> diguyCharacter::end_appearance_effect()
 *<
 *-    - The following experimental functions were promoted to
 *-      official API status:
 *>
 *-        - diguyScenario::create_temporary_character()
 *-        - diguyScenario::send_character_to_recycle_bin()
 *-        - diguyScenario::retrieve_character_from_recycle_bin()
 *-        - diguyScenario::set_playback_mode()
 *-        - diguyScenario::set_playback_mode_stop()
 *-        - diguyScenario::set_playback_mode_play()
 *-        - diguyCharacter::get_is_temporary()
 *-        - diguyCharacter::translate_all_paths()
 *-        - diguyCharacter::rotate_all_paths_about_point()
 *-        - diguyCharacter::rotate_all_paths_about_current_waypoint()
 *-        - diguyCharacter::manually_invoke_event_handler()
 *<
 *-    - The ability to change the tin ("T In") time of a scenario has been
 *-      removed.  THIS CHANGE WILL AFFECT SCENARIOS THAT USED THIS
 *-      FUNCTIONALITY.  Setting the tin of a scenario to anything other than
 *-      0 has always had unintended side-effects for DI-Guy, which is why
 *-      this capability has been removed.  The functions
 *-      diguyScenario::set_tin() and diguyScenario::get_tin() are now
 *-      deprecated as a result.  (Note that diguyCharacter::set_tin()
 *-      has not been changed.)
 **
 *4    Version 7.1.16
 **
 *-    - Added the following functions:
 *>
 *-        - diguyCharacter::set_initial_up_vector()
 *-        - diguyCharacter::get_initial_up_vector()
 *-        - diguyCharacter::get_up_vector()
 *<
 *4    Version 7.1.14
 **
 *-    - Fixed issues with scenario merging.  Chain settings and particle
 *-      systems in particular did not merge well.
 **
 *4    Version 7.1.13
 **
 *-    - The following experimental functions were promoted to
 *-      official API status:
 *>
 *-        - diguyCharacter::set_minimum_cpl()
 *-        - diguyCharacter::get_minimum_cpl()
 *-        - diguyCharacter::get_maximum_possible_current_cpl()
 *-        - diguyCharacter::maximize_current_cpl()
 *-        - diguyCharacter::set_automatic_cpl_switching_enabled()
 *-        - diguyCharacter::get_automatic_cpl_switching_enabled()
 *-        - diguyCharacter::set_current_cpl()
 *-        - diguyCharacter::get_current_cpl()
 *-        - diguyCharacter::set_position_accumulation_disabled()
 *-        - diguyCharacter::get_position_accumulation_disabled()
 *-        - diguyCharacter::set_all_blends_disabled()
 *-        - diguyCharacter::get_all_blends_disabled()
 *-        - diguyCharacter::set_shape_switches_disabled()
 *-        - diguyCharacter::get_shape_switches_disabled()
 *-        - diguyCharacter::set_shape_callbacks_disabled()
 *-        - diguyCharacter::get_shape_callbacks_disabled()
 *-        - diguyCharacter::set_graphics_api_shape_update_disabled()
 *-        - diguyCharacter::get_graphics_api_shape_update_disabled()
 *-        - diguyCharacter::optimized_update()
 *-        - diguyCharacter::get_is_recycled()
 *-        - diguyCharacter::get_last_impact_record()
 *-        - diguyCharacter::get_last_impact_number()
 *-        - diguyCharacter::get_last_impact_been_processed()
 *-        - diguyCharacter::set_last_impact_been_processed()
 *-        - diguyCharacter::get_last_impact_link()
 *-        - diguyCharacter::get_last_impact_link_is()
 *-        - diguyCharacter::set_weapon_projectile_is_visible()
 *-        - diguyCharacter::get_weapon_projectile_is_visible()
 *-        - diguyCharacter::start_appearance_effect()
 *-        - diguyCharacter::stop_appearance_effect()
 *-        - diguyApp::set_precompute_quaternions_enabled()
 *-        - diguyApp::get_precompute_quaternions_enabled()
 *-        - diguyApp::set_num_rendering_passes()
 *-        - diguyApp::get_num_rendering_passes()
 *<
 *-    - The following deprecated functions were removed:
 *>
 *-        - diguyApp::set_use_varsets_enabled()
 *-        - diguyApp::get_use_varsets_enabled()
 *-        - diguyCharacterGroup::set_all_members_t()
 *<
 *4    Version 7.1.12
 **
 *-    - Added new functions to diguyCharacter:
 *>
 *-        - diguyCharacter::set_position_to_other_character_position()
 *-        - diguyCharacter::set_desired_position_to_current_position()
 *-        - diguyCharacter::set_desired_position_to_waypoint()
 *-        - diguyCharacter::set_desired_position_to_path_waypoint()
 *-        - diguyCharacter::set_desired_position_to_path_shape_waypoint()
 *-        - diguyCharacter::find_guide()
 *<
 *4    Version 7.1.11
 **
 *-    - The following functions were added to diguySensorRegion that
 *-      make it easier to write callback handlers for sensor regions:
 *>
 *-       - get_autosense_callback_candidate_entered()
 *-       - get_autosense_callback_candidate_left()
 *<
 *-    - Characters now fire live rounds by default when
 *-      diguyCharacter::fire_weapon() is called.  THIS IS A CHANGE
 *-      FROM PREVIOUS DEFAULT BEHAVIOR.
 *-      The old behavior can be restored in two ways:
 *>
 *-        - In DI-Guy Scenario, the Weapon Params tab on the Character
 *-          Elements palette has a checkbox called "Weapon Fires Live
 *-          Rounds".  The checkbox can be unchecked, followed by pressing
 *-          the "Copy to All Characters" button.
 *-        - In a program using the DI-Guy API, the function
 *-          diguyCharacter::set_weapon_fires_live_rounds() can be called.
 *<
 *-    - Character Labels Visibility is now set to 'None' in the default
 *-      .dss file.
 *-    - Added function to diguyCharacterGuide:
 *>
 *-        - diguyCharacterGuide::remove_all_disabled_guides()
 *<
 *-    - Made the following functions available to Decision Beads and Decision
 *-      Events:
 *>
 *-        - diguyCharacter::remove_all_guides()
 *-        - diguyCharacter::remove_all_disabled_guides()
 *<
 *-    - Removed DI-Guy Graphics API programming example
 *-      ogl_examples_high_precision/simple_playback_high_precision.
 *-      Replaced it with streamlined example
 *-      ogl_examples/simple_playback_far_positions.
 *-    - Fixed problem with props/scene objects showing up at origin
 *-      in after-action review.
 **
 *4    Version 7.1.10
 **
 *-    - Fixed a problem with the DI-Guy Graphics API that prevented
 *-      textures on some characters from being correctly bound under
 *-      certain circumstances.
 **
 *4    Version 7.1.9
 **
 *-    - The following optional functions were added to plugins:
 *>
 *-       - void key_press()
 *-       - void key_release()
 *<
 *-    - Added diguyIGuyController class for C++ and script control over
 *-      the I-Guy character.
 *-    - Setting the dead reckoning time threshold is now done by setting the
 *-      variable time_threshold in the network.cfg file.  The variable
 *-      tick_period has been deprecated and will no longer have any effect.
 *-      The default value is 5 seconds.
 **
 *4    Version 7.1.8
 **
 *-    - Added callback and event handling support for scenario variables:
 *>
 *-        - diguyScenario::add_default_variable_callback()
 *-        - diguyScenario::remove_default_variable_callback()
 *-        - diguyScenario::remove_default_variable_callback_with_user_data()
 *-        - diguyScenario::add_default_variable_callback_script()
 *-        - diguyScenario::remove_default_variable_callback_script()
 *-        - diguyScenario::register_variable_event_handler()
 *-        - diguyScenario::register_variable_event_handler_from_library()
 *-        - diguyScenario::register_variable_event_handler_script()
 *-        - diguyScenario::has_registered_variable_event_handler()
 *-        - diguyScenario::unregister_variable_event_handler()
 *-        - diguyVariable::CALLBACK_ID_VALUE_CHANGED
 *-        - diguyVariable::add_callback()
 *-        - diguyVariable::remove_callback()
 *-        - diguyVariable::remove_callback_with_user_data()
 *-        - diguyVariable::add_callback_script()
 *-        - diguyVariable::remove_callback_script()
 *-        - diguyVariable::map_event_handler_to_callback_id()
 *-        - diguyVariable::unmap_event_handler_from_callback_id()
 *<
 *4    Version 7.1.7
 **
 *-    - Added parameters polygon_offset_factor and polygon_offset_units
 *-      to bdiGraphicsInitOgl structure to allow for better control
 *-      over subface rendering in OpenGL.
 *-    - Addressed some issues with diguyGraphicsLink and far positions.
 **
 *4    Version 7.1.6
 **
 *-    - Added functions to diguySensorRegion:
 *>
 *-        - diguySensorRegion::contains_character_from_group()
 *<
 *-    - Added experimental functions
 *-      diguyScenario::create_temporary_character() and
 *-      diguyCharacter::get_is_temporary().  These functions allow
 *-      for the creation of 'temporary' characters that are not saved
 *-      in a .dss file and are recycled on scenario reset.  Temporary
 *-      characters are useful as fired munitions, effects, etc.
 *-    - Added functions to diguyCharacterGuide:
 *>
 *-        - diguyCharacterGuide::get_position_acquired()
 *-        - diguyCharacterGuide::get_orientation_acquired()
 *<
 *-    - Added new callbacks to diguyCharacter:
 *>
 *-        - diguyCharacter::CALLBACK_ID_GUIDE_POSITION_ACQUIRED
 *-        - diguyCharacter::CALLBACK_ID_GUIDE_POSITION_UNACQUIRED
 *-        - diguyCharacter::CALLBACK_ID_GUIDE_ORIENTATION_ACQUIRED
 *-        - diguyCharacter::CALLBACK_ID_GUIDE_ORIENTATION_UNACQUIRED
 *-        - diguyCharacter::CALLBACK_ID_CURRENT_TOUT_REACHED
 *<
 *-    - Added function diguyCharacter::set_custom_orientation_rx_and_ry().
 *-      This function allows the roll and pitch components of a
 *-      character to be set without taking the character off of its
 *-      current path, if there is one.  The character's up vector
 *-      (as set by diguyCharacter::set_up_vector()) must be 'c'
 *-      (custom) for these values to have an effect.
 *-    - Added new distance calculation functions:
 *>
 *-        - diguyCharacter::get_distance_to_character()
 *-        - diguyCharacter::get_distance_xy_to_character()
 *-        - diguyCharacter::get_distance_to_path()
 *<
 *-    - Added new experimental functions for locating a nearby character.
 *-      These  functions have a check_visibility argument; if 1, the
 *-      function will do a simple ray trace against scene object geometry.
 *>
 *-        - diguyCharacter::get_nearest_active_character()
 *-        - diguyCharacter::get_nearest_active_character_in_group()
 *<
 *-    - Added diguySensorRegion::contains_character_by_type()
 *-    - Added diguyCharacter::force_local_path() new function that
 *-      can grab a preexisting path. copy and transform it into the
 *-      local space of the character  and switch to it.
 *-    - Removed function diguy_dis_get_action_from_entity_state() from
 *-      diguy_module_dis.h.  diguyCharacter::get_action_from_entity_state()
 *-      should be called instead to map DIS values to an action.
 **
 *4    Version 7.1.5
 **
 *-    - Added experimental transformation functions for paths:
 *>
 *-        - diguyCharacterPath::translate()
 *-        - diguyCharacterPath::rotate_about_point()
 *-        - diguyPathShape::translate()
 *-        - diguyPathShape::rotate_about_point()
 *<
 *-    - Added experimental performance tuning functions:
 *>
 *-        - diguyScenario::send_character_to_recycle_bin()
 *-        - diguyScenario::retrieve_character_from_recycle_bin()
 *<
 *-    - Deprecated experimental performance tuning functions:
 *>
 *-        - diguyApp::set_use_varsets_enabled()
 *-        - diguyApp::get_use_varsets_enabled()
 *<
 *4    Version 7.1.4
 **
 *-    - Added function diguyCharacterPath::get_path_shape(), that
 *-      provides access to a path's underlying path shape.
 *-    - Added functions diguyCharacter::get_nearest_active_character()
 *-      and diguyCharacter::get_nearest_active_character_in_group().
 *-      These functions will walk through either all characters or all
 *-      characters in a group, and return the nearest character that is
 *-      both alive and enabled.  An optional argument specifies whether
 *-      to skip characters that are invisible to the caller because a
 *-      scene object is in the way.
 *-    - Added convenience functions diguyCharacter::get_distance() and
 *-      diguyCharacter::get_distance_xy() for getting the distance
 *-      between two characters.
 **
 *4    Version 7.1.3
 **
 *-    - Deprecated diguyChainSimulation::set_connection_character()
 *-      function.  Replaced with
 *-      diguyChainSimulation::set_chain_mass_connection_character().
 *-    - Added ability to set all chain mass positions in the
 *-      call diguyChainSimulation::set_chain_mass_position()
 *-      by passing -1 for the chain_mass_index.
 *-    - Added ability to fix all chain mass positions in the
 *-      call diguyChainSimulation::set_chain_mass_position_is_fixed()
 *-      by passing -1 for the chain_mass_index.
 *-    - Added aiming ability for characters with turrets.
 *-    - Fixed problems with debug versions of programming examples
 *-      that caused heap corruption on some Windows systems.
 **
 *4    Version 7.1.2
 **
 *-    - Added new callback to diguyCharacter:
 *>
 *-        - diguyCharacter::CALLBACK_ID_DESIRED_ACTION_REACHED
 *<
 *4    Version 7.1.1
 **
 *-    - Added a new experimental character type called "chain_simulation"
 *-      that can do realtime simulation of chains, ropes, and hoses.
 *-      The appearance of the chain_simulation character determines its
 *-      simulation settings.  Chain simulation settings are created and
 *-      on the DI-Guy Scenario Chain Sim Settings page, or via the
 *-      diguyChainSettings class.  Runtime parameters of the chain
 *-      simulation are set by obtaining a diguyChainSimulation object
 *-      via the diguyCharacter::get_chain_simulation() call.
 *-    - Fixed issues with diguyCharacter::set_current_appearance().
 *-      0 was returned even if appearance change failed; not correctly
 *-      returns -1 on failure.
 *-    - Added new experimental functions to event bead classes.  These
 *-      functions make it possible to specify that event beads should
 *-      begin and/or when a specific action bead or waypoint is reached.
 *-      Members are:
 *>
 *-        - diguyCharacterPathAimBead::get_begin_at_object_name()
 *-        - diguyCharacterPathAimBead::set_begin_at_object_name()
 *-        - diguyCharacterPathAimBead::get_end_at_object_name()
 *-        - diguyCharacterPathAimBead::set_end_at_object_name()
 *-        - diguyCharacterPathDecisionBead::get_begin_at_object_name()
 *-        - diguyCharacterPathDecisionBead::set_begin_at_object_name()
 *-        - diguyCharacterPathDecisionBead::get_end_at_object_name()
 *-        - diguyCharacterPathDecisionBead::set_end_at_object_name()
 *-        - diguyCharacterPathGazeBead::get_begin_at_object_name()
 *-        - diguyCharacterPathGazeBead::set_begin_at_object_name()
 *-        - diguyCharacterPathGazeBead::get_end_at_object_name()
 *-        - diguyCharacterPathGazeBead::set_end_at_object_name()
 *-        - diguyCharacterPathScriptBead::get_begin_at_object_name()
 *-        - diguyCharacterPathScriptBead::set_begin_at_object_name()
 *-        - diguyCharacterPathScriptBead::get_end_at_object_name()
 *-        - diguyCharacterPathScriptBead::set_end_at_object_name()
 *<
 *-    - Function diguyApp::load_plugin() has three new optional arguments:
 *-      required_by_scenario, unload_on_scenario_close, and
 *-      accepts_mouse_input.
 *-    - Added functions to diguyImpact:
 *>
 *-        - diguyImpact::get_location_in_link_coordinates()
 *<
 *-    - Added functions to diguyScenario:
 *>
 *-        - diguyScenario::get_impact_at_screen_coords()
 *<
 *-    - Added functions to diguyCharacter:
 *>
 *-        - diguyCharacter::set_label_text_shadow_color()
 *-        - diguyCharacter::get_label_text_shadow_color()
 *-        - diguyCharacter::set_label_text_shadow_is_visible()
 *-        - diguyCharacter::get_label_text_shadow_is_visible()
 *<
 *-    - Character label information is now saved in the scenario
 *-      file and restored when the scenario is loaded.
 **
 *4    Version 7.1.0
 **
 *-    - Added function diguy_get_app(), a cleaner function for
 *-      retrieving the diguyApp object than diguyApp::get_app().
 *-    - Added experimental transformation functions for paths:
 *>
 *-        - diguyCharacter::translate_all_paths()
 *-        - diguyCharacter::rotate_all_paths_about_point()
 *-        - diguyCharacter::rotate_all_paths_about_current_waypoint()
 *-        - diguyCharacterGroup::translate_all_paths()
 *-        - diguyCharacterGroup::rotate_all_paths_about_point()
 *-        - diguyCharacterGroup::rotate_all_paths_about_current_waypoint()
 *<
 *-    - Added functions diguyApp::get_diguy_base_dir() and
 *-      diguyApp::get_diguy_subdir().
 *-    - Added diguyCharacter::get_parent() function.
 *-    - Added diguyViewLight::set_shadowmap_size() and
 *-      diguyViewLight::get_shadowmap_size(); allows setting shadow
 *-      map resolution.
 *-      Must be a power of 2.
 *-    - Made various internal performance enhancements for scenario
 *-      updates.
 *-    - Fixed a problem with motion LODs updating all links every
 *-      now and then, even if the current action hasn't changed.
 *-    - Made the scenario be able to go past 60000 seconds.  Now a
 *-      scenario tout greater than 60000 seconds is interpreted as
 *-      unlimited.
 *-    - Fixed a problem with motion LODs updating too many links.
 *-    - Made various internal performance enhancements for scenario
 *-      updates.
 *-    - Added performance tuning functions:
 *>
 *-        - diguyCharacter::set_automatic_cpl_switching_enabled()
 *-        - diguyCharacter::get_automatic_cpl_switching_enabled()
 *-        - diguyCharacter::set_minimum_cpl()
 *-        - diguyCharacter::get_minimum_cpl()
 *-        - diguyCharacter::get_maximum_possible_current_cpl()
 *-        - diguyCharacter::maximize_current_cpl()
 *-        - diguyCharacter::get_current_cpl()
 *-        - diguyCharacter::set_position_accumulation_disabled()
 *-        - diguyCharacter::get_position_accumulation_disabled()
 *-        - diguyCharacter::set_all_blends_disabled()
 *-        - diguyCharacter::get_all_blends_disabled()
 *-        - diguyCharacter::set_shape_switches_disabled()
 *-        - diguyCharacter::get_shape_switches_disabled()
 *-        - diguyCharacter::set_shape_callbacks_disabled()
 *-        - diguyCharacter::get_shape_callbacks_disabled()
 *-        - diguyCharacter::set_graphics_api_shape_update_disabled()
 *-        - diguyCharacter::get_graphics_api_shape_update_disabled()
 *-        - diguyCharacter::optimized_update()
 *-        - diguyScenario::optimized_update()
 *-        - diguyScenario::send_character_to_recycle_bin()
 *-        - diguyScenario::retrieve_character_from_recycle_bin()
 *-        - diguyGraphicsLink::get_data_ptr()
 *-        - diguyGraphicsLink::get_translation_data_index()
 *-        - diguyGraphicsLink::get_rotation_data_index()
 *-        - diguyGraphicsLink::get_scale_data_index()
 *-        - diguyGraphicsLink::get_quat_data_ptr()
 *-        - diguyGraphicsLink::get_quat_data_index()
 *-        - diguyApp::set_use_varsets_enabled()
 *-        - diguyApp::get_use_varsets_enabled()
 *-        - diguyApp::set_precompute_quaternions_enabled()
 *-        - diguyApp::get_precompute_quaternions_enabled()
 *<
 *4    Version 7.0.9
 **
 *-    - Rewrote portions of network mapping code, custom pdus/specialized
 *-      motions will now work with more characters.
 *-      This requires a new version of data, but any character that has
 *-      been  properly tagged with variants and postures should transmit
 *-      better.
 *-    - Rewrote speed code, networked characters should scale speed to
 *-      try and match packets that are coming in.
 **
 *4    Version 7.0.8
 **
 *-    - Trying to get the position of a invalid link will behave a bit
 *-      better.
 **
 *4    Version 7.0.6
 **
 *-    - Creating a path when a character has none will properly set
 *-      the initial path name.
 **
 *4    Version 7.0.5
 **
 *-    - Fixed a crash that sometimes happened while reading comments
 *-      out of texture .attr files.
 **
 *4    Version 7.0.3
 **
 *-    - Fixed a problem with the diguyGraphicsShape::update() function not
 *-      always being called.
 *-    - Fixed various bugs with VR-Link and DI-Guy time sync code.
 *-    - Added warning if diguyCharacter::set_desired_action() is called
 *-      with 0.0f as the speed.
 **
 *4    Version 7.0.2
 **
 *-    - Fixed a problem with gazing and aiming not zeroing in on the
 *-      correct positions when using DI-Guy for Vega.
 **
 *4    Version 7.0.1
 **
 *-    - Deprecated "named_callback" functions in diguyApp.  Event handler
 *-      functions should be used instead.
 *-    - Renamed some diguyViewCamera functions:
 *>
 *-        - diguyViewCamera::get_world_offset_position() has become
 *-          diguyViewCamera::get_segment_origin()
 *-        - diguyViewCamera::get_local_position() has become
 *-          diguyViewCamera::get_position_segment_offset()
 *-        - diguyViewCamera::get_local_fix() has become
 *-          diguyViewCamera::get_fix_segment_offset()
 *<
 *-    - Added function diguyCharacterGroup::update_all_members(), and
 *-      deprecated function diguyCharacterGroup::set_all_members_t()
 *-    - Fixed problem with deleting one scenario and creating another
 *-      causing a crash.
 *-    - Fixed crash problem with function diguy_set_cfg_file().
 *-    - Changed the default settings of automatic switching of graphics
 *-      LODs and motion LODs, as set by
 *-      diguyScenario::set_automatic_graphics_lod_switching() and
 *-      diguyScenario::set_automatic_motion_lod_switching().  Previously
 *-      automatic LOD switching was always enabled unless explicitly
 *-      disabled by calling the above functions.  Now automatic LOD
 *-      switching will be disabled by default in DI-Guy API applications,
 *-      but remain enabled by default in DI-Guy Scenario.
 *-    - Added the following functions for adding and removing appearances:
 *>
 *-        - diguyScenario::add_appearance()
 *-        - diguyScenario::add_appearance_based_on_existing_appearance()
 *-        - diguyScenario::remove_appearance()
 *<
 *-    - diguyScenario::add_custom_appearance() deprecated;
 *-      use diguyScenario::add_appearance().
 *-    - diguyScenario::add_custom_appearance_based_on_existing_appearance()
 *-      deprecated; use
 *-      diguyScenario::add_appearance_based_on_existing_appearance().
 *-    - Promoted the following functions from experimental to
 *-      official status:
 *>
 *-        - diguyCharacter::get_label_text()
 *-        - diguyCharacter::set_label_text()
 *-        - diguyCharacter::get_label_is_visible()
 *-        - diguyCharacter::set_label_is_visible()
 *-        - diguyCharacter::set_label_text_color()
 *-        - diguyCharacter::get_label_text_color()
 *-        - diguyCharacter::set_label_background_color()
 *-        - diguyCharacter::get_label_background_color()
 *<
 *-    - Removed diguyLoadManager camera functions (load manager camera
 *-      now always tracks the scenario's primary view camera):
 *>
 *-        - diguyLoadManager::add_camera()
 *-        - diguyLoadManager::add_view_camera()
 *-        - diguyLoadManager::move_camera()
 *-        - diguyLoadManager::change_view_camera_settings()
 *-        - diguyLoadManager::remove_camera()
 *-        - diguyLoadManager::remove_all_cameras()
 *<
 *4    Version 7.0.0
 **
 *-    - Fixed problem with diguyCharacter::set_speed().  The set speed
 *-      was being reset to the action's default speed after a short time,
 *-      which is not correct behavior.
 *-    - Changed values returned by diguyCharacter::get_aim_azimuth()
 *-      and diguyCharacter::get_aim_elevation() to be character-
 *-      relative rather than world-relative.
 **
 *4    Version 6.1.10
 **
 *-    - Fixed event propagation bug when event tout is -1 and scenario
 *-      tout is changed.
 *-    - Added optional actor argument to
 *-      diguyScenario::add_custom_appearance() function.  This
 *-      fixes a problem with characters not being able to switch
 *-      to custom appearances with
 *-      diguyCharacter::set_current_appearance() because of actors
 *-      being different.
 *-    - Added simple_playback_high_precision and view_far_position that
 *-      demonstrate off the use of high precision position values.
 **
 *4    Version 6.1.9
 **
 *-    - Fixed problem with various diguyWaypoint "get" functions
 *-      that return angles (e.g., diguyWaypoint::get_yaw_in());
 *-      they weren't properly returning angles in degrees.
 *-    - Fixed problem with merging scenarios: merged waypoints at
 *-      the origin were not being rotated correctly.
 *-    - Fixed problem with config file appearance syntax.  The
 *-      item "shapeset:shape" format caused a crash; it now works
 *-      again.
 *-    - Fixed problems with required plug-in list not saving or
 *-      resetting properly.
 **
 *4    Version 6.1.8
 **
 *-    - Far positions rendering are now off by default, though
 *-      DI-Guy Scenario and DI-Guy Scenario UI V6 turn them on.
 *-      Practically this means that while internally things are
 *-      done at a higher precision format, the render camera being
 *-      in local space will be a change that needs to be explicitly
 *-      asked for.
 *-    - Added the following functions for controlling far position
 *-      state:
 *>
 *-        - diguy_ogl_get_use_far_positions()
 *-        - diguy_ogl_set_use_far_positions()
 *-        - diguy_graphics_get_use_far_positions()
 *-        - diguy_graphics_set_use_far_positions()
 *<
 *-    - Added accessors for setting character and scene object culling
 *-      on/off.
 *>
 *-        - diguyScenario::set_character_culling_enabled()
 *-        - diguyScenario::get_character_culling_enabled()
 *-        - diguyScenario::set_scene_object_culling_enabled()
 *-        - diguyScenario::get_scene_object_culling_enabled()
 *<
 *-    - Added accessors for setting character and scene object bounding
 *-      volume visualization on/off. (only works for OpenGL)
 *>
 *-        - diguyScenario::set_character_visualize_bounds_enabled()
 *-        - diguyScenario::get_character_visualize_bounds_enabled()
 *-        - diguyScenario::set_scene_object_visualize_bounds_enabled()
 *-        - diguyScenario::get_scene_object_visualize_bounds_enabled()
 *<
 *-    - Fixed a bug with diguyCharacter::set_current_appearance().
 *-    - Added warning message if a proposed appearance change is null;
 *-      fixes crash bug.
 *-    - diguyScenario::trigger_script_event() deprecated;
 *-      use diguyScenario::trigger_script().
 *-    - Added function diguyScenario::trigger_decision().
 **
 *4    Version 6.1.7
 **
 *-    - Added new experimental functions.  (Experimental
 *-      functions are typically for probationary features whose final
 *-      functionality or API has not been fully worked out.)
 *>
 *-        - diguyCharacter::set_weapon_projectile_is_visible()
 *-        - diguyCharacter::get_weapon_projectile_is_visible()
 *-        - diguyCharacter::get_label_text()
 *-        - diguyCharacter::set_label_text()
 *-        - diguyCharacter::get_label_is_visible()
 *-        - diguyCharacter::set_label_is_visible()
 *-        - diguyCharacter::set_label_text_color()
 *-        - diguyCharacter::get_label_text_color()
 *-        - diguyCharacter::set_label_background_color()
 *-        - diguyCharacter::get_label_background_color()
 *-        - diguyScenario::find_character_at_screen_coords()
 *-        - diguyScenario::set_playback_mode()
 *-        - diguyScenario::set_playback_mode_stop()
 *-        - diguyScenario::set_playback_mode_play()
 *<
 *-    - Removed the function diguyLoadManager::set_enable_culling().
 *-    - Added optional arguments initial_posture and initial_variant
 *-      to diguyScenario::set_iguy_character().
 *-    - Added function diguyScenario::get_time_of_day().
 *-    - Fixed bug in diguyCharacter::is_speaking().  It was
 *-      sometimes improperly returning FALSE.
 *-    - Added the following functions that control whether the scenario
 *-      will be reset (as if diguyScenario::reset() were called) when
 *-      a merge happens:
 *>
 *-        - diguyScenarioMergeSettings::set_reset_flag()
 *-        - diguyScenarioMergeSettings::get_reset_flag()
 *<
 *-    - Now incoming XC_MERGE_SCENARIO PDUs do not cause the running
 *-      scenario to stop and reset.
 *-    - Now incoming XC_MERGE_SCENARIO PDUs cause a
 *-      XC_MERGE_SCENARIO_COMPLETE PDU to be sent when the merge
 *-      operation is done.
 *-    - Now incoming XC_LOAD_SCENARIO PDUs cause a
 *-      XC_LOAD_SCENARIO_COMPLETE PDU to be sent when the load
 *-      operation is complete.
 *-    - Added the following functions:
 *>
 *-        - diguyExerciseInterface::send_pdu_xc_eval_script()
 *-        - diguyExerciseInterface::send_pdu_xc_time_now()
 *<
 *-    - Now incoming XC_TIME_NOW messages cause the scenario to chase
 *-      sync.
 *-    - Now incoming XC_EVAL_SCRIPT messages cause the script therein
 *-      to be evaluated.
 *-    - diguyScenario::load() has been changed to not accept .flt
 *-      filenames.  The new function diguyScenario::create_scene_object()
 *-      should be used instead.
 *-    - Added the following functions:
 *>
 *-        - diguyScenario::create_scene_object()
 *-        - diguyScenario::destroy_scene_object()
 *<
 *-    - Fixed problem with DX99 version of the library that prevented
 *-      gazing from working correctly.
 *-    - Added better detection of and error message for missing
 *-      DI-Guy Data installation.
 *-    - Renamed experimental "shot" class, function names, and
 *-      callback ids to use the more generic term "impact":
 *>
 *-        - diguyShot
 *>
 *-            - diguyShot (class name)         -> diguyImpact
 *-            - get_shooter_name()             -> get_attacker_name()
 *-            - get_shooter()                  -> get_attacker()
 *-            - get_shot_number()              -> get_impact_number()
 *-            - set_shot_number()              -> set_impact_number()
 *-            - get_shot_been_processed()      -> get_impact_been_processed()
 *-            - set_shot_been_processed()      -> set_impact_been_processed()
 *<
 *-        - diguyCharacter
 *>
 *-            - CALLBACK_ID_GOT_SHOT           -> CALLBACK_ID_IMPACT
 *-            - CALLBACK_ID_SHOT_SUCCESS       -> CALLBACK_ID_FIRE_WEAPON_SUCCESS
 *-            - get_last_shot_record()         -> get_last_impact_record()
 *-            - get_last_shot_number()         -> get_last_impact_number()
 *-            - get_last_shot_been_processed() -> get_last_impact_been_processed()
 *-            - set_last_shot_been_processed() -> set_last_impact_been_processed()
 *-            - get_last_shot_link()           -> get_last_impact_link()
 *-            - get_last_shot_link_is()        -> get_last_impact_link_is()
 *-            - set_max_shot_hits()            -> set_max_impact_hits()
 *<
 *-        - diguyScenario
 *>
 *-            - CALLBACK_ID_ENVIRONMENTAL_DETONATION -> CALLBACK_ID_SCENE_OBJECT_IMPACT
 *-            - get_last_env_shot_info()       -> get_last_env_impact_info()
 *<
 *<
 *-    - Added function diguyExerciseInterface::send_pdu_xc_time_now().
 *-    - Added code to properly respond to incoming XC_TIME_NOW PDUs.
 **
 *4    Version 6.1.6
 **
 *-    - Added functions and diguyExerciseInterface class for
 *-      enhanced networking support:
 *>
 *-        - diguyApp::get_exercise_interface()
 *-        - diguyExerciseInterface::send_pdu_xc_load_scenario()
 *-        - diguyExerciseInterface::send_pdu_xc_merge_scenario()
 *-        - diguyExerciseInterface::send_pdu_xc_trigger_script()
 *-        - diguyExerciseInterface::send_pdu_xc_control()
 *-        - diguyScenario::set_tin_time_of_day()
 *-        - diguyScenario::get_tin_time_of_day()
 *<
 *-    - Added new functions diguyView::get_width() and
 *-      diguyView::get_height().
 *-    - Experimental plugin infrastructure has been reworked a fair amount.
 *>
 *-        - Function diguyScenario::add_plugin() has been changed to
 *-          diguyApp::load_plugin().
 *-        - Function diguyScenario::remove_plugin() has been changed to
 *-          diguyApp::unload_plugin().
 *-        - The following functions will be imported when a plugin
 *-          is loaded.  Note that not only diguy_version() must be
 *-          implemented:
 *>
 *-            - void diguy_version(int* version_major, int* version_minor, int* version_point)
 *-            - void initialize_plugin(diguyApp* app)
 *-            - void deinitialize_plugin(diguyApp* app)
 *-            - void initialize(diguyScenario* s)
 *-            - void deinitialize(diguyScenario* s)
 *-            - void pre_update(diguyScenario* s)
 *-            - void post_update(diguyScenario* s)
 *-            - void pre_draw(diguyScenario* s)
 *-            - void post_draw(diguyScenario* s)
 *-            - void reset(diguyScenario* s)
 *-            - diguyPluginMouseCursor get_mouse_cursor(diguyScenario* s)
 *-            - void mouse_press(diguyScenario* s, diguyPluginMouseEvent* mouse_event)
 *-            - void mouse_drag(diguyScenario* s, diguyPluginMouseEvent* mouse_event)
 *-            - void mouse_release(diguyScenario* s, diguyPluginMouseEvent* mouse_event)
 *-            - void mouse_move(diguyScenario* s, diguyPluginMouseEvent* mouse_event)
 *-            - void save_review_data(diguyScenario* s, const char* filename)
 *-            - void load_review_data(diguyScenario* s, const char* filename)
 *<
 *<
 *-    - Added an additional argument, merge_settings, to the
 *-      diguyScenario::merge() function.
 *-    - Added the following functions to enable better control of
 *-      merging scenarios:
 *>
 *-        - diguyScenario::create_merge_settings()
 *-        - diguyScenario::destroy_merge_settings()
 *<
 *-    - Added the following functions:
 *>
 *-        - diguyCharacter::revive_now()
 *<
 *-    - Added the following functions in support of 3D positional sound:
 *>
 *-        - diguyCharacter::set_default_weapon_sound()
 *-        - diguyCharacter::get_default_weapon_sound()
 *-        - diguyCharacter::set_default_weapon_sound_gain()
 *-        - diguyCharacter::get_default_weapon_sound_gain()
 *-        - diguyCharacter::play_3d_sound()
 *-        - diguySoundInstance::set_is_3d_sound_flag()
 *-        - diguySoundInstance::get_is_3d_sound_flag()
 *<
 *-    - Added new optional argument "gain" to diguyCharacter::play_sound()
 *-      function.
 *-    - Made following functions available to Decision Beads and Decision
 *-      Events:
 *>
 *-        - diguyCharacter::aim_at_character()
 *-        - diguyCharacter::end_aim()
 *-        - diguyCharacter::end_gaze()
 *-        - diguyCharacter::end_lpoint()
 *-        - diguyCharacter::gaze_at_character()
 *-        - diguyCharacter::lpoint_at_character()
 *-        - diguyCharacter::resume_interrupted_path()
 *-        - diguyCharacter::play_3d_sound()
 *<
 *-    - Removed unused variable "working_directory" from bdiExFaceInit
 *-      structure.  Replaced with variable "placeholder", leaving the
 *-      option open for future init variables.  Calls passing NULL for
 *-      the bdiExFaceInit structure to diguy_exface_initialize() will
 *-      not need to change.
 *-    - Fixed problem with Decision Bead that incorrectly put function
 *-      variable_less_than_string() in variable query functions instead
 *-      of character query functions.
 *-    - Added script_type argument to diguyScenario::eval_script() and
 *-      diguyScenario::eval_script_file() functions.
 **
 *4    Version 6.1.5
 **
 *-    - Fixed problem that newly created characters were not
 *-      appearing until the next scenario tick dt boundary was
 *-      crossed.
 *-    - diguyCharacter::set_t() deprecated;
 *-      use diguyCharacter::update().
 *-    - Added new function diguyCharacterPath::get_length().
 *-    - Fixed potential crash from call to function
 *-      diguyCharacterPath::update().
 *-    - Character positions now stored in higher precision format.
 *>
 *-        - Added new functions:
 *>
 *-            - diguyCharacter::set_position_double()
 *-            - diguyCharacter::get_position_double()
 *-            - diguyCharacter::get_link_position_double()
 *-            - diguyCharacter::get_link_position_with_offset_double()
 *-            - diguyGraphicsLink::get_translation_double()
 *-            - diguyViewCamera::get_position_double()
 *<
 *-        - New local space camera.  DI-Guy can now render in the local
 *-          space of the camera. This allows DI-Guy to avoid putting
 *-          large values on the rendering stack, avoiding numerical
 *-          imprecision on objects that are far from the origin.
 *-        - Added new local space camera functions:
 *>
 *-            - diguyScenario::set_render_camera()
 *-            - diguyViewCamera::get_local_fix()
 *-            - diguyViewCamera::get_local_position()
 **
 **        In OpenGL, use gluLookAt(local_position_x, local_position_y,
 **        local_position_z, local_fix_x, local_fix_y, local_fix_z,
 **        0.0, 0.0, 1.0); to emulate the DI-Guy camera.
 *<
 *<
 *4    Version 6.1.4
 **
 *-    - Added new function diguyGraphicsShape::get_is_hidden().
 *-    - Added new functions to diguyCharacterGroup class:
 *>
 *-        - diguyCharacterGroup::get_num_members()
 *-        - diguyCharacterGroup::get_member_at_index()
 *<
 *-    - Added new functions to diguySensorRegion class:
 *>
 *-        - diguySensorRegion::add_characters_in_region_to_group()
 *-        - diguySensorRegion::add_candidate_characters_in_region_to_group()
 *<
 *-    - Removed unused functions from diguySensorRegion class:
 *>
 *-        - diguySensorRegion::get_characters_in_region()
 *-        - diguySensorRegion::update_characters_in_region()
 *-        - diguySensorRegion::update_candidate_characters_in_region()
 *<
 *4    Version 6.1.3
 **
 *-    - Added new utility function diguy_convert_euler_angle_order().
 *-      This function should help DI-Guy API users convert the DI-Guy
 *-      standard Euler angle order of ZXY (yaw then roll then pitch)
 *-      into other Euler angle orders.
 *-    - Added new argument rampup_interval to function
 *-      diguyCharacter::add_motion_texture().  This function makes it
 *-      possible to more smoothly enter a motion texture.  Previously
 *-      the rampup was hard-coded to 0.2 seconds.  If the function
 *-      is to end existing motion textures, it also uses the passed
 *-      rampup interval as the rampdown interval for ending the
 *-      existing motion textures.
 *-    - Fixed annoying error message that was printed when motion textures
 *-      ended.
 *-    - Added new variants that can be added to custom motions:
 *>
 *-        - DIGUY_MOTION_VARIANT_MISC0
 *-        - DIGUY_MOTION_VARIANT_MISC1
 *-        - DIGUY_MOTION_VARIANT_MISC2
 *-        - DIGUY_MOTION_VARIANT_MISC3
 *-        - DIGUY_MOTION_VARIANT_MISC4
 *-        - DIGUY_MOTION_VARIANT_MISC5
 *-        - DIGUY_MOTION_VARIANT_MISC6
 *-        - DIGUY_MOTION_VARIANT_MISC7
 *-        - DIGUY_MOTION_VARIANT_MISC8
 *-        - DIGUY_MOTION_VARIANT_MISC9
 *<
 *4    Version 6.1.2
 **
 *-    - Changed win32 programming examples so that when examples are
 *-      compiled for different versions of LIBC (i586_md_debug as
 *-      opposed to i586_md, for example), the object files will be
 *-      placed in separate directories.
 *-    - Added new function calls that will free memory allocated by
 *-      the DI-Guy Graphics API loader once platform-specific objects
 *-      have been created:
 *>
 *-        - diguyGraphicsMaterial::free_loader_memory()
 *-        - diguyGraphicsMesh::free_loader_memory()
 *-        - diguyGraphicsState::free_loader_memory()
 *-        - diguyGraphicsTexture::free_loader_memory()
 *<
 *-    - Fixed a problem with gazing in which a character with orientation
 *-      change enabled would do an extra shuffle to the left and back
 *-      again when the character was already facing the gaze angle at
 *-      gaze start.
 *-    - Added new side-effects to characters that die, including those
 *-      for which the diguyCharacter::die_now() function is called:
 *>
 *-        - all aiming is ended
 *-        - all gazing is ended
 *-        - all pointing is ended
 *-        - head nodding and shaking are stopped
 *-        - all gestures are aborted
 *-        - all sounds originated by the character are stopped
 *<
 *-    - Added new function call limitations to dead characters.  The
 *-      following function calls will have no effect on dead characters:
 *>
 *-        - diguyCharacter::add_motion_texture()
 *-        - diguyCharacter::aim_at_angle()
 *-        - diguyCharacter::aim_at_angle_local()
 *-        - diguyCharacter::aim_at_character()
 *-        - diguyCharacter::aim_at_point()
 *-        - diguyCharacter::aim_at_point_local()
 *-        - diguyCharacter::create_and_force_bridge_path()
 *-        - diguyCharacter::execute_gesture()
 *-        - diguyCharacter::execute_1stage_gesture()
 *-        - diguyCharacter::execute_2stage_gesture()
 *-        - diguyCharacter::execute_3stage_gesture()
 *-        - diguyCharacter::fire_screen_space_bullet()
 *-        - diguyCharacter::fire_weapon()
 *-        - diguyCharacter::fire_weapon_n_times()
 *-        - diguyCharacter::force_action()
 *-        - diguyCharacter::force_action_and_path_shape()
 *-        - diguyCharacter::force_action_with_duration()
 *-        - diguyCharacter::force_partial_path()
 *-        - diguyCharacter::force_path()
 *-        - diguyCharacter::gaze_at_angle()
 *-        - diguyCharacter::gaze_at_angle_local()
 *-        - diguyCharacter::gaze_at_character()
 *-        - diguyCharacter::gaze_at_point()
 *-        - diguyCharacter::gaze_at_point_local()
 *-        - diguyCharacter::lpoint_at_angle()
 *-        - diguyCharacter::lpoint_at_angle_local()
 *-        - diguyCharacter::lpoint_at_character()
 *-        - diguyCharacter::lpoint_at_point()
 *-        - diguyCharacter::lpoint_at_point_local()
 *-        - diguyCharacter::nod_head()
 *-        - diguyCharacter::play_sound()
 *-        - diguyCharacter::push_path()
 *-        - diguyCharacter::resume_interrupted_path()
 *-        - diguyCharacter::set_aim()
 *-        - diguyCharacter::set_desired_action()
 *-        - diguyCharacter::set_nod()
 *-        - diguyCharacter::shake_head()
 *<
 *-    - Added diguyCharacterPath::get_point_at_distance() function that
 *-      makes it possible to sample path points.  The function is very
 *-      similar to diguyPathShape::get_point_at_distance().
 *-    - Changed diguyScenario::create_waypoint() function to take an
 *-      additional argument.  Waypoints created with the function can
 *-      now have different initial weights for entering and leaving the
 *-      waypoint.
 **
 *4    Version 6.1.1
 **
 *-    - Added new member function:
 *>
 *-        - diguyLoadManager::remove_all_cameras()
 *<
 *-    - Added new member functions to diguyVariable that allow for
 *-      setting and getting the initial value of the variable, and
 *-      for retrieving the scenario and/or character the variable
 *-      belongs to:
 *>
 *-        - diguyVariable::get_scenario()
 *-        - diguyVariable::get_character()
 *-        - diguyVariable::get_initial_value_as_int()
 *-        - diguyVariable::get_initial_value_as_float()
 *-        - diguyVariable::get_initial_value_as_string()
 *-        - diguyVariable::set_initial_value_as_int()
 *-        - diguyVariable::set_initial_value_as_float()
 *-        - diguyVariable::set_initial_value_as_string()
 *<
 *-    - Added character variables to characters.  Character variables
 *-      are almost exactly like scenario variables but are local to each
 *-      character instead of being shared across the scenario.  For
 *-      example, all characters in a scenario could be given a variable
 *-      named "panic_level" that tracks how panicked the character is.
 *-      Character variables use the same class as scenario variables:
 *-      diguyVariable.  The following functions are available for
 *-      accessing character variables:
 *>
 *-        - diguyCharacter::get_num_variables()
 *-        - diguyCharacter::get_variable_at_index()
 *-        - diguyCharacter::find_variable()
 *-        - diguyCharacter::find_or_create_variable()
 *-        - diguyCharacter::destroy_variable()
 *-        - diguyCharacter::variable_equal_to_int()
 *-        - diguyCharacter::variable_greater_than_int()
 *-        - diguyCharacter::variable_less_than_int()
 *-        - diguyCharacter::variable_equal_to_float()
 *-        - diguyCharacter::variable_greater_than_float()
 *-        - diguyCharacter::variable_less_than_float()
 *-        - diguyCharacter::variable_equal_to_string()
 *-        - diguyCharacter::variable_greater_than_string()
 *-        - diguyCharacter::variable_less_than_string()
 *<
 *4    Version 6.1.0
 **
 *-    - Added new functions to the DI-Guy Graphics API to make it easier
 *-      to know which character links or shapes belong to, and to easily
 *-      get a pointer to the character's base link:
 *>
 *-        - diguyGraphicsLink::get_character()
 *-        - diguyGraphicsShape::get_character()
 *-        - diguyCharacter::get_position_link()
 *<
 *-    - Added new function diguyGraphicsLink::get_transformation_matrix().
 *-      This function provides access to the link transformation in matrix
 *-      form rather than separate vectors for translation, rotation, etc.
 *-    - Added new blend functions "StepHalfway" and "Waver".  The
 *-      "StepHalfway" blend function makes an instant step from 0 to 1
 *-      halfway through the blend.  The "Waver" blend function wavers from 0
 *-      to 1 back to 0 and back to 1 using a three-quarter sine wave.
 *-    - Added functions to diguyScenario API:
 *>
 *-        - diguyScenario::get_character_type_num_gestures()
 *-        - diguyScenario::get_character_type_gesture_at_index()
 *<
 *-    - Added functions to diguyCharacterGesture API:
 *>
 *-        - diguyCharacterGesture::force_table_action()
 *<
 *4    Version 6.0.8
 **
 *-    - Changed DI-Guy Graphics API to not print a warning if a geometry
 *-      file is not found.  This allows external loaders to load their
 *-      own version of a geometry file without warnings, and without the
 *-      file having to be present in $DIGUY/geometry.
 *-    - Added function diguyCharacter::is_group_member().
 *-    - For Windows, added the DI-Guy version number as a suffix to the
 *-      .dll that gets installed in the bin directory.
 **
 *4    Version 6.0.6
 **
 *-    - Changed default for gaze parameter "orientation enabled for
 *-      gaze".  In DI-Guy 5.x this parameter defaulted to 0 for all
 *-      characters except the sergeant.  In earlier versions of 6.0 this
 *-      was changed to "1 if character has turning actions, else 0".
 *-      This change has, however, resulted in too much confusion and
 *-      user astonishment.  The new (and hopefully final) change
 *-      is to default the parameter to 0 for *all* characters.  This fixes
 *-      a backwards incompatibility problem where some version 5 characters
 *-      that were gazing would leave their path on version 6 and thus not
 *-      complete the actions specified by their path.
 *-    - Implemented function diguyCharacter::end_aim().  This function
 *-      had been omitted from the DI-Guy API.
 *-    - Fixed problem with initial value of scenario variables, where
 *-      the integer value of each variable was initialized to zero,
 *-      even if the intended initial value was nonzero.
 *-    - Fixed problem when merging two scenarios with different
 *-      values for tick dt.  Decision beads, Script event beads, Aim
 *-      beads and Gaze beads were being improperly scheduled.
 **
 *4    Version 6.0.5
 **
 *-    - Fixed diguyCharacter::get_aim_azimuth() and
 *-      diguyCharacter::get_aim_elevation().  They were returning
 *-      zero.  Now they return meaningful values if the character is
 *-      aiming.
 **
 *4    Version 6.0.4
 **
 *-    - DI-Guy can now use OpenGL's multitexturing mechanism.  The
 *-      OpenGL texture unit that DI-Guy will use can be set by
 *-      setting the bdiGraphicsInitOgl::use_multitexture_extension
 *-      and bdiGraphicsInitOgl::texture_unit initialization variables.
 **
 *4    Version 6.0.3
 **
 *-    - Fixed a problem with DI-Guy Graphics API functions not being
 *-      correctly declared for DLL use.
 *-    - Fixed a problem with calling path edit functions on a path
 *-      that is in use.  The change was not being fully propagated
 *-      to the character's motions.
 *-    - Eliminated GoThere camera instability at low frame rates.
 *-    - Eliminated aiming instability at low frame rates and at low
 *-      desired locate times.
 **
 *4    Version 6.0.2
 **
 *-    - No changes.
 **
 *4    Version 6.0.1
 **
 *-    - Fixed problem with motion scaling where the scale factor was
 *-      being applied twice in some cases.  (PR 3029)
 *-    - Removed deprecated diguyCharacter functions:
 *>
 *-        - diguyCharacter::force_action_by_name()
 *-        - diguyCharacter::get_desired_action_name()
 *-        - diguyCharacter::set_desired_action_by_name()
 *-        - diguyCharacter::force_partial_path_by_name()
 *-        - diguyCharacter::force_path_by_name()
 *-        - diguyCharacter::push_path_by_name()
 *-        - diguyCharacter::set_parent_by_name()
 *<
 *-    - Removed deprecated diguySensorRegion function
 *-      diguySensorRegion::contains_character_by_name().
 *-    - Removed deprecated diguySignal function diguySignal::play_sound().
 *-    - Removed deprecated diguyScenario function
 *-      diguyScenario::find_or_create_face_expression().
 **
 *4    Version 6.0.0
 **
 *-    - Made aiming precise.  Characters now actually aim at the
 *-      targets specified by aim beads, rather than giving an
 *-      approximation of proper aim.
 *-    - Made aiming dynamic.  Character aiming motion is now much more
 *-      realistic, homing in on the specified target.
 *-    - Added new diguyCharacter functions:
 *>
 *-        - diguyCharacter::aim_at_angle()
 *-        - diguyCharacter::aim_at_angle_local()
 *-        - diguyCharacter::aim_at_point()
 *-        - diguyCharacter::aim_at_point_local()
 *-        - diguyCharacter::aim_at_character()
 *-        - diguyCharacter::set_aim_param_desired_locate_time()
 *-        - diguyCharacter::get_aim_param_desired_locate_time()
 *-        - diguyCharacter::get_aim_is_acquired()
 *-        - diguyCharacter::get_aim_is_steady()
 *-        - diguyCharacter::set_weapon_near_range()
 *-        - diguyCharacter::set_weapon_far_range()
 *<
 *-    - Added diguyLoadManager class.  Members are:
 *>
 *-        - diguyLoadManager::add_camera()
 *-        - diguyLoadManager::add_view_camera()
 *-        - diguyLoadManager::move_camera()
 *-        - diguyLoadManager::change_view_camera_settings()
 *-        - diguyLoadManager::remove_camera()
 *-        - diguyLoadManager::set_enable_culling()
 *-        - diguyLoadManager::set_nonvisible_update_rate()
 *-        - diguyLoadManager::set_zone_bounds()
 *-        - diguyLoadManager::set_zone_parameters()
 *-        - diguyLoadManager::set_max_update_period()
 *<
 *-    - Added new diguyApp functions:
 *>
 *-        - diguyApp::create_load_manager()
 *-        - diguyApp::get_load_manager()
 *-        - diguyApp::destroy_load_manager()
 *<
 *-    - Added new diguyCharacter functions:
 *>
 *-        - diguyCharacter::get_bounding_radius()
 *-        - diguyCharacter::get_default_bounding_radius()
 *-        - diguyCharacter::set_bounding_radius()
 *<
 *-    - Added new diguyApp class.  There is only one diguyApp object per
 *-      application.  It is available after the diguy_*_initialize() call
 *-      by calling the static function diguyApp::get_app().  The diguyApp
 *-      object will hold data that is application-wide, which in the past
 *-      has been somewhat artificially placed in the diguyScenario class.
 *-    - Removed support for character history types
 *-      DIGUY_HISTORY_TYPE_FIRST and DIGUY_HISTORY_TYPE_LAST.  Characters
 *-      saved using these history types will have their history type
 *-      set to DIGUY_HISTORY_TYPE_COMPLETE.
 *-    - Moved some static functions from diguyScenario to diguyApp:
 *>
 *-        - diguyScenario::add_default_callback() deprecated;
 *-          use diguyApp::add_default_scenario_callback()
 *-        - diguyScenario::remove_default_callback() deprecated;
 *-          use diguyApp::remove_default_scenario_callback()
 *-        - diguyScenario::remove_default_callback_with_user_data() deprecated;
 *-          use diguyApp::remove_default_scenario_callback_with_user_data()
 *-        - diguyScenario::add_default_callback_script() deprecated;
 *-          use diguyApp::add_default_scenario_callback_script()
 *-        - diguyScenario::remove_default_callback_script() deprecated;
 *-          use diguyApp::remove_default_scenario_callback_script()
 *<
 *-    - Deprecated two diguyCharacterPath callback ids.  A decision
 *-      bead or script bead at the appropriate place in the path
 *-      should be used instead of the deprecated callbacks:
 *>
 *-        - CALLBACK_ID_TIME_LEFT has been changed to
 *-          CALLBACK_ID_TIME_LEFT_DEPRECATED
 *-        - CALLBACK_ID_TIME_INTO has been changed to
 *-          CALLBACK_ID_TIME_INTO_DEPRECATED
 *<
 *-    - Fixed problem with gestures not range checking stage
 *-      argument.  If 0 was passed as the stage in some functions,
 *-      memory overwrites could have occurred or garbage results could
 *-      have been returned.  Also updated doc of affected functions
 *-      to specify that stages are between 1 and 3.
 *-    - Added functions to character for manually applying path
 *-      bead effects:
 *>
 *-        - diguyCharacter::apply_aim_bead()
 *-        - diguyCharacter::apply_decision_bead()
 *-        - diguyCharacter::apply_gaze_bead()
 *-        - diguyCharacter::apply_script_bead()
 *<
 *-    - Added new diguyCharacterPathDecisionBead class.  Members are:
 *>
 *-        - diguyCharacterPathDecisionBead::get_name()
 *-        - diguyCharacterPathDecisionBead::set_name()
 *-        - diguyCharacterPathDecisionBead::get_distance_into_path()
 *-        - diguyCharacterPathDecisionBead::set_distance_into_path()
 *-        - diguyCharacterPathDecisionBead::get_length()
 *-        - diguyCharacterPathDecisionBead::set_length()
 *-        - diguyCharacterPathDecisionBead::get_tin()
 *-        - diguyCharacterPathDecisionBead::set_tin()
 *-        - diguyCharacterPathDecisionBead::get_duration()
 *-        - diguyCharacterPathDecisionBead::set_duration()
 *<
 *-    - Added new diguyCharacterPathAimBead class.  Members are:
 *>
 *-        - diguyCharacterPathAimBead::get_name()
 *-        - diguyCharacterPathAimBead::set_name()
 *-        - diguyCharacterPathAimBead::get_distance_into_path()
 *-        - diguyCharacterPathAimBead::set_distance_into_path()
 *-        - diguyCharacterPathAimBead::get_length()
 *-        - diguyCharacterPathAimBead::set_length()
 *-        - diguyCharacterPathAimBead::get_tin()
 *-        - diguyCharacterPathAimBead::set_tin()
 *-        - diguyCharacterPathAimBead::get_duration()
 *-        - diguyCharacterPathAimBead::set_duration()
 *<
 *-    - Added new diguyCharacterPathGazeBead class.  Members are:
 *>
 *-        - diguyCharacterPathGazeBead::get_name()
 *-        - diguyCharacterPathGazeBead::set_name()
 *-        - diguyCharacterPathGazeBead::get_distance_into_path()
 *-        - diguyCharacterPathGazeBead::set_distance_into_path()
 *-        - diguyCharacterPathGazeBead::get_length()
 *-        - diguyCharacterPathGazeBead::set_length()
 *-        - diguyCharacterPathGazeBead::get_tin()
 *-        - diguyCharacterPathGazeBead::set_tin()
 *-        - diguyCharacterPathGazeBead::get_duration()
 *-        - diguyCharacterPathGazeBead::set_duration()
 *<
 *-    - Added function diguyCharacter::find_waypoint().  This
 *-      function finds a waypoint by name.
 *-    - Added functions to access new bead types.  Also added find
 *-      functions for action beads and script beads.  The following
 *-      functions have been added to diguyCharacterPath:
 *>
 *-        - diguyCharacterPath::find_waypoint()
 *-        - diguyCharacterPath::find_action_bead()
 *-        - diguyCharacterPath::find_script_bead()
 *-        - diguyCharacterPath::get_num_aim_beads()
 *-        - diguyCharacterPath::get_aim_bead_at_index()
 *-        - diguyCharacterPath::find_aim_bead()
 *-        - diguyCharacterPath::get_num_decision_beads()
 *-        - diguyCharacterPath::get_decision_bead_at_index()
 *-        - diguyCharacterPath::find_decision_bead()
 *-        - diguyCharacterPath::get_num_gaze_beads()
 *-        - diguyCharacterPath::get_gaze_bead_at_index()
 *-        - diguyCharacterPath::find_gaze_bead()
 *<
 *-    - Added functions to diguyCharacterGesture API:
 *>
 *-        - diguyCharacterGesture::set_table_action_begin()
 *-        - diguyCharacterGesture::get_table_action_begin()
 *-        - diguyCharacterGesture::set_table_action_end()
 *-        - diguyCharacterGesture::get_table_action_end()
 *-        - diguyCharacterGesture::get_table_action_now()
 *-        - diguyCharacterGesture::get_table_action_next()
 *-        - diguyCharacterGesture::get_rampup_duration()
 *-        - diguyCharacterGesture::set_rampup_duration()
 *-        - diguyCharacterGesture::get_rampup_blend_function_name()
 *-        - diguyCharacterGesture::set_rampup_blend_function_name()
 *-        - diguyCharacterGesture::get_rampdown_duration()
 *-        - diguyCharacterGesture::set_rampdown_duration()
 *-        - diguyCharacterGesture::get_rampdown_blend_function_name()
 *-        - diguyCharacterGesture::set_rampdown_blend_function_name()
 *-        - diguyCharacterGesture::get_table_action_rep_duration()
 *-        - diguyCharacterGesture::get_table_transition_duration()
 *-        - diguyCharacterGesture::get_default_blend_duration()
 *-        - diguyCharacterGesture::get_num_table_actions()
 *-        - diguyCharacterGesture::get_table_action_at_index()
 *<
 *-    - Added functions for setting initial motion texture parameters:
 *>
 *-        - diguyCharacter::set_initial_motion_texture()
 *-        - diguyCharacter::get_initial_motion_texture()
 *-        - diguyCharacter::set_initial_motion_texture_gain()
 *-        - diguyCharacter::get_initial_motion_texture_gain()
 *<
 *-    - Plugins require a license.
 *-    - Moved to flexlm 10.1 on Windows for license management.
 *-    - Particles now work in locked scenarios.
 *-    - Made characters with non default actors display properly in
 *-      Vega Prime.
 *-    - Saving review data now saves all generated data, not just up to
 *-      the time slider.
 *-    - Fixed a bug with history saving.
 **
 *4    Version 5.3.5
 **
 *-    - Fixed problem with .flt loader not dealing well with .flt files that
 *-      contain multiple nodes that have the same name.  The .flt loader now
 *-      more vigorously checks for name collisions.
 *-    - Removed one unused level of Motion LODs.  The unused LOD 6 was not
 *-      mentioned in documentation nor was it used in motion generation
 *-      code.  This change requires use of DI-Guy Data 5.3.5.
 *-    - Worked on diguyCharacterGesture API:
 *>
 *-        - diguyCharacterGesture::get_num_stages() deprecated;
 *-          use diguyCharacterGesture::get_num_progression_stages()
 *-        - diguyCharacterGesture::set_stage_duration() deprecated;
 *-          use diguyCharacterGesture::set_progression_stage_duration()
 *-        - diguyCharacterGesture::get_stage_duration() deprecated;
 *-          use diguyCharacterGesture::get_progression_stage_duration()
 *-        - diguyCharacterGesture::get_stage_optimal_duration() deprecated;
 *-          use diguyCharacterGesture::get_progression_stage_optimal_duration()
 *<
 *-    - Worked on diguyCharacterGesture documentation.  Added more
 *-      which functions can be called for which gesture types.
 *-    - Added type diguyCharacterGestureType and corresponding function
 *-      diguyCharacterGesture::get_type().
 *-    - New experimental shooting functionality:
 *>
 *-        - Added callback diguyCharacter::CALLBACK_ID_GOT_SHOT.
 *-        - Added callback diguyCharacter::CALLBACK_ID_SHOT_SUCCESS.
 *-        - Added new find all hits functionality.
 *-        - Added new diguyShot class accessible from scripts,
 *-          records who got shot and where.
 *-        - Characters can now shoot multiple targets; added
 *-          max_shot_hits to control the maximum number of
 *-          shots to report.  By default scene objects stop bullets.
 *-        - Weapon spread shots test against the octtree first (speed up).
 *<
 *-    - Fixed some bugs with review data.
 *-    - Experimental plugin infrastructure:
 *>
 *-        - Added functions diguyScenario::add_plugin() and
 *-          diguyScenario::remove_plugin().
 *-        - The following functions can be exported from the dll to plug
 *-          into DI-Guy code:
 *>
 *-            - void initialize(diguyScenario* s)
 *-            - void deinitialize(diguyScenario* s)
 *-            - void pre_draw(diguyScenario* s)
 *-            - void post_draw(diguyScenario* s)
 *-            - void update(diguyScenario* s)
 *-            - void reset(diguyScenario* s)
 *-            - void save_review_data(const char* filename)
 *-            - void load_review_data(const char* filename)
 *<
 *-        - See Documentation for more information.
 *<
 **
 *4    Version 5.3.4
 **
 *-    - Added new callbacks for use with the diguyCharacter::add_callback()
 *-      function:
 *>
 *-        - CALLBACK_ID_CURRENT_APPEARANCE_CHANGED
 *-        - CALLBACK_ID_CURRENT_HEAD_APPEARANCE_CHANGED
 *<
 *-    - Added new gesture type: table gestures.  Table gestures are much
 *-      like character action tables, and allow a single gesture to employ
 *-      many different motions.
 **
 *4    Version 5.3.3
 **
 *-    - Improved SDK's initialization time.  Version 5.3.3 should take about
 *-      half the time of version 5.3.2 to initialize.
 *-    - Changed default override stage of function
 *-      diguyCharacter::create_pose_override() from 2 to 3.
 *-    - Improved documentation for diguyCharacter "Pose Functions"
 *-      section.
 *-    - Improved documentation for
 *-      diguyScenario::set_automatic_motion_lod_switching() function.
 *-    - Added function diguyCharacter::end_all_gestures(), a gentler way
 *-      than diguyCharacter::abort_all_gestures() to stop a character's
 *-      active gestures.
 *-    - Fixed problem with changing an existing character's type via the
 *-      diguyCharacter::set_character_type() function.  The geometry of the
 *-      character wasn't displaying properly until the scenario was reset.
 *-      This has been fixed.
 *-    - Fixed documentation for the
 *-      diguyCharacterPoseOverride::get_pose_in_radians() function; it was
 *-      incorrectly implying that it could be used to read the current pose
 *-      of the character, when it really only returns the most recent pose
 *-      as set by diguyCharacterPoseOverride::set_pose_in_radians().
 *-    - Fixed problem where specifying a non-existent default appearance
 *-      for a character caused a crash.
 *-    - Fixed problem where characters with no links due to config file
 *-      syntax errors caused a crash.
 **
 *4    Version 5.3.2
 **
 *-    - Added missing initial position and orientation functions to
 *-      diguyCharacter:
 *>
 *-        - diguyCharacter::set_initial_position()
 *-        - diguyCharacter::get_initial_position()
 *-        - diguyCharacter::set_initial_orientation()
 *-        - diguyCharacter::get_initial_orientation()
 *<
 *-    - Added set_name() functions to most DI-Guy API objects.
 *-    - Added better access to path data such as waypoints and action
 *-      beads.  The following functions have been added to
 *-      diguyCharacterPath:
 *>
 *-        - diguyCharacterPath::update()
 *-        - diguyCharacterPath::get_num_waypoints()
 *-        - diguyCharacterPath::get_waypoint_at_index()
 *-        - diguyCharacterPath::create_waypoint()
 *-        - diguyCharacterPath::get_num_action_beads()
 *-        - diguyCharacterPath::get_action_bead_at_index()
 *-        - diguyCharacterPath::create_action_bead()
 *-        - diguyCharacterPath::destroy_action_bead()
 *-        - diguyCharacterPath::get_num_script_beads()
 *-        - diguyCharacterPath::get_script_bead_at_index()
 *-        - diguyCharacterPath::create_script_bead()
 *-        - diguyCharacterPath::destroy_script_bead()
 *<
 *-    - Added better access to path shape data such as waypoints.  The
 *-      following functions have been added to diguyPathShape:
 *>
 *-        - diguyPathShape::update()
 *-        - diguyPathShape::get_num_waypoints()
 *-        - diguyPathShape::get_waypoint_at_index()
 *-        - diguyPathShape::create_waypoint()
 *<
 *-    - Added new diguyCharacterPathActionBead class.  Members are:
 *>
 *-        - diguyCharacterPathActionBead::get_name()
 *-        - diguyCharacterPathActionBead::get_action()
 *-        - diguyCharacterPathActionBead::set_action()
 *-        - diguyCharacterPathActionBead::get_distance_into_path()
 *-        - diguyCharacterPathActionBead::set_distance_into_path()
 *-        - diguyCharacterPathActionBead::get_length()
 *-        - diguyCharacterPathActionBead::set_length()
 *-        - diguyCharacterPathActionBead::get_derive_length_flag()
 *-        - diguyCharacterPathActionBead::set_derive_length_flag()
 *-        - diguyCharacterPathActionBead::get_tin()
 *-        - diguyCharacterPathActionBead::set_tin()
 *-        - diguyCharacterPathActionBead::get_duration()
 *-        - diguyCharacterPathActionBead::set_duration()
 *-        - diguyCharacterPathActionBead::get_derive_duration_flag()
 *-        - diguyCharacterPathActionBead::set_derive_duration_flag()
 *-        - diguyCharacterPathActionBead::get_desired_duration()
 *-        - diguyCharacterPathActionBead::set_desired_duration()
 *-        - diguyCharacterPathActionBead::get_derive_desired_duration_flag()
 *-        - diguyCharacterPathActionBead::set_derive_desired_duration_flag()
 *-        - diguyCharacterPathActionBead::get_motion_reps()
 *-        - diguyCharacterPathActionBead::set_motion_reps()
 *-        - diguyCharacterPathActionBead::get_derive_motion_reps_flag()
 *-        - diguyCharacterPathActionBead::set_derive_motion_reps_flag()
 *-        - diguyCharacterPathActionBead::get_transition_before_bead_flag()
 *-        - diguyCharacterPathActionBead::set_transition_before_bead_flag()
 *<
 *-    - Added new diguyCharacterPathScriptBead class.  Members are:
 *>
 *-        - diguyCharacterPathScriptBead::get_name()
 *-        - diguyCharacterPathScriptBead::set_name()
 *-        - diguyCharacterPathScriptBead::get_script()
 *-        - diguyCharacterPathScriptBead::set_script()
 *-        - diguyCharacterPathScriptBead::get_distance_into_path()
 *-        - diguyCharacterPathScriptBead::set_distance_into_path()
 *-        - diguyCharacterPathScriptBead::get_length()
 *-        - diguyCharacterPathScriptBead::set_length()
 *-        - diguyCharacterPathScriptBead::get_tin()
 *-        - diguyCharacterPathScriptBead::set_tin()
 *-        - diguyCharacterPathScriptBead::get_duration()
 *-        - diguyCharacterPathScriptBead::set_duration()
 *<
 *-    - Changed API of diguyWaypoint object to have more intuitive function
 *-      names.  Old function names have been deprecated but will still work.
 *-    - Improved behavior of reflected characters when the remote scenario is
 *-      reset.  After remote reset, on remote play, local reflected
 *-      characters now immediately perform their desired actions rather than
 *-      gradually transitioning into them.
 *-    - Switched to using asynchronous I/O for DIS networking.  This improves
 *-      DI-Guy's robustness on networks with lots of entities.
 *-    - Fixed problem with diguyPathShape::get_length().  The
 *-      diguyPathShape::update() function must be called after waypoints have
 *-      been added to the path shape for the length to be updated.  After
 *-      the update() call, get_length() will return a valid length. (PR 2852)
 *-    - Fixed problem with diguyCharacter::get_current_path_index()
 *-      function.  The value 0 was being returned when the character was not
 *-      on a path, and when the character was on the first path.  The return
 *-      value for "not on a path" has been changed to -1. (PR 2856)
 *-    - Fixed problem with diguyCharacter::get_path_name_at_index() function.
 *-      An empty string was being returned when the path at the specified
 *-      index had a zero-length name, and when there was no path at the
 *-      specified index.  The return value for no path at index has been
 *-      changed to NULL.
 *-    - Fixed problem which, under DIS using DI-Guy custom information,
 *-      caused newly created reflected characters not to receive custom action
 *-      information for up to five seconds.  Now custom action information is
 *-      sent immediately after the first entity state PDU is sent.
 **
 *4    Version 5.3.1
 **
 *-    - Added support for "live reckoning".  Live reckoning provides more
 *-      accurate display of the behavior of remote characters, using less
 *-      networking bandwidth.
 *-    - Added network support for multiple concurrent scenario instances.
 *-      Characters in all scenarios are published to the network.  Incoming
 *-      entities are created in the scenario which is passed to
 *-      diguy_dis_go_online() or diguy_hla_go_online().
 *-    - Improved behavior of reflected entities when the local scenario is
 *-      reset.
 *-    - Removed some options from network.cfg.  It is recommended that the
 *-      current network.cfg be deleted and let DI-Guy recreate it.
 *-    - Improved behavior of reflected entities when the remote scenario is
 *-      paused.  Now they can move to their correct location even when
 *-      paused, rather than staying still in a location that is suboptimal.
 *-    - Fixed bug preventing incoming (reflected) non-soldier characters from
 *-      walking when DI-Guy custom action information is not available.
 *-    - Removed Review Data dt data member from diguyScenario objects
 *-      and from the DI-Guy Scenario UI.  Any scenario review data is
 *-      now recorded at the scenario's tick dt.
 *-    - Added access to the DirectX 9 world stack used by DI-Guy through
 *-      the new function diguy_dx9_get_world_stack().  This allows users
 *-      of DI-Guy for DirectX 9 to offset the origin used by characters
 *-      from 0,0,0.  Use of the new function is demonstrated in the
 *-      example program $DIGUY/programming_examples/diguy_dx9/offset_example.
 *-    - Made it possible to set the tick dt of a scenario using the
 *-      function diguyScenario::set_tick_dt().  This was previously
 *-      possible only in the DI-Guy Scenario UI.
 *-    - Made it possible to turn off review data generation for scenarios.
 *-      By default, scenarios created in the DI-Guy Scenario editor will
 *-      have review data enabled; scenarios created using the DI-Guy API
 *-      will have review data disabled.  Turning on review data can add
 *-      significantly to memory usage.  Changing review data settings can
 *-      be done using the function diguyScenario::set_history_type().
 *-    - Turned off review data by default for characters created using the
 *-      DI-Guy API.  The significantly reduces the memory overhead of each
 *-      character.  Review data can be re-enabled using the function
 *-      diguyCharacter::set_history_type().
 *-    - Added new callbacks for use with the diguyCharacter::add_callback()
 *-      function:
 *>
 *-        - CALLBACK_ID_PRE_DIE
 *-        - CALLBACK_ID_POST_DIE
 *-        - CALLBACK_ID_PRE_FIRE_WEAPON
 *-        - CALLBACK_ID_POST_FIRE_WEAPON
 *<
 *-    - Fixed problem with setting character's current appearance too soon
 *-      after the character was created.  This caused a crash.
 **
 *4    Version 5.2.2
 **
 *-    - New function diguyCharacter::set_weapon_fires_live_rounds() sets
 *-      whether firing causes collision search for characters to be killed.
 *-      Default is to fire blanks.  Old scenarios that used this
 *-      functionality need to call this function to re-enable firing to kill
 *-      other characters.
 *-    - Fixed problem for expressive faces in Vega.  If a model without
 *-      texture or material was drawn just before the expressive face,
 *-      the expressive face would inherit its color.
 *-    - Fixed various memory leaks.
 **
 *4    Version 5.2.1
 **
 *-    - Improved DIS/HLA Networking:
 *>
 *-        - Motion behavior improved when receiving standard PDUs in DIS.
 *-        - Motion behavior improved when not using DI-Guy Custom FOM in HLA.
 *<
 *-    - Improved vpNet/DI-Guy for Vega Prime interaction:
 *>
 *-        - DI-Guy for Vega Prime now shares the network connection created
 *-          by vpNet (MaK  Technologies networking add-on to
 *-          MultiGen-Paradigm's Vega Prime product).
 *-        - Special programming no longer required to have DI-Guy for Vega
 *-          Prime/vpNet work together.
 *-        - Users need to maintain two separate modelmaps, but mapping to
 *-          NULL is now implemented for both vpNet and DI-Guy, so that
 *-          entities being  drawn by other modules in Vega will not be
 *-          drawn a second time by  DI-Guy for Vega Prime and vice-versa.
 *-        - Programming examples have been expanded to show simple
 *-          examples of  vpNet/DI-Guy for Vega Prime interaction.  Note
 *-          that these programming examples are copied to the samples
 *-          directory of the Vega Prime installation.
 *-        - Added function call diguy_net_get_character_from_id()
 *-          which returns the diguyCharacter associated with the entity id.
 *-          Works with both DIS and HLA. (see ref. manual).
 *-        - Added option hla_advisories to network.cfg.  When using HLA,
 *-          if the RTI uses advisories, hla_advisories should be set to 1.
 *-          If not, set this to zero.  Mismatch between the settings should
 *-          be avoided.
 *<
 *-    - Fixed problem for expressive faces in Vega.  The normals
 *-      on the head were being scaled incorrectly, causing strange
 *-      shading artifacts.
 *-    - Fixed problem for expressive faces in Vega.  If more than one
 *-      expressive face was in a scene, all expressive faces would
 *-      use the texture of the first expressive face.
 **
 *4    Version 5.2.0
 **
 *-    - Added dynamic (dll) versions of DI-Guy libraries for win32.
 *-    - Discontinued support of MT and MTd versions of DI-Guy libraries for
 *-      win32.
 *-    - Fixed nmake-based makefiles for win32 programming examples
 *-      so that they'll work if DI-Guy is installed in a directory with
 *-      spaces.
 **
 *4    Version 5.1.25
 **
 *-    - Initial release of version 5.1.
 **
 *4    Versions 5.1.0 - 5.1.24
 **
 *-    - These versions are 5.1 pre-releases.
 **
 **
 **************************************
 *3   DI-Guy Scenario
 **************************************
 **
 *b  Note that most changes to the DI-Guy API also apply to DI-Guy Scenario.
 **
 *4    Version 9.1.4
 **
 *-    - Scenario can now be stopped, run, and reset in I-Guy Input
 *-      Mode by hitting Shift-Space (toggle stop and run) an Shift-Ctrl-Space
 *-      (reset).  Keyboard reset can be disabled in I-Guy mode in the I-Guy
 *-      Page.
 **
 *4    Version 9.1.0
 **
 *-    - Large rework of Object pages.  There is now one Scenario Objects page
 *-      that contains all of the pages from previous versions' Scenario
 *-      Elements, Character Elements, View Settings, Event Handlers, and
 *-      DI-Guy AI Elements.  Pages are separated into multiple tab groups.
 **
 *4    Version 9.0.2
 **
 *-    - Fixed bug where network page wouldn't remember current coordinate
 *-      converter settings when closed and reopened.
 **
 *4    Version 9.0.0
 **
 *-    - Near and far parameters of character weapon parameters are now
 *-      always enabled, and will alway be taken into consideration.
 *-      Before they only had an effect if the "spread" of a weapon was
 *-      greater than 0.
 *-    - New command line flag added: -runtime_only.  If this flag is
 *-      specified, DI-Guy Scenario will not attempt to check out the
 *-      development license feature but instead will remain in runtime mode,
 *-      leaving the development license available to another program.
 **
 *4    Version 8.6.3
 **
 *-    - Changing a character's character type no longer deletes all action
 *-      beads.  The actions of the existing beads are changed to the nearest
 *-      equivalent of the new character type.
 *-    - Region/crowd painting now works on scene object grids. delayed
 *-      loading of grids should be more responsive as well.
 *-    - Fixed issues with feelers: changes made via UI now change all crowd
 *-      members, 3D rep of feelers now updated immediately when changed and
 *-      on reset.
 *-    - Fixed set_playback_mode_play() so that it works in decisions.
 *-    - Ctrl-a will now restore previous visibility settings if hit 2 times
 *-      in a row.
 *-    - Added experimental feeler callback option.
 *-    - Minor UI preference bug fixes.
 **
 *4    Version 8.6.2
 **
 *-    - Improved speed of particle system rendering.
 *-    - Fixes to scene object grid rendering.
 *-    - Fixed problem that character initial path could not be deleted.
 *-    - If last character path is deleted, initial position and orientation
 *-      controls now become enabled as they should.
 *-    - Added preference for changing the fast-forward playback factor.
 *-      Default is 4.  Can be changed in the Preferences dialog.
 *-    - Symbolic View: Characters merging into a crowd symbol should now work
 *-      outside of ortho_xy view.
 *-    - 3d UI: Added right click pop-up menu to character mode.
 *-    - Added smoothing to ground clamp function.
 **
 *4    Version 8.6.1
 **
 *-    - Added one click movie creation to DI-Guy Scenario.
 *-    - More of the UI has up/down sorting arrows.
 *-    - Added is_speaking as a decision bead query.
 *-    - Fixed bug with "this_character" not properly having sub-objects
 *-      listed in decision beads.
 *-    - Added the ability for labels to reflect character state, accessible
 *-      in the character label UI.
 *-    - Fixed math issues with scene object sub-culling, feature should be
 *-      significantly more robust with scaled and rotated scene objects.
 *-    - Character's added to dynamic octtree and scene object characters
 *-      should require  less memory, and be more efficient.
 *-    - Minor improvements to advanced light UI.
 *-    - Action bead page now lists the current action's information.
 *-    - Fixed bug where 1st person I-Guy could not be killed.
 *-    - Better performance when populating or repopulating crowds.
 *-
 **
 *4    Version 8.5.0
 **
 *-    - Initial DI-Guy SAF release.
 *-    - Added new SAF Elements palette that provides access to DI-Guy SAF
 *-      objects.
 *-    - Added shortcut ctrl-a: turns off *all* supplemental visuals,
 *-      providing better viewing for non-demo scenario run.
 *-    - Added "Ortho XY" Projection Mode to Camera settings.  This provides
 *-      an alternative planview that uses an orthonormal projection rather
 *-      that a perspective-based one.
 *-    - Added "Symbolic View" checkbox to Camera settings.  When this is
 *-      checked characters will be represented as flat polygons rather than
 *-      their full animated graphics.  This, along with the Ortho XY
 *-      Projection Mode, provides a good SAF-like view of a scenario.
 **
 *4    Version 8.0.3
 **
 *-    - Fixed issue with I-Guy not using a joystick for input, even through
 *-      the UI says it is enabled.
 *-    - Fixed issue with children's bounding volumes not being factored into
 *-      culling calculation.
 *-    - User interface polish:
 *>
 *-        - Added more context sensitive input mode buttons.
 *-        - Labels identifying what character and path is selected have
 *-          been replaced with combo boxes, allowing for faster editing of
 *-          complex scenarios.
 *-        - Fixed various other small UI issues.
 *<
 *4    Version 8.0.2
 **
 *-    - Fixed issue with sound not playing properly when scenario is
 *-      fast-forwarded.
 *-    - Fixed issues with jittery camera in I-Guy 3rd person mode.
 *-    - Multisync masters now send and receive characters over the network.
 **
 *4    Version 8.0.0
 **
 *-    - Initial 8.0 release candidate.
 *-    - Improved plugin interface so that existing plugin name can be
 *-      changed instead of just being deleted and a new one created.
 *-    - DI-Guy plugin libraries can now be browsed for in the Plugins page,
 *-      instead of just typing in the library name.
 *-    - Added limits to the Tick dt parameter in the Performance page.
 *-      The Tick dt must now be >= 0.01 seconds, and <= 0.1 seconds.
 **
 *4    Version 7.1.19
 **
 *-    - Made improvements to DI-Guys sound system, sounds will now pause
 *-      along with the scenario and can now be fast forwarded and rewound
 *-      (to a degree).
 *-
 *4    Version 7.1.16
 **
 *-    - Added 'Init. Up Vector' combo box to Character page.  Allows
 *-      user to set the up vector that the character will use.  Previously
 *-      this could only be done via script of decision.
 **
 *4    Version 7.1.15
 **
 *-    - Added '-safe_mode' flag to command line.  Passing this flag on
 *-      the command line will cause DI-Guy Scenario to start up using
 *-      default preferences, which may resolve some unexpected issues.
 **
 *4    Version 7.1.14
 **
 *-    - Added chain settings to Merge Settings UI.
 *-    - Fixed issues with selecting a different path by clicking on
 *-      one of its waypoints in Path Edit Input Mode.
 **
 *4    Version 7.1.12
 **
 *-    - Review data for new scenarios is now turned off by default.
 *-    - New characters created in DI-Guy scenario now have no review data
 *-      by default.  Characters from existing scenarios will not be
 *-      affected.  Note that this removes the ability to rewind scenarios
 *-      unless some review data is turned back on.
 **
 *4    Version 7.1.11
 **
 *-    - Sounds now stop when a scenario loops or is rewound.  Added a
 *-      'Stop All Sounds' button to the Scenario palette Sound page,
 *-      to make it easier to stop playing long sounds.
 *-    - Window menu now always opens UI windows instead of toggling whether
 *-      they are shown or hidden.  If a window is already open, it is
 *-      brought to the top of the window stack.
 *-    - The F-key shortcuts for opening UI windows have changed behavior.
 *-      Pressing F2 for the Time Control window, for example, will make
 *-      the Time Control window visible by either opening it or bringing it
 *-      to the top.  Old behavior toggled whether windows were shown or
 *-      hidden.  Use Shift-F-key to use old toggle behavior (hide if
 *-      showing, show if hidden).
 *-    - Character Labels Visibility is now set to 'None' in the default
 *-      .dss file.
 **
 *4    Version 7.1.8
 **
 *-    - Fixed problem with restoring all event mappings when reloading
 *-      a previously saved scenario.
 **
 *4    Version 7.1.7
 **
 *-    - Switch to new installer setup.  Should better detect and remove
 *-      previous versions, and in general be more stable.
 *-    - Added preliminary support for TerraPage .txp files in scene objects.
 *-    - Fixed issue with OpenAL not being able to play sounds on some
 *-      machines.
 **
 *4    Version 7.1.6
 **
 *-    - Added 3rd Parameter to Decision Beads.
 *-    - Added diguyCharacter::create_and_force_bridge_spath() and
 *-      diguyCharacter::force_local_path to Decision Beads editor.
 *-    - Application now asks user to confirm whether an existing
 *-      file can be overwritten when Save As is selected.
 *-    - Added Comment field to Decisions and Decision Beads.
 *-    - Added new cursor to represent current input mode.
 *-    - Added events page to character as well as signal and sensor region.
 *-      Same basic functionality as the event mapper but more distributed
 *-      UI design.
 **
 *4    Version 7.1.4
 **
 *-    - Added functionality to the character elements page that allows
 *-      character list to be reordered using up and down arrows next to
 *-      the list box.
 *-    - Character list box will now display disabled characters in gray.
 **
 *4    Version 7.1.3
 **
 *-    - Added offset XYZ line edits for aiming at characters on Aim
 *-      Bead page.
 **
 *4    Version 7.1.2
 **
 *-    - Added new "Character" Input Mode.  While in this mode clicks and
 *-      drags will have the following effects:
 *>
 *a        click and drag          - translate character
 *a        shift-click and drag    - rotate character
 *<
 *-    - Made 'Delete' key work on more object types in the 3D window,
 *-      depending on the current Input Mode:
 *>
 *a        Character or PeopleBlitzer   - delete current character
 *a        Path Edit or Path Insert     - delete current waypoint
 *a        Action Edit or Action Insert - delete current action bead
 *a        Sensor Edit or Sensor Insert - delete current sensor region
 *a        Group                        - delete current group
 *<
 **
 *4    Version 7.1.1
 **
 *-    - Added new "Group" Input Mode.  While in the mode clicks and
 *-      drags will have the following effects:
 *>
 *a        click and drag          - translate all group characters
 *a        shift-click and drag    - rotate all group characters
 *a        ctrl-click              - add or remove clicked character
 *a                                  to group
 *<
 *-    - Added Chain Sim Settings page to the Scenario Elements palette.
 *-    - Added edit boxes to event beads (Aim, Decision, Gaze, and Script
 *-      beads) that allow beginning and end of beads to be tied to
 *-      specific waypoints or action beads.
 *-    - Added ability to set character label colors on the Character page.
 *-    - Added optional labels for action beads in the 3D window that show
 *-      the action name and the time at which the action begins.
 *-    - Current selected character index is now saved in .dss file and
 *-      restored when the scenario is loaded.
 *-    - Revamped Plugins page.  Each plugin now has these parameters:
 *>
 *a        Required By Scenario     - If checked, this plugin is required
 *a                                   for proper execution of this scenario.
 *a                                   When the scenario is loaded this plugin
 *a                                   will be loaded as well if it is not
 *a                                   already active.  Default is unchecked.
 *a        Unload on Scenario Close - If checked, this plugin will be
 *a                                   unloaded if this scenario is closed
 *a                                   or a new scenario is opened.  Default
 *a                                   is unchecked.
 *a        Accepts Mouse Input      - If checked, this plugin will receive
 *a                                   mouse events via the mouse plugin
 *a                                   functions when the input mode is
 *a                                   "Plugin".  Default is checked.
 *<
 *-    - Added new camera frustum culling functionality that works on the
 *-      subshapes of a scene object. The functionality can be turned on
 *-      via a check box in the performance page, or via
 *-      diguyScenario::set_scene_object_sub_culling_enabled() and
 *-      diguyScenario::get_scene_object_sub_culling_enabled().
 *-      Potentially this can lead to 100%-200% rendering speed increase
 *-      for large well segmented terrains. Note currently scene object
 *-      culling must be on for this to work.
 **
 *4    Version 7.1.0
 **
 *-    - Revamped Cut and Paste operations to use the merge functionality
 *-      that makes sure objects added to a scenario have unique names.
 **
 *4    Version 7.0.8
 **
 *-    - Camera speed UI input was broken, should be responsive again
 *-    - Hitting cancel in particle system texture map property widget will
 *-      no longer delete the currently selected texture.
 *-    - Fixed Camera Affected by Script events check box; was actually an
 *-      SDK fix.
 **
 *4    Version 7.0.5
 **
 *-    - Enhanced character path following so that waypoints that
 *-      have a roll parameter specified will roll the character
 *-      as it travels along the path.
 *-    - Enhanced character path following so that characters can
 *-      now pitch "upside-down" along paths.
 **
 *4    Version 7.0.3
 **
 *-    - Look At button now works for reflected characters.
 **
 *4    Version 7.0.1
 **
 *-    - Velocity Noise on particles will now get transformed with the
 *-      parent's orientation.
 *-    - Fixed problems with various guide algorithms not working well
 *-      if the desired z coordinate is not at the same altitude as the
 *-      character.
 *-    - Re-enabled "-C cfg_file" command line flag.
 **
 *4    Version 6.1.10
 **
 *-    - Fixed problem that prevented some parameters from being
 *-      editable in the Decision editor; in particular, when param 2
 *-      was an appearance or a string.
 *-    - Fixed aim trajectory rendering to more consistently render
 *-      and use the proper color.
 *-    - Fixed problem with I-Guy characters not being able to move
 *-      forward and back.
 *-    - Particles are more aggressive about requesting that octtree is
 *-      rebuilt.
 *-    - High velocity particles, stuck particles and bouncing particles all
 *-      interact better after colliding with scene geometry.
 *-    - BDI_LOG_FATAL errors will behave better in DI-Scenario, giving the
 *-      option to save before exiting.
 *-    - Fixed decision beads pseudocode description crash.
 **
 *4    Version 6.1.9
 **
 *-    - Fixed problem with OpenGL renderer that prevented objects
 *-      with subfaces from rendering correctly.
 *-    - Fixed problem with Draw Mode radio buttons in the Preferences
 *-      dialog not having the correct effect on rendering.
 *-    - Changed info popups to show up as dialog windows separate
 *-      from the main window.  This prevents the Primary 3D Window
 *-      from un-maximizing when an info popup pops up.
 *-    - Fixed problem that scene objects did not correctly look in
 *-      custom directory for models.
 *-    - Added code to check positions of DI-Guy Scenario windows;
 *-      if windows will not be visible (are off-screen, etc.), they
 *-      are moved to screen coordinate 0,0.
 *-    - Updated Networking Settings page to be consistent with V6 UI.
 *-    - Numerous fixes to Networking Settings page.
 *-    - Added About box with version information.
 *-    - Fixed bug that preferences weren't correctly saved if app
 *-      was closed by clicking 'X' button in upper right corner.
 *-    - Fixed various problems with values entered into edit boxes
 *-      being clobbered.
 *-    - Added plugins page to DI-Guy Scenario to match page from V6 UI.
 **
 *4    Version 6.1.8
 **
 *-    - Fixed world space collisions for particles, functionality was
 *-      temporally broken.
 *-    - Particle UI should be now be almost entirely working in DI-Guy
 *-      Scenario.
 *>
 *-       - Added load particle descriptions button to UI.
 *-       - Added collision plane rendering check box to UI.
 *-       - Added check box to particle page that optionally turns off
 *-         placeholders.
 *-       - Added orientation flag to particles, useful for parented
 *-         emitters.
 *-       - Renaming particles should validate names and echo to other
 *-         appearance menus.
 *-       - Adding or removing particle descriptions now properly updates
 *-         the appearance section of the character page and people blitzer.
 *-       - Particle manager was getting updated unnecessarily causing
 *-         particles to playback 2x as fast.
 *<
 *-    - Fixed a focus out problem that yielded a hard lock up if a load
 *-      manager error message was produced.
 *-    - Waypoints and sensor regions visuals weren't being properly
 *-      updated when data changed.
 *-    - Editing a Scene object triggers the unsaved flag more often.
 *-    - Fixed a glitch where shadows and the profiler wouldn't work
 *-      together.
 *-    - Added UI for setting character and scene object culling active.
 *-    - Added UI for setting character and scene object bounding volume
 *-      visualization active.
 *-
 *4    Version 6.1.7
 **
 *-    - Added UI for setting the character's label text and controlling
 *-      whether the label is visible to the Character page.
 *-    - Added new visibility option for Character Labels on the
 *-      Visibility page: Per Object.
 *-    - Major reworking of the DI-Guy Scenario user interface in
 *-      preparation for the DI-Guy 7 release.
 *-      A version of the program with the old interface (henceforth
 *-      called the V6 UI) will be available in releases for awhile
 *-      with a different filename.  As time goes on new features that
 *-      appear in DI-Guy Scenario may not appear in the V6 UI.
 *-    - Changed the sound module of DI-Guy Scenario to be based on
 *-      OpenAL.  This fixed a problem with sounds playing back too
 *-      fast on certain systems, and allows for 3D position sounds.
 **
 *4    Version 6.1.6
 **
 *-    - Added "+plugin <plugin_name>" command line argument.  This will
 *-      load the specified plugin as the application is starting up.
 *-      This is essentially the same as calling diguyApp::load_plugin()
 *-      before the initial scenario is created.
 *-    - Added "Plugin" page.  This allows a scenario designer to specify
 *-      which plugins are required for proper execution of the scenario.
 *-    - Fixed crash bug that occasionally occurred when the "Trigger Now"
 *-      button was clicked on the Script and Decision pages.
 *-    - Added UTM Coordinates to the Networking page.
 *-    - Added "Decisions", which are similar to Script Events but
 *-      have a UI for constructing logic similar to Decision Beads.
 **
 *4    Version 6.1.4
 **
 *-    - Fixed minor problems with decision bead page.  The parameters for
 *-      the sensor region function
 *-      contains_character_by_type_and_appearance() did not include
 *-      quotes and were not alphabetized.
 *-    - Added buttons "Add All" and "Remove All" to Group page.
 **
 *4    Version 6.1.1
 **
 *-    - Added Load Manager page to the Scenario window.  Now users can
 *-      enable load management, and adjust load management parameters
 *-      from within DI-Guy Scenario.
 *-    - Particle warm up time should now work properly on reset.
 *-    - Added particle system life time, after which it will no longer emit
 *-      particles.
 *-    - Added new Particle position and velocity noise options, should allow
 *-      for better control and movement options.
 *-    - Added character variable querying to decision beads, can now query
 *-      variables with: variable_equal_to_(float, int, string),
 *-      variable_less_than_(float, int, string) and
 *-      variable_greater_than_(float, int, string).
 *-    - Added character variable actions to decision beads, can now have
 *-      actions that affect variables, using
 *-      variable_set_value_as_(float, int, string) and
 *-      variable_increment and decrement.
 *-      string) and variable_greater_than_(float, int, string).
 *-    - Can now use decision beads to check whether someone's been shot,
 *-      as well as where the shot hit.
 *-    - Changed how decision beads get pointers to objects; previously
 *-      if an object was referenced multiple times in a decision bead
 *-      (e.g., multiple queries were made of character "soldier-1" in
 *-      the if clauses), the same object was searched for multiple times.
 *-      Now a pointer to the object is just searched for once.
 *-    - Added Variable page to Character window.  This page allows for
 *-      creation, deletion, and editing of character variables.  Character
 *-      variables are almost exactly the same as scenario variables, but
 *-      are private to each character instead of being shared across the
 *-      entire scenario.
 **
 *4    Version 6.1.0
 **
 *-    - Ctrl-'u' now pushes a scenario undo onto the undo stack.
 *-    - Space bar toggles between play and pause; Ctrl-space bar does a
 *-      reset.
 **
 *4    Version 6.0.8
 **
 *-    - DI-Guy Scenario now properly sets the network Force ID for
 *-      outgoing entities based on group membership.  Groups
 *-      net_friendly, net_opposing, and net_neutral should be used to
 *-      indicate the Force ID of outgoing entities.
 *-    - DI-Guy Scenario now assigns incoming entities to group
 *-      net_friendly, net_opposing, or net_neutral based on the
 *-      incoming Force ID.
 *-    - Incoming entities cannot now be assigned to or removed from
 *-      groups.  As well, groups to which incoming entities belong
 *-      cannot be deleted.
 **
 *4    Version 6.0.2
 **
 *-    - Fixed problem with "Deflate" compression method for movie frame
 *-      capture.
 *-    - Changed label of "Reset" button on Movie Settings page to "Reset
 *-      Next Frame Number", to differentiate it from the Reset button
 *-      on the Control palette.
 **
 *4    Version 6.0.1
 **
 *-    - Added setting of Scenario Review Data on Scenario Performance
 *-      page to .dss file.  It was not being saved and restored as
 *-      scenarios were saved and loaded.
 *-    - Changed scenario "Loop" functionality.  If no characters have
 *-      review data, the scenario will reset and play rather than
 *-      rewind and show review data.
 *-    - Removed unused "Altitude" edit box from Networking property page.
 *-      (PR 3002)
 *-    - Changed gaze bead logic so that faster gazes are possible.  The
 *-      desired locate time for gaze beads was effectively limiting the
 *-      maximum angular velocity.  Now if a gaze bead overrides gaze
 *-      parameters, it also turns off use of the desired locate time for
 *-      each link. (PR 3030)
 **
 *4    Version 6.0.0
 **
 *-    - Added "GoThere" camera movement.  In Camera mode, if there is
 *-      neither a Look At character nor a Look From character selected
 *-      and the camera projection mode is "free camera", if you hold
 *-      the Shift key and left-click on anything in the scene, the
 *-      camera will rapidly travel to what you Shift+clicked on and
 *-      turn around to face the location from which the camera came.
 *-      This also works from modes other than camera mode, if you press
 *-      and hold Alt+Shift while left-clicking.
 *-    - Changed Aim Bead UI to match Gaze Bead UI.  Note that now
 *-      aiming is also precise, and dynamic.  See DI-Guy aiming change
 *-      above.
 *-    - Fixed problem with current light and fog settings being overwritten
 *-      when a .dss file was loaded.  (PR 2019)
 *-    - Fixed problem with primary view of scenario returning 0 when
 *-      diguyScenarioView::is_showing() was called on it.  The correct
 *-      value is now returned.  (PR 2954)
 *-    - Added ability to change window title of primary view using the
 *-      call diguyView::set_window_title().  (PR 2953)
 *-    - Fixed problem with looking at scene objects that are translated
 *-      away from the origin.  (PR 2722)
 *-    - Fixed problem for character paths on load.  Paths that weren't
 *-      the initial path of the character weren't being fully initialized
 *-      until they were used by the character.  Now all paths receive
 *-      an initial update call on load.
 *-      (PR 2791)
 *-    - Added new command line argument: -no_info_popup_server.  Adding
 *-      this argument to the command line causes DI-Guy Scenario to not
 *-      attempt to start the program DIGuyInfoPopupServer.  If the
 *-      server is not started, info popup windows will not appear.
 *-    - Fixed problem that if the Initial Script Filename on the Script
 *-      Event property page specified a script that didn't exist,
 *-      no warning was given.  Now a log message at Warn level is
 *-      printed for a missing script file. (PR 2826)
 *-    - Fixed problem that prevented Performance settings from taking
 *-      effect unless the scenario was saved and reloaded.
 *-    - Added edit box for setting character's initial motion texture
 *-      gain. (PR 2845)
 *-    - Added UI preference for turning off the "DI-Guy Scenario by
 *-      Boston Dynamics" overlay.
 **
 *4    Version 5.3.5
 **
 *-    - Changed edit box for setting character's initial motion texture
 *-      into a combo box that shows which motion textures are available.
 **
 *4    Version 5.3.2
 **
 *-    - Small improvement to particle system UI, fixed outstanding issues
 *-      with texture map browser widget.  Color Widgets go right to a color
 *-      picker.  Clicking on static text opens subitems.
 *-    - Particle Systems now populate better between ticks, i.e. release
 *-      intervals smaller then the update time now work.
 *-    - Performance improvements to the particle systems.
 **
 *4    Version 5.3.1
 **
 *-    - Removed Review Data dt data member from diguyScenario objects
 *-      and from the DI-Guy Scenario UI.  Any scenario review data is
 *-      now recorded at the scenario's tick dt.
 *-    - Split Visibility / Performance page into two separate
 *-      pages named Visibility and Performance.
 **
 *4    Version 5.3.0
 **
 *-    - Made it possible to turn off review data generation for scenarios.
 *-      By default, scenarios created in the DI-Guy Scenario editor will
 *-      have review data enabled; scenarios created using the DI-Guy API
 *-      will have review data disabled.  Turning on review data can add
 *-      significantly to memory usage.  Changing review data settings can
 *-      be done using the function diguyScenario::set_history_type(), or
 *-      using the Review Data Type radio buttons on the Visibility /
 *-      Performance page of the DI-Guy Scenario editor.
 **
 *4    Version 5.2.3
 **
 *-    - Added joystick gain settings to Preferences.  The gains allow
 *-      DI-Guy Scenario users to adjust how sensitive the joystick will
 *-      be.  Gains of 1.0 retain previous behaviors.  Gains less than
 *-      1.0 make joystick control less sensitive; i.e., it will take a
 *-      larger movement to achieve a response.  Gains more than
 *-      1.0 make joystick control more sensitive; i.e., it will take a
 *-      smaller movement to achieve a response.
 **
 *4    Version 5.2.1
 **
 *-    - Special Effects: DI-Guy Scenario now offers a new add-on option for
 *-      particle-based special effects.  Examples of particle effects include
 *-      smoke, fire, debris, missile trails, rotor wash, explosions, and dust
 *-      trails.  A Particles tab is now available in the Scenario palette for
 *-      easy control of effects parameters include size, number, color,
 *-      texture map, velocity, wind effect, and gravity.
 *-    - Fixed crashing bug when undoing path changes.
 *-    - Fixed minor issues with using soldier character
 *-      backward actions and companion waypoints.
 *-    - Fixed problem where character sounds were not consistently
 *-      playing when a scenario looped.
 *-    - Fixed problem where path shapes were not always being drawn
 *-      when they should have been.
 *-    - Fixed problem where having path shapes in a scenario caused
 *-      the program to crash on exit.
 *-    - Fixed crashing bug when shutting down a scenario that
 *-      contains characters with guides.
 **
 *4    Version 5.2.0
 **
 *-    - Added ability to show character names as floating
 *-      labels next to the character in the 3D window.
 *-      Name labels can be shown for current character only,
 *-      all characters, or no characters.  Access via the
 *-      Scenario | Visibility / Performance property page.
 *-    - Added "Look At" buttons for characters, waypoints,
 *-      and path beads on respective Elements pages.
 *-    - Added special effects such as smoke and fire.
 *-    - Fixed perl script interpreter so that it will work
 *-      if DI-Guy is installed in a directory with spaces.
 *-    - Fixed problem where LOD range scale factors weren't
 *-      taking effect for scene objects.
 **
 **
 **************************************
 *3  DI-Guy AI
 **************************************
 **
 *4    Version 9.0.1
 **
 *-    - Fixed bug where characters were improperly going through walls.
 *-    - Fixed a number of minor crashes with creating behavior paths.
 **
 *4    Version 9.0.0
 **
 *-    - To enable DI-Guy AI in programs using the DI-Guy SDK, the header
 *-      file "diguy_ai.h" must be included, and the functions
 *-      diguy_ai_initialize() and diguy_ai_deinitialize() must be called
 *-      at the appropriate times.
 *-    - New command line flag added to DI-Guy Scenario for optionally.
 *-      disabling DI-Guy AI.  By default DI-Guy Scenario will look for the
 *-      diguy_ai license feature and check it out if it is present.  By
 *-      putting "-module diguy_ai" on the command line, DI-Guy Scenario will
 *-      not attempt to enable DI-Guy AI.
 *-    - Fixed problem with DI-Guy AI agents having trouble killing animals.
 *-    - Painting a non-continuous region will be more likely to successfully
 *-      create a behavior path, the longest path from the start point to the
 *-      mouse up location is used.
 *-    - Fixed issues with feelers: changes made via UI now change all crowd
 *-      members, 3D rep of feelers now updated immediately when changed and
 *-      on reset.
 *-    - Fixed problem that agent feeler collide distance could not be
 *-      greater than turn distance.
 *-    - It is now possible to add a feeler callback to enable DI-Guy AI agents
 *-      to interact better with static geometry in the SDK. See the following
 *-      functions for more details:
 *>
 *-        - diguyCharacter::agent_set_feeler_function()
 *-        - diguyCharacter::agent_get_feeler_function()
 *-        - diguyScenario::agent_set_default_character_feeler_function()
 *<
 *-    - Crowds and agents can now flee a group.  Accessed via:
 *>
 *-        - diguyCharacter::agent_flee_group()
 *-        - diguyCrowd::agents_flee_group()
 *<
 **
 *4    Version 8.6.3
 **
 *-    - Crowd UI Improvements:
 *>
 *-        - Selected member will now only show postures and variants that it has
 *-          available.
 *-        - Selected edit mode with display better visual cues indicating which
 *-          crowd members will be affected by changes
 *-        - Added look at member button.
 *<
 *-    - Crowd Blitzing: Blitzing a crowd into an area that is non-contiguous
 *-      will now attempt to find the longest path from the start point to
 *-      the end point, This should fix a frequent failure case with the
 *-      Blitzer.
 **
 *4    Version 8.6.1
 **
 *-    - DI-Guy SAF references changed to DI-Guy AI.
 **
 *4    Version 8.6.0
 **
 *-    - New DI-Guy SAF functions:
 *>
 *-        - diguyCharacter::agent_set_current_behavior_region_border_is_solid()
 *-        - diguyCrowd::set_all_members_enabled()
 *-        - diguyCrowd::set_current_behavior_region_border_is_solid()
 *-        - diguyCrowd::is_current_behavior_and_focus_group()
 *-        - diguyCrowd::is_current_behavior_and_focus_character()
 *-        - diguyCrowd::is_current_behavior()
 *-        - diguyCrowd::is_crowd_dead()
 *-        - diguyScenario::set_create_network_crowds()
 *-        - diguyScenario::get_create_network_crowds()
 *<
 *4    Version 8.5.0
 **
 *-    - Initial DI-Guy SAF release.
 *-    - Added/updated DI-Guy SAF classes:
 *>
 *-        - diguyAgentParams
 *-        - diguyCrowdProfile
 *-        - diguyCrowd (extensive changes, promoted from experimental)
 *<
 *-    - New DI-Guy SAF functions:
 *>
 *-        - diguyScenario::destroy_crowd()
 *-        - diguyScenario::get_num_crowds()
 *-        - diguyScenario::find_crowd()
 *-        - diguyScenario::get_crowd_at_index()
 *-        - diguyScenario::create_crowd_profile()
 *-        - diguyScenario::destroy_crowd_profile()
 *-        - diguyScenario::get_num_crowd_profile()
 *-        - diguyScenario::find_crowd_profile()
 *-        - diguyScenario::get_crowd_profile_at_index()
 *-        - diguyScenario::create_group_in_region()
 *-        - diguyCharacter::agent_attack_group()
 *-        - diguyCharacter::agent_flee_character()
 *-        - diguyCharacter::agent_flee_location()
 *-        - diguyCharacter::agent_remove_all_flee_objects()
 *-        - diguyCharacter::agent_mingle_in_region()
 *-        - diguyCharacter::agent_pursue_character()
 *-        - diguyCharacter::agent_pursue_group()
 *-        - diguyCharacter::agent_travel_behavior_path()
 *-        - diguyCharacter::agent_travel_path_shape()
 *-        - diguyCharacter::agent_travel_region_border()
 *-        - diguyCharacter::agent_wander_region()
 *-        - diguyCharacter::agent_stop_behavior()
 *-        - diguyCharacter::agent_set_current_focus_character()
 *-        - diguyCharacter::agent_set_current_focus_group()
 *-        - diguyCharacter::agent_get_initial_params()
 *-        - diguyCharacter::agent_get_current_params()
 *-        - diguyCharacter::agent_set_current_params_from_profile()
 *-        - diguyCharacter::agent_get_current_focus_character()
 *<
 **
 **************************************
 *3   DI-Guy Motion Editor
 **************************************
 **
 *4    Version 9.0.1
 **
 *-    - Added sample bvh file to motions directory, should help document how
 *-      DI-Guy expects bvh files to be structured.
 **
 *4    Version 9.0.0
 **
 *-    - If motions are added to an action table, the proper default actor
 *-      is now set automatically.
 *-    - Improved support for editing offset poses, should be much easier, and
 *-      not cause abrupt joint behavior.
 *-    - Changing the actor of a motion arc now immediately applies the new
 *-      scale to the motion, improvements to actor choosing, motion scaling,
 *-      and importing code.
 *-    - Fixed a number of action table editing issues: including hard crash
 *-      with undo, "remove unused motions" causing corrupted action tables.
 *-    - General UI improvements:
 *>
 *-        - +/- keys behave more intuitively with regards to the yaw/pitch/roll
 *-          of the poser.
 *-        - Shift key alters magnitude of +/- change.
 *-        - Poser editing gizmo now auto-scales based on camera distance.
 *-        - Editing mode is now displayed in 3D window title bar.
 *-        - Initial directories for me project, importing motions and saving
 *-          motions are now set to expected values.
 *<
 **
 *4    Version 8.6.3
 **
 *-    - Fixed issue with zero length animations causing div by zero.
 *-    - Fixed minor bug with action tables not properly updating when unused
 *-      motions were removed.
 **
 *4    Version 7.1.11
 **
 *-    - Fixed problem that many error messages would appear when saving
 *-      action tables.
 **
 *4    Version 7.1.0
 **
 *-    - Fixed various problems with setting variants and angle
 *-      extents for 2-axis motions in the Action Table Editor.
 *-    - Added sliders for testing aim actions in the Action Table
 *-      Editor.
 **
 *4    Version 6.1.9
 **
 *-    - Fixed a number of bugs introduced with the upgrade to high
 *-      precision positions.
 **
 *4    Version 6.1.0
 **
 *-    - Added new gesture table editor, allows for the modification of
 *-      the action tables of table gestures.
 *-    - Null motion arcs are now editable, with blend type and duration
 *-      as parameters.
 **
 *4    Version 6.0.6
 **
 *-    - BVH file import now supports joint translations in addition to
 *-      rotations.
 *-    - Resultant BDM files contain only relevant variables.
 **
 *4    Version 6.0.0
 **
 *-    - Initial 6.0 DI-Guy Motion Editor release.
 **
 **
 **************************************
 *3   DI-Guy Character Viewer
 **************************************
 **
 *4    Version 8.0.2
 **
 *-    - Added view selection buttons that load new camera settings.
 **
 *4    Version 6.1.9
 **
 *-    - Fixed a number of bugs introduced with the upgrade to high
 *-      precision positions.
 *-    - Fixed character transparency.
 *-    - Fixed selecting the default appearance.
 **
 *4    Version 6.0.2
 **
 *-    - Added default settings file that shows Character Type /
 *-      Appearance / Action selection page.
 **
 *4    Version 6.0.1
 **
 *-    - Fixed problem where appearances that used a different actor than
 *-      the default actor for a character did not correctly display.
 **
 *4    Version 6.0.0
 **
 *-    - DI-Guy Character Viewer added to DI-Guy Applications Suite.
 *-      Allows quick review of character types, appearances, and
 *-      actions.
 **
 **
 **************************************
 *3   DI-Guy for Vega Prime
 **************************************
 **
 *4    Version 9.0.3
 **
 *-    - vpNet 2.2 should now be enabled.
 *-    - Fixed issue with skyLight lighting and shaders not being properly
 *-      applied.
 *-    - Fixed Memory leak when characters were unrefed to zero. Note a slight
 *-      change to the basics example.
 **
 *4    Version 9.0.1
 **
 *-    - Fixed issue with new vpDiguys not having their locations properly
 *-      set when reading out of an acf.
 *-    - Fixed issue with vpDiguyCharacters parented to vpTransforms not
 *-      being properly created.
 **
 *4    Version 9.0.0
 **
 *-    - DI-Guy for Vega Prime now works with VP 2.2.
 **
 *4    Version 8.6.3
 **
 *-    - Fixed crash on exit when a vpDiguyCharacter parent was not a
 *-      scenario.
 *-    - Fixed bug where characters would multiply render if they were
 *-      parented to a vpObject
 *-    - parented and translated characters will should start broadcasting
 *-      over the network with proper values.
 **
 *4    Version 8.0.3
 **
 *-    - Moved example_acfs to their own subdirectory instead of in
 **      simple_playback directory.
 *-    - Added warning about setting channel LOD scale to zero, can cause
 **      character to not draw.
 *-    - Fixed an issue where not having a valid license could cause vp
 **      applications to crash.
 *-    - Fixed licensing issue effecting vpDiguy/vpNet/HLA/stealth.
 *-    - Basics Programming example now demonstrates ground clamping. As well
 *-      as some other polish to programming examples.
 **
 *4    Version 8.0.2
 **
 *-    - Improved reporting of version information during installation.
 **
 *4    Version 8.0.0
 **
 *-    - Initial 8.0 release candidate.
 *-    - vpDiguy using vpNet should now support all coordinate conversion
 *-      routines that vpNet supports.
 *-    - Memory usage and rendering performance improvements.
 **
 *4    Version 7.0.8
 **
 *-    - Fixed HLA networking licensing issue. Shouldn't need explicit hla
 *-      license with vpNet.
 *-    - Added new autogenerated vpDiguy SDK docs.
 *-    - Added code to basics example that demonstrates creating a character
 *-      after configure.
 *-    - Added documentation about vpDiguy openAL audio module's
 *-      incompatibility with vpAudio module.
 *-    - Added static versions of vpDiguy libraries, updated autolinking
 *-      code in vpDiguyCpp.cpp.
 **
 *4    Version 7.0.7
 **
 *-    - Fixed a number of vpNet related bugs.
 *-    - NOTE: In order to make vpNet interaction more solid reading of
 *-      UTM coordinates out of Scenario Objects in vpDiguy has been
 *-      disabled.  UTM coordinates should be specified explicitly in the
 *-      Net Connection gcf panel and the DI-Guy Scenario Network Page.
 **
 *4    Version 7.0.6
 **
 *-    - Fixed a number of recreation/looping related bugs.
 **
 *4    Version 7.0.3
 **
 *-    - Turned on vpNet/vpDiguy networking.
 *-    - Updated all the acfs to be vp 2.0 compliant.
 *-    - Updated vpDiguy gcf to include new 7.0 content.
 *-    - Fixed bug in UTM support.
 *-    - Fixed problem if multiple diguy particles attempt to instantiate
 *-      the same type of vpFX. Fixed memory leak as well.
 *-    - Fixed divide by zero bug in networking code, could cause 0th
 *-      character to never  show up.
 *-    - Fixed bug where a character with an appearance change would
 *-      not be recreated properly if a scenario was looping.
 **
 *4    Version 7.0.0
 **
 *-    - Fixed a couple of vpDiguyScenario function calls to print a warning
 *-      if the functions are called before configure, instead of crashing.
 *-    - diguyCharacter's position syncs with vpDiguyCharacter on creation.
 *-    - Distributed rendering should now support mapping from DI-Guy
 *       particles.
 **
 *4    Version 6.1.11
 **
 *-    - Consolidated networking examples, moved
 *-      vpnet_(send/receive)_(dis/hla).acf
 *-      into simple_playback because they didn't have unique c++ code.
 *-    - Added postLoad function to vpDiguyCharacter building code to try
 *-      and enable sensor prime.
 *-    - Added vpDiguyScenario::set_time_independent_of_vp_sim_time() and
 *-      vpDiguyScenario::get_time_independent_of_vp_sim_time() Allows
 *-      time to be  disconnected from sim time.
 **
 *4    Version 6.1.10
 **
 *-    - Renamed vpDiguyScenario::SetSyncCameraEnable() to
 *-      vpDiguyScenario::setSyncCameraEnable().
 **
 *4    Version 6.1.9
 **
 *-    - Added per scenario time offset code.
 **
 *4    Version 6.1.8
 **
 *-    - Code now compiles against Vega 2.0 libraries:
 *-    - Added 2.0 style copy constructor for diguyCharacters to use in
 *-      cloning.
 *-    - Fixed a bug where locked off joints issued warnings.
 *-    - Fixed a bug where some dynamic matrices weren't being properly
 *-      updating, fixes gazing inside Vega.
 *-    - Altered how diguyScenarios get loaded to accommodate new
 *-      merging code.
 *-    - Unsupported Vega sound module now uses openAL.
 **
 *4    Version 6.1.1
 **
 *-    - gcfs and xsd no longer use "DI-Guy" in the naming convention;
 *-      instead "Diguy" is now used.  This avoids uncompilable code
 *-      generated from lynxPrime's export .cpp functionality, as well
 *-      as being more consistent with Vega conventions.
 **
 *4    Version 6.0.8
 **
 *-    - Fixed serious bug affecting HLA networking in DI-Guy for Vega
 *-      Prime.  This bug was causing various problems, ranging from
 *-      missing or extra apparent network entities, to entities
 *-      appearing at the wrong location.
 **
 *4    Version 6.0.7
 **
 *-    - Changed all Vega Prime code/acfs that specify "DI-Guy" to "Diguy".
 *-      This should allow cpp exports to work better.
 *-    - Renamed vpDiguy.h/cpp to vpDiguySettings to better match acf info.
 *-    - Added Vega Prime view settings example that shows off camera sync
 *-      code.
 *-    - Added Vega Prime simple example that shows how to initialize and
 *-      run with no acf or dss.
 **
 *4    Version 6.0.6
 **
 *-    - Fixed problem which inadvertently disabled standard Vega Prime
 *-      "X" key functionality (enable / disable the position strategy
 *-      for all observers) in a vpDiguy application.
 **
 *4    Version 6.0.5
 **
 *-    - Fixed problems preventing DI-Guy for Vega Prime from
 *-      working with DIS/HLA for Vega Prime.  DI-Guy for Vega
 *-      Prime now works with Vega Prime 1.2.2 from MultiGen
 *-      Paradigm and vpNet 1.2.2 from MAK Technologies.  Prior
 *-      versions of vpNet are not supported.
 **
 *4    Version 6.0.2
 **
 *-    - Switched bdiString to bdiString* in vpDiguyCharacter.h, to remove
 *-      a dependency on a header file that is not distributed.
 **
 *4    Version 6.0.1
 **
 *-    - Fixed problem in vpDiguy DIS networking.  Outgoing entities were
 *-      being published with entity numbers which conflicted with those
 *-      being used by Vega Prime entities.  On the receiving end, this
 *-      would cause characters to pop from place to place.
 **
 *4    Version 5.3.4
 **
 *-    - Added a circle example program to programming_examples/vpdiguy.
 **
 *4    Version 5.3.3
 **
 *-    - DI-Guy characters types are now listed in a Character Type combo box.
 *-    - A character type sensitive list of appearances are now listed in an
 *-      Appearance combo box.
 *-    - A character type sensitive list of actions are now listed in an
 *-      Action combo box.
 *-    - A character type sensitive list of head appearances are now listed
 *-      in a Head Appearance combo box.
 *-    - Altering the xyz position, heading or scale factor of a character
 *-      now reflects on the character immediately.
 *-    - Adding a ground clamp to a DI-Guy Scenario node now adds the ground
 *-      clamp to all of its children that don't currently have a ground
 *-      clamp.
 *-    - Added new DI-Guy Settings functionality, including turning on/off
 *-      scripting, sound effects, facial expressions, and the mapping of
 *-      DI-Guy particles to Vega particles.
 *-    - Added new options to DI-Guy Scenario panel.
 *-    - Added toggle for showing scene objects found in the scenario file.
 *-    - Added Sync Camera option that will slave the observer/motion controls
 *-      to the DI-Guy camera.
 *-    - Adding a DI-Guy character directly to a scene now creates one without
 *-      a scenario being necessary.
 *-    - DI-Guy characters dropped into a vpNet model map are now correctly
 *-      cloned.  (Requires the latest version of vpNet.)
 **
 *4    Version 5.2.1
 **
 *-    - Better integration with MaK's vpNet module (see above).
 *-    - Installation now occurs as a separate module on the DI-Guy CD.
 *-    - Installation now automatically copies samples, documents to the Vega
 *-      Prime installation as well as registering the DI-Guy for Vega Prime
 *-      module.
 **
 */

/*****************************************************************************
 *****************************************************************************
 **
 *2  DI-Guy Data, 9.0 and Earlier
 **
 *****************************************************************************
 *****************************************************************************
 **
 *4    Version 9.0.1
 **
 *-    - Added character soldier_sa80, a British soldier with desert and
 *-      temperate appearances using a sa80, based on the soldier_07 character.
 *-      Available appearances:
 *>
 *-        - uk_desert_sa80
 *-        - uk_temperate_sa80
 *<
 *-    - Added character "projectile" with meters per second motions.
 *-      Character projectile appearances:
 *>
 *-        - rpg_fired
 *-        - sa7_fired
 *-        - stinger_fired
 *-        - javelin_fired
 *-        - 120mm_tank_round_fired
 *-        - at4_fired
 *-        - 40mm_fired
 *<
 *-    - Added sound files: m203_hit.wav, fire_m203.wav, arabic_street_sounds.wav
 *-      sa7_flight.wav, sa7_fired.wav, stinger_fired.wav, stinger_flight.wav,
 *-      javelin_flight.wav, javelin_impact.wav, at4_fired.wav, at4_flight.wav
 *-      at4_impact.wav, javelin_fired.wav, pk74_fired.wav, m1a1_fired.wav
 **
 *4    Version 9.0.0
 **
 *-    - Some character types have been made deprecated, and made "legacy"
 *-      character types.  If these character types are used in an existing
 *-      .dss file or are created by a diguyScenario::create_character()
 *-      call they will be created, but by default they will not show up
 *-      in any DI-Guy Scenario character type selection controls.  The
 *-      legacy character types are:
 *>
 *-        - soldier_m249
 *-        - soldier_m4
 *-        - soldier_qk
 *-        - soldier_signals
 *-        - soldier_fire
 *-        - soldier_pistol
 *-        - soldier_melios
 *-        - afghan_child_crowd
 *-        - male_pedestrian3
 *-        - mped_sweeper
 *-        - mped1_misc
 *-        - mped2_misc
 *-        - mped3_misc
 *-        - mped5_crowd2
 *-        - mped5_crowd3
 *-        - mped5_crowd4
 *-        - mped5_crowd5
 *-        - mped5_crowd6
 *-        - fped2_misc
 *-        - fped3_crowd2
 *-        - suspect3
 *-        - marshaller
 *-        - esil
 *-        - soldier_precise
 *-        - launcher
 *-        - suspect
 *-        - suspect2
 *-        - fped_mother
 *-        - sergeant
 *<
 *4    Version 8.0.0
 **
 *-    - New character types:
 *>
 *-        - chain_simulation
 *-        - civilian_cc
 *-        - soldier_cc
 *-        - soldier_at4
 *-        - soldier_javelin
 *-        - soldier_m249
 *-        - soldier_m9
 *-        - soldier_m4
 *-        - train
 *<
 *-    - New human appearances:
 *>
 *-        - 3 Security Guards
 *-        - Hazmat Suits level A B and C
 *-        - Assortment of Hazmat props
 **
 *-        - 10 different Close Combat civilians
 *-        - Close Combat BDU and DCU with M9, M249, M240, M60, AT4,
 *-          Javelin M4 with M203, M16 with M203 Stinger weapons
 *-        - Close Combat Opfor with SA16, RPG7, AK47 and PK74 weapons
 **
 *-        - 3 Iraqi Insurgents
 *-        - 2 Iraqi Soldier
 *-        - 2 Iraqi Police
 **
 **        The following soldier appearances can have M9, M249, M240, M60,
 **        AT4, Javelin M4 with M203 and M16 with M203 weapons:
 **
 *-        - 4 BDU with IBA
 *-        - 4 ACU with IBA
 *-        - 4 USMC with IBA
 *-        - 4 USMC desert with IBA
 *<
 *-    - New turret vehicle and technical vehicle appearances:
 *>
 *-        - gaz_truck_w_ZSU23_turret
 *-        - gaz_truck_w_ZSU23_turret_blown
 *-        - toyota_pickup_tech_turret
 *-        - toyota_pickup_tech_turret_blown
 *-        - humvee_50cal_grn_turret
 *-        - humvee_50cal_grn_turret_blown
 *-        - humvee_50cal_des_turret
 *-        - humvee_50cal_des_turret_blown
 *-        - m1a2_abrams_grn_turret
 *-        - m1a2_abrams_grn_turret_blown
 *-        - m1a2_abrams_des_turret
 *-        - m1a2_abrams_des_turret_blown
 *-        - t72_tank_grn_turret
 *-        - t72_tank_grn_turret_blown
 *-        - t72_tank_des_turret
 *-        - t72_tank_des_turret_blown
 *-        - m2a3_bradley_grn_turret
 *-        - m2a3_bradley_grn_turret_blown
 *-        - m2a3_bradley_des_turret
 *-        - m2a3_bradley_des_turret_blown
 *-        - leclerc_tank_descamo_turret
 *-        - leclerc_tank_descamo_turret_blown
 *-        - leclerc_tank_camo_turret
 *-        - leclerc_tank_camo_turret_blown
 *<
 *-    - Added Motions to Soldier and Soldier2 characters:
 *>
 *-        - stand_ready_8th_turn_left
 *-        - stand_ready_8th_turn_right
 *-        - stand_ready_qtr_turn_left
 *-        - stand_ready_qtr_turn_right
 *-        - stand_aim_extreme
 *-        - kneel_aim_extreme
 *-        - walk_aim
 *-        - walk_aim_back
 *<
 *4    Version 7.0.0
 **
 *-    - New character types:
 *>
 *-        - chem_bio_pedestrian
 *-        - fdc_chock_and_chains
 *-        - fdc_fuelman
 *-        - fdc_grounding
 *-        - fdc_pallet
 *-        - fdc_pedestrian
 *-        - firefighter
 *-        - fireman_silver
 *-        - vehicle_technical
 *-        - vehicle_turret
 *-        - vehicle_wheels
 *<
 *4    Version 6.1.2
 **
 *-    - Vehicles and props now have more accurate bounding volumes.
 *-    - Fixed problem with config file appearance syntax.  The
 *-      item "shapeset:shape" format caused a crash; it now works
 *-      again.
 *-    - Replaced default scene object
 *-      (sets/default_stage/default_stage.flt) with new default
 *-      (sets/default_stage7/flt/default_stage7.flt).  The new
 *-      default_stage7.flt scene object has a number of different
 *-      areas in which example scenarios can be placed.
 **
 *4    Version 6.1.1
 **
 *-    - Added new appearance "invisible_human"; Using this appearance
 *-      for a human character will remove all geometry from the
 *-      character, effectively making it invisible.
 **
 *4    Version 6.1.0
 **
 *-    - Added ability to specify in config files how long a null
 *-      transition should take, and which blend function it should use.
 **
 *4    Version 6.0.2
 **
 *-    - Modified stroll motions of female_pedestrian character to move
 *-      hands further away from body.
 *-    - Fixed some facing issues for soldier-type characters in transition
 *-      motions between stand_aim and kneel_aim actions.
 **
 *4    Version 6.0.1
 **
 *-    - Added particle_puff.rgba to list of effects textures.
 *-    - Fixed the standing hip height of actor greg.  It had been
 *-      mistakenly changed to match that of actor bill.  This caused
 *-      problems for motion scaling for some actor / appearance
 *-      combinations.  (PR 3029)
 **
 *4    Version 6.0.0
 **
 *-    - Initial 6.0 DI-Guy Data release.
 **
 *4    Version 5.3.5
 **
 *-    - Removed one unused level of Motion LODs from data loaders
 *-      config entries.  The removed LOD 6 always had 0 variables in
 *-      it, which wasn't useful for anything.
 *-      This change requires use of DI-Guy Applications 5.3.5.
 **
 *4    Version 5.3.2
 **
 *-    - Changed format of Motion Texture (motex) entries in DI-Guy
 *-      config files.  The new format gives motion textures their
 *-      own config entry keyword, separate from motion arcs.  This
 *-      allows DI-Guy to know exactly which motions are going to be
 *-      used as motion textures.  Custom motion textures using the
 *-      old format need to be updated.
 *-    - Changed format of gesture entries in DI-Guy config files.
 *-      Custom gestures using the old format need to be updated.
 **
 *4    Version 5.3.1
 **
 *-    - Fixed problem with airport_crowd character selecting wrong
 *-      action for default moving action.
 *-    - Added sergeant2 character, which is similar to the sergeant
 *-      character but better deals with transitions between actions.
 *-    - Added fped_mother2 character, which is similar to the fped_mother
 *-      character but better deals with transitions between actions.
 **
 *4    Version 5.2.2
 **
 *-    - Running motion has been improved for the following characters:
 *-      afghan_fighter, cbd, soldier, soldier2, soldier_precise, soldier_qk.
 *-      Scenarios from previous revisions using these motions may behave
 *-      slightly differently.
 **
 */
