The breve simulation environment change log.
- Fixed Python matrix transpose problem (reversed connections of joints)
- Fixed Push macro instructions being cleared with clear-stacks
- Fixed PatchToroid get-neighbor wraparound for grid size = 1
- Added variable neighborhood size for Patch neighbor methods
- Added DTDs of breve XML formats

  ##### version 2.7.2 [02/25/2008]

  - Fixed locale related simulation errors in breveIDE
  - Fixed crash after right-click in Linux command-line breve with freeglut
  - Fixed object deletion problem in Python simulations
  - Fixed missing Python demos in breveIDE menu
  - Better memory management

  ##### version 2.7.1 [02/21/2008]

  - Fixed startup quit on Mac OS X

  ##### version 2.7 [02/19/2008]

  ##### New Features

  - Added URL class for downloading data from and uploading data URLs
  - Better Python compatibility for simulations ported from steve language
  - Major improvements and performance updates for physical simulation
  - Added support for loading mesh objects from 3DS files (both as display and collision shapes)
  - Added support for non-convex objects
  - Added new demo: 3DSImport.tz
  - Enhanced terrain support
  - Improvements to shadows and reflections to reduce artifacts
  - Improved quality of texturing and other material effects
  - Improved quality of fog rendering
  - Improved lighting quality
  - Shadows now correctly rendered for display shape instead of collision shape
  - Added support for more than one light source
  - Added abililty to load and display "skybox" images for realistic 3D simulation backgrounds
  - Major fixes and improvements to simulation archiving and dearchiving
  - Fixed quit after internal simulation errors with Python frontend
  - Improvements to texture loading and management, textures can now be archived
  - Demos updated, deprecated code removed.

  ##### version 2.6 [10/08/2007]

  ##### New Features

  - Added full Python language frontend support
  - Python demos added
  - Added new IRSensor classes
  - Objects now have a "display" shape and a "collision" shape, which can be set separately.
  - Stationary objects can now be positioned and rotated dynamically during a simulation.
  - Shapes can now be changed dynamically for stationary objects during a simulation.
  - Shadow drawing can be disabled on a per-object basis
  - Drawing quality of lines improved
  - Removed long-deprecated Data and Genome classes, updated demos
  - Added breveIDE intergrated documentation
  - Modified plugin API for list access
  - Removed separate "breve_cli" program, use "breve -x" to run a simulation with no graphics

  ##### Changes to Accomodate New Python Frontend

  The following changes were required in order to avoid conflicts between steve and Python. In rare cases they may require minor changes to existing simulations written in steve.

  - Some method arguments have been reordered.
  - Many methods have been moved from Stationary or Mobile to their parent class Real
  - One of the "set-rotation" methods has been renamed to "set-rotation-matrix"

  ##### Bug Fixes

  - Fixed Windows breveIDE plugins
  - Fixed Windows breveIDE window positions
  - Improved Windows/Linux breveIDE stability
  - Fixed missing collision callbacks for "fully embedded objects"
  - Fixed archiving/dearchiving problems for some classes.

  ##### version 2.5.1 [01/22/2007]

  ##### Bug Fixes

  - Enabled experimental Python bridge.
  - Multiple Push language fixes and enhancements
  - Added scientific notation number parsing.
  - Fixed crash in loading corrupted .sgi image files (was causing crash in SwarmEvolve-1.0 demo).
  - Replaces missing Genome class (preventing Walker and SuperWalker demos from running).
  - Fixed Sound support on Windows
  - Fixed Push support on Windows.

  ##### version 2.5 [12/11/2006]

  ##### New Features

  - Major optmizations and stability improvements
  - Network communication is now a two-way process: objects can be both sent and received in a single network connection call.
  - Added easier element access to vectors and matrices.
  - For plugin or language frontend developers: exported additional breveEngineAPI.h functions
  - Released breveCreatures screensaver for Mac OS X and Windows.

  ##### Bug Fixes

  - Remove newline characters from text with File read-line method.
  - Physical simulation stability improved.
  - Crash fix for very densely packed physical simulations
  - Networking stability improvements.
  - Archiving/dearchiving bug fixes.
  - Fixed double-call of "dearchive" method (which could lead to "ghosts")
  - Improved simulation archiving/dearchiving complience for many built-in classes
  - Windows "priority" bug fixed -- breve will now run at the default priority.
  - Windows and Linux IDE graphics bug fixed: simulations now display properly after a previous runtime error.
  - Fixed movie export on some Windows machines
  - Fixed potential Windows and Linux IDE networking deadlock

  ##### version 2.4 [05/13/2006]

  ##### New Features

  - Universal PPC/Intel build for Mac OS X
  - Changes to plugin architecture: plugin developers will need to recompile plugins for 2.4 and minor source code changes may be required.
  - Official support for breve_cli movie export, image snapshots and light detection with Mesa on Linux (if Mesa libraries are present)
  - Added TurtleDrawing class for drawing via Logo-like turtle commands.
  - Added GADirectedGraph class for evolving graph structures.
  - New demo: Creatures. Evolves morphology and behaviors of evolved virtual creatures.
  - New demo: Demolition.
  - Stationary objects can now be rotated.
  - New garbage collection system, far faster and more robust than before.
  - Memory allocation optimizations.
  - Added set-joint-torque-vector method for universal and ball joints.
  - Link rotations are no longer modified when being linked by joints.
  - Added control of Multibody self-collision parameters.
  - Added independent texture scales for X and Y directions.
  - Added methods to get the height and width of a camera's view.
  - Enhanced support for setting parameters from Push configuration files.

  ##### Bug Fixes

  - Fixed potential Windows garbage collection crashes.
  - Fixed truncation of large XML network reads.
  - Fixed links in method_index documentation.
  - Removed double-mark debugging message.
  - Fixed non-volumetric patch rendering crash.
  - Fixed XML archiving of objects created in same timestep as archiving event.
  - Fixed bug in setting joint torques (torques may now appear to be more powerful than previously)
  - Corrected link points for automatic joint scaling with non-uniform scales.
  - get-point-on-shape method now more accurate in degenerate situations (near vertices).
  - Fixed spelling of "for-notification" keyword in unobserve method.
  - Fixed reverse-ordering of "unobserved" notifications.
  - Fixed disabling of multibody self-collisions.
  - Fixed delayed update of texture scaling.

  ##### Source Code Changes

  - Ongoing conversion of source code to C++.
  - Plugin architecture updated

  ##### version 2.3 [08/31/2005]

  ##### New Features

  - Major optimizations and improvements to collision detection and response.
  - Improved collision-face finding for more accurate collision response.
  - Added new GeneticAlgorithm class.
  - Added Joint methods "get-force" and "get-torque" to get the forces and torques that joints apply to bodies.
  - Added Joint methods to retreive information about parent/child links and link-points.
  - BallJoint support enhanced—joint limits now functional. Axes of rotation for BallJoints have changed, see the BallJoint documentation for details.
  - Added "get-colliding-objects" method to Mobile class (replacing "check-for-penetrations").
  - PatchGrids can now be drawn either as individual cubes (better quality) or as a volumetric display (much faster).
  - Mac OS X breve can now save output files to the same diretory as the simulation file.
  - Added a "Floor" class—a flat stationary object.
  - Added support for automatic conversion to strings in steve when necessary.
  - Arrow keypresses can now be caught with methods such as "catch-key-left-down". This works for both "down" and "up", and for the directions "left", "right", "down", "up".
  - Multiline comments can now appear in steve code beginning with #! and ending with #!.
  - Repeating events can now be scheduled using the Object method "schedule-repeated".
  - New level-of-detail renderer for terrains.
  - Adjusted camera movements so that they are more sensitive to the zoom factor, having a larger influence when the camera is zoomed out.
  - For developers and plugin authors: passing a NULL pointer from steve to an internal function will now trigger a runtime error.
  - For developers and plugin authors: the constant AT_UNDEFINED has changed. Plugins using this contstant should be recompiled.
  - Added max-force setting for springs.
  - More of simulation backend converted to C++.

  ##### Bug fixes

  - Fixed "get-angles" for UniversalJoints.
  - Fixed crash when freeing disconnected Multibody
  - Fixed MPEG Movie recording on Windows
  - Fixed set-relative-rotation method for Joints (when called after the joint has been connected).
  - Fixed incorrect bounce for multi-point collisions.
  - Fixed lowercase key event processing for Linux & Windows breveIDE frontend
  - Fixed get-real-time precision bug.

  ##### version 2.2.1 [04/28/2005]

  - Fixed neighbor detection bug.

  ##### version 2.2 [04/27/2005]

  - New breveIDE graphical user interface for Linux and Windows (thanks to Gabriel Tarasuk-Levin)
  - steve code evaluation greatly optimized (thanks to Michael Larson).
  - New hardware accelerated Matrix3D class (thanks to Eric DeWitt).
  - Memory requirements and initialization time greatly reduced for large simulations.
  - Collision detection greatly optimized
  - Patch drawing capabilities enhanced and optimized.
  - breve is now capable of simulaing far more objects than previously possible.
  - Objects can now be rendered as points.
  - Garbage-collection enhancements
  - Enhanced support for the vector (point) type in Push.
  - Screen can be cleared with Control method "clear-screen" when blurring is enabled.
  - Display of Springs can be modified with method "set-pattern".
  - Added method to set Mobile object rotation from Euler angles.
  - New demo: PatchLife3D, 3D Game of Life implementation.
  - New demo: GrayScott3D, 3D reaction diffusion simulation.
  - New demo: Hypercycle, spatial hypercycle simulation.
  - OS X breve document icon changed

  ##### Bug fixes

  - Fixed "set-density" method for Spheres.
  - Fixed string index assignment bug.
  - Fixed bug in which two method calls scheduled for different times could get run at the same time.
  - Fix to make "init" method errors stop the simulation.
  - Exported slMalloc and slFree symbols for plugins.
  - Fixed freed-list memory leak in object inspector (OS X application)
  - Fixed truncated method names from NetworkServer object.
  - Fixed "unprepend" bug removing wrong element from lists.
  - Fixed "-u" flag for OS X command-line OS X.
  - Fixed "-s" flag for Windows command-line breve.
  - Fixed clearing to background color when blur is enabled.
  - Fixed tone frequency doubling
  - Fixed potential Tone freeing crash
  - Fixed PatchGrid get-patch at-location method
  - Networking fixed for Windows machines

  ##### Source Code Changes

  - The steve language source code has been partially converted to C++.

  ##### version 2.1 [01/28/2005]

  ##### New Features

  - New custom drawing class (see documentation for class Drawing).
  - New elastic Spring simulation class (see documentation for class Spring).
  - New fast 2d matrix manipulation class (see documentation for class Matrix2D). AltiVec accelerated, where supported by hardware.
  - Fast chemical diffusion supported via Matrix2D class.
  - Different patterns (dashed, dotted, etc) can be drawn for lines between objects.
  - String length now given with | string |.
  - Letters in strings can be read with string{ n }.
  - Letters in strings can be replaced with string{ n } = "newstring".
  - Physical collisions may now be disabled between specific object types.
  - Faster physical simulation via "QuickStep" (see method enable-fast-physics in class Control).
  - Various improvements to the Push programming language.
  - Changes to Push programming language to match the Lisp implementation
  - Implemented "discrepancy" method for comparing Push programs.
  - Improved "Go to method..." popup menu (Mac OS X).
  - Introduced basic support for transparent breve <=> Java bridge on Mac OS X.
  - Switched to more compatible MPEG export format.
  - "Genome" class now copies lists for crossover operation.
  - New demo: SwarmEvolve 1.0, evolving swarm simulation
  - New demo: GrayScott, chemical reaction/diffusion simulation
  - Major optimizations.

  ##### Bug Fixes

  - Fixed slowdowns and crashes on multiprocessor Macs.
  - Fixed bug in cube/sphere collisions on -x axis.
  - Fixed network server starting on wrong port on x86 machines
  - Fixed copylist garbage collection bug
  - Fixed disabled light detector
  - Fixed bug using "@define" with strings.
  - Fixed bug in Mobile method "set-label".
  - Fixed loading XML-files into Data objects
  - Fixed math assignment operator bug with vector elements
  - Fixed incorrect rendering when bitmaps rendered after transparencies.
  - Command-R now stops simulations in fullscreen mode (Mac OS X).

  ##### breve Object API Changes

  - New object types can be directly instantiated and called from steve code.
  - The brObjectType findMethod function pointer now takes an additional argument: the method argument types.
  - The "class" fields of structs have been changed to be called "object", to avoid conflicts with C++ compilers.
  - brObjectTypes now require a few additional function callbacks.

  ##### Source Code Changes

  - The simulation backend library and the breve kernel have been partially converted to C++ and cleaned up significantly. The changes so far have allowed for some major optimizations.

  ##### version 2.0.1 [10/15/2004]

  ##### Bug Fixes

  - Fixed bug using vectors with Push language
  - Fixed crash in "relative-rotate" method of class Mobile.
  - Fixed crash in "get-type" method of class Object.

  ##### version 2.0 [10/13/2004]

  ##### New Features

  - Full integration of the "Push" programming language for evolutionary computation.
  - Method arguments can now be given default values to indicate that they are optional.
  - Mouse coordinates in window can be read with new Control methods get-mouse-x-coordinate and get-mouse-y-coordinate.
  - Totally revamped garbage collection system.
  - Garbage collection works for objects. It is enabled on a per-object basis.
  - Added rendering of back-faces of transparent objects to improve transparency effect.
  - Multiple perspectives can be viewed in a simulation using the "Camera" class.
  - Textures can be updated on-the-fly.
  - There is now no hard limit on the number of textures in a simulation
  - General improvements to transparency and texturing effects.
  - Control method "get-real-time" returns the current real-time in seconds, with microsecond resolution.
  - Major memory and performance optimizations.
  - Improved keyboard and mouse interaction for command-line breve.

  ##### Bug Fixes

  - Fixed potential physics engine crash when dealing with large numbers of objects.
  - Fixed printing of "%" characters to the output log.
  - Fixed potential crash reading DOS formatted text files on OS X (File class).
  - Fixed truncated read bug in the File class.
  - Links and mobile objects can be transparent.
  - Fixed distorted shadow volumes for spheres.
  - Incorrect texturing on non "up/down" faces has been fixed.
  - Printing fixed on OS X application

  ##### Changes to the steve Language

  - New "insert" operator for lists: insert expression at list{ index }.
  - New "remove" operator for lists: remove list{ index }.
  - Use of arrays is now depreciated—use lists instead
  - "super" is no longer an actual instance. Calling a method with "super" still has the same effect, but "super" no longer refers to a separate instance than "self".
  - "Vision" class has been removed. Its functionality can now be replicated using the classes "Camera" (to render images) and "Image" (to read the images from the screen).
  - The "Image" class is now used for applying setting textures.
  - The depreciated "register with-shape" method has been removed for Mobile objects. The method to use is now "set-shape to".
  - The depreciated Joint methods have been removed from the Link class—use the Joint classes instead.
  - MultiBodies are now no longer subclasses of Mobile—they are now Abstract objects which refer to groups of other Links and Joints.

  ##### Changes to Physical Simulation

  - MultiBodies are now optional. Links can exist independently in a simulation.

  ##### Changes to the Mac OS X Interface

  - Redesigned OS X interface.
  - Mac OS X style plugins are no longer supported—switching to the common plugin structure is trivial.

  ##### Changes to Command-Line breve

  - Window-position can be specified from the command line with the flag -w X,Y.
  - Window-size can be specified from the command line with the flag -l NxM.

  ##### Changes to the breve Source Code

  - New API for using the breve engine with other frontend languages.
  - Source code completely restructured.
  - Plugin API: all "ST" macros and symbols have been changed to "BR" (i.e., STINT() is now BRINT()).
  - Various other changes to the API—plugins must be recompiled using the new API header.
  - Source code now documented with doxygen.

  ##### version 1.9.1 [05/12/2004]

  - fixed F1 camera zoom
  - fixed path bug on Windows when simulation filepath included "\"
  - fixed QTMusicPlugin for OS X version
  - fixed version numbering in OS X version

  ##### version 1.9 [05/11/2004]

  ##### New Features:

  - Support for saving PNG snapshots on all platforms
  - Support for saving MPEG movies on all platforms
  - New Tone class plays tones on all platforms (replaces the OS X Sinewave plugin)
  - Updated networking support—arbitrary objects can now be sent over network
  - New Image class to load, read and modify images.
  - Classes may now hold multiple methods with the same name and differing argument counts
  - Added full-screen mode for command-line versions of breve (using the -f flag)
  - Added -u command-line flag to start a simulation automaticially ("unpause")
  - Documentation and demos updated
  - New "Painter" demo
  - New "RemoteControl" demo
  - Major optimizations with respect to object creation/deletion
  - Major general optimizations
  - Documentation class-list now hierarchical
  - Lists are now indexed for fast random access
  - File class interprets both '\n' (UNIX/OS X newlines) and '\r' (DOS newlines) as newline characters on all platforms
  - New (experimental) Java bridge plugin [OS X only, for the moment]

  ##### Bug Fixes:

  - Display labels fixed (set-label)
  - Fixed rendering bugs (shadows, flashing)
  - Fixes/improvements to mouse controlled camera movements
  - Fixed "controller pause" bug on Mac OS X
  - File opening methods now return 0 on error
  - Fixed equality/inequality operators for lists
  - Fixed and/or precedence bug
  - Fixed memory leak in OpenGL rendering
  - Observers are now removed for freed objects
  - Fixed collision-handler bug for non-physical objects in physical simulations
  - Fixed plugin Makefiles
  - Fixed bug relating to superclass methods.
  - Fixed pop-induced memory leak
  - Fixed memory leak in hash tables when a key has no value set
  - Fixed memory leak in local variable hash tables
  - Fixed divide-by-zero bug with random[-1].
  - Fixed OS X string syntax coloring bug
  - Fixed OS X popup crash bug
  - Heavy log window output no longer causes slowdown to simulations (OS X)

  ##### version 1.8 [01/29/2004]

  ##### New Features:

  - Vector elements can now be assigned using the "::" notation (myVector::x = 10)
  - "{ }" is now parsed as an empty list
  - Shadows on spheres are no longer hideous
  - New "Speed" menu allows simulations to be slowed down (OS X only)
  - Documentation updated
  - Basic AppleScript functionality added for loading, starting and stoping simulations (OS X only)
  - Improved responsiveness when draw-every-frame is disabled (as in the DLA demo)
  - Automatic stacktrace after runtime errors
  - New plugin samples
  - Display text can be scaled; is scaled automatically when the window resizes
  - Display text is anti-aliased
  - Joint rescaling now works even when there is no parent link
  - Mobile shapes can be set on-the-fly (method set-shape)
  - Mobile shapes are now set by default to a simple sphere
  - Link shapes can be set on-the-fly (method set-shape)
  - Link shapes are now set by default to a simple rectangular solid
  - Standardized use of method name "set-shape" for Link and Mobile objects
  - Added joint hard-limits to all joint types (method set-joint-limits)
  - Terrains can be scaled to other sizes (method set-scale)
  - Cubes, Spheres and other shapes are now independent subclasses of Shape
  - The File class now uses the user-specified output directory
  - Object dependencies can now be removed (method remove-dependency)
  - All XML archive/object loading now searches the full file path
  - The File class now searches the entire breve search path to locate files to open

  ##### Bug Fixes

  - set-force (Link.tz) now adds persistent force
  - Added correct simulation time to dearchived simulations
  - Writing to an uninitialized File object no longer crashes
  - Bug fix in set-rotation method of Mobile.tz
  - The method "read-line" in class File now removes the terminating newline character
  - Fixed bug loading plugins with linux
  - Fixed a number of terrain related bugs
  - Fixed bug returning values from within a for and while loops fixed
  - Fixed missing scheduled events for dearchived simulations
  - Fixed a potential crash while dearchiving multibody objects
  - Fixed a potential crash in "check-for-penetrations"
  - Fixed weirdness in syntax-coloring of strings
  - Fixed occasional incorrect line number in error reporting
  - Fixed bug reading image files on Windows platform
  - Fixed invisible/miscolored terrain bugs
  - Fixed terrain get-height bug
  - Several OS X memory leaks fixed

  ##### version 1.7 [09/18/2003]

  ##### New Features:

  - Source now available under GPL
  - New preview release available for Windows
  - Added support for customized terrains, including fractal-based landscapes
  - New CustomShape class allows for custom built shapes
  - New Sound class allows sound files to be loaded and played
  - Added some sound files to the breve distribution
  - breve can read gzipped files (both simulation files and archived simulations)
  - Completely new documentation
  - New demo: TerrainWalker.tz
  - New demo: TerrainSwarm.tz
  - New demo: TerrainWave.tz
  - New demo: HelloWorld.tz
  - Several demos updated
  - New methods to check for penetrations in multibodies or links
  - New methods to get bounding boxes of Link objects
  - New "shadow volumes" offers improved shadow effects
  - Major improvements in garbage collection
  - Upgraded to version 0.039 of the ODE physics engine

  ##### Bug Fixes:

  - Fixed bug in dearchiving strings (which may have caused general failures in dearchiving)
  - Fixed many potential memory leaks
  - Fixed bug in "Go To Method..." menu and multi-line method declarations
  - Fixed bug dearchiving objects containing arrays
  - Many crashes fixed
  - Fixed non-working "pause" method in Control.tz

  ##### version 1.6 [06/19/2003]

  ##### New Features:

  - Lines can be arbitrarily drawn between objects
  - Objects can be made invisible
  - Random seeds can be generated from /dev/random for more randomness (critical when running multiple simultaneous simulations)
  - New operators for lists: prepend, unprepend and copylist
  - Warnings added for local variables which shadow class variables
  - Instance inspector updates periodically (OS X)
  - breve can now read PNG & JPEG images (for textures and bitmaps)
  - Array and list expressions can be used in strings (for example, "$myArray{4}, $myList[3]")
  - New "light exposure detection" allows sunlight to be simulated
  - Bitmapped objects now have matching shadows and reflections (as opposed to spheres)
  - The rotation of bitmapped images can be set
  - The transparency of bitmapped images can be set
  - Lots of major documentation improvements
  - New demos to illustrate some of the new features
  - Fixed error with negative exponents
  - Fixed crashes in breve text editor
  - Offending code now correctly selected when a simulation or parse error occurs
  - Fixed line errors in "Go To Method..." menu

  ##### Changes to physics support:

  - Support for new ODE joint types: Universal & Ball.
  - Removed limit of 8 outward links per link when building multibodies
  - Joints can be created and destroyed dynamically over the course of a simulation
  - Kinematic loops can be made in multibodies
  - Structure of multibodies no longer required to be hierarchical
  - Joint link-points can be scaaled dynamically as shapes change size
  - Links can be fixed to points in space (by creating a Joint with no parent)

  ##### Bug Fixes:

  - Fixed list garbage collection bug which could cause unexpected errors or crashes
  - breve now properly parses files with Windows and MacOS9 style newlines (\r and \r\n)
  - Fixed a number of rare physics related crashes
  - Fixed a bug while detecting collisions with Stationary objects
  - Fixed preferences bugs (editor & path preferences)
  - Lists now properly updated in object inspector (OS X)
  - Fixed crash when inspecting freed objects in object inspector
  - Fixed bug in which changes to both child and parent link points (Joint.tz) did not get handled correctly
  - Fixed bug in which get-point-on-shape gave bad results after shape scaling
  - Re-added ability to inspect superclasses in the object inspector window (OS X)

  ##### version 1.5 [03/10/2003]

  ##### New Features:

  - Multiple code windows can be opened in the OS X breve application
  - New "Braitenberg" class and related demos for building Braitenberg vehicles.
  - Speed improvements, as always
  - Improved collision detection
  - Linux version performance greatly improved
  - "steve" commands can be typed into the code input field and executed dynamically during a simulation
  - Objects can be selected and dragged through the simulated world
  - Greatly improved garbage collection
  - It's funny how I fix all the bugs in garbage collection with each release, but there are always new ones that pop up—they're fixed.
  - Strings, lists, matrices and "data" types can now be included in Data objects
  - All objects can now be "archived" as XML files
  - Data objects now exported primarily as XML files
  - Entire world states can be exported as XML files
  - Improved physics support

  ##### Changes to the graphical rendering:

  - Improvements to shadows and reflections
  - Speed improvements

  ##### Changes to the steve language:

  - New "data" type allows for encoding binary data (not to be confused with Data objects, which can contain many types of data).
  - New "all" expression returns a list of all objects of a specified type, ie "all Mobiles"
  - New "stacktrace" method in Control.tz
  - New increment/assign ("++") and decrement/assign ("—") operators
  - Greatly improved error reporting
  - Warnings added for unused variables

  ##### Changes to physics support:

  - Shapes sizes can be scaled dynamically, useful for simulating growth (scale-shape in Shape.tz)
  - Joint normals can be adjusted dynamically during a simulation (set-joint-normal in Joint.tz)
  - Joint link points can be adjusted dynamically during a simulation (set-link-point in Joint.tz)

  ##### Bug Fixes:

  - Fixed freeze bug when pausing simulations with high logging activity.
  - Fixed bug in calculating mass and inertia properties
  - Fixed rare but totally screwy collision detection bug

  ##### version 1.4 [11/04/2002]

  ##### Important change for users of previous versions:

  - Brand new physics engine! [in progress]

    > Though changes will need to be made to accommodate the changes, the new engine will offer much improved features and stability in the long run. breve is now using portions of the Open Dynamics Engine library. See the file PhysicsNotesfor more information.

  ##### New features:

  - There is a Linux version now, not that this is an OS X feature.
  - Added initial support for creating custom interfaces for simulations (see the InterfaceSwarm demo for an example).
  - Simulations can be run in fullscreen mode
  - New "Vision" class gives access to rendered images of the world
  - New "Patch" feature allows creation of StarLogo style patches in the world (see class documentation for Patch.tz and PatchGrid.tz for more information).
  - New built-in feed-forward neural network functionality [experimental]

  ##### Changes to the steve language:

  - Added "matrix" (3x3 matrices) as a basic type [experimental]
  - Method calls can now be made on lists of instances and the method will be called for each instance in the list separately.
  - New "@define" functionality in the steve language. Allows "@define" statements to facilitate manipulation of parameters. See the steve language documentation for more information.
  - Strings can now use special sequences like \n (newline), \t (tab) and " (quotation mark)
  - Logical AND/OR expressions are now "short-circuit" operators

  ##### General changes:

  - Super-duper optimization
  - Changed texture limit from 8 textures to 128
  - Spheres can now be texture mapped instead of changed automatically to billboards (set-bitmap and set-texture in Real.tz)
  - The "scale" of textures can now be controlled (set-texture-scale in Real.tz)
  - Improved garbage-collection
  - Fixed documentation for plugins
  - New output path now takes effect immediately, not when the application is restarted
  - New demos

  ##### Bug Fixes:

  - Fixed "Save As..." bug, where breve would forget the existing filename is "Cancel" was selected
  - New files now appear in recent menu when saved
  - Window name is now correctly set when a file is saved using "Save" or "Save As...".
  - Fixed bug while testing vectors in logical AND/OR expressions
  - Fixed x-axis/y-axis mixup in rotation methods

  ##### version 1.3 [12/05/2001]

  ##### Important change for users of previous versions:

  The default iteration and integration timesteps have been changed.

  > Control.tz has changed the default timesteps and integration steps to match the timesteps used by PhysicalControl.tz. This way, objects from regular simulations will behave the same way in physical simulations.

  > Simulations written in previous versions will run very slowly because of the small timesteps. You should increase the velocities of the objects so that they run at a reasonable speed.

  > If you need to return to the old step sizes, you can set the integration step to 0.5 and the iteration step to 3.0. For new simulations, however, you should use the default values. A number of demos have been modified to accommodate this change.

  ##### General changes:

  - Major bug fixes and improvements to physics engine.
  - Major speed optimizations.
  - Support added for plug-ins.
  - slURLPlugin allows URLs to be download and web pages to be opened from within simulations.
  - slRegexPlugin provides regular expression functionality.
  - slQTMusic plugin provides access to making MIDI music with QuickTime within simulations.
  - Switched from rand() to random() in order to improve random number generation.
  - Class documentation now uses frames for easier navigation.

  ##### Changes to the steve language:

  - Added "notifications". Instances can now register for notifications from other instances. This allows special actions to automatically be called for all observing instances. See documentation for Object.tz for more information.

  ##### Changes to the application interface:

  - Improved preferences dialog box with many new options.
  - Syntax coloring!
  - Editor window can now check for matching braces and parentheses.
  - Auto indent.
  - Recent menu now preserved every time breve is run.

  ##### Changes to the included breve class files:

  - New "system" method of Control.tz allows shell commands to be executed from within simulations.
  - New "copy" method in Data.tz allows the contents of one data subclass to be copied into another.
  - New "pause" method in Control.tz allows the simulation to pause itself as though the user had clicked on the pause button.
  - Introductory networking support.

  ##### version 1.2 [10/08/2001]

  ##### General changes:

  - New "tips & techniques" documentation describes how to use many of breve's features which are part of the included class hierarchy. Accessible from the Help menu.
  - Demo simulations updated and enhanced.
  - Added "Check Syntax" option from the Edit menu to check the syntax of a simulation without running it.
  - breve now allows graphic files (in SGI format) to be loaded and used as textures or "billboards".
  - Improved rendering—adds the ability to render shadows and reflections of objects on to a floor.
  - Text strings can now be printed in the simulation display.
  - Added "neighbor checking", a fast and sophisticated method of finding objects within a certain range. This represents a huge speed improvement on many simulations which previously checked the location of every other object manually.
  - Fixed movie & snapshot export bug which caused corrupted images on some systems.
  - Added settings for quality and simulation frames per second during movie export.
  - Added contextual menu support for objects in the simulation—actions can be assigned on a per-object basis. Hold down control while clicking on objects in the simulation to see the menu.
  - Improved menu support in steve, such that menus can be disabled/enabled, unchecked/checked from within simulations.
  - Added dialog box support to get ok/cancel type input from within simulations.
  - Documentation updated.
  - Improved error reporting.
  - Additional optimization over 1.1.
  - Potential memory leaks fixed with improved garbage collection in steve.

  ##### Changes to the application interface:

  - Added "New From Template" menu item to create a new document with a simulation template.
  - Added "Open Recent" submenu from the file menu.

  ##### Changes to the steve language:

  - Added support for perl-like embedding of simple variables in strings, such as print "my value is $self". This does not work for arrays or lists at this time.
  - "Controller" line can now be punctuated with "." in addition to ";", in order to stay consistent with the rest of the steve language.
  - The variable "controller" defined in the Object.tz class points to the controller instance for the simulation. As Object.tz is the root class, the expression controller is universally defined.

  ##### Changes to the included breve class files:

  - Many new features.
  - Class Object.tz stores the "controller" instance in a variable called "controller". This means that every object in the simulation now has direct access to its controller object.
  - Made Stationary.tz and Mobile.tz subclasses of a new class, Real.tz. Real.tz is the logical opposite of Abstract.tz and serves as a parent class to all "real" objects in the simulation world.

  ##### version 1.1 [07/16/2001]

  ##### VERY IMPORTANT CHANGE AFFECTING SIMULATIONS WRITTEN WITH VERSION 1.0:

  > The "scale" of the world has now been fixed at "1 world unit" = 1 meter. The world is now effectively 1/10th the size of the world in version 1.0.

  > If you are using the class PhysicalControl then you will probably want to scale down the objects in your simulation to 1/10th of their original size. 1 unit in the simulated world is now fixed as 1 meter. This means that objects created in version 1.0 may now be much larger than intended. You should modify your simulation to scale down every object to 1/10th of the original size and modify the forces applied to objects and joints; the accelerations, speeds and positions of the objects and the camera locations accordingly.

  > Bear in mind when adjusting forces applied to objects and joints that the mass of the object will not scale down by 1/10th but instead much more—in the case of a rectangular solid, the mass is scaled by a factor of 1/100th. This means that maximum joint pressures should most likely be scaled down by at least 100.

  > If you are not using the class PhysicalControl then the only effect of the changes will be that the textures on objects are very small and that the default starting camera position may be closer than desired. You can fix these problems by following the same directions given above for those using the class PhysicalControl.

  ##### General changes:

  - Fixed display bug on systems without Mac OS X OpenGL hardware acceleration. This bug caused the simulation to not display on certain Macs including first generation iMacs and some iBooks, rendering the software useless on these machines.
  - many significant speed optimizations made.
  - new "Walker" demo shows evolution of walking behavior.
  - added ability to save still images from simulations.
  - added very basic support for exporting QuickTime movies.
  - added the ability to select objects and browse their variables.
  - improved rendering.
  - added control for lighting.
  - fixed possible freeze bug associated with log window.
  - many small bugs fixed.

  ##### Changes to the included breve class files:

  - new Data class allows instances to be saved to disk and loaded next time the simulation is run, allowing key states of simulations to be saved [experimental]. See the documentation for the class Data.tz for more information.

  ##### Changes to the steve language:

  - added support for basic arrays
  - list support greatly improved.
  - push, pop and sort are now reserved keywords in steve.
  - calling a method in a freed instance is now an error which will stop a simulation. previously calling a method in a freed instance was simply ignored.
  - testing the truth value of a freed instance returns 0. previously a freed object had a truth value of 1.

  ##### Changes to physical simulation:

  - some bugs fixed.
  - some bugs remain.

  ##### version 1.0 [05/07/2001]

  Initial release.