Spring change log

0.79.1:
 -> 2292 files changed, 149700 insertions, 290245 deletions

0.78.2.1:
 - set MaxSpeed to 20 on (test)singleplayer
0.78.2:
 - units trying to stay in LOS of a target account for mip levels
 - cob: made modelpiece mapping case-insensitive
 - initialize relPos in EmitSfx
 - fix for a fix in GetEmitDirPos
 - planes that are being refuelled aren't able to fire anymore
 - players who didn't choose a start position start in their ally box
 - add gamemode 3 (no game over) and make it the default in non-AI non-script.txt games
 - removed luabind + lua-startscripts
 - stunned planes shouldn't keep repair pads reserved
 - always apply a miniscule amount of impulse when a unit is damaged
 - StartPosSelector now unloads itself when game is started without sending start positions.
 - fixed refraction=2, disabled endless ocean for maps that don't show any water at the start of the game
Lua:
 - gl.Texture() can now load the textures of s3o features, syntax is gl.Texture('%'..(Game.maxUnits+featureDefID)..(':0' or ':1'))
 - added a new (unsynced) callout Spring.SetWaterParams, it needs cheating enabled and allows you to edit the mapwater settings ingame
  - add an GetUnitTransformMatrix unsynced callout (handy for shadow algs)
0.78.1.1:
 0.78.1:
(notice the new version number scheme, its MAJOR (0.78) - MINOR (1))
 - do not force useFPShadows to true unless they are supported (to prevent crashes during map-loading)
Engine:
 - use %CSIDL_LOCAL_APPDATA%/springsettings.cfg (e.g. \Users\<user_name>\AppData\Local\) to store settings instead of registry
 - use SSE instead of X87 for FP-calculations
 - if in Choose ingame startposition mode its possible to play a map with more players than startpositions
 - fix random start positions not being random
 - fix area-attack for aircraft (#1144 again)
 - make planes bobble in place gently by default, and make hoverfactor work as intended
 - Added new collision volume types: sphere, footprint.
 - Units/features with no collision volume defined get 'footprint' type by default now, this restores the 0.76b1 behaviour as default
 - Gave COB function BlockShotX a third parameter, userTarget, uses the engine's hasUserTarget value, that seems to reflect when unit has an attack order
 - The protection ring shows up for non-stockpile interceptors
 - don't draw the terrain if curMaxHeight<0 and voidwater
 - added Spring.GetLastMessagePositions() (returns the 10 last message positions)
 - moved Spring.GetDrawSelectionInfo() LuaUnsyncedCtrl -> LuaUnsyncedRead
 - moved Spring.GetSoundStreamTime() LuaUnsyncedCtrl -> LuaUnsyncedRead
 - added a 2nd return value to Spring.GetSoundStreamTime() (total sound stream length in seconds)
 - Made it possible to specify start positions in map with LUA .smd file
 - Immobile Builders doesn't put factories on patrol and doesn't give a stop order
 - Doesn't just crash by design anymore after something goes wrong.
 - Added API GetNextError, can be used to get error queue (currently limited to 1 error)
 - added SetSpringConfigFile(char*): reinitialise config handler to use the provided path
 - added char* GetSpringConfigFile(): return the currently used path to the config file
 - Deprecated APIs:
   - GetCurrentList
   - AddClient
   - RemoveClient
   - GetClientDiff
   - InstallClientDiff
   - IsUnitDisabled
   - IsUnitDisabledByClient
 - Removed all code supporting those functions.
 - These deprecated functions pop up MessageBox once on windows to nag lobby devs.
 - Use engine's logOutput, still writes to unitsync.log (overwrites, doesn't append)
 - ProcessUnitsNoChecksum is now identical to ProcessUnits.
 - ProcessUnits now returns 0 immediately (but should still be called in loop until it returns 0, in case it's changed sometime later)
 - Fix groups.ini being overwritten by installer
0.77b5
 - check if common unitsync users are running, abort installation if any is found
 - make the orbit-controller actually do something on win32
 - make the orbit-controller speeds configurable
 Engine:
 - new fbi tag: bankingAllowed - only affects hoverAttack=1 units; controls if the aircraft can bank.
 - fbi tag upright now affects gunships
 - fix CAirMoveType using an uninitialized variable (maxSpeed)
 - fix Aircraft fuel not working properly on units with multiple weapons
 - fix SendLuaMsg
 factories switching their yardmap to fully-blocked when a unit is present inside (so units don't getstuck inside)
 - fixed map defined detailtex
 - fix LUA Spring.GetTeamResources does not return "received" for one player on each team
 - added EngineOptions.lua to springcontent.sdz, this contains the default engine options for backward compatibility
 - GetModOptions unitsync call parses both EngineOptions.lua and ModOptions.lua, and returns combined list of options
0.77b4:
 Engine:
 - fix attacking gaia units
 - Made gunships (and possibly other units too) point their noses at the midPos of their target instead of the pos, the old behaviour could cause trouble with units where midPos and pos differ much.
 - added crashDrag tag (float, default 0.005) to fighter/bomber planes, when the plane is crashing it uses this drag instead of the automatically calculated drag it uses when flying. The calculated drag is no longer used when crashing, even if no crashDrag tag is present in the unit fbi
 - gameslowdown triggers at higher CPU usage and is limited to half the userspeed
0.77b3:
User Interface
 - added a simple Orbit-Camera controller
       META-key + LMB + drag ==> alter elevation, rotation
       META-key + MMB + drag ==> pan up/down/left/right
       META-key + RMB + drag ==> zoom
0.77b1, 0.77b2
User Interface:
 - all commands are prefixed with '/' instead of '.' (".cheat" becomes "/cheat", etc.)
 - Added /mapmarks [0|1]
 - Added /allmapmarks [0|1]
 - Added /forcestart command
 - Added /ally teamID [0|1] (Ingame alliances)
 - Added /commands (shows all registered commands in the console)
 - whisper private messages to any other player ingame (excluding spectators) by typing "/w Playername Your secret message"
 - Added new camera controller: SmoothCamera
   behaves like overview controller, but feels much smoother
 - Added possibility to specify files that should be excluded from Spring's
   archive checksumming routines ('springignore.txt').
 - Added commandline resolution change:
   ./spring -xresolution 800 -yresolution 600
 - Added /unitreplyvolume [0.0-1.0]
 - Added /hardwarecursor [0|1]
 - Added /minimap drawprojectiles [0|1]
   (you can turn off drawing of projectiles on the minimap now)
 - Added /grounddecals [0|1]
 - Added /movewarnings [0|1]
 - Added /globalLOS [0|1] (needs cheats on)
 - Added the /luamoduictrl [0|1] command. Enables LuaRules/LuaGaia access
   to many LuaUI callins/functions.
 - Added ground rendering detail factors:
   GroundLODScaleReflection
   GroundLODScaleUnitReflection
   (GroundLODScaleRefraction unused atm)
 - Added TextureLODBias to settings (global mipmapping bias)
 - Added CompressTextures to settings (it compress textures on runtime)
 - Added UsePBO to settings (enables PixelBufferObject usage for smf texture loading)
 - Added CamModeName as an alternate for CamMode
   (should still be backwards compatible for settings programs)
 - Added SPRING_DATADIR variable on linux
 - Added option "AtiHacks" to settings. This fixes an issue with severe
   display corruption during building, on ati drivers, where multiple
   colored lines criss-cross the screen. It also fixes issues with the
   new texture mipmap generation.
 - You can now cycle through the last 10 message positions with F3.

Spring Engine:
 - multithreaded avi-generator
 - new water renderer: bumpwater ("/water 4"), pretty and fast 
 - Functionality of Sensors.tdf and Particles.tdf moved to modrules. removed Sensors.tdf or Particles.tdf
   Transfers resources.tdf to resources.lua, and resources_map.tdf to resources_map.lua.
   Sidedata.tdf -> sidedata.lua
   icontypes.lua
   changed SideData 'commander' tag to 'startUnit'
   Replaced 'messages.tdf' with 'messages.lua'
   modinfo.tdf --> modinfo.lua
   ArchiveCacheV6.txt --> ArchiveCacheV7.lua
 - Add 'springcontent.sdz' as the last dependency for all primary mod archives
 - Custom collision volumes for Units and Features
 - you can ally / unally other teams ingame using the "/ally [teamnumber] [0|1]" command (needs to be activated in lobby)
 - Made the groundplate decals follow their parent building's facing.
 - Allow modnames (e.g. "OTA Content") in dependX tag (modinfo).
 - Removed 50% capture progress after an unit got captured.
 - Made units transfer their speed to their wrecks.

 - submarines can now travel directly underneath surface vessels and floating obstacles
   (and conversely; ships can move across underwater objects), EDIT your mod's MoveInfo
   entries so that the classes used by submarine-style units have "subMarine=1;" set if
   you want to enable this fully
 - Increased weapon limit per unit to 32.


 - Added the following new tags to modrules.{lua,tdf}
   - repair.energyCostFactor
   - capture.energyCostFactor
   - resurrect.energyCostFactor
   - reclaim.unitEnergyCostFactor
   - reclaim.featureEnergyCostFactor
   - reclaim.unitMethod
   - reclaim.unitEfficiency
   - reclaim.allowEnemies
   - reclaim.allowAllies
 - Allow any key binding to a CMDTYPE_ICON command to use the 'queued' keyword
   (except for build and stockpile commands, which already have special handling)
 - Keep units in various situations from deciding to attack units they 
   shouldn't (noChaseCatagory, neutral, under water without water weapons).

Units & Weapons:
 - Added canFireControl unitdef tag.
- Fixed the stop-turn-move-stop-turn behavior for ground units (new udef tag, turnInPlace) 
 - Added maxRepairSpeed tag for builders. Limits the rate a con swarm of any
   size can repair a single target.
 - Made accuracy, sprayangle and similar tags work for starburst missiles.
   The inaccuracy is applied when the missile turns toward its target.
 - Added capturable tag.
 - Implemented 'y' value for yardmaps which means this square is not blocked.
 - Have fighting, patrolling and guarding aircraft and guarding ground units
   follow noChaseCatagory.
 - Added per-weapon highTrajectory tag (int, default 2). It acts like the unit
   tag, 0 is always low trajectory, 1 always high and 2 uses the unit's setting
   (whether the unit uses a switch or fixed setting).
 - Added impactOnly weapon tag (bool, default false), if set the weapon does damage
   by colliding with units instead of causing an explosion (the CEG will still run)
   to avoid the shortcomings of small AOEs. It's only implemented for projectile weapons
   so far.
 - Custom collision volumes:
   - collisionVolumeType (either: "ellipsoid","cylT" where 'T' is one of {X, Y, Z}, "box")
   - collisionVolumeScales (float3)
   - collisionVolumeOffsets (float3)
   - collisionVolumeTest (0: per-frame hit detection, 1: raytraced)
   - all these tags are the same for Features
 - Added shieldRechargeDelay weapon tag (float, default 0). The delay is the number
   of seconds the shield won't charge after being hit (kinda like the idle autoheal
   for hitpoints)
 - Added 'sonarStealth' unitDef tag.
 - Added new stockpileTime weapondef tag. It allows seperate reload and stockpile
   times for stockpile weapons.
 - Allow for square metal extraction areas (use the new extractSquare unitdef tag).
 - Added moveState and fixed fireState unitdef tags.
 - Added strafeToAttack tag. Moving sideways when in range but not shooting optional
   behaviour, the behaviour fails if the unit just takes its time for aiming (or
   cannot shoot at all) or has any other reason not to shoot.
 - Added avoidNeutral (targetting) and collideNeutral (projectiles) weapon tags.
 - Added verticalSpeed (float, default: 3.0) unitDef tag  for non-fighter/bomber
   planes to define the speed of takeoff and landing (or loading).
 - Made missiles obey burnblow=1 (existing tag), the missile will explode in midair
   instead of turning away or falling down when its flighttime expires if the tag is set.
 - Added the 'customParams' table to both featureDefs and weaponDefs
   (accessible via the lua FeatureDefs and WeaponDefs' tables).
 - only add ".wav" extension for unitdef sounds if it is missing
 - Made MeleeWeapon obey impulseFactor.

Maps:
 - Maps have their own resource_map.lua/resource_map.tdf now.
 - converted map config scripts to lua format (LuaParser / MapParser)
   - MapOptions.lua is now handed the 'Map' table information as well
     (allows one to write a generic MapOptions.lua file that accesses
     the SMD/SM3 files to retrieve the defaults)
   - the SM3 format is yet to be converted to the lua format
     (but its MapInfo information is)
 - added SMF height overrides in the SMD file, example:
    smf = {
      minheight = -100.0f,
      maxheight =  200.0f,
    }
   (note:  these values can be changed by MapOptions)
 - new water tags (mostly used by the BumpWater renderer):
  - shoreWaves           (true)
  - forceRendering       (false)
  - ambientFactor        (1.0)
  - diffuseFactor        (1.0)
  - specularFactor       (1.0)
  - specularPower        (20.0)
  - diffuseColor         float3(1.0, 1.0, 1.0)
  - specularColor        float3(light.groundSunColor)
  - fresnelMin           (0.2)
  - fresnelMax           (0.8)
  - fresnelPower         (4.0)
  - reflectionDistortion (1.0)
  - blurBase             (2.0)
  - blurExponent         (1.5)
  - perlinStartFreq      (8.0)
  - perlinLacunarity     (3.0)
  - perlinAmplitude      (0.9)
  - foamTexture
  - normalTexture
  - numTiles
  - caustics (texture table)

COB:
 - Added new COB get constants MIN (131), MAX(132) and ABS(133).
 - Added the SONAR_STEALTH (108) COB get/set parameter

LUA changes:
 - Added 'teamcolors.lua' to the installers
 - Renamed 'gui.lua' to 'luaui.lua'
 - Removed LuaCob, and redirected Cob2Lua calls to LuaRules
 - removed the following compatibility defines from luaconf.h
   (can break compability with old lua scripts):
    LUA_COMPAT_GETN
    LUA_COMPAT_VARARG
    LUA_COMPAT_MOD
    LUA_COMPAT_LSTR
    LUA_COMPAT_GFIND
    LUA_COMPAT_OPENLIB
 - Moved most of the LuaUI call-outs into LuaUnsyncedRead
   and LuaUnsyncedCtrl. The LuaUnsyncedCtrl call-outs require
   that the modUICtrl variable be enabled for gadget scripts
   to use them.
 - Moved most of the LuaUI call-ins into LuaCallInHandler and
   LuaHandle. The moved call-ins require that the modUICtrl
   variable be enabled for gadget scripts to receive them.
 - Updated included gadgetHandler
 - Removed unwanted/confusing widgets.
 - fonts.lua can load fonts from the VFS
   (and will create LuaUI/Fonts/ if it does not exist)
 - Removed the unused CommandDesc 'hotkey' member
 - Renamed CommandDescription's  'onlyKey'  to  'hidden'
 - lua scripts now get first crack at all mouse events
 - Treat SDD file sizes as dynamic, so that lua scripts can
   be reloaded while dev'ing without having file size mismatches
   (LuaRules, LuaGaia, mod widgets, etc...)
 - Added some new constants to the lua Game{} table.
 - Added the dynamic HeightMapTexture
  - FLOAT32/LUMINANCE format, NEAREST/NEAREST filtering
  - can be accessed by lua scripts using '$heightmap'
  - can be disable by clients with 'HeightMapTex=0' (config parameter)
 - Added multiple new callins:
   - UnitEnteredWater(unitID, unitDefID, unitTeam)
   - UnitEnteredAir(unitID, unitDefID, unitTeam)
   - UnitLeftWater(unitID, unitDefID, unitTeam)
   - UnitLeftAir(unitID, unitDefID, unitTeam)
   - PlayerChanged(playerID)  (player changed team or spectating state)
   - TeamChanged(teamID)      (team changed allyteam, not useful yet)
   - UnitCommand(unitID, unitDefID, unitTeam, cmdID, cmdOpts, cmdParams) (note that cmdOpts is a number)
   - UnitMoveFailed()
   - MoveCtrlNotify(unitID, unitDefID, unitTeam, data)
     - currently called with data = 1 if the unit hits the ground and stops
     - return true to disable the unit's MoveCtrl
   - ProjectileCreated(projectileID, projectileOwnerID) (arg #2 is -1 if no owner)
   - ProjectileDestroyed(projectileID)
   - GamePreload() (Called at the end of the loading process)
   - GameStart()   (Called when the game is about to start)
   - TerraformComplete(UnitID, UnitDefID, UnitTeam, BuildUnitID, BuildUnitDefID, BuildUnitTeam)
     (it gets called after the terraforming for a construction is complete (once
      per terraforming builder), the return value is whether the con should stop
      building.)
   - DrawGenesis()
     - called immediately following Update()
     - called even when the game window is minimized
     - modelview and projection matrices are identities
     - can be used to update GPU-side physics simulation
     textures and custom per-unit textures
   - a real ViewResize() call-in
 - Added the unicode values to the lua KeyPress() and KeyRelease() call-ins
 - Replaced Spring.GetMouseMiniMapState() with:
    Spring.GetMiniMapGeometry() ->
      posX, posY, sizeX, sizeY, minimized, maximized, <false | "left" | "right">
 - Changed the GetUnitNearestEnemy() lua call-out to:
               GetUnitNearestEnemy(number unitID[, number range[, boolean useLos=true]])
 - Added geometry shader support to LuaOpenGL
 - Added Spring.ValidUnitID(number id)    -> boolean
 - Added Spring.ValidFeatureID(number id) -> boolean
 - Added Spring.GetUnitIsDead()
 - Added Spring.GetModUICtrl()
 - Added Spring.GetViewGeometry()   -> sizeX, sizeY, posX, posY
 - Added Spring.GetWindowGeometry() -> sizeX, sizeY, posX, posY
 - Added Spring.GetScreenGeometry() -> sizeX, sizeY, posX, posY
 - Added Spring.IsAboveMiniMap(x, y) -> boolean
 - Added Spring.GetUnitLastAttacker()
 - Added Spring.GetUnitFuel()
 - Added Spring.SetUnitFuel()
 - Added Spring.GetUnitSensorRadius(unitID, <type>)
 - Added Spring.SetUnitSensorRadius(unitID, <type>, radius)
 - new projectile call-outs:
     Spring.GetProjectilePosition(projectileID) -> px, py, pz
     Spring.GetProjectileVelocity(projectileID) -> vx, vy, vz
     Spring.SetProjectilePosition(projectileID, px, py, pz) -> nil
     Spring.SetProjectileVelocity(projectileID, vx, vy, vz) -> nil
     Spring.SetProjectileDetonate(projectileID) -> nil
 - added the GL evaluator functions to the lua GL interface
   (note the gl.EvalEnable() and gl.EvalDisable() can only be
   called in a gl.Eval(func) block).
 - Added Spring.SetUnitCollisionVolumeData(id, xs, ys, zs, xo, yo, zo, vtype, ptype, paxis)
     and Spring.SetFeatureCollisionVolumeData() (same args)
 - Added Spring.SetLastMessagePosition(x,y,z)
 - Added Spring.SetUnitLosMask(unitID, allyTeamID, number | table) -> nil
     and Spring.SetUnitLosState(unitID, allyTeamID, number | table) -> nil
 - Added Spring.FixedAllies()
 - Reverted the GetPositionLosState() to its original configuration (no air los)
 - Added Spring.IsPosInLos()
 - Added Spring.IsPosInRadar()
 - Added Spring.IsPosInAirLos()
 - Added Spring.PauseSoundStream(), Spring.GetSoundStreamTime(),
         Spring.SetSoundStreamVolume(number)
 - Added burst, burstRate and projectiles to Spring.SetUnitWeaponState
 - Added Spring.AddUnitIcon(string name, string texture
                            [, number size[, number distance[, bool radiusAdjust]]])
         Spring.FreeUnitIcon(string name)
 - Added Spring.SetUnitSonarStealth()
 - Added Spring.SpawnCEG(tag, px, py, pz, dx, dy, dz, rad, dmg) synced callout
 - Added Spring.SetHeightMapFunc(lua_func,arg1,arg2,..),
         Spring.AddHeightMap(x, y, h) -> `final height`
         Spring.SetHeightMap(x, y, h [,t]) -> `absolute value changed`
 - Added Spring.ExtractModArchiveFile(path) callout
   For example, Spring.ExtractModArchiveFile("sounds/boom.wav")
   will create a directory "sounds/" and extract "boom.wav" to it.
 - Added Spring.GetUnitPiecePosDir(unitID, piece) -> posx,posy,posz, dirx,diry,dirz
 - Added Spring.GetUnitVectors(unitID) -> {front_x,front_y,front_z},{up_x,up_y,up_z},{right_x,right_y,right_z}
 - Added Spring.GetUnitWeaponVectors(unitID,weaponNum) -> wpos_x,wpos_y,wpos_z, wdir_x,wdir_y,wdir_z
 - Added gl.ActiveShader(shaderID, function(), ...) (safe way to set shader uniforms in non-drawing code)
 - Added gl.DepthClamp(bool)  (not always available)
 - Added gl.UnsafeState(number, [bool reverse, ] function, ...)
   (glEnable() / glDisable() for unknown states; considered 'unsafe')
 - Added Occlusion Queries:
   - Added gl.CreateQuery() -> query
   - Added gl.DeleteQuery(query)
   - Added gl.RunQuery(query, function, ...)
   - Added gl.GetQuery(query) -> number
 - Added the following unsynced query call-outs:
   - Spring.GetUnitLuaDraw()
   - Spring.GetUnitNoDraw()  
   - Spring.GetUnitNoMinimap()
   - Spring.GetUnitNoSelect()
 - Added the fbo 'readbuffer' parameter
 - Added gl.ReadPixels(x, y, w, h [,format])
 - Added StencilTests:
   NOTES: The engine expects that the stencil buffer be left in a
   state of all 0's when a task has finished with it. This
   is not enforced by the lua backend.
   - Added gl.StencilTest(bool)
   - Added gl.StencilMask(bits)
   - Added gl.StencilFunc(func, ref, mask)
   - Added gl.StencilOp(fail, zfail, zpass)
   - Added gl.StencilMaskSeparate()
   - Added gl.StencilFuncSeparate()
   - Added gl.StencilOpSeparate()
 - Added gl.BlendEquation()
 - Added gl.BlendEquationSeparate()
 - Added gl.BlendFunc()  -- redundant
 - Added gl.BlendFuncSeparate()
 - Added gl.Blending() convenience names:
    name           blend_src    blend_dst             enabled
    "add"          ONE          ONE                   true
    "add_alpha"    SRC_ALPHA    ONE                   true
    "alpha"        SRC_ALPHA    ONE_MINUS_SRC_ALPHA   true
    "reset"        SRC_ALPHA    ONE_MINUS_SRC_ALPHA   true
    "disable"      SRC_ALPHA    ONE_MINUS_SRC_ALPHA   false
    "color"        SRC_COLOR    ONE_MINUS_SRC_COLOR   true
    "modulate"     DST_COLOR    ZERO                  true
 - Added Picking support:
     gl.RenderMode()
     gl.SelectBuffer()
     gl.SelectBufferData()
     gl.InitNames()
     gl.PushName()
     gl.PopName()
     gl.LoadName()
 - Added gl.Texture($shading) & gl.Texture($grass)
 - Allowed to use gl.CopyToTexture with non GL_TEXTURE2D, i.e. GL_TEXTURE_RECTANGLE
 - Modified Spring.GetVisibleUnits() so that the team specifier can
   use the ALL_UNITS, ALLY_UNITS, ENEMY_UNITS, and MY_UNITS values.
 - 'facing' parameters can now use long strings: 'north', 'south', 'east', 'west'
 - Spring.UnitCreated() call-out now accepts unitDef names and unitDef IDs
 - Spring.SendCommands() can use a bunch of string arguments as well as the old
   table format. e.g Spring.SendCommands('echo aoeu', 'info 2', 'specteam 0')
 - Fixed Spring.UnitRendering interface to make it possible to emulate the default 3do/s3o shaders
   - fixed $shadows texture params (you can now use shadow2DProj() in glsl)
   - fixed wrong (!=0) check if uniform locations are set (they begin with 0!)
   - added new uniforms: cameraposloc,shadowloc,shadowparamsloc
   - added new culling tag, so you can enable s3o backface culling w/o using a displaylist
   - auto enable alphatest (+blending in case of cloaked stuff) for luaUnitMaterials
     (alphatest: 0.5 for opaque and 0.1 for cloaked stuff)
 - Fixed missing return;'s in gl.LoadMatrix() and gl.MulMatrix()
 - Fixed WarpMouse() for dual mode (minimap on the left).
 - Fixed the 'frame' table value returned by Spring.GetTeamStatsHistory()
   (and added the 'time' value, which is in seconds).
 - Fixed full-view spectators get all LuaUI  RecvLuaMsg()  messages now.
 - Fixed Spring.SetFeaturePosition().
 - Fixed Spring.SetFeatureDirection().
 - If Spring.SetDrawSky(false) is set, do not draw the sun.
 - Fixed s3o recognition in LuaUnitDefs

AI:
 - Added new ai value AIVAL_SCRIPT returning start script text.
 - Removed ABIC AI stuff that no-one is using.
 - Added AIHCGetUnitDefById, AIHCGetWeaponDefById, AIHCGetFeatureDefById

Unitsync:
 - Added LuaParser API to unitsync.
 - Added OpenArchiveType(name, type) to unitsync
   (type can be "zip", "7z", "dir", or "hpi").
 - Added 'const char* GetSideStartUnit(int side)' to unitsync.
 - Added InitDirListVFS(path, pattern, modes) and
         InitSubDirsVFS(path, pattern, modes)
 - Mod/Map Options : 'section' option type added
 - Mod/Map Options : 'style' option added, syntax not defined yet

Bugfixes:
 - Fixed Aircraft units that can't land not stopping when reaching the final waypoint.
 - Fixed display of times in the EndGameBox (For example 9:07 displayed as 9: 7)
 - Fixed the grey flashing that sometimes happened when making new buildings
 - Prevent decay when the builder or factory is waiting (executing a wait command).
 - Fixed positions occupied by units with a maxspeed of zero (hubs, etc) being considered
   valid build-sites.
 - Fixed division by zero if two units are in the exact same spot and collide.
 - Fixed negative pings
 - Fix a dangling pointer when using ground decals. Could have caused desyncs
   and LuaUI bugs.
 - Fixed possible out of bounds map reads that could cause crashes
 - Fixed /cheat and /skip not working in demo-playback mode
 - Fixed /noSpectatorChat
 - Fixed /fpshud polarity
 - Randomize unitIDs
 - Fixed dds mipmapping filter (was GL_NEAREST_MIPMAP_LINEAR).
 - Fixed dynamic water with geforce 8x00
 - Fixed it so that units using ScriptMoveType can not be pushed
 - Fixed an infinite recursion in the LuaUI layout handler
 - Fixed the Lua SendToUnsynced() stack check bug
 - Fixed ScriptMoveType vs. unit pushing
 - Fixed "cloaked units were invisble underwater" with DynWater
 - Blocked team changes for dead units
 - Fixed beamlaser damage vs shields
 - Fixed smoke textures loading from resource.tdf (resources/graphics/smoke/smoke00 .. smoke11).
 - Fixed clipping issue with units begin built.
 - Don't show two statistic windows after demo watching.
 - Always create/update the perlin texture used by shields and not only if shadows are enabled.
 - Fixed ctrl+c, it searches now for the iscommander tag instead for the commander category.
 - Fixed a wrong rotation in ApplyTransform() (which is used by lua's gl.UnitPieceMultMatrix).
 - Fixed black lines on CEGs when AntiAliasing is enabled.


0.40b2

First public release
