BATTLEZONE 1.5.1 CHANGELOG

1.5.1.1 (2011-01-04):
* Strip extension (if any) from TerrainName
- Some third-party maps have a TerrainName with extra '.' characters at the end
* Updated SubmitMissileLight
- Moved it from Sprites.c to Rocket.cpp
- Cached sprite index to avoid runtime lookup
* Fixed some units not recycling properly
- AI processes not derived from UnitProcess needed updating
- They use collision radii and assume a square footprint
* Recycling a Scavenger includes any scrap held
- Their held scrap was previously lost
- Players rarely recycle Scavengers so it rarely came up
* Receiving a state update for a deleted object no longer recreates it
- This should fix "indestructible" objects appearing in multiplayer
* TargetingGun limits the shot timer while waiting for a leader round
- It previously let the shot timer accumulate while waiting
- Subsequent leader rounds used that value and jumped into the distance

1.5.1.2 (2011-02-14)
* TakeOwnershipFromPlayer checks for empty entries in the object map
- This should prevent crashes on host migration
* MultDMMission::Respawn checks to make sure it has a valid spawn point
- If it doesn't, it uses the net start location as a backup
- This should fix an intermittent crash

1.5.1.3 (2011-03-31)
* Mono Debug system uses an 80x25 Windows console instead of writing to video RAM
- It originally required a monochrome video card and a second monitor
- Windows isn't keen on programs writing directly to video RAM these days...
* Disable internal adjustment of time scale in multiplayer
* Ordnance_Receive aborts if it can't find the ordnance class
- This will prevent a subsequent crash in OrdnanceClass::Build
* Pilots skip empty vehicles that are tug cargo (submitted by Dx)
* Improved input map handling
- Parser attempts to continue reading after errors
- Error messages show correct filename and line
* FlagDisplay skips objects behind the camera
- This should fix a rare divide-by-zero error
* PersonProcess cancels Glide/Straight/GetIn task if the target is occupied
* Tweaked IntersectGameObject to avoid a potential divide-by-zero error
* Fixed HuntTask crashing after loading a save game
* Added a post-load step to mark unreachable path cells as impassable
- Should fix hitching and low frame rates on some maps
- Should reduce units getting stuck trying to follow bad paths
* Updated intersection test in BuildingBlock
- Based on circle-polygon intersection in Box2D
- It now correctly handles corners of the footprint polygon
* Made recycle distance check more tolerant
- This should fix semi-rare cases of units not recycling

1.5.1.4 
* CockpitTimer can show hours
* Limit ping time display to a maximum 9999
* Limit loss percent to a minimum of 0
* Removed redundant call to UpdateWeaponAim from HoverCraft::Simulate
- This shouldn't affect anything
* Improved SAV physics
- Ascent and descent work much better
- Death works more like other craft

1.5.1.5
* Adjusted DisplayInterface colorBlue and colorDkBlue
- Now map to the dedicated interface colors in the palette
- This makes them a lot more saturated, like other UI colors
* Increased maximum teams to 16
- Team fields in object flags and state packets had a bit to spare
- Replaced a bunch of hardwired numeric constants while I was at it
* Deathmatch supports team play
- Each player gets their own team number
- Players can ally and unally as in Strategy

1.5.1.6
* Added Time Limit selections (submitted by Dx)
 - Changed Time Limit display to show hours and minutes, instead of minutes and seconds
* Reduced (arbitrary) 22-player limit to MAX_TEAMS-1
- It's mostly just a sanity check...
* Prevent special weapon powerup from replacing the Armory object launcher
* Teams allied with the user always show up on radar (like BZ2)
- It checks from the other team's perspective so the user can't exploit half-alliances
* Fixed a few hard-wired team constants that got missed earlier
* Allow remote objects to revive if state packets keep arriving
- This ought to fix "invisible" units in MP
* Objects placed by PathDisplay work correctly in MP
- This only affects Debug since PathDisplay is otherwise disabled

1.5.1.7
* Fixed camera spin when switching between Shift-F3 and Shift-F4 views
- Wrap the yaw value so its values are always reasonable
- Restore the previous yaw when entering Shift-F4 view
* Added MakeMAP utility for creating texture files
* Added new texture type 2 (R5G6B5)
* Fixed terrain when using 16-bit MAP files
- Extracting average colors from a terrain tile (which assumed 8-bit)
- Attaching smaller mipaps to the mipmap chain (which assumed 8-bit)
* D3D texture system checks textures against device capabilities
- The original restrictions were based on the 3Dfx Voodoo
- Supports textures larger than 256x256
- Supports non-square textures
- Supports non-power-of-two textures
* Reticle gets pitch angle from Craft instead of recalculating it
- This will eventually allow different pitch ranges and behaviors
* Extensive MakeMAP update
- Print usage information if no arguments provided
- Read image files using stb_image.c
- Added new processing options:
. flipx: flip output image horizontally
. flipy: flip output image vertically
. diff: apply error diffusion
* Further updates to MakeMAP
- Supports 8-bit palettized output (MAP type 0)
- Simplified error diffusion logic
- Can set how much error diffusion to apply
* Added support for 32-bit texture formats
- Translucent: A8R8G8B8 (MAP type 3)
- Opaque: X8R8G8B8 (MAP type 4)
* Fixed up a few issues with R5G6B5 textures
* Another MakeMAP update
- Added support for undoing premultiplied alpha
- Added support for chromakey color
- These allow MakeMAP to process effects textures
* Near-final(?) MakeMAP update
- Added support for colorization curves: mul * (value ** pow) + add
- Added support for reading a color remap table from an image
- It can now process all textures used by the game
- Cleaned up the code a bit
* Fixed problems on maps with units that start outside the play area
- Fixed a crash in FindPath when deep inside a blocked area
- Unreachable cells retain their original cell type
- Path-finding treats unreachable cells as blocked
. This retains good pathing performance
- Units treat unreachable cells as normal
. This allows units to follow designer-placed paths
* MakeMAP supports transparency index
- This works well in conjunction with chromakey
- This emulates behavior of the original toolchain
* Got 8-bit hardware mode working correctly
- Set it in render.cfg with Texture16=0
- There is not much point in using this :)

1.5.1.8 (hotfix)

* Set D3D_Remap_Palette back to 16 bit
- This was for 8-to-16 blits but isn't used any more
- ...that I know of
* Moved pitchAim calculation to Simulate
- This fixes aiming problems with unarmed vehicles
- UpdateWeaponAim only gets called when the craft has weapons...
- This also simplifies things slightly...
* Revised how NetPlayer tracks team number
- Update the stored team number if the Anet team value changes
- Update the used team bits if the stored team number changes
- This may help with alliances getting reset when a player leaves

1.5.1.9
* Fixed clear_events() when paint event processing is turned off
- This should fix the shell getting stuck when something goes wrong during MP mission load
* Apply a Perlin noise-based camera jitter in response to hard collision
- This is an attempt at a D3D equivalent to the SW "wiggleburger" effect
* Consolidated damage values in OrdnanceClass and ExplosionClass
- This completes the process that started with the DAMAGE structure

1.5.1.10
* Fixed MP flags sorting behind terrain
- They were being set as transparent (no depth write)
* Added support for up to 64 sound channels
- Audio options lists 1, 2, 4, 8, 16, 32, and 64
* Added basic Ogg Vorbis music playback
- Based on Nathan's version from BZ2
- CD audio takes precedence when found
- Plays files 02.ogg through 16.ogg
- The implementation is pretty sketchy...
* ScrapField objects no longer block terrain
- Fixes cells incorrectly marked as unreachable
- Allows Scavengers to collect scrap there
- Eliminates unnecessary navigation mesh changes
* Fixed footprint calculation for buildings
- This should fix units getting stuck on buildings
* Use player location as a reachability seed in SP
- This fixes pathing on maps without normal seed objects
. Missions freshly created from a TRN file
. Missions started with /nobodyhome

1.5.1.11
* Fixed faulty cliff test in Forbidden terrain check
- It was triggering for sloped and steep too
* Fixed music trying to play an unlocked resource
- I'm surprised this didn't crash outright...
* Adjusted audio system settings a bit based on BZ2
* Disabled crc32zix debug output
- This reduces the noticeable "hang" in the shell
- This also fixes music skipping in the shell
* Set Ogg Vorbis DirectSound buffer channels and rate from the file
- It previously assumed two channels and 44100 Hz
* Fixed navigation mesh not being rebuilt after editing terrain
* Updated PathDisplay
- Changed Draw Height to use a broader grayscale ramp
- Added Draw Slope to visualize terrain slope
* Allow oriented build template in satellite view
- It shows a more accurate building footprint
* Completely changed how nationality works
- Uses the first letter of the ODF as a nation code (like BZ2)
. No longer limited to American ('a', 'b'), Soviet ('s'), and Alien ('h', 'o')
. Special case: player.odf is assigned to American
- Determine pilot, user, Recycler, sounds, etc. from nation code
. Fall back to 'a' or 's' when nation-specific assets don't exist
- Allow Chinese and Black Dog factions from Red Odyssey
* Added Scavenger-specific message properties
- deployMsg: default avscav1.wav or svscav1.wav
- foundMsg: default avscav5.wav or svscav5.wav
- notFoundMsg: default avscavh.wav or svscavh.wav
- noDropMsg: default avscavi.wav or svscavi.wav
- These were previously hard-coded
* APC no longer reloads at an undeployed Recycler
* Completely rewrote reachability test
- Uses a two-pass connected component labeling algorithm
- Assigns valid region id to regions containing "interesting" objects
. It uses the exact same objects that flood fill used as seeds
- Goal is reachable only if its start and goal regions are valid and match
. This fixes performance problems on maps with disconnected regions
* Updated PathDisplay
- Added "Draw Cell Region" visualizer
- Show plan path in red if it isn't valid (e.g. disconnected)
* OggManager threads use a critical section
- The BZ2 version used Boost::mutex
- This should fix any multithreading strangeness
* Updated file system
- Read contents of ZFS files in addon
. They work like folders for the most part
- Print ZIX file list to debug output
. Prefix used paths with @
. Prefix overridden paths with !
* Tweaked OggManager worker threads
- Don't set processor thread affinity
- Fixed threads exiting after resuming from a debug break
* Use points of all named paths to mark regions as interesting
- If a designer put a path somewhere, it's probably interesting
- Exception: edge_path
* Set primary audio buffer to 44KHz and 16-bit
- This should improve quality when mixing a lot of channels
- Modern hardware should handle this just fine
- Technically it should be an audio option...
* Removed old mouse speed functionality
- It was setting the system-wide mouse speed (!)
* Use raw mouse input when available
- This bypasses system mouse speed settings
- Mouse input device applies sensitivity internally

1.5.1.12
* Recompiled anet libs from the CtP2 Source Code Project (submitted by Dx)
- Includes Windows XP hosting bug fix
- Added the current header files
* Choose a safe default pilot if there isn't a faction pilot
- This fixes Black Dog units missing pilots
* Made raw mouse input a command-line option
- /rawinput enables it
- /norawinput disables it
* Improved raw mouse input precision at low speed
- It matches enhanced pointer precision fairly well
