/*==LICENSE==*

CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011  Cyan Worlds, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

You can contact Cyan Worlds, Inc. by email legal@cyan.com
 or by snail mail at:
      Cyan Worlds, Inc.
      14617 N Newport Hwy
      Mead, WA   99021

*==LICENSE==*/
#ifndef plVersion_h_inc
#define plVersion_h_inc

#include "hsTypes.h"

// RULES:
// Log your change
// Set Minor Version to ZERO when you Bump Major Version
// If you change the minor, see GetChangedCreateables in plVersion.cpp

#define PLASMA2_MAJOR_VERSION	70	// Major Version...every file will need to be reexported
#define PLASMA2_MINOR_VERSION	2	// Minor Version...only files with the specified creatables
									// will need to be reexported

// Don't modify this, it's automatically updated when branches are made
#define PLASMA2_BRANCH_NAME "Main Branch"

class plVersion
{
public:
	static UInt16 GetMajorVersion();
	static UInt16 GetMinorVersion();

	// Pass in a creatable index to get its current version.  Zero means it
	// hasn't changed since the last major version change, anything else is the
	// last minor version it changed at.  This takes into account the version of
	// parent classes.
	static int GetCreatableVersion(UInt16 creatableIndex);
};

/*	Major Log							---Death to those who do not log changes---
	#	Date	Who		comment
	1	5/8/01	Paulg	Added version Number
	2	5/11/01	mf		Changed sortable mesh format by 2 bytes.
	3	5/14/01 Paulg	Index files Location is used for ReadConfig at Client Startup, RoomLoc added to Index
	4   5/21/01 matt	Fixed errant bounding types for physicals (old bad codes will choke)
	5	5/24/01 mf		Added Occluders to the data format.
	6	5/29/01 mf		Purvis changed the sound data format and didn't change the version.
	7	5/3/01	thamer	Cleaned up some object read/write routines
	8	6/12/01	mcn		Obliterated hsGTexture on down. Now we use plBitmaps and plMipmaps (class IDs changed)
	9	6/21/01 mcn		Updated drawable disk format. Forgot a field that made particle systems break when it wasn't there
   10	6/25/01	mcn		Updated plMipmap format. Helps resolve the huge memory issues we were having
   11	6/28/01 mf		Slight changes to material and geometry formats to support projective texturing.
   12	7/02/01 mcn		Changed file format to fix disappearing objects in SceneViewer
   13   7/09/01 bob		Changed file format of plSimpleParticleGenerator to allow mesh generated systems.
   14	7/13/01 thamer	Changed uoid read/write to include clone number
   15   7/20/01 thamer	Changed uoid sequence to support up to 4 player rooms
   16	7/20/01	mcn		Added a second drawable + key to drawInterfaces
   17   7/22/01 bob		Changed file format to have particle systems support material diffuse/opacity animations
   18	7/27/01 mcn		Added stuff to drawableSpans for SceneViewer. Are we ever going to have another non-zero minor version? :)
   19	7/31/01 mf		Did a get and the format had changed but the version hadn't been updated (again). Is this version thing dead?
   20	8/13/01	mcn		Not that I know of. Change to various object formats to support object instancing.
   21	8/20/01 mf		Like you'd know. Revised inter-object dependency connections throughout the five scene graphs.
   22	8/21/01 mf		CoordinateInterfaces keep refs to child SceneObjects instead of child CoordinateInterfaces.
   22	8/21/01	mcn		You hurt my feelings. I bump major version in retaliation. (Also upped max UV count) 
   23	8/24/01 mf		Made runtime lights respect Max's OTM.
   24	8/26/01 mcn		Changed plSound format to support stereo (background music) sounds
   25	9/05/01 thamer  Changed uoid to support 32bit clones
   26	9/14/01	mcn		Added all 12 parameters to the Audio Region component.
   27	9/25/01	mf		Added soft volumes to run-time lights. Breaks any scene with RT lights.
   28  10/03/01 matt    Changed physics format just enough to make everyone reexport everything.
   29	10/9/01 ee		Changed Uoid member types to a new format that can accomodate strings.
   30  10/10/01	mcn		Split diffuse layer colors to static and runtime diffuse colors. Breaks the entire universe and parts of New Jersey.
   31  10/11/01	ee		Activated string usage in uoids -- this version thing is sure not dead now.
   32  10/11/01	mf		Changed format of plSpan. Only breaks scenes with visible geometry. Should that be Minor Version?
   33  10/12/01 cp		changed read/write functions in plAnimTimeConvert.  Breaks all previously exported animations
   34  10/22/01 Colin	Changed format of plBitmap
   35  10/30/01	mf		Change to span format, breaks anything with visible geometry.
   36	11/5/01	mcn		Changed structure of sound classes to be far more intuitive and bug-free.
   37	11/9/01	ee		Just for fun.
   38  11/13/01 bob		Changed file format for plAnimTimeConvert / plAnimCmdMsg / plAGAnim (sense a theme?) 
   39  11/25/01 mf		More sorting info for drawable geometry.
   40  11/29/01 mcn		Fixed sound fade param read/write. Anything with sounds must be re-exported.
   41  12/04/01	bob		More animation file format changes.
   42  12/05/01 mcn		Changes to sound format. Now properties are in a general props field. Also added disable-LOD prop to sounds
   43  12/18/01	cjp		changes to physics system
   44  12/18/01 bob		anim file format.
   45  12/19/01 Colin	anim file format, again.
   46  12/28/01 mf		DrawInterface format change to purge the last of the Opaque/Blending dualism.
   47	 1/2/01	mf		Decoupled the hardware and software skinning vertex formats.
   48 	 1/6/01	mf		Added grey area to Soft Regions (formerly Soft Volumes).
   49   1/17/02 cp		new camera system checked into client and plugins	
   50   1/21/02 Colin	Physics changes
   51   1/24/02 Colin	Animation format change
   52   2/14/02 bob		plAnimTimeConvert format change
   53   2/14/02 matt    made all brains non-keyed. reordering all over the place
   54   3/15/02 cjp		new LOS query types, format change to plHKPhysical	
   55   4/09/02 cjp		more new LOS query types, format change to plHKPhysical, camera type changes	
   56   4/23/02 bob		nuked plSimpleModifier from plAGMasterMod. Changes file format for animation.
   57   5/17/02	Colin	Changed Uoid format for cloning
   58	7/02/02	thamer	Changed synchedOject R/W format to support more LocalOnly options
   59	8/14/02	bob		Anim file format
   60	2/08/03 mf		Changed formats for everything drawable and/or physical. That leaves behaviors, but it's about time for a major version change anyway.
   61	2/18/03 mf		Between my changes and Bob's, we're just not sure what hasn't changed anymore. At least drawables and avatars.
   62	3/30/03 mf		Added LoadMask to plUoid
   63	5/30/03	thamer	optimized Uoid size
   64  10/28/05 jeff	changed plLocation to handle more pages and plUoid for optimization reasons
   65	2/22/06 bob		animation key rewrite to save space
   66   2/27/06 bob		64-bit quaternion anim keys
   67	2/28/06 bob		Anims store UInt16 frame numbers, not 32-bit float times.
   68	3/03/06 bob		constant anim channels (plMatrixConstant, plScalarConstant had no R/W methods)
   69	5/08/06 bob		changed plVertCoder and hsMatrix44::Read/Write
   70	2/12/07 bob		Merged in several registry/resMangaer fixes
*/

/*	Minor Log							---Death to those who do not log changes---
	#	Date	Who		comment
	1	5/8/01	Paulg	Added version Number
	2	5/9/01	mcn		Changed color components of drawableSpans
	0	5/11/01	mf		Dropped back to zero on Major Version change
	1	8/06/01 thamer	Upped the version for mf's anim callback changes.
	2   8/06/01 bob		Changes to particle system read/write. 
	0	8/13/01	mcn		Bumped back to 0 due to major version change.
	1   8/23/01 bob		Added animation controller to particle systems, changing their format.
	0	8/24/01 mcn		Bumped back to 0 yet again.
	1	8/27/01	mcn		Changed how emissive flags are handled on materials.
	2	8/29/01 bob		Changed plAvatarMod file format
	0   9/05/01	thamer	Bumped back to 0 yet again.
	1	9/17/01 matt    Avatar only.
	2	9/24/01 bob		Avatar and sound file formats changed. (For age linking effects)
	0	9/25/01 mf		Reset to zero for major change.
   1	10/7/01 Colin	Format of plResponderModifier and plEventCallbackMsg changed.
   0	10/9/01 ee		Reset to zero for major change.
   1	10/11/01 mcn	Changed sound format. Anything with sounds (including avatar b/c of linking sounds) breaks. Is this a record for # of version changes in one week?
   1	10/15/01 mcn	Added soft volumes to sounds. Breaks anything with sounds. Again.
   2	10/17/01 Colin	Changed format of plAGAnim
   0	10/22/01 Colin	Reset to zero for major change.
   1	11/01/01 bob	Changed format for plAGAnim and plAGMasterMod. Will break avatars without re-export.
   0	11/02/01 mf		Reset to zero for major change.
   1	11/28/01 mcn	Changed meaning of sound volume property. Will work if not re-exported, but will sound wrong.
   0	11/29/01 mcn	Reset on major version change.
   1	12/10/01 bob	Changes to animTimeConvert. Animated materials will need a re-export.
   0	12/18/01 bob	Reset to zero for major change.
   1	1/07/02	 bob	File format change for particle systems.
   0	1/21/02  Colin	Reset to zero for major change.
   1	1/24/02  Colin	File format for responders
   2	1/24/02  mcn	Changed postEffectMod format. Not many people use it though, so only minor version change.
   0	1/24/02  Colin	Reset to zero for major change.
   1	1/28/02	 bob	File format change to avatars for clothing customization.
   2	1/30/02	 Colin	File format change to sit component
   3	1/31/02	 Colin	File format change to logic modifier (all detector components)
   4	2/13/02  Colin	File format change to ladder modifier
   0	2/14/02  bob	Reset to zero for major change.
   1(5)	2/14/02	 mcn	GUI control format changes to support dynamic text layers (the RIGHT way) 
   2(6)	2/19/02	 mcn	Added version field to dialogs, to allow synching with C++ and Python code (just in case)
   7	3/01/02	 mcn	Moved GUI controls to pfGUIColorScheme methods of handling colors/fonts
   8	3/01/02  cjp	changed format of new camera brains, only affects the few using them right now
   10	3/08/02	 mcn	Changed internal format of sounds to facilitate packing them in files later
   11	3/08/02	 mcn	Added a shadow option to GUI color schemes. Also added mouse-over animations to buttons.
   12	3/12/02  bob	Change format of clothing
   13   3/15/02  matt   Changed base class for sit modifier
   0	3/15/02  cjp	Only chris forgot to log it - mf
   1	3/29/02  mf		Added light group support for particle systems.
   2	4/02/02  Colin	Format change for responder modifiers
   0	4/15/02  cjp	Only chris forgot to log it - mf
   1	4/15/02	 mf		Added a parm to partycle systems just for fun.
   2	4/17/02	 cjp	Added new modifier for interface information, changed plMaxNode.cpp.
   0	4/23/02	 bob	Reset to zero.
   1	4/25/02	 mcn	GUI objects no longer fog. Must reexport GUI components.
   2	5/05/02	 mf		Particle system enhancements
   3	5/06/02  matt	Changes to one shot modifier and multistage modifier
   4	5/06/02	 bob	Changes to plArmatureMod and Clothing stuff. For swappable meshes and footsteps.
   5	5/07/02  bob	Changed clothing item file format (again) for text descriptions and thumbnails
   6	5/09/02  mcn	Added sound event capabilities to GUI controls
   7	5/13/02  mcn	Added some new options to GUI knobs
   8	5/14/02  matt	Fix net propagation for animation stages (fading) and generic brains (exit flags)
   0	5/17/02  Colin	Reset for major version
   1	5/21/02	 mcn	Added a channel select option for plWin32Sounds
   2	5/23/02  bob	Added multiple texture layers per element in plClothingItem
   3	5/23/02	 mcn	Added some options to plSoundBuffer.
   4	6/18/02	 mcn	Added some more options to plSound, incl. localOnly flags
   6	6/21/02  mcn	Updated plDynamicTextMap to include an initial image buffer
   7	6/26/02  mcn	Major revision to sound system to support hardware acceleration
   0	7/02/02	thamer	Reset for major version
   1    7/08/02  matt   Format change for animation stages -- added next/prevStage override
   2	7/10/02  bob	Format changes for avatar footstep sounds
   3	7/12/02  mcn	Format change to sounds for EAX effects
   4	7/23/02	 bob	Format change to footstep sounds for more surface options
   5	7/29/02	 mcn	More EAX format changes to sounds
   6	7/29/02	 mcn	Added cutoff attenuation to spot/omni lights
   7	8/01/02	 bob	Format change to clothing items
   0	8/14/02	 bob	Reset for major version
   1	8/19/02	 bob	plClothingItem file format
   2	9/02/02	 bob	plArmatureLODMod file format change for bone LOD
   3	9/12/02	 mf		Making ripples and waves play nice with each other.
   4	9/18/02	 bob	plClothingItem file format... again
   5	9/19/02	 mcn	New GUI control proxy stuff
   6	9/23/02	 mcn	Removed dead sound stuff
   7	9/24/02	 mcn	Sound priority stuff
   8	9/25/02	 mcn	Support for new grouped random sound objects
   9	10/15/02 mcn	Material anim support in GUI controls
   10	10/21/02 mcn	Variable volume support to group sounds. No format break.
   11	10/29/02 cjp	proper python notification of avatar page out & last avatar out plus elevator persistance fix - breaks message format for exclude regions 
   12	10/29/02 mcn	Fixing chris's booboo 
   13	10/29/02 cjp	Changed camera component data format slightly.
   16	11/18.02 cjp	changed camera speed components & objects, don't know where v 14 & 15 went	
   17   12/04/20 matt    New line-of-sight categories; format change for physicals.
   18	12/05/02 mf		Enhanced linefollowmod to play nice with stereizer, and added field to occluder's cullpoly.
   19	12/17/02 matt	Bumped armaturemod, based on strong circumstantial evidenced that I missed something.
   20	12/31/02 matt	New format for animation stages, written by the multistage mod.
   21   01/03/03 matt   Change to sitmodifier.
   22	01/16/03 matt	More simplification for animation stages and generic brains.
   23	01/20/03 bob	Added layer to clothing items for aged skin blending
   24	01/21/03 mf		plLayers now read and write out their shaders.
   25	01/29/03 bob	plMorphSequence read/writes the plSharedMeshes it uses
   27	02/05/03 mcn	Updates to pfGUIButtonMod
   0	02/18/03 mf		Reset for major version change.
   1	02/19/03 bob	Added layers to plClothingItem. Took the opp to cleanup the R/W functions
   2	02/21/03 mf		Added features to dynamic water. No one should notice.
   3	02/24/03 cjp	changed animated cameras - added new commands for controlling them
   4	02/24/03 mcn	Updates to GUI stuff to support, er, new GUI stuff.
   5	03/11/03 bob	Clothing and linkSound format change
   0	03/30/03 mf		Reset for major version change.
   9	04/14/03 Colin	Havok change.  At 9 since mf forgot to bump the version (and Matt did a bunch of undocumented bumps)
   10	04/15/03 bob	Added a footstep surface type
   11	4/18/03	 mcn	Added list of the layers grabbed by a GUI DynDisplay
   12	4/23/03	 bob	File format for plMultistageBehMod, needed for a ladder fix
   13	05/01/03 Colin	Changed how Havok vectors and quats are written
   14	03/30/03 mf		Particle effect enhancement
	0	05/30/03 thamer	Reset for major version change.
	1	06/01/03 bob	Added a flags variable to plSharedMesh
	2   06/06/03 markd  Added NotifyType for GUIButtons
	3	06/07/03 mcn	Added sound groups to physicals
	4	06/24/03 bob	More params for Flocking particles
    5	07/05/03 mf		Particle and footprints working together
	6	07/13/03 bob	Avatar file format
	7	07/31/03 bob	LinkToAgeMsg (which affects responders) and panic link regions
	8	08/21/03 Colin	Removed some stuff from plSoundBuffer
	9	08/22/03 bob	Added info to plClothingItem
   10	09/16/03 bob	Removed stuff in plAnimCmdMsg, which affects responders.
   11	09/18/03 mf		Changed plLoadMask, of which plWaveSet7 is the biggest user.
   12	01/03/04 jeff	pfGUIDynDisplayCtrl now stores material as well as layer information
!! 11	02/10/04 mf		Dropped back a version, to reduce patch size for Expansion 1.
   12	03/12/04 bob	New stuff in Swim Regions
    0	10/28/05 jeff	Reset for major version change
	1	11/28/05 jeff	GUI text boxes can now pull strings from the localization mgr
	2	12/01/05 jeff	pfKIMsg can now handle unicode strings
	3	02/02/06 adam	modified plDynamicEnvMap as a part of back-porting planar reflections from P21
	0	02/22/06 bob	Reset for major version change
	1	04/12/06 Colin	Changed physical format
	0	05/08/06 bob	Reset for major version change
	1   05/16/06 markd  Changed physics format to include boxes
	2	06/26/06 jeff	Changed coop brain format so book sharing works again
	3	12/05/06 bob	Avatar uses a render target instead of a plMipmap.
	4	01/16/07 bob	Still does, it's just not created at export.
	5	01/24/07 adam	Changed plAGMasterMod so one can be set as a group master in grouped anims
	0	02/12/07 bob	Reset for major version change
	1	03/29/07 jeff	Changed plLoadAvatarMsg and plArmatureMod to be more flexible
	2	06/28/07 jeff	Changed plAvBrainHuman format to store whether it's an actor or not
*/

#endif // plVersion_h_inc