Crystal Entity Layer (CEL) detailed change log.
http://cel.sourceforge.net/

The history order is reversed so that new features are at the top.

2-Jan-2004
	- Jorrit added the ability to use parameters for the
	  'call' operation in the XML behaviour layer.
	- Jorrit added a shorthand notation in the XML behaviour
	  layer: @parameter instead of param(parid(parameter)).
28-Dec-2003
	- Jorrit added new 'stridx' function to the XML behaviour layer.
	- Jorrit added new 'strsplit' operation to the XML behaviour layer.
23-Dec-2003
	- Jorrit added a 'switch' command to the XML behaviour layer.
	  Complete with 'case' and 'default'. One difference with
	  C++ is that the case values don't have to be constant.
	  At runtime this switch simply translates to a series of
	  'if'/'else' statements so it is not that efficient.
	- Jorrit did a huge optimization to the XML behaviour layer by
	  making sure that the A2S() statements are not evaluated in case
	  script-debugging is not enabled. The problem was that the #if to
	  disable debugging was inside the routine that prints out the debug
	  info. but the A2S() calls were done in the calls and this means
	  that the compiler still generated code for them. Current solution
	  does some preprocessing magic but it has the unfortunate
	  consequence that there are a huge amount of warnings in case the
	  script debugger is enabled:
		plugins/behaviourlayer/xml/xmlscript.cpp:2590:57:
		warning: pasting "dump_exec" and "(" does not give
		a valid preprocessing token
	  I don't know how to avoid those. Luckily the warnings are not
	  present in the default build.
	  BTW, this optimization increases fps with 100 (from 320 to 420)
	  for one of the games in xmlgames :-)
	- Jorrit renamed the 'testcollide' function in the XML behaviour
	  layer to 'bb_testcollide' to make it clearer that this function
	  is specific to billboards.
	- Jorrit added the notion of layers to the billboard manager. Every
	  billboard can be associated with some layer and you can move a
	  layer which has the effect that all billboards on that layer will
	  move. This is nice for scrolling games. You can use the
	  iBillboardLayer interface to access layers.
	- Jorrit added the 'layer' property to the billboard property class.
	- Jorrit added 'bb_movelayer' command to the XML behaviour layer.
	  With this comment you can move layers.
	- Jorrit fixed the pckeyinput property class so that key repeats
	  are now also sent to the behaviour layer with '_' appended (i.e.
	  append of '0' is key press, append of '1' is key release).
	- Jorrit fixed the XML behaviour layer so that 'bb_movelayer' now
	  also works if the layer doesn't exist yet. In that case the layer
	  will be created.
22-Dec-2003
	- Daniel added comments to iCelEntity and iCelEntityList.
	- Jorrit added the 'super' keyword to the XML behaviour
	  layer. With this keyword you can call the routine of the
	  same name in the superscript.
	- Andreas Busch added doxygen targets.
21-Dec-2003
	- Jorrit added 'strlen' and 'strsub' functions to the XML
	  behaviour layer.
	- Jorrit fixed a bug in standard parameters. By specifying the
	  type in SetParameterDef() it actually caused crashes when
	  setting a string later on because the celData expected a string
	  to clean up. Fixed this by simply removing the unneeded
	  type parameter.
	- Jorrit added 'Bind' action for pckeyinput.
	- Jorrit fixed a bug in the XML behaviour layer which prevented
	  boolean parameters from working (for <action> command).
	- Jorrit added the notion of super-scripts for the XML behaviour
	  layer. This is a bit similar to a superclass and it allows
	  scripts to depend on other scripts for common behaviour.
20-Dec-2003
	- Jorrit fixed three bugs which prevented a script from deleting
	  its own entity:
	        - First while a script is executing we will now keep an
		  additional reference to the entity to prevent deletion
		  until the script has finished.
		- In case a billboard is firing mouse messages we will
		  set a flag to prevent deletion of that billboard. If
		  the billboard has to be deleted then that flag is tested
		  and if true we set another flag so that the billboard
		  can delete itself later.
		- In pcbillboard we now remove the event handler on the
		  billboard before deleting that event handler. This is
		  now needed since the billboard can actually remain
		  in memory a little longer because of the previous fix
		  and then deleting the event handler without first
		  removing it would cause bad effects.
19-Dec-2003
	- Jorrit worked a little on xmlgames. Added a new maze game.
	  Unfinished.
18-Dec-2003
	- Jorrit added a local vfs.cfg for CEL to specify the following
	  CEL mount points:
	  	- /cellib/sounds
		- /cellib/images
		- /cellib/objects
17-Dec-2003
	- Jorrit changed the bootstrap loader so that it also attempts to
	  load the sound plugins now.
	- Jorrit added a <sound> keyword to the XML behaviour layer.
15-Dec-2003
	- Jorrit did the following to the XML behaviour layer:
	      - Implemented support for setting entity variables in the
		XML behaviour layer. So in all commands where you need to
		specify an entity you can now give both a name or an entity
		itself.
	      - Added an 'ent' function to the XML behaviour layer for
		getting an entity from an entity name.
	      - Added an inline version of 'for' so that you don't have to
	        specify the inner code of a for loop in another event
		(although that is still possible).
	      - Added inline and none-inline version of 'while'.
	      - Added 'inventory_count' and 'inventory_get' functions.
	- Jorrit performed an optimization in the physical
	  layer->CreatePropertyClass(). It will use a hash to find the right
	  property class factory instead of scanning a list.
	- Jorrit did a big optimization in the billboard manager with the
	  creation of the clickmap for images. For big images this can make
	  a huge difference in setup time.
14-Dec-2003
	- Jorrit added the following commands to the XML behaviour layer:
	      - 'inventory' to set the current inventory on which further
	        commands will operate.
	      - 'inventory_add' to add an entity to a inventory.
	      - 'inventory_rem' to remove an entity from a inventory.
	- Eric Sunshine added --with[out]-python option to python.m4 to allow
	  users to disable this module if desired.
	- Eric Sunshine fixed python.m4 so that the "Python SDK usable" check
	  is run only if the Python SDK is detected.  (Previously the "SDK
	  usable" check was run even if the SDK was not detected.)
11-Dec-2003
	- Eric Sunshine upgraded the Autoconf and Jam utility files to the
	  latest versions from CS.
	- Jorrit added a new celtool library. At this moment this library
	  contains everything that used to be in plugins/propclass/common
	  (that directory has now been removed): mainly the common code
	  for making property class factories and also code for making
	  parameter blocks.
	- Jorrit modified iCelPropertyClass->PerformAction() to take
	  an iCelParameterBlock instance to pass the parameters instead of the
	  old const char* pointer.
	      - celPcRegion: PerformAction has no parameters.
	      - celPcGravity: PerformAction takes a parameter with id
	        'cel.parameter.force' (a vector3).
	      - celPcTimer: PerformAction for the WakeUp action takes
	        the parameters 'cel.parameter.time' (a long) and
		'cel.parameter.repeat' (a bool).
	- Jorrit replaced the prefix id for property class parameters from
	  'cel.behaviour.parameter.' to 'cel.parameter.'. Modified the
	  'parid()' function the XML behaviour layer accordingly.
	- Jorrit modified the XML behaviour layer to support the new parameter
	  system for PerformAction ('action' command). You can now supply
	  parameters using <par id="parid(...)" value="..." /> inside
	  the <action> block.
	- Eric Sunshine upgraded compiler.m4 from CS's master copy.  This fixes
	  problem where configure's -shared check was failing.
10-Dec-2003
	- Jorrit fixed the physicstest python script so that it works again
	  (converted to the new thing API in CS).
9-Dec-2003
	- Jorrit extended 'call' in the XML behaviour layer so that the entity
	  attribute is now optional. If not given the current entity is
	  assumed.
	- Jorrit added the 'entname' function to return the current name of
	  the entity (XML behaviour layer).
	- Jorrit fixed two bugs in string handling for the XML behaviour
	  layer. One of these bugs could cause crashes. The other could cause
	  wrong computations.
7-Dec-2003
	- Jorrit renamed the string ID's for properties from
	    cel.property.pccamera.bla
	  to
	    cel.property.bla
	  It is redundant and unneeded to specify the property class
	  there.
	- Jorrit implemented a new notation in the XML behaviour layer for
	  'if'. If there is now 'true' or 'false' child or attribute then
	  the child of 'if' is considered a 'true' child.
6-Dec-2003
	- Jorrit implemented cross product and modulo operator for the XML
	  behaviour layer.
	- Jorrit implemented bitwise and, or, xor, and not for the XML
	  behaviour layer.
	- Jorrit fixed operator precedence for the unary operators (! and ~).
	- Jorrit implemented the 'if' function in the XML behaviour layer.
	  Works a bit like the C++ ?: operator. An important difference is
	  that the 'if' function will always evaluate both the true and
	  the false expression.
	- Eric Sunshine imported newer crystal.m4 from CS/mk/automake.  Also
	  made minor aesthetic improvements to configure.ac.
5-Dec-2003
	- Jorrit changed 'testcollide' to be a function in the XML behaviour
	  layer.
	- Jorrit implemented a variant of 'if' in the XML behaviour layer
	  which supports inlined code instead of the requirement to fire
	  seperate event handlers.
	- Jorrit implemented 'destroyentity' in the XML behaviour layer.
	- Jorrit added new 'call' operation to call events in other entities.
	- Jorrit fixed a memory leak in pcbillboard caused by an embedded
	  listener interface. Fixed this by avoiding the embedding.
	- Jorrit fixed a bug in the RemoveBillboard() method of the billboard
	  manager. It crashed.
	- Matze fixed Jam rules so that cel-config builds correctly when
	  building outside of the source tree.
	- Eric Sunshine updated out-of-date mk/autoconf/*.m4 files, including
	  the new crystal.m4 which now published CRYSTAL.INCLUDE_DIR.
	- Eric Sunshine fixed behaviorlayer/python/Jamfile so that it passes
	  only -I$(CRYSTAL.INCLUDE_DIR) to Swig, rather than all of
	  $(CRYSTAL.CFLAGS), which was clearly incorrect, and which caused Swig
	  to complain in some cases.
	- Eric Sunshine eliminated several compilation warnings from the
	  project.
	- Eric Sunshine fixed Jamfile so that it cleans up the generated
	  cel-config script.
4-Dec-2003
	- Jorrit simplified the XML behaviour layer by removing support for
	  multiple arguments for operations and only allowing one. Also unified
	  the type system so that the CEL_TYPE_... enum is now gone and instead
	  CEL_DATA_... is used.
        - Daniel made some minor edits to the documentation and added
          preliminary build instructions for the Windows platform.
	- Jorrit changed the way parameters are passed through SendMessage
	  (from the property class to the behaviour). Instead of the generic
	  iBase there is now a new iCelParameterBlock interface that is
	  implemented by the property class and that the behaviour can use
	  to access the parameters from the message.
	- Jorrit fixed the python and thest behaviour layers to support this
	  new system.
	- Jorrit added celGenericParameterBlock in plugins/propclass/common.
	  This can be used by property class implementations to make it
	  easier to implement parameters.
	- Jorrit added celOneParameterBlock in plugins/propclass/common.
	  This can be used by property class implementations to make it
	  easier to implement parameters when only one parameter is needed.
	- Jorrit changed the pcbillboard property class to use the new
	  iCelParameterBlock system (with parameters 'x', 'y', and 'button').
	- Jorrit changed the pcinventory property class to use the new
	  iCelParameterBlock system (with parameter 'entity').
	- Jorrit changed the pcproperties property class to use the new
	  iCelParameterBlock system (with parameter 'index').
	- Jorrit removed iPcMeshSelectData (which was previously used to
	  pass coordinates from pcmesh to behaviour) and changed it to use
	  iCelParameterBlock instead (with parameters 'entity', 'x', 'y', and
	  'button').
	- Jorrit extended the XML behaviour layer parser with a more generic
	  way to handle functions. Now CEL_TOKEN_FUNCTION is returned and
	  a string hash is used to see which function it is. This is both
	  faster and more general.
	- Jorrit extended the XML behaviour layer with a new 'arg' function
	  to get a parameter from the iCelParameterBlock that is given
	  by SendMessage. By doing that XML behaviour layer scripts can now
	  access the parameters from property classes.
	- Jorrit added a new 'parid' function to the XML behaviour layer
	  which is a conveniance for getting ids for parameters (it adds
	  the prefix 'cel.behaviour.parameter.').
	- Jorrit fixed a bug in the billboard manager. It was not properly
	  sending out the x, y, and button information to the behaviour.
	- Jorrit converted all functions in the XML behaviour layer to be
	  parsed by the new CEL_TOKEN_FUNCTION.
	- Jorrit added 'abs', 'min', 'max', 'sign', 'intpol',
	  'int', and 'float' functions to the XML behaviour layer.
	- Jorrit added a new 'rand' function to the XML behaviour layer.
	  Returns a random number.
	- Jorrit added 'elapsedticks' and 'currentticks' parameters to the
	  pctimer WakeUpFrame message.
	- Jorrit replaced 'arg(' with 'param(' to be more consistent with
	  the rest of CEL where it is called a parameter.
2-Dec-2003
	- Jorrit extended the XML behaviour layer to recognize identifiers
	  as an easier way to make strings consisting only of '_',
	  alphanumeric characters and digits.
	- Jorrit re-enabled cleanup of temporary strings in the XML behaviour
	  layer.
	- Jorrit optimized string handling a bit in the XML behaviour layer.
	  It now attempts to minimize string allocation.
	- Jorrit fixed the pc(entity,propclass) operator in the XML behaviour
	  layer. Removed 'getpropclass' command since that is now obsolete.
	- Jorrit added support for 'id' operator in the XML behaviour layer.
	  This can be used to calculate id's for properties. Also added
	  support for 'propid' which is a short-hand that also adds
	  'cel.property.' in front of the id name.
	- Jorrit changed expresion evaluation so that expressions are evaluated
	  from left to right instead of right to left.
	- Jorrit changed all other operations in the XML behaviour layer to
	  use the new stack based system.
	- Jorrit removed 'getproperty' by adding a 'property' operator to the
	  XML behaviour layer.
	- Jorrit removed the property class resolver system from the XML
	  behaviour layer. This is no longer needed.
	- Jorrit added new 'default' keyword for the XML behaviour layer so
	  that you can now set a default property class to use for the
	  'property' and 'action' operations and also for the 'property'
	  operator.
	- Jorrit added the 'for' command to the XML behaviour layer.
	- Jorrit fixed a bug in parsing of the variable deref operator ('?').
	- Jorrit implemented ==, !=, <, <=, >, and >= operators in XML
	  behaviour layer.
	- Jorrit implemented an optimization in pcproperties so that properties
	  are found faster using a hash. This helps the XML behaviour layer
	  considerably.
	- Jorrit implemented && and || operators in XML behaviour layer.
	- Jorrit implemented 'stop' operation in the XML behaviour layer.
	- Jorrit added iPcTimer->WakeUpFrame() so that you can get a timer
	  that sends a message every frame. The message that is sent is
	  'pctimer_wakeupframe'.
	- Jorrit added three actions to pctimer so that you can control the
	  timer from the XML behaviour layer.
	- Jorrit changed the 'property' command in the XML behaviour layer so
	  that it looks at the type of the property instead of the type
	  of the item on the stack.
	- Jorrit added a new notation to make it easier to access variables
	  from another entity (XML behaviour layer): use ?entityname.var.
	- Jorrit added an optional 'entity' parameter to 'var' so that you
	  can set a variable in another entity.
1-Dec-2003
	- Jorrit added error reporting to the XML behaviour layer (scripting
	  module).
	- Jorrit started a big rework of the XML behaviour layer by using a
	  powerful expression evaluator and a stack. This allows us to use
	  expressions and variables everywhere in the scripts.
	  Not finished and even crashes right now.
	- Jorrit fixed a crash in the XML behaviour layer. It is now again
	  working properly but not all commands are converted to the new
	  system.
	- Jorrit converted 'var' operation to the new system.
30-Nov-2003
	- Jorrit made attribute parsing in the XML behaviour layer and 
	  the celentity addon a bit more efficient.
	- Jorrit enhanced 'getproperty', 'property', and 'action' in the XML
	  behaviour layer so that they have an optional 'entity' parameter
	  to work on properties and actions in another entity.
	- Jorrit optimized iCelPlLayer->FindEntity() with an additional
	  hash to find the entities faster.
	- Jorrit added 'createentity' to the XML behaviour layer.
	- Jorrit added 'createpropclass' to the XML behaviour layer.
	- Eric Sunshine updated very outdated m4 files in cel/mk/autoconf from
	  master copies in CS/mk/autoconf.
	- Eric Sunshine removed platform-specfic checks from configure.ac which
	  duplicated checks performed by CS's configure script.  This
	  duplication is no longer needed since Eric fixed a bug in
	  CS/scripts/cs-config/Jamfile which caused the generated cs-config's
	  --cflags and --cxxflags options to always return an empty string.
	  These options now return proper flags, thus duplicate checking by
	  cel's configure script is not required.
29-Nov-2003
	- Jorrit added support for csVector2 properties to the pcproperties
	  property class, to the generic property system, to the
	  persistance layer, and the XML behaviour layer.
	- Jorrit added support for setting different uv ranges for a billboard
	  so that you can now show part of a texture.
	- Jorrit completed support for 2D vectors in the XML behaviour layer
	  and the celentity addon. It is now possible to set 2D vector
	  properties and variables.
28-Nov-2003
	- Jorrit changed the billboard manager internally so that billboard
	  locations and size are now stored in billboard space instead of
	  screen space. This doesn't change anything from the outside (API)
	  but it gives more accuracy when manipulating billboard positions
	  and sizes.
	- Jorrit fixed billboard image handling so it works correctly in both
	  software and OpenGL renderer. This requires fixes on the CS side
	  too.
	- Jorrit removed some debug info.
	- Jorrit changed billboard space to 307200x307200. The reason for this
	  change is that this number is divisible by 320, 480, 640, 600,
	  800, 1024, 1280, and 1600 and is thus very suitable for representing
	  both horizontal and vertical resolutions. It is also square which
	  is easier to use.
27-Nov-2003
	- Jorrit added support for 'width', 'height', 'x', and 'y'
	  properties to the pcbillboard. Also added persistance for these
	  values and fixed a bug in persistance too.
	- Jorrit fixed a bug in the XML behaviour layer with regards to
	  arguments and some types of those arguments.
	- Jorrit added support for using 'var' for setting a property
	  in the XML behaviour layer (instead of only constant values).
	- Jorrit added support for assigning vars to other vars in the
	  XML behaviour layer.
	- Jorrit changed the XML behaviour layer so that it automatically
	  creates a pcproperties property class if needed (for example, to
	  support variables).
	- Jorrit fixed the billboard manager so that clicking on a scaled
	  image still works correctly and collision detection with scaled
	  images also works correctly.
	- Jorrit added the ability to set size of billboard in percentage
	  relative to size of image.
	- Jorrit changed the billboard manager so that it always works
	  in a coordinate system of 1024000 x 614400. By doing this you
	  can make 2D applications that are fully resolution independent.
	  The values above where chosen because they are divisible by
	  most common screen resolutions so that no fraction is required.
	- Jorrit did some additional corrections to the resolution independent
	  billboard manager.
26-Nov-2003
	- Daniel added first draft of CEL documentation.  Any feedback welcome.
	- Jorrit added first primitive version of TestCollision() function
	  in the billboard manager. Currently only uses the bounding
	  rectangle and ignores transparent areas.
	- Jorrit implemented generic property support for the pcproperties
	  property class.
	- Jorrit added support for setting 'long' properties to the XML
	  behaviour layer.
	- Jorrit added support for setting 'long' properties to the 'celentity'
	  addon.
	- Jorrit implemented <getproperty> in the xml behaviour layer. With
	  this command you can get a property from any property class and
	  set it to a property of the 'pcproperties' property class for that
	  entity.
	- Jorrit added support for property class and entity properties in
	  the pcproperties property class (in addition to long, float, bool,
	  and string). This uses weak references so it should be relatively
	  safe to use.
	- Jorrit extended iCelPropertyClass with methods to get and set
	  generic property class and entity properties. Extended pcproperties
	  to implement those too.
	- Jorrit fixed the python behaviour layer for the latest move of
	  the billboard manager from 'managers' to 'tools'.
	- Jorrit optimized handling of properties in the XML behaviour layer
	  by storing the iPcProperties pointer in the behaviour where the
	  script can get it.
	- Jorrit implemented a new 'var' command in the XML behaviour layer.
	- Jorrit implemented a new 'getpropclass' command in the XML behaviour
	  layer.
	- Jorrit implemented a new 'print' command in the XML behaviour
	  layer.
	- Jorrit implemented a new 'if' command in the XML behaviour layer.
	- Jorrit fixed a bug in the iCelPlLayer->FindEntity(). It would crash
	  if there were entities without a name.
	- Jorrit implemented a new 'testcollide' command in the XML behaviour
	  layer.
	- Jorrit implemented a more accurate TestCollision() routine in the
	  billboard manager. Currently very slow though. It should be optimized
	  with some quadtree structure.
	- Jorrit added SetColor/GetColor to iBillboard so that you can change
	  the color of a billboard.
	- Jorrit extended pcproperties property class with support for colors
	  and vectors.
	- Jorrit extended iCelPropertyClass with functions to get and set
	  color properties in a generic way.
	- Jorrit extended the XML behaviour layer with support for color and
	  vector properties.
	- Jorrit extended the 'celentity' addon with support for color and
	  vector properties.
25-Nov-2003
	- Jorrit fixed the billboard manager so that it will now ignore
	  clicks on transparent parts of the objects.
	- Eric Sunshine upgraded CEL to use scfInterface<> instead of
	  name_VERSION and name_scfGetID().
24-Nov-2003
	- Jorrit fixed all CEL hashes that used const char* as a key.
	  In CS there is now a new csStrKey that safely makes copies of
	  the key so that is now used.
	- Jorrit implemented moving of billboards.
	- Jorrit added 'movable' and 'visible' properties for pcbillboard.
	  Also renamed 'events' to 'clickable'.
	- Jorrit implemented stacking order in the billboard manager. By
	  default the most recently created object will be in front of
	  all others.
	- Jorrit added various stacking functions to iBillboardManager.
	- Jorrit added a CEL_BILLBOARD_RESTACK option to billboards. With
	  this option the billboard will automatically restack to front
	  if it is clicked on. Also added a 'restack' property for
	  pcbillboard.
	- Jorrit fixed a bug in the xml behaviour layer. If the same
	  behaviour scfript was reused for multiple entities then the
	  property classes would not be resolved again.
	- Jorrit changed the billboard manager so that by default the
	  width and height are set to -1. When this size is used it will
	  get the size from the texture the first time it is drawn.
	- Jorrit added some real objects (with keycolor transparency) to
	  xmltest.xml.
	- Jorrit renamed the 'managers' directory to 'tools' so that it is
	  more general.
	- Jorrit enhanced the celentity addon plugin so it can now also
	  be used to set properties for the created property classes.
	  See scripts/xmltest.xml for some examples.
23-Nov-2003
	- Jorrit fixed the 'materialname' property in the pcbillboard plugin
	  by overriding SetProperty() and GetPropertyString() from
	  celPcCommon and handling this property seperately.
	- Jorrit enhanced the celentity addon so that it is now also possible
	  to define entities without a mesh. Just place the 'addon' out
	  a meshobj definition to do this.
	- Jorrit extended the xml behaviour layer so that you can now also
	  set string properties using the <property> command (instead of
	  only float).
	- Jorrit implemented some missing functions in the billboard
	  manager.
	- Jorrit added a billboard entity to the xmltest.xml script.
	  The first billboard is visible! (in the lower-left corner).
	- Jorrit added iBillboardEventHandler interface. Users of the
	  billboard manager can use this to get notified about when a
	  billboard is selected.
	- Jorrit implemented a few additional functions in a billboard
	  (to move and resize it).
	- Jorrit added a new property to pcbillboard property class to
	  enable/disable events.
	- Jorrit implemented select, unselect, move, and doubleclick events
	  for billboards. They translate to similar named property class
	  events for the billboard property class (but with 'pcbillboard_'
	  added in front of the message name (i.e. 'pcbillboard_select').
	- Jorrit extended the xml behaviour layer so that you can now also
	  set boolean properties using the <property> command.
	- Jorrit changed the billboard manager to that the 0,0 location
	  is now top-left of screen.
21-Nov-2003
	- Jorrit added a new billboard manager plugin. This plugin will be
	  responsible (when it is ready) for managing billboards. A billboard
	  is basically a 2D image that can be moved and manipulated in other
	  ways.
	- Jorrit added a pcbillboard property class. This class allows one
	  to attach billboards to an entity. It will use the billboard
	  manager to actually create the billboards.
	- Jorrit added all needed stuff for accessing the new billboards
	  from python.
	- Jorrit notes that all billboard related classes don't yet work.
	  This is work in progress.
	- Jorrit implemented the first two operations in the XML behaviour
	  layer: 'property' and 'action'. These operations can operate
	  on generic property classes that support generic properties
	  and action.
        - Matze added a autoconf detection script for cel.
	- Jorrit changed the API of iBillboard so it now works with materials
	  instead of iImage.
	- Jorrit added an event handler to the billboard manager so it will
	  draw the billboards in the postProcess event.
	- Jorrit added the first drawing code to billboards. Untested.
	- Jorrit added two properties for billboards. The material name
	  property will not work yet.
20-Nov-2003
	- Jorrit added a new iCelBlLayerGenerate interface. Some behaviour
	  layers can implement this interface in addition to iCelBlLayer.
	  If they do implement this interface then it is possible to create
	  new scripts dynamically by using the API in this interface.
	- Jorrit added a new blxml behaviour layer. This is a very simple
	  behaviour layer which will be used for simple games. There is
	  one premade 'bootstrap' script which has an 'load' method that
	  can be used by the bootstrap utility to load the initial level.
	- Jorrit added a new xmlscripts addon which is able to create
	  XML scripts for the bmxlm behaviour layer.
	- Jorrit extended bootstrap so that you can now give the name
	  of a behaviour method and one string argument. This method will
	  be called on the behaviour right after creating the entity.
	- Jorrit added iCelPlLayer->LoadPropertyClassFactory(). This is
	  a conveniance function to check if a property class factory plugin
	  is already loaded and if not try to load it.
	- Jorrit added LoadPropertyClassFactory() to the python behaviour layer
	  and changed celRegisterPCFactory() to use this instead of simply
	  always loading the plugin.
	- Jorrit added scripts/xmltest.xml as a first example 'game' using
	  the new XML behaviour layer. This is still very primitive and
	  can't be called a game really but it will be enhanced soon.
	  To fire up the xmltest.xml example you can use the following
	  command (on one line):
	    bootstrap cel.behaviourlayer.xml bootstrap load /this/scripts
	    	xmltest.xml 
	- Jorrit fixed a bug in the property list of the pcregion property
	  class. It set 5 properties but only 4 are defined. In addition
	  there was a bogus first property set which was immediatelly
	  overwritten.
	- Jorrit added a standard weight property to the pcgravity property
	  class.
	- Jorrit added a 'ApplyPermanentForce' action to the pcgravity
	  property class (works with PerformAction()).
	- Jorrit changed the API of iCelBlLayerGenerate a bit so that it
	  now returns false on failure. Errors are reported using the error
	  reporter as usual.
19-Nov-2003
	- Jorrit made iPcLinearMovement->IsOnGround() use 'const' again.
	  For some reason this was changed in Keith's latest commit but
	  this caused the blpython behaviour layer to not compile.
	- Jorrit performed a very fundamental change to the physical layer.
	  Previously if you created an entity using pl->CreateEntity() you
	  would get back the only reference to that entity. i.e. the physical
	  layer didn't keep a ref and you were responsible for maintaining
	  that ref on your own. This is now changed. The physical layer now
	  maintains its own references. The consequence of this is that it is
	  no longer sufficient to release your reference to get rid of an
	  entity but you have to do a manual pl->RemoveEntity() call.
	- Jorrit fixed smallgame.py for the latest collision detection changes
	  in linmove.
	- Jorrit added a new plugin: 'addon_celentity'. This plugin can
	  be registered as an addon in a map file and you can use it to
	  attach entities to meshes. You can use a syntax like this:
	      <meshobj name=...>
	          ...
		  <addon plugin="cel.addons.celentity" entityname="bla">
		    <behaviour layer="python" name="mybehaviour" />
		    <propclass name="pcsolid"/>
		    <propclass name="pctimer"/>
		    ...
		  </addon>
	      </meshobj>
	  Here are a few remarks:
	      - If you don't specify 'entityname' then the name from the mesh
	        itself will be used.
	      - The 'layer' name will be used to query for a behaviour layer
	        from the object registry. If you don't specify that name
		then the addon will try to get the default behaviour layer
		(registered with name "iCelBlLayer").
	      - You don't have to create a 'pcmesh' as that property class
	        is automatically created.
	- Jorrit changed the pcregion property class so that it no longer
	  creates an entity for a mesh if there is already an entity. This
	  means you can safely use the cel.addons.celentity addon for meshes
	  in your map file. Note that pcregion normally creates a 'pcsolid'
	  property class in addition to the 'pcmesh'.
	- Jorrit added iCelPlLayer->FindEntity(). This is a slow function so
	  only use it when you really need it.
	- Jorrit added scfQuery_iPcGravity and scfQuery_iPcMovable functions
	  to the python behaviour layer.
	- Jorrit also added celGet...() to the python behaviour layer for all
	  property classes. This is similar to the celCreate...() functions.
	- Jorrit changed 'portal_world' and 'smallgame.py' to use the new
	  feature of creating an entity through an addon.
17-Nov-2003
	- Keith separated pc linmove from collision detection code in
	  preparation for making a new linmove pc for sprcal3d sprites.
	  This way they can both share the same CD code. Linmove will
	  auto-create iPcCollisionDetection if one is not supplied to it in
	  InitCD(). If you want one other than the default, supply one here.
11-Nov-2003
	- Keith changed link directories not to be hardcode to his local
	  machine's paths.
9-Nov-2003
	- Chris Matuszewski added SetMaxSelectionDistance() to iPcMeshSelect
	  to allow the user to specify a maximum distance to use for mesh
	  selection.  This value is used in the call to HitBeam in meshfact.cpp.
	  A default max_distance value is set to 100000 in meshfact.cpp.
	  This change allows meshselect to work for objects that are farther
	  than the previously arbitrary distance of 60 units.
4-Nov-2003
	- Chris Matuszewski changed the return value of HandleEvent() in
	  inpfact.cpp to false to allow other entities that may have
	  registered for the same input to process the same event.
	- Added vel and ang vel to CEL persistence so that objects in motion
	  at persist time will be in motion on the receiving end.  Note that
	  position and angle are persisted as part of the mesh/movable and
	  don't have to be persisted here.
3-Nov-2003
	- Chris Matuszewski updated the swig generated python wrapper files.
	- Keith Fulton took out some debugging printfs related to finding
	  meshfact names.
20-Oct-2003
	- acraig fixed some more keyboard event related changes in CS.
18-Oct-2003
	- Jorrit fixed CEL for latest event related changes in CS.
	- Jorrit fixed python plugin in CEL.
01-Oct-2003
	- Matze fixed a problem in cel-config after some include dirs have been
	  renamed
21-Sep-2003
	- Keith made the sector param of pcmesh->MoveMesh() optional, so that
	  position alone can be updated.
18-Sep-2003
	- Eric Sunshine removed a bunch of obsolete and useless
	  SCF_EXPORT_CLASS() invocations from the various plugin modules.
	- Eric Sunshine corrected some spelling errors pointed out by Andreas
	  Busch: proprty --> property
16-Sep-2003
	- Eric Sunshine updated the Autoconf files, Jam files, project files,
	  project templates, etc. to reflect the recent cssys+csutil merge.
10-Sep-2003
	- Jorrit fixed SetMesh() so it returns false on failure.
9-Sep-2003
	- Jorrit fixed CEL for latest iPolygonMesh change in CS.
8-Sep-2003
	- Jorrit fixed CEL for latest iPolygonMesh change in CS.
5-Sep-2003
	- Jorrit fixed CEL for latest CS change (python plugin still broken).
1-Sep-2003
	- Eric Sunshine added ranlib check to configure.ac; needed for MacOS/X.
27-Aug-2003
	- Jorrit moved the apps/celtest/data directory to data so that the
	  Python scripts don't have to fetch stuff inside celtest directory.
	- Jorrit extended the python behaviour layer so that you can now call
	  CreateBehaviour with a path in front of the behaviour name.  That way
	  you can place scripts inside other directories.
	- Jorrit moved the physicstest script inside scripts/physicstest. Run
	  it with:
	    bootstrap cel.behaviourlayer.python scripts/physicstest/physicstest
	  (note: do not add the '.py' at the end!).
	- Jorrit moved smallgame to scripts/smallgame.
	- Jorrit fixed CreateEmptyThing() in pcmesh.  It was broken more than
	  seven months ago without anyone noticing :-)
	- Jorrit reverted an accidental slow-down in the dynmove property
	  class.
	- Jorrit added a visible floor to physicstest.py.
	- Jorrit added a forces system to the new dynmove system.  With this it
	  is possible to add forces to objects that are fired exactly once, for
	  a given time, or for the next frame.
	- Jorrit changed the comments in dynmove to reflect that 'ms' is
	  actually not milliseconds but seconds.  Also changed the 'ms' to
	  'seconds'.
25-Aug-2003
	- Jorrit added first version of the pfdynmove property class. This
	  property class supports ODE for physics. This version works but is
	  not complete yet because it lacks correct persistance.
	- Jorrit added iPcRegion->CreateEmptySector(). This way it is easy
	  to create a region that just represents an empty sector (that
	  will be filled later with other objects).
	- Jorrit fixed the CEL python plugin to a recent CS change.
	- Jorrit also extended the CEL python plugin with the new
	  CreateEmptySector() and the dynamics property classes.
	- Jorrit added iPcCamera functions to add the possibility to clear
	  z-buffer and screen every frame. This is used in case the loaded
	  map itself doesn't specify this. Extended the python plugin with
	  these new functions.
	- Jorrit added scripts/physicstest.py which is a small python script
	  that you can use with 'bootstrap' to test the new dynamics
	  property classes. This script is not really 100% ok atm.
21-Aug-2003
	- Eric Sunshine fixed problems in Makefile.in where SRCDIR was not
	  always being respected.
17-Aug-2003
	- Eric Sunshine made the following changes:
	    - Added missing %cflags%, %lflags%, %libs%, and %delaylibs%
	      invocations to the msvcgen (6 and 7) template files.
	    - Added "/D SWIG_GLOBAL" to blpython project files (reported by
	      Chris Matuszewski <ganamide@yahoo.com>).
	    - Corrected name of meta-info file reference in makefile and
	      project files: plpython.csplugin --> blpython.csplugin (reported
	      by Chris Matuszewski).
10-Aug-2003
	- Keith committed patch by Ondrej Hurt to improve key binding
	  handling.
3-Aug-2003
	- Jorrit removed various usages of csVector.
2-Aug-2003
	- Jorrit fixed CEL for latest CS changes (DeleteIndex instead
	  of Delete).
31-Jul-2003
	- Keith fixed a couple of compiler warnings.
29-Jul-2003
	- Jorrit fixed CEL for latest CS changes (iStrVector removal).
27-Jul-2003
	- Keith fixed CEL to at least compile now that csPArray<> has
	  been removed for some reason.
17-Jul-2003
	- Jorrit fixed a stupid bug in the collider creation of pclinmove.
	  It was using a plane instead of a box for the collider. Thanks
	  to Hudbrog <hudbrog@mail.ru> for spotting that.
	- Keith Fulton added support for csPath following in linmove.
13-Jul-2003
	- Keith fixed crash in new collider code for meshes without
	  associated entities.
11-Jul-2003
	- Jorrit replaced the custom celPolygonMeshCube class with the new
	  csPolygonMeshCube from Crystal Space in the pcmove property class.
	- Jorrit greatly simplified pclinmove by using the new
	  csPolygonMeshCube class.
	- Jorrit renamed csPolygonMeshCube to csPolygonMeshBox.
10-Jul-2003
	- Jorrit changed linmove property class to use a beam that is
	  at 5% height of player to check for portal traversal. That is
	  better than using 50% because using 50% might not work correctly
	  for horizontal portals.
	- Fixed linmove so it no longer falls through the floor when going
	  through a portal. The problem was that CEL uses pcsolid which
	  delays creation of csColliderWrapper until pcsolid->GetCollider()
	  is called. But pclinmove doesn't use pcsolid so GetCollider() was
	  never called. pclinmove will now try to find a pcsolid and use
	  that if present.
9-Jul-2003
	- Jorrit optimized CEL by using the new GetNearbyMeshes() function
	  that was added to CS today. This optimization affects
	  iCelPlLayer->FindNearByEntities() and pclinmove.
	- Jorrit added another optimization to stdphyslayer. The engine
	  from the object registry is now remembered and no longer queried
	  every time it was needed.
	- Jorrit optimized cpersist plugin by remembering VFS.
	- Keith fixed a compile error in linmove.h.
	- Keith added UpdateDR method to linmove.  This function takes a
	  csTicks value and calls ExtrapolatePosition with delta relative to
	  the last DR update ticks value in the PC already.  This function
	  allows a server to synchronize positions across many entities as
	  of a point in time, even when those entities are being updated
	  at all different times by clients.
8-Jul-2003
	- Jorrit fixed a bug in pclinmove where it would register collisions
	  with the same object. Now pclinmove ignores collisions from the
	  object which belongs to the mesh that contains pclinmove.
	- Jorrit fixed a bug in pclinmove where it would not correctly do
	  collisions with hierarchical objects. The problem was that
	  GetTransform() was used instead of GetFullTransform().
	- Jorrit fixed a bug in pclinmove where it would call PlaceMesh()
	  AFTER changing the current sector but BEFORE moving the object to
	  the new position. The result was that the PlaceMesh() function
	  would fail to find all neighbouring sectors.
	- Jorrit clarified the InitCD() function in pclinmove. Instead of
	  'top' and 'bottom' the parameters are now called 'body' and 'legs'
	  to indicate that these are the dimensions of the body and the
	  legs of the colliders. Also added a 'shift' parameter so that
	  you can relocate the collider if the 0,0,0 origin of the actor
	  mesh is not at the bottom-center of the model.
	  Note that this 'shift' feature doesn't work yet! So keep it
	  at 0,0,0 for now.
	- Unfortunatelly all bug fixes above still don't prevent smallgame.py
	  from falling through the floor as soon as a portal is traversed.
7-Jul-2003
	- Jorrit received a patch from Steve Cook (steve.cook1@excite.com)
	  for an AI pathfinding property class. I haven't yet got time
	  to really look at it but I cleaned it up slightly. Still needs
	  a lot more cleanup though. I also seperated the public include
	  file so that you can actually include from it.
	  This is untested code (from my point of view at least).
	- Jorrit did more cleanups to the new AI pathfinding class and
	  also added a small testcase to celtest.
	- Jorrit modified the pcsolid property class so that it use
	  csColliderWrapper to create the collider. That way pclinmove also
	  works with pcregion and other users of pcsolid.
	- Jorrit extended smallgame to use pclinmove correctly. Still a few
	  bugs here and there.
	- Eric Sunshine made the following changes (100% untested):
	    - Added msvcgen facility to project.  It is now possible to
	      generate MSVC6 and MSVC7 project files in an automated fashion by
	      invoking the new `msvcgen' Makefile target.
	    - Moved the .csplugin files out of the root directory and into the
	      specific plugin directory where each one belongs.  Having them in
	      the root directory was incorrect.
	    - Upgraded the makefile so that it copies the .csplugin files
	      alongside the .dll/.so file at build time.
	    - Upgraded the MSVC project files so that they copy the .csplugin
	      files alongside the .dll.
	    - Upgraded Makefile so that it is possible to build the project
	      outside of the source directory.  (This was already possible with
	      the Jam build system.)
	    - Removed Makefile and replaced it with Makefile.in.  Makefile is
	      now generated at configure time.
	    - Fixed clean targets in Makefile and Jamfile to be more thorough.
	      Added distclean target.  (This target, in both Makefile and
	      Jamfile, still misses at least one file, though: the Jamfile
	      hack which is created when building outside the source directory.
	      I don't care for this hack, and would prefer to create Jamfile
	      from Jamfile.in at configure time, but Matze prefers the hack, so
	      I left it alone.)
	    - Fixed formatting of .csplugin files.
	- Eric Sunshine made the following additional changes:
	    - The `msvcgen' Makefile target now passes --xml-protect to
	      msvcgen.pl when building MSVC7 project files.
	    - The cel.sln (MSVC7) and cel.dsp (MSVC6) workspace files are now
	      also generated by the `msvcgen' makefile target.
	- Eric Sunshine relocated cel.sln and cel.dsw back to the root
	  directory (where they were prior to the last change) after figure out
	  a simple way to have the workspace files reside in a location
	  different from the project files, even when building with msvcgen.
6-Jul-2003
	- Jorrit fixed the problem with GetPythonObject(). It now calls
	  Py_INCREF() on the returned python object so that it is
	  reference counted correctly.
4-Jul-2003
	- Jorrit added iCelBehaviour->GetInternalObject(). This slightly
	  dirty function is intended for implementations of behaviour layers
	  so they can get the internal object that represents the behaviour.
	  For example, in case of the python behaviour layer this will return
	  a pointer to the Python object handle (PyObject pointer). This is
	  a rather dirty solutions. Feel free to suggest me cleaner approaches.
	- Using the above function Jorrit added a GetPythonObject() function
	  which you can use from inside Python scripts to get access to the
	  real Python object that belongs with a Python iCelBehaviour.
	  This avoids the global variable 'room' in the smallgame.py script.
	- Jorrit removed the 'name' parameter from celCreateCamera() in the
	  Python behaviour layer. It is not needed.
	- Jorrit added support for the pclinmove property class in the Python
	  behaviour layer.
	- Jorrit added support for the pcinput property class in the Python
	  behaviour layer.
	- Jorrit cleaned up blcel.i a bit.
	- blcel.i: scfQuery_iPcCamera, scfQuery_iPcMesh, scfQuery_iPcInventory,
	  and scfQuery_iPcTimer do IncRef() now.
	- Protected most IncRef()'s in blcel.i with if's.
	- Jorrit fixed blcel.i for pckeyinput and pclinmove.
	- Jorrit added names to the meshfactories in celtest so they are
	  not loaded again all the time.
	- Report: GetPythonObject() is not yet working properly. It causes
	  weird crashes later.
3-Jul-2003
	- Jorrit cleaned up the python plugin a bit.
	- Box in smallgame now has gravity.
1-Jul-2003
	- Jorrit renamed celpython to bootstrap. The idea is that the
	  'bootstrap' tool will be a generic utility with which you can
	  take any behaviour layer plugin and create a basic entity that
	  will execute a behaviour from that plugin. This can be used to
	  fire up a game using CEL.
	- 'bootstrap' now basically works.
	- Jorrit changed the celCreateEntity() function in the blcel.i
	  swig wrapper to use an iCelPlLayer argument instead of an
	  iObjectRegistry. That's a lot more efficient and you can easily
	  get the current iCelPlLayer by using the 'physicallayer_ptr'
	  in python scripts.
	- Jorrit changed a few other celCreate... functions to also accept
	  an iCelPlLayer instead of an iObjectRegistry.
	- Jorrit changed more functions like that. Also renamed all Create
	  property classes to start with celCreate....
	- Jorrit renamed LoadBehaviour() to CreateBehaviour() in python.
	  Also changed the object registry parameter to iCelBlLayer instead.
	- Jorrit added celRegisterPCFactory() to the python behaviour plugin.
	  With that function it is possible to load property class factory
	  plugins if they don't already exist.
	- Jorrit replaced %addmethods with %extends to avoid swig warnings.
	- Jorrit added scripts/smallgame.py which can be used together with
	  bootstrap. Doesn't do much yet.
	- Jorrit removed the code from celCreateCamera (in python behaviour
	  layer) to set the region. This should be done in the python script
	  and not there. Also removed the 'world' parameter since this is
	  no longer needed.
	- The smallgame.py script now loads partsys and displays it.
29-Jun-2003
	- Eric Sunshine replaced the outdated mk/autoconf/progver.m4 with an
	  up-to-date version from the Crystal Space project.  This fixes the
	  Swig version check in the configure script which was failing.
27-Jun-2003
	- Jorrit moved celtest to apps/celtest.
	- Jorrit added apps/celpython. The purpose of this application will
	  be to have a very thin app that only initializes CEL and fires
	  up a python script then. The python script will take over from there
	  and set up the game entities and everything related to the game.
	  Note that this does not work correctly!
	- Matze added Jam rules to rebuild the swig files
	- Eric Sunshine removed several outdated and unused .m4 macro files
	  from cel/mk/autoconf.  This fixes the problem where the Swig version
	  check failed to emit a meaningful result.  The problem was that a
	  much older version of CS_CHECK_PROG_VERSION() in vd.m4 was overriding
	  the newer version in progver.m4.  (Unfortunately, progver.m4 itself
	  is employing bogus sed expressions, so the version check is still
	  inaccurate, but that is a different issue which will be addressed
	  separately.)
26-Jun-2003
	- Jorrit added iCelPlLayer->GetBehaviour() as a convenience function
	  to directly get the behaviour associated with an entity ID.
	- Jorrit performed a huge reorganization of the directory structure
	  used inside CEL itself. Here it is now:
	  	- include
		- plugins
			- stdphyslayer (formerly plimp)
			- propclass (formerly pf dir)
				- ... various property classes
			- persist
				- standard
			- behaviourlayer
				- test (bltest)
				- python (blpython)
		- celtest
	- Jorrit renamed include/pf to include/propclass. This will break
	  all games that use CEL. The change is easy though.
	- Jorrit renamed include/bl to include/behaviourlayer and
	  include/pl to include/physicallayer.
	- Keith fixed up the msvc7 project files to use correct dirs.
25-Jun-2003
	- Jorrit ported pslinmove from the PlaneShift project to CEL. The
	  code is currently mostly unchanged except for a few things:
	    - The code no longer assumes that the mesh is a sprite. It should
	      now work for objects that don't have actions.
	    - It uses the reporter (Report) to report errors instead of
	      printf.
	    - The cheat Warning call is currently disabled because CEL has
	      no alternative for that yet.
	  The code is untested and there are still a few things I'd like to
	  do with it to make sure it is general enough to be used in games
	  other than PlaneShift.
	- Jorrit reports: Conforming to the C++ standard I replaced all NULL
	  with 0 (like was done in CS some time ago).
	- Jorrit fixed scripts/printer.py so that it works again.
24-Jun-2003
	- Jorrit fixed the CEL python plugin to latest CS.
	- Jorrit made celtest use OpenGL by default.
	- Jorrit removed the <name> from the .csplugin files.
	- Matze updated jam rules from CS
20-Jun-2003
	- Jorrit fixed CEL for recent region related CS changes.
5-Jun-2003
	- Keith Fulton fixed a bunch of broken things resulting from the
	  CS SCF changes today.  Thanks to Andrew Craig for figuring out
	  these fixes.
4-Jun-2003
	- Keith Fulton fixed two places in CEL for the new CS iterator
	  functions.
27-May-2003
        - Boyan implemented new iScript interface extension methods
	- Matze updated jam rules and moved over all improvements made in CS.
25-May-2003
	- Jorrit changed pcsolid property class to use GetObjectModel() for
	  the CD mesh instead of the deprecated SCF_QUERY_INTERFACE.
16-May-2003
        - Boyan added celFindNearbyEntities() function
12-May-2003
	- Boyan added some error handlings to blpython and fixed bug in
	  celCreateEntity.
10-May-2003
	- Boyan updated Python plugin to use low level Python API.
09-May-2003
	- Boyan updated blpython plugin:
	   -SWIG 1.1p5 -> SWIG 1.3.19
	   -added scfQuery_iPcMesh
	   -added scfQuery_iPcTimer
06-May-2003
	- Boyan fixed wrong iterator cycle in FindNearByEntities:
	  while (objit->Next ()) changed to while (!objit->IsFinished ()).
30-Apr-2003
	- Matze updated jamrules and autoconf macros to latest CS rules.
28-Mar-2003
	- Fixed Python plugin in CEL for latest CS changes.
25-Mar-2003
	- Fixed Python plugin in CEL for latest CS changes.
14-Mar-2003
	- Jorrit Tyberghein made a change in CS allowing more accurate
	  mesh selection. pcmeshsel property class now uses this.
11-Mar-2003
	- Keith Fulton committed a fix by Andrew Mann to handle regions
	  correctly, changing engine->GetMeshes()->Remove(mesh) to
	  engine->RemoveObject(mesh).
28-Feb-2003
	- Matze Braun fixed cel.cex to not report deps which aren't needed.
	  Esp. -lcsengine isn't needed!
26-Feb-2003
	- Matze Braun added configure to cvs and made the check for
	  CrystalSpace looking for version 0.96 and above
25-Feb-2003
	- Matze Braun fixed jam install rules
11-Feb-2003
	- Release of CEL 0.96r001.
24-Jan-2003
	- Eric Sunshine updated Makefile to work correctly with new -makevars
	  fragments from cs-config which might now contain references to
	  makefile variables such as $(OUT), $(CFLAGS.I), $(LFLAGS.L), etc.
23-Jan-2003:
	- Keith Fulton added a SetID to iCelEntity so it is possible
	  for an external app to override the CS_ID assigned to an
	  entity.  This is necessary when objects across networks
	  have different lifespans, to prevent reuse of the same CS_ID
	  to represent different objects and confusion of the
	  underlying entities.
	- Matthias Braun then reverted this change based on design
	  principles. Jorrit agrees.
	- Jorrit then put back Keith's patch after discussion with Matthias.
	  It seems to be the only fast solution to solve the problem right now.
	  It is a hack though and another solution MUST be found.
	  Personally I feel most for letting NumReg return numbers that
	  are never reused. Perhaps requires some thinking.
21-Jan-2003:
	- Fixed a ref leak on 'view' in the engine property class.
	  The 'new csView' wasn't properly embedded in a csPtr<iView>.
17-Jan-2003:
	- Keith Fulton fixed circular refcount issue which prevented all
	  prop class factories from ever being deleted.
	- Keith Fulton added many specific error msgs for things which
	  could go wrong with CEL persistence loading on the client.
	  Added a Report function to all files involved which should
	  probably be in a libary, but he cannot create the library on
	  on Windows himself.
15-Jan-2003:
	- Fixed CEL for latest CS changes (growing arrays).
	- In the mean time fixed some memory leaks while doing that.
13-Jan-2003:
	- Fixed the python plugin.
07-Jan-2003:
 	- Keith Fulton added a SetReverseAction convenience function to iPcMesh.
05-Jan-2003:
	- Keith Fulton changed iPcCamera to not always require an iPcRegion.
30-Dec-2002:
	- Matze fixed several refcount problems introduced by the change to
	  csRef. But still a leak here :-/
24-Dec-2002:
	- Wouter Wijngaards fixed a small compilation error in pf/mesh/
	  meshfact.cpp, introduced by the separation of Engine and Thing
	  in CS.
01-Oct-2002:
	- Keith Fulton added Yaw (Y-axis) adjustment to iPcCamera.  Yaw,
	  Pitch and Roll together change the camera viewing angle without
	  affecting the LookAt vector.
20-Sep-2002:
	- Patch from Michael Dale Long for improved Python support
		- Added embedded iScript interface to celBlPython.  Now
		  applications can get access to the underlying scripting
		  interface if one is available.
		- Modified CreateBehaviour() so it passes an iCelEntity
		  instead of an iCelEntity * to the behaviour constructor.
		  This frees the scriptwriter from having to wrap the pointer
		  before using it.
		- Added some csQueryRegistry_* functions.  This is to
		  facilitate a Python csQueryRegistry() function that performs
		  CS_QUERY_REGISTRY() type lookups.
		- Added the LoadBehaviour() method to iCelEntity to simplify
		  loading and setting behaviours in scripts.  Note that
		  actions in the behaviour may or may not take affect in the
		  running environment depending on how you run the interpreter.
		- Added celCreate* (i.e. celCreateEntity, celCreateCamera) to
		  simplify creation of these objects in a script.
		- Removed iCelBehaviour::SendMessageV() wrapper and added a
		  wrapper for SendMessage() which excludes the varargs.
		- Added celQueryPC_iPcRegion() to facilitate a Python
		  celQueryPC() function that performs CEL_QUERY_PROPCLASS()
		  type lookups.
		- Added scfQuery_iPcRegion() to facilitate a Python
		  scfQuery() function that performs SCF_QUERY_INTERFACE()
		  type lookups.
		- Added wrappers for iPcRegion, iPcCamera, iPcMeshSelect,
		  iPcMesh, iPcTimer, iPcSolid, iPcGravity, iPcMovable,
		  iPcInventory, and iPcCharacteristics.  Each one has a
		  corresponding celCreate* function.
17-Sep-2002:
	- Fixed CEL for the new csPtr(csRef) constructor in CS.
13-Sep-2002:
	- Did a full smart pointer fix for entire CEL.
20-Aug-2002:
	- MatzeB removed broken automake system and replaced it with a Jam
	  and autoconf based one
19-Jul-2002:
	- MatzeB fixed indentation and an LPVOID issue in engfact.cpp.
	- Readded the firstperson camera mode that I accidently removed
	  yesterday by applying's Anders patch.
18-Jul-2002:
	- Several months ago I received a patch from Anders Stenberg.
	  This patch does the following:
	      - Added the blcel.physicallayer_ptr variable so that python
	        scripts can access the pl more easily.
	      - blpython.i contains lots more interfaces to CEL stuff
	        (entities and property classes).
	      - Getting a description string of a property. Will be useful
	        for stuff like entity editors/viewers (within a level
		editor for example).
	      - Enable the subclass to just "register" a property, bind it
	        to one of its members, and then all handling of
		SetProperty/GetProperty is done "automatically". (Of course
		it can be overloaded if you want some special voodoo. For
		example, you can handle just one property with some special
		stuff, and release it to celPcCommon::SetProperty in all other
		cases.)
	      - pcregion uses the new system described above.
2-Jul-2002:
	- Fixed CEL for the latest CS changes with regards to the _FAST
	  macros.
11-Jun-2002:
	- pcmovable property class now fires a callback with ID
	  CEL_PCMOVEABLE_PROPERTY_POSITION whenever the position is changed
	  in preparation for pclocater.
10-Jun-2002:
	- Added first person camera mode from amin
5-Jun-2002:
	- Added CreateEmptyEntityList() to the pl in CEL.
28-May-2002:
	- Fixed include for polymesh.h.
	- pcmesh property class now fires a callback with ID
	  CEL_PCMESH_PROPERTY_MESH whenever the mesh changes.
22-Apr-2002:
	- Fixed several bad bugs in NumReg:
	    - In Register() a 'memset' was done with only
	      (newsize-listsize) bytes but this needs to multiply
	      by the size of (void*).
	    - 'memset' was also done on the OLD value of 'list' so this
	      could potentially corrupt memory if a reallocation caused
	      in a new pointer.
	    - 'freelistend' points to the first free item in 'freelist'.
	      However the loop in Register() was first doing 'freelistend++'
	      which means there was a gap.
15-Apr-2002:
	- Matze removed some warning printfs
30-Mar-2002:
	- Matze added an extra parameter to pcmesh->SetAction. If resetaction
	  is false like the default it doesn't set the action if it's the same
	  like the current action
26-Mar-2002:
	- Matze added a RemoveEntity callback, that makes it possible for the
	  persistance layer contexts to only keep soft refs to entities
	- Applied a patch from Loic Dachary, it adds autoconf support to cel
	  which brings a nice install and build system (on platforms that
	  support autoconf/automake). He also included the license into some
	  headers that missed it... I just replaced the COPYING file by a
	  LGPL one...
6-Mar-2002:
	- Matze made the internal mapping of persistance (ids from localhost
	  to ids from other host) accessible through some functions in
	  iCelPersistContext. You can now also choose if mapping should be
	  used. By default mapping is performed while loading a file and not
	  while reading one.
5-Mar-2002:
	- Added iPcCamera::GetFollowPos() and GetMode().
	- Matze fixed pckeyinput for latest CS changes
28-Feb-2002:
	- Matze changed persistance to not IncRef entities while reading,
	  everyone who reads an entity with persistance has to IncRef this
	  itself now. On the other hand this solves an issue when multiple
	  persisted things refer to the same entity. Note that this is only for
	  datatbuffers, the LoadEntity function still returns an IncReffed
	  entity.
	- Matze added Clear to persistace context to clear the internal hash
	  tables of the persistance plugin.
27-Feb-2002:
	- Matze fixed a wrong return.
	- Matze removed the persistance Set(int) function.
	- Fixed the python behaviour layer.
	- Added some sanity checks to NumReg code using CS_ASSERT.
	- fixed a bug in camera persistance
26-Feb-2002:
	- improved followmode. It now accepts 2 relative positions:
	    -the position of the camera relative to the mesh
	    -the position of the point the camera looks at, rel. to the mesh
21-Feb-2002:
	- Renamed celData->Set(bool) to SetBool() to avoid problems on
	  platforms that don't have the bool type.
20-Feb-2002:
	- Fixed a bug in celPcRegion::SetWorldFile() it would delete
	  its own copy in some cases.
	- Did some small reformatting of history.txt.
19-Feb-2002:
	- jtarbox added a rotational camera mode a few days back and then
	  changed it so that the distance from the object can be changed as
	  well.
12-Fev-2002:
	- Matze changed order of entity saving/loading. behaviour is the last
	  processed piece now.
20-Jab-2002:
	- Matze changed ref behaviour for Region: Camera is taken ref to
	  region now. This fixes camera loading.
17-Jan-2002:
	- Matze fixed several bugs/cleaned up/commented in ID registry
	- introduced celDataBufHelper class to make the Save/Load functions
	  easier
	- more fixes, persistance at least doesn't crash anymore now
15-Jan-2002:
	- Fixed more of the bugs I introduced and cleaned stuff up alot
	- persistance is working now, but some property classes seem to be
	  buggy
	- reenabled the csMemFile buffer, after fixing a bug in CS
14-Jan-2002:
	- Matze changed persistance plugin, to accept streams thourgh iFile
	  interface.
	- Also changed persistance to use ID's instead of entity names
	- Added some macros that help debugging save/load functions
	- Saving seems to work, while loading fails for some reasons... I
	  suspect a bug in csMemFile (I'll investigate tomorrow), but also
	  when reading files directly from disk something goes still wrong...
7-Jan-2002:
	- Updated CEL for new CS.
2-Jan-2002:
	- Matze added support for ID's:
	     Each Entity is assigned a unique ID now, a list of ID's is
	     stored in the PhysicalLayer now, so this also has the nice
	     effect, that you can check if all entities are properly removed
	     at destruction time.
	- Matze added CEL_DEBUG constant.
31-Dec-2001:
	- The new 'pcgravity2' property class works a lot better now with
	  the new CollidePath() function in CS iCollideSystem. Friction
	  and proper collision response still have to be implemented though.
	- Again improved gravity handling a little.
	- Removed the old celPcGravity and renamed celPcGravity2 to
	  celPcGravity.
	- Renamed iPcGravity::IsOnGround() to IsResting() to indicate if
	  an object is resting.
	- Added iPcGravity::ApplyPermanentForce() and
	  iPcGravity::ClearPermanentForces() to work with permanent forces.
	- Added iPcGravity::SetActive() and IsActive() with which you can
	  activate/deactivate physics handling for that object temporarily.
	- Added iPcGravity::ResetSpeed(). This will leave the forces alone
	  but reset the speed to zero.
	- iPcGravity::ClearForces() will no longer reset the speed.
29-Dec-2001:
	- Philip Wyett updated MSVC project files for CEL.
28-Dec-2001:
	- Renamed 'pcinput_' messages to 'pckeyinput_'.
	- Implemented persistance in pckeyinput property class.
	- Added the first version of the 'blpython' plugin. This is
	  a general behaviour layer for python scripting. It compiles
	  and links but it otherwise not functional.
	- Further work on the blpython layer. It now actually implements
	  iCelBlLayer correctly and also returns iCelBehaviour instances.
	- Added GetName() to iCelBlLayer. Behaviour layers can now have
	  names. This allows CEL to distinguish between different behaviour
	  layers that may be loaded at the same time.
	- Added a registry of behaviour layers to the physical layer.
	- Added GetBehaviourLayer() function to iCelBehaviour.
	- Made the persistance plugin independent from the behaviour
	  layer that is chosen by also writing and reading the name
	  of the behaviour layer. This allows persistance to work correctly
	  if multiple behaviour layers are in memory (and behaviours from
	  various behaviour layers are used).
	- The python behaviour layer plugin is now actually working and
	  being used for two small entities.
	- Started work on a new pcgravity property classes (for now
	  called pcgravity2 until it is working fine and can replace the
	  old pcgravity). Celtest already uses this new property class
	  for a all entities and it seems to work a bit already.
	  Note that it is highly unfinished though!
27-Dec-2001:
	- Added a string registry to the physical layer. This can be used
	  for various things but in the first time it is going to be used
	  for a generic property setter for all property classes. CEL
	  convention on string names will be 'cel.xxx.yyy.zzz'. With 'xxx'
	  equal to the type of string (i.e. 'property'), 'yyy' equal to the
	  scope of the property (i.e. 'pccamera') and 'zzz' the name of the
	  given type (i.e. the property name). An example:
	  'cel.property.pccamera.startsector'.
	- Extended iCelPropertyClass with a number of methods for a generic
	  property setter. This will allow string based scripting languages
	  to access all property classes without requiring knowledge
	  of the SCF interface that is specific to that property class. Of
	  course it will be less efficient but the efficiency loss is solved
	  a bit by using the string registry.
	- celPcCommand already provides empty implementations of all
	  these new classes so that existing property classes don't have
	  to be modified. None of the property classes currently implement
	  the new interface though.
	- Implemented the new property interface in celPcRegion. It now
	  supports the following three properties:
	    cel.property.pcregion.worlddir
	    cel.property.pcregion.worldfile
	    cel.property.pcregion.regionname
	- Added support for csVector3 as a type for properties in
	  iCelPropertyClass.
	- Added a PerformAction() function to iCelPropertyClass which uses
	  the same system as the properties in iCelPropertyClass and allows
	  scripting languages to perform generic actions. Convention for
	  action names is:
	    cel.action.pcregion.load
	  Actions are included with properties in the rest of the API.
	  So you can also perform the following functions on actions (note
	  that these functions have been renamed):
	    - HasPropertyOrAction()
	    - GetPropertyAndActionCount()
	    - GetPropertyOrActionID()
	    - GetPropertyOrActionType() (new function)
	- Added celPropertyActionType enumeration type.
	- Seperated celData and celDataType from persist.h into its own
	  pl/datatype.h.
	- There were already three places where some kind of datatype
	  was defined:
	    - persistance (celData and celDataType).
	    - iPcProperties (CEL_PROPERTY_... define).
	    - The new properties in iCelPropertyClass (type_...).
	  Rationalized this by using the celData and celDataType definitions
	  everywhere. To do this celDataType had to be extended with csVector3.
	- Updated the persistance layer to also support csVector3 directly
	  now (CEL_DATA_VECTOR3). Updated several of the property classes
	  load/save functions to use csVector3 instead of three floats.
	- Added CEL_DATA_ACTION to celDataType. This is not supported by
	  the persistance layer though and only needed for iCelPropertyClass.
	  Added celData->SetAction() to set an action.
	- Fixed a memory leak in the pcinput property class which was
	  not deleting the event handler.
	- Fixed a memory leak in celtest. The actor entity was not added
	  to the room inventory.
	- Changed persistance in pcgravity to use the new CEL_DATA_VECTOR3.
	- Fixed a few memory leaks in bltest.
	- Rationalized the SendMessage names to the convention:
		'pcbla_msgname'.
	  In particular for pcinput this means that some changes are
	  needed. Instead of +run (and similar) it will now be
	  	pcinput_run1 (and pcinput_run0 for disable).
	  This change was done to make the name compitible with scripting
	  language routines.
26-Dec-2001:
	- Added new iPcProperties property class. This is a general property
	  class to store string, float, long or boolean properties.
	  The message prop_setproperty is sent to the behaviour layer when
	  a property is set. The message prop_clearproperty is sent when
	  a property is cleared. The index of the property is given as
	  a parameter.
	- Added SetRectangle() to iPcCamera. With this you can set the part
	  of the screen that this camera will use. Also implemented
	  persistance.
	- Added persistance for the camera mode in iPcCamera implementation.
20-Dec-2001:
	- Matze added cel.cex, which makes cel usable together with cs-config.
16-Dec-2001:
	- Matze fixed a memory leak: pllayer was holding references to
	  factories and these to pl. Now only pllayer holds the ref.
	- Matze added a mode switch to camera property, in follow mode the
	  camera, stays behind it's assigned mesh and even does collision
	  detection.
14-Dec-2001:
	- Matze reports: keyboard input works now, but for some strange
	  reason CS transmits each key multiple times, and on the other side
	  when pressing a key only short it isn't transmitted sometimes...
	- Matze cleaned up celtest a bit.
12-Dec-2001:
	- Added iCelPropertyChangeCallback interface. Using this it will
	  be possible to listen to property changes in all property classes.
	- Extended iCelPropertyClass with methods to remove and add
	  callbacks.
	- Added pf/common directory containing common code for all property
	  class implementation. There is now a celPcCommon class which can
	  be used by a property class implementation to make things easier.
	  This celPcCommon already implements the two functions above
	  to handle the callbacks. In addition it also implements a
	  function to fire a callback.
	- Changed all current property class implementations to inherit
	  from celPcCommon.
	- Nothing is using this callback system at the moment.
	- Matze started work on keyboard input.
10-Dec-2001:
	- Matze added #defines for template Factories, you can now easily use
	  CEL_DECLARE_FACTORY(bla) and later CEL_IMPLEMENT_FACTORY(bla). Also
	  changed behaviour to register exact 1 Factory for each Property
	  class, which reduces the need for all the factory pointers.
		TODO: -Do the same for behaviour factory
		      -change FindPropertyClassFactory to use hash table to
		       speed the thing up.
		      -unreleased instances because some plugins implement
		       multiple components (at least I think it's because of
		       that)
7-Dec-2001:
	- Fixed for latest CS.
20-Nov-2001:
	- Added a minimal test level to make debugging easier.
	  You can enable this minimal test by defining MINIMAL as 1
	  in celtest.
	- Fixed a bad bug in the persistance loader. It was acccidently
	  adding every property class twice to the entity.
	- Fixed a ref count leak on entities in the inventory loader.
	- Fixed a bug in persistance layer which prevented persistance
	  from working properly. It turned out that the entity was not
	  set for the property classes.
	- Fixed a bug in the mesh loader. It would not correctly call
	  DeferUpdateLighting() after loading from the persistance layer.
	- Persistance is now ALMOST working. For simple situations I managed
	  to get it working fully.
	- Implemented correct persistence for pccamera so that the current
	  position of the camera is also remembered.
	- Fixed a crash bug in cel with persistance and inventory.
	  Related to ref counting again.
19-Nov-2001:
	- CS now has a feature to remove an object from the engine in general.
	  The plimp Cache will use that new function so that the extreme
	  hack I made yesterday can be avoided.
	- With some additional CS fixes there are now only two objects
	  (one material and one texture) that leak when celtest cleans
	  up game entity.
	- All leaks are now gone.
	- Philip Wyett updated MSVC project files for CEL.
18-Nov-2001:
	- Debugging with DG_TYPE for 'celEntity'.
	- Added 'c' key to clear game (debugging too).
	- Implemented an extreme hack in the cache. It turns out that you cannot
	  simply remove factory wrappers by doing DecRef() on them. You need
	  to remove them from the engine. I have to find a better solution
	  for this.
16-Nov-2001:
	- Implemented a cache in the physical layer. This cache will hold
	  objects of type iBase and keeps a reference to them. This cache
	  can be used to store pointers to objects that are useful in the
	  game and that you don't want to be removed while the game is
	  in progress even if the object is not used at some specific point.
	  A good example is mesh factories. Even though there may be no
	  mesh object using a particular mesh factory you still do not
	  want to delete the loaded mesh factory. Otherwise there would be
	  a delay when the factory is suddenly needed.
	- 'pcmesh' now uses this cache to store a reference to the factory
	  that is used. In addition every mesh that uses a mesh factory
	  will also increase the ref count. Added CleanCache() to celtest
	  so that the cache will be cleaned if a new game starts. This
	  solves another memory leak with the mesh object factories this
	  time.
	- celEntity (as implemented in plimp) is now also a csObject.
	- Added QueryObject() to iCelEntity.
	- Added more DG_LINK's to link more objects with each other.
	- Fixed a few links now that iCelEntity no longer is an iObject.
15-Nov-2001:
	- Fixed a memory leak in 'pctooltip' and 'pctimer' with event queue.
	- Added lots of DG_... lines to help debugging.
	- Fixed a bad memory leak in pcgravity. It was leaking the list
	  of entities returned by FindNearbyEntities().
	- Fixed huge memory leaks with the property classes caused by
	  the event handlers being embedded interfaces of the property classes.
	  The problem is that the event handlers were being unregistered
	  in the destructor of the property class. But since the event
	  handler was part of the property class and since the event queue
	  increments the reference of the event handler the ref count could
	  never get zero so the property class never got deleted.
	  Fixed this by making the event handlers seperate objects. This
	  means that additional references on them will not cause a higher
	  ref count for the property class.
	- Enabled persistance again (loading). Still crashes though.
	- Remove the region in pcregion::Unload().
	- Fixed another big memory leak in the gravity property class.
	  It was leaking pcsolid instances.
14-Nov-2001:
	- Few changes for debugging using the new graph debug tool in CS.
13-Nov-2001:
	- Modified pcmeshsel property class to work through
	  the pccamera property class instead of using iCamera
	  directly. This also fixes the bug with saving of the
	  pcmeshsel property class.
	- Added an event handler to pccamera. It is now responsible for
	  drawing and moving the camera. celtest no longer contains code
	  for this. In the future it will be possible to say how the camera
	  should move (first person, third person, fixed camera position,
	  user defined movement strategy, ...).
	- Extended pcregion with the ability to initialize a pccamera to
	  a given starting position. Also extended pcregion with the ability
	  to go to a named starting position as opposed to only the default
	  one.
	- 'celtest' no longer has a pointer to the default view. It doesn't
	  even know what entity holds the view or camera.
	- Classic persistance module now writes a marker 'CEL0' in front
	  of the saved file. That makes it easier to recognize saved CEL
	  files.
	- Fixed the crash at exit in CEL by actually fixing a bug in CS :-)
	- Use the reporter for error reporting in classic persistance module.
	  Only for loading at this moment and only for the persistance module
	  itself. The individual property classes do not yet use the
	  reporter to report their errors.
	- Fixed a bug in pcregion loader.
	- Fixed a bug in pcmesh loader. Forgot to save the factory name
	  and properly initialize the mesh.
	- Implemented loading in CEL persistance module. At this moment loading
	  itself seems to work (i.e. it does not crash). However celtest
	  crashes right after loading so I have to investigate why.
	- Fixed a bad bug in pcmesh::SetMesh().
	- Added loading/saving of position of mesh. This doesn't fix the
	  loading problem though. Loading still crashes.
12-Nov-2001:
	- Created new cpersist plugin. This plugin will implement
	  'classic persistance' for CEL. This plugin does not do
	  anything at the moment except compile and register.
	- Philip Wyett updated the MSVC project files for the new
	  persistance plugin.
	- Added GetName() to iCelBehaviour. This is needed to be able
	  to save the associated behaviour name in the persistance layer.
	- Added GetFactoryName() to iCelPropertyClass. This is needed
	  to be able to save the associated factory name in the
	  persistance layer.
	- Worked on persistance a lot now. All property classes now have
	  full support for loading and saving (untested).
	- Implemented saving in the classic persistance plugin.
	  At this moment it doesn't work yet (crashes) and I also need
	  to implement a system to avoid saving the same entity or
	  property class twice or more then once.
	- Added 's' key to save the current world to 'savefile'. Since
	  saving in general does not work yet I advice you NOT to press
	  this key :-)
	- Fixed a bug in implementation of celDataBuffer. It was not
	  properly allocating new entries when the buffer growed.
	- Fixed handing of saving NULL property class or entity. Now
	  a marker is always saved which says what will follow. ENT0
	  is a NULL entity pointer. ENTI is the definition of an entity.
	  ENTR (not used yet) will be a reference to an entity.
	  Similar for property classes: PCL0, PCLI, and PCLR.
	- Fixed a bad bug in inventory saving.
	- The three fixes bug make sure that at least saving doesn't crash
	  anymore. However there is still too much information saved as
	  duplicate entities/property classes are not detected.
	- The current implementation of CEL/persistance assumes that
	  all entities have a unique name. I have to think more about this
	  issue (like having a unique name generation utility or something)
	  but in the mean time I fixed celtest so that the boxes have
	  a distinct name and also fixed bltest so that it only looks at the
	  first three letters of the name to see if an entity is a box (here
	  again we need a different way to detect this, maybe object classes?).
	- Entities and property classes are now only saved once. The second
	  time the same entity or property class comes back in the save
	  tree a reference is used.
11-Nov-2001:
	- Even though persistance is not operational yet I already
	  decided on a redesign. I removed the notion of 'named data
	  entries'. Everything works positional. It is now much simpler
	  and also allows for smaller persistant data. Additionally
	  I added the notion of a serial number for a databuffer. This
	  is useful for testing what version we are trying to load
	  and depending on that either rejecting the load or else trying
	  to convert the old data.
10-Nov-2001:
	- Further work on persistance. Not functional yet.
9-Nov-2001:
	- Fixed CELTEST for latest changes in CS (CreateEnvironment...).
	- Started working on pcregion property class. This property class
	  represents a region in the world.
	- 'pcregion' will automatically create individual entities for
	  all meshes in a world. These entities will get a pcmesh
	  and pcsolid property class so that the collision detection system
	  works nicely. Note that there is a crash at exit in the destruction
	  of this. I have to investigate this later.
	- Changed celtest to use the new pcregion property class. It will now
	  load the partsys level from CS and put the entities there (boxes
	  and objects). Note that there are still several problems.
	  The 'pcmovable' does not yet support moving through portals so
	  don't try to drag an object out of the starting room yet or it
	  will drop through the floor.
	- Fixed a bug in the FindNearbyEntities(). Now it only returns
	  entities for meshes that are actually visible. Without this fix
	  it was very easy for objects to become stuck after too much
	  box/object manipulations. Now it is still not perfect but a lot
	  better already. An object in the box no longer affects collision
	  detection of objects not in the box.
8-Nov-2001:
	- Started work on persistance. Nothing works yet. Created
	  iCelDataBuffer which the persistance system will use to save/load
	  information.
	- Slightly changed prototype of Load() and Save() so that they
	  now expect a pointer to the data buffer on which they must operate.
	- Added stub code for persistance to all property classes.
	- Fixed a bug in the gravity property class which could cause
	  celtest to hang on very fast systems.
	- Added iCelPersistance interface.
6-Nov-2001:
	- Started work on 'pcgravity' property class (in 'pfmove' factory).
	  This property class is an almost exact copy of the movable property
	  class from Dreams Eternal. It implements primitive gravity
	  for objects. It also has an ApplyForce so you can apply a force
	  in any direction.
	- Added 'Move' to iPcMovable which will do a relative move.
	  This routine will also correctly update the current sector if
	  a portal is traversed.
	- Cleaned up celtest a little.
	- Right clicking on a box opens/closes it (that was already the
	  case yesterday). If you now right-click on the box to open it
	  all objects that are in the box will jump out (using a force
	  and gravity).
	- Added a timer property class to 'pftools'. The message
	  'timer_wakeup' will be sent to the Behaviour.
	- The timer is now used by the box so that the entities in the box
	  are thrown out of the box one by one. Gives a nice effect :-)
	- Added a few more objects and boxes to celtest.
	- Note that gravity is not perfect yet. It is rather easy to get
	  everything stuck. It would be nice to have the ability to push
	  objects while dragging them.
	- Removed the now obsolete conf_mingw.mak.
5-Nov-2001:
	- Added a box mesh object for celtest.
	- Made four dummy objects visible. Changed selection code in
	  celtest so that the room behaviour will now control selection
	  and dragging of all other objects.
	- Added conveniance iPcMesh::SetAction() function which will
	  work if the mesh is a 3D sprite.
	- Added 'box' behaviour to 'bltest'.
	- Fixed a bug in 'pcmeshsel' where it would not deselect the entity
	  if follow mode is unset (the default).
	- Added Show(), Hide(), and IsVisible() to iPcMesh.
	- Added iCelPlLayer::GetHitEntity() to find the entity on a specific
	  screen position.
	- Added iPcCamera for a property class representation of a camera.
	- Added 'pfengine' factory with engine related property classes.
	  Currently it only contains 'pccamera'.
	- Added general superclass for all behaviours in bltest.
	- It is now possible to drag objects on the box. If they fit they
	  will be added. It is not yet possible to get them out the box
	  and they will also be added if the box is closed.
4-Nov-2001:
	- Wouter Wijngaards did the following:
	    - CEL makefile now uses the new cs-config --makevars option.
	      This should make the conf_*.maks superfluous.
	    - The makefile is also updated to be an adapted copy of the
	      new template makefile in CS.
	    - Tested on linux, and removed conf_linux.mak.
	    - If it works on mingw too that .mak can also be removed.
	  How to work with the new makefile?
	  Simply update your CS, and copy the new (make csconfig) cs-config
	  script to the cel directory. csconfig.mak depends on the cs-config
	  script, so it should be remade when you next make depend or make all.
3-Nov-2001:
	- 'pcinventory' sends an 'inv_addchild' messages to the entity
	  containing the inventory when an entity is added.
	- 'pcinventory' sends an 'inv_added' messages to the entity
	  that is being added.
	- Also added 'inv_removechild' and 'inv_removed' messages.
2-Nov-2001:
	- Added iPcMesh::CreateEmptyThing() which can be used instead
	  of SetMesh().
	- Changed celtest so that 'room' is now also an entity and uses
	  pcmesh property class for the room walls.
	- Added iCelPlLayer::AttachEntity(), UnattachEntity(), and
	  FindAttachedEntity(). This functionality used to be present
	  ad-hoc in the pcmesh property class but it is generally useful.
	  Using those functions property classes can attach an entity
	  to some iObject (usually an engine object).
	- Changed pcmesh to use the new iCelPlLayer::AttachEntity()
	  functions.
	- Changed celtest to load the pl/bl plugins using CS_REQUEST_PLUGIN
	  so that they are registered to the object registry.
	- Actually implemented the 'global' option in pcmeshselect. I
	  forgot to do that earlier.
	- After adding an object to an inventory it is usually best
	  to call DecRef() as the inventory now holds a reference
	  (unless you also need to have the reference). Changed celtest
	  for this. Unfortunatelly this does not fix the ref leaks in
	  celtest yet.
	- Added iPcSolid which is a property class that is going to be
	  used for collision detection. iPcSolid is implemented by
	  the 'pfmove' factory.
	- Added iPcMovableConstraint and extended iPcMovable so that you can
	  add constraints.
	- Extended 'pfmove' factory with pcmovableconst_cd implementation of
	  iPcMovableConstraint which uses iPcSolid to implement a constraint
	  based on collision detection. This implementation is currently
	  not operational yet.
	- Added iCelEntityList and celEntityList implementation in plimp.
	- Added iCelPlLayer::FindNearbyEntities() which will return a list
	  of all entities within a certain radius of a given position.
	  This function will use the attached entities to find the
	  entities from the engine objects.
	- Partially implemented 'pcmovableconst_cd' so that it actually
	  uses collision detection but it has the following two shortcomings:
	    - Movement either succeeds or fails. There is no partial result.
	    - A path between start and end should be used for collision
	      detection. Now only the end position is checked which means
	      that objects at high speed may actually pass through walls.
	  In practice this limitation means that in celtest when you drag
	  the object, it will only temporarily be blocked by the walls. If
	  you drag further it will go through.
	- Collision detection with 'pcmovableconst_cd' works better in the
	  sense that it is no longer possible to go through walls. A
	  one-triangle collider with the size of the path is used to
	  detect collisions along the movement path.
	- Philip Wyett updated MSVC project files for CEL.
	- Added iPcMeshSelect::SetFollowAlwaysMode(). When this is true
	  move messages will be send whenever the mouse is over an entity
	  regardless of selection.
	- Added a new behaviour class to bltest for the 'room'. Added
	  a new pcmeshselect property classes to the room entity which
	  has follow-always set to true.
	- Added new 'pftools' factory. This will contain general tools.
	  The only tool it now contains is a 'pctooltip' property class
	  for displaying tooltips. This property class is not functional
	  yet.
	- Implemented tooltips.
	- Celtest now shows tooltip for the object over which the mouse
	  rests.
	- Fixed a bug in 'pcmeshsel' when the mouse was over nothing.
1-Nov-2001:
	- Slightly changed the way that csconfig.mak works.
	- Implemented dragging. You can define a plane on which the
	  object will be constrained while dragging. This plane can
	  be defined in either camera or world space giving maximum
	  control.
	- Modified celtest with a demo of this dragging. With left
	  mouse button you will drag to the 0,1,0 plane in world space.
	  This means orthogonal to the floor. With right mouse
	  button you will drag to the 0,0,1 plane in camera space.
	- Added 'pfmove' factory and implemented iPcMovable. At this
	  moment this property class is only a thin wrapper on top
	  of moving an iPcMesh directly but in the future it will
	  be able to contrain movement by using attached
	  iPcMovableConstraint property classes (not implemented yet).
	- Extended iPcMeshSelect so it will by default look for a movable.
	  If that cannot be find it will look for an iPcMesh instead (old
	  behaviour).
31-Oct-2001:
	- Split 'selectmesh' message from 'pcmeshselect' property class
	  'selectmesh_up' and 'selectmesh_down'.
	- Added a lot more control to iPcMeshSelect interface. Now you can
	  indicate if you want 'follow' mode or not. With follow mode the
	  mouse will track the selected object and immediatelly send
	  up/down messages when the mouse leaves/enters the object.
	  Otherwise an 'up' message is only sent when the mouse button
	  goes up regardless of the position of the mouse.
	  Also added the ability to disable up/down mouse events if you
	  don't need them.
	  Added a few other functions that are not yet implemented (dragging).
	- Fixed a missing DecRef() in the destructor of 'pcmeshselect'
	  property class.
	- Optimized 'pcmeshselect' by only registering the event handler
	  for the right events depending on the settings. i.e. don't listen
	  to mouse move events if you are not dragging or in follow mode.
	- Added the ability to control for which mouse buttons you want
	  to use 'pcmeshselect'. By default it will only react on mouse
	  button one. You can use multiple 'pcmeshselect' property classes
	  on one entity to have different behaviour depending on the mouse
	  button.
30-Oct-2001:
	- Renamed iCelBlEntity to iCelBehaviour and made the corresponding
	  changes throughout the project (i.e. CreateBlEntity->CreateBehaviour
	  and so on...).
	- Added iBase* parameter to iCelBehaviour::SendMessage(). So a
	  message from property classes to the behaviour part of an entity
	  now has three parts:
	  	- A message id.
		- An iBase pointer with possible additional arguments
		  for the message.
		- A list of additional strings.
	- Removed several bugs in cleanup of inventory which prevented proper
	  cleanup. In particular RemoveAll() was not right.
	- Extended pcmesh property class so that a csObject is attached
	  to the mesh in the engine with which it is possible to find the
	  entity again.
	- The 'pcmeshselect' property class now sends a 'selectmesh' message
	  to the behaviour. 'bltest' reacts on this message and prints out
	  the selected entity (try clicking on the small object in celtest).
	- Added declarations for FAST SCF queries to include/pl/pl.h.
	- Extended 'pcmeshselect' property class with the ability to switch
	  between 'global' and 'local' selection. Local selection is default
	  and this means that the Behaviour will only get messages when
	  it's own mesh is selected. With global selection the Behaviour
	  will get messages on selection of all meshes.
	- Added a few additional FAST declarations for SCF.
29-Oct-2001:
	- Basic inventory handling seems to work now. Celtest demonstrates
	  (in text form only at the moment) one box entity and four
	  dummy entities. Two of them fit and the two others don't.
	  Some provisions are made for inherited characteristics
	  but this is not fully implemented yet.
	- Added iCelPropertyClassList::FindByInterface() to return the
	  property class implementing some interface. Also added
	  CEL_QUERY_PROPCLASS which is a define to make this easier.
	- Changing of property values is now properly restricted by
	  the parent inventory and the new values are also propagated
	  to the inventory.
	- Inherited characteristics now work. It is possible to modify
	  the characteristic of the contents (i.e. for the NetHack
	  Bag of Holding which reduces the weight of all objects inside).
	- Small optimization on GetInheritedCharProperty(). If factor is very
	  close to 0 it will not ask characteristics of inventory.
	- Fixed 'make clean' target.
	- Completely rewrote the inventory checking system. Now it
	  may be *slightly* less optimal (but only slightly) but it
	  is MUCH more robust and easier to understand. It is also completely
	  safe now. Unless there are bugs in the code there is NO
	  way to have an inventory with contents that doesn't satisfy
	  the inventory constraints:
	      - You are not allowed to change constraints for an
	        inventory while objects are in the inventory that
		violate that constraint.
	      - You are not allowed to add/remove entities to an
	        inventory if that would violate constraints.
	      - You are not allowed to change characteristics of
	        an entity if that would violate constraints of
		parent inventories.
	  If I made no bugs the system should be water-tight.
	- Added a new property class 'pcmeshselect' to the 'pfmesh'
	  property class factory. With this property class the behaviour
	  layer will be notified when a mesh is selected. At this
	  moment this property class works but doesn't send a
	  message to the BL yet.
	- Eric Sunshine enabled CVS update notification via the cel-cvs-update
	  mailing list.
28-Oct-2001:
	- Started work on the 'pfmesh' factory. This factory will support
	  the 'pcmesh' property class so that you can attach a mesh object
	  with an entity.
	- 'celtest' now shows an entity that has a mesh attached to it.
	- Started work on the 'pvinv' factory for inventories. This inventory
	  supports two property classes: 'pcinventory' and 'pccharacteristics'.
	  The 'pccharacteristics' is typically used for entities that are
	  put in the inventory. The entity that has the inventory
	  property class will use the characteristics to see if the object
	  fits in the inventory.
	- Fixed a bug with current constraints not being updated correctly
	  when entities are removed from the inventory.
	- Constraints where not cleaned up at destruction time.
	- Constraints are now also checked when properties change. i.e. it
	  is impossible to change a property when the entity is in an
	  inventory and changing that property would cause the inventory
	  constraints to be invalidated. Not fully implemented yet!
	  We also still have to define hierarchical constraints (i.e. for
	  nested inventories).
	- Philip Wyett created/added MSVC project files for the CEL project.
27-Oct-2001:
	- Updated csconfig.mak with entries for linux. Uncomment the
	  entries suitable for your system.
	- Changed the executable name for celtest to celtst. Otherwise
	  it would be the same as the directory name on linux.
	- Implemented first bl entity in 'bltest'. No functionality yet.
	- Added definition of iCelMessage.
	- Added iCelPlLayer::CreateMessage().
	- Added implementation of iCelMessage to plimp. Unfinished.
	- Changed iCelBlEntity so that targetted messages to an entity
	  no longer use iCelMessage but directly pass the information
	  to the bl entity.
	- Further work on bltest and celtest. A message is now printed.
26-Oct-2001:
	- Added iCelPropertyClassFactory interface. A property class
	  factory is responsible for creation of property classes. Every
	  factory will handle a number of property class types.
	- Extended iCelPlLayer with a number of methods to register and
	  query property class factories.
	- Added include/pf dir which will contain public SCF interfaces
	  for specific property class factories. Added include/pf/test.h
	  which will be a test interface for our test property class
	  factory.
	- Added 'pf/test' dir which will contain the implementation of the
	  'test' factory. This resuls in the third plugin.
	- Added temporary code to celtest so the plugins of CEL are registered.
	  In the (near) future we will define a better solution for this
	  problem on the CS side (removal of scf.cfg).
	- 'celtest' now loads the three CEL plugins (plimp, bltest, and
	  pftest) and uses them. It all seems to work nicely but there is
	  no real functionality yet.
	- Added 'name' parameter to iCelBlLayer::CreateBlEntity().
	- Started adding support for 'printer' behaviour entity in 'bltest'.
24-Oct-2001:
	- Added the very first code for CEL. Today I added:
	    - The include files for PL and BL. These are SCF interfaces.
	    - The start of PLIMP which is the implementation of the PL.
	    - The start of CELTEST which is a test application for CEL.
	  The test application works (i.e. it opens a CS window) but other
	  than that there is nothing functional yet.
	- Fixed a bug in factory definition of 'plimp'.
	- Started work on 'bltest'.
