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 (2012-05-25) * 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 (2012-05-26) * 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 (2012-05-27) * 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 (2012-06-01) * 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 (2012-06-07) * 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 (2012-06-08) * 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 1.5.1.13 (2012-06-09) * LabelConnectedRegions allocates temp storage from the heap - Large maps were too big to fit on the stack and crashed * Fixed FindPath when the goal on a building - Check for blocked since building cells aren't an invalid region - This fixes units not being able to recycle themselves * Improved pathing performance - Enable intrinsics so distance measurement can use FPU sqrt - Allocate path points all at once instead of pushing them into a queue one by one * Added a function returning whether a plan is possible * Use all craft as region labeling seeds * Added multiplayer option to enable extra nations - Enabled: use netveh1.odf and allow nation-specific pilots and Recycler - Disabled: use netveh.odf and force American or Soviet pilots and Recycler * Stop adding diplay modes if the list fills up * MultSTMission tries several different Recycler versions: - Nation multi-player (_vremp) - only if allowing any nation - Nation single-player (_vrecy) - only if allowing any nation - Fallback multi-player (avremp/svremp) - Fallback single-player (avrecy/svrecy) * PathDisplay shows unlabeled (AI-created) paths in a different color - This makes them easy to tell apart from labeled (designer-created) paths * UnitTask::InitGoto separates goalPoint from gotoPoint for replanning - gotoPoint: saved target location; replan if the target moves >100m - goalPoint: path plan goal point; replan on reaching this point - This fixes constant repathing when the two were separated by >100m - This solves severe framerate problems on some maps * Check to make sure netveh1.odf exists before trying to use it * Lobby Updates (submitted by Dx) - Full name lengths - Matched "Players in Room" button click color - Required assets: multi2.bmp * Pre-game screens (submitted by Dx) - Full name lengths - Matched "Player Status" button click color - Changed Player Name color to Green - Required assets: multipc.bmp, multipj.bmp * Post/Escape game screens (submitted by Dx) - Full name lengths - Matched "Player Stats" button click color - Changed Player Name color to Green - Required assets: multipe.bmp, multipeh.bmp * Increased resolution mode limit to 128 - That ought to be more than enough... * Changed "%loss" to "Loss" - Needs a new label.map to make it stick, though... 1.5.1.14 (2012-06-14) * Fixed time limit box position - I somehow managed to screw it up during the shell merge * Fixed Soviet units using American pilots with Any Nation turned off * Reapply map vehicle list (.vxt) after switching Any Nation * Units, pilots, and soldiers recycle when they reach their goal - This should reduce cases where they don't recycle * Centered all POPUP windows (submitted by Dx) * Added defaultFontSize3 (submitted by Dx) - Used for Map and Vehicle description text - Fixes "W" from being clipped * Allow ODF to override pilot and user classes - pilotName: pilot to use for non-player unit - userName: pilot to use for player unit * Allow Barracks ODF to override pilot class - pilotName: pilot to create * Geometry tolerates face texture names with extensions - This may help with texture problems on some objects * Recycler sets itself as the owner of created powerups - This prevents them from colliding on the way out * Handle blank pilot name as no pilot class * Added soldier class fallback to APC - Use 'a' or 's' version when Any Nation is off * Made TurretCraft more tolerant of unusually-named turret geometry - It assumes an unknown name is a Y turret * New build menu system - Populates top-level menu from build.odf . Falls back to "classic" menu items when not found - Build items can be sub-menus . Allows arbitrarily-deep menus . New build.odf takes advantage of this * Disable Any Nation button on client 1.5.1.15 (2012-07-03) * Fixed some shell text windows using the wrong font size - TextWindow uses the original font size (14) by default - Map and vehicle description windows use a smaller font size (13) * Fixed units not being able to pass between deployed craft - Disabled radial avoidance force for deployed craft - Added avoidance force to perimeter cells around turrets * Fixed a crash in FindPathStart when the player is dead * Render_Bsp_Mesh supports multiple textures with hardware rendering - Some polygons previously used the wrong texture - This fixes cockpit geometry (especially in avtank and svtank) * TurretTank PackTempState sends ammo - This fixes remote copies having the wrong ammo amount * Scheduler initializes all members to sensible values - Debug logging code was tripping over them * ScheduleGlue no longer populates its unit list from the builder menu - It ended up with more entries than it could handle - This should fix crashes and other strategic AI problems * Fixed strategic AI breaking when there were more than 127 prereq types - It was casting the prereq type to a signed 8-bit value (-128 to 127) * StopMusic doesn't attempt to reset the streaming sound - This may help an intermittent crash * Fixed TurretTank::UnPackTempState using (raw/encrypted) maxAmmo - It now matches the equivalent in Craft * MakeZFS preserves file modification date - Add/replace use file modification date as the timestamp - Extract sets file modification date to the timestamp * MakeMAP supports desaturation - desat: amount of desaturation (0=none, 100=full) * Increased pathing cost of "perimeter" cells - This should help with units getting stuck on turrets * MakeZFS update - Adding/updating files using wildcards (e.g. *.ini) works - Adding/updating files sets the correct timestamp - Listing files using wildcards shows matching record count 1.5.1.16 (2012-07-08) * Fixed issues with music playback when the volume was off - Start playing when the volume gets turned back on - Don't check for looping when the track hasn't started - StopMusic releases the requested track properly * Fixed ally/unally with teams 9 through 15 * Strategic AI adds the default builders (avrecy and svrecy) - This fixes problems with some missions (e.g. NSDF mission 2) * Fixed multiplayer lobby showing negative loss % - The previous fix affected the pre-game shell 1.5.1.17 (2012-08-29) * ScheduleGlue collects build items from Constructors too - This fixes a few single-player missions (e.g. misns4.bzn) * Added deployName property to SprayBombClass - This allows mortars deploy any game object * NSDF Mission 09 Updates (submitted by Dx) - Fixed misn0900.otf (wasn't shown) - Switched to Howitzer Cams - Changed relic from team 3 to 0 (neutral object) - Adjusted CameraPath CCATug pitch roll - Fixed Factory deployed check - Note: Turret fortification set up is unreliable and should be fixed (starting at line 890) * Fixed MultSTMission Recycler selection when MP variants are unavailable - In particular ,Soviet units should get svrecy.odf as expected * Moved build menu initialization to PostLoad - This fixes (of all things) Net::bSplint from affecting units in DM - It preloaded game object classes before the mission could set the DM/ST flag * Only initialize build menu in debug build or with /edit enabled - This should improve load times a little * Fixed MakeTRN crashing when compiled with Visual C++ 2008 - Modern compilers place code and constant data in write-protected memory - The INI reader tried to modify constant section and label names and crashed - Replaced the offending strupr/strstr with a case-insensitive string find * Reduced spamminess of "repaired geom ..." debug messages - Consolidate vertex repair messages for a geometry piece - Consolidate normal repair messages for a geometry piece * Added leaderName property to TargetingGunClass - Defaults to the weapon's ODF name so existing assets work - Allows the weapon to use a leader round from a separate ODF - IMPORTANT: ordnance MUST have classlabel="targeting" or the weapon will crash! * Barracks falls back to 's' or 'a' equivalent - ...if the Any Nation setting is off - ...if the nation-specific pilot doesn't exist * Fixed buffer overrun when reading extra-long fields from netnam2.txt 1.5.1.18 (2013-04-14) * ArtilleryProcess checks projectile flight path * Remove the oldest scrap piece when out of game object slots - This is a last-ditch recovery attempt to avoid a crash * Don't show a health bar for indestructible objects - This fixes geysers showing a health bar when targeted * Try to make player-controlled APCs less exploitable - Only deploy when within 75m of a (potential) target * Added Team::GetAllies method returning the allies bitfield * Track team ownership of terrain cells - Replaces "team hazard" mechanism - Works correctly for all teams - Takes team alliances into account * Fixed cliff force for teams 3+ * Prevent terrain access from reading outside the world - The world effectively "wraps around" at the edges * Fixed ConstructionRigProcess class crash in misn09.bzn - Handle CMD_STOP more like other producers * Fixed video mode switch changing camera settings - This particularly affected the editor view * Clamp visibility ranges to maximum far clipping plane * Halved memory used by tile mix cache * Fixed a crash in GotoTask when the path was NULL 1.5.1.19 (2013-05-19) * Fixed ReticleDisplay when selectObj got deleted out from under it - It now uses a DeleteObject callback instead of DeleteEntity * SelectionDisplay player name display skips negative team number - Units briefly have a team number of -1 after being cleaned up * ChunkEffect and Craft tolerate missing explosion classes - This happens when using content from the 0.7 beta demo * TurretTank and TurretCraft update terrain ownership properly on team change - MAS Grenade revealed a flaw in the previous implementation * Fixed uninitialized values in Scheduleglue buildingtype * Pilots don't get stuck when the vehicle they're going towards gets destroyed * Units ignore enemies carried by a Tug * Build menu can read the name of a weapon powerup from the weapon it gives - This is how the weapon powerup itself gets its name * Fixed SAV weapon pitch * Fixed floating-point exceptions in Make_Poly and AddTerrainPoly - Tripped when a LIGHTING struct mapped to a float NaN - Copy LIGHTING structs instead of floats to avoid this * Disable preload while loading the build menu - Prevents geometry cache from overflowing * ProximityMine ignores destroyed craft * Spread out MineLayer dispersal pattern - Spaces them 60m apart instead of 30m - Somewhat closer to the original 1.4 pattern - Reduces mine "fratricide" * Recenter mouse when switching to satellite view * Added VO when the Minelayer starts and finishes laying mines * Fail mission if the player vehicle gets sniped * Don't let the player switch views during a cineractive - Prevents switching away from the post-death orbit camera - Avoids crashes in views that require a valid player entity * Minelayer uses selectUser1Msg message while laying mines * Improved how deployed units handle get repair/reload - Try to request the item without interrupting the current action - Don't spin around while waiting for the item * ArtilleryProcess uses direct fire whenever possible * Tug no longer drops cargo when going to get repair * Center mouse when switching control modes * Skip non-commandable units when selecting - Category (Ctrl-1, Ctrl-2, Ctrl-3) - Group (F1 through F10) - Avoids non-commandable units disabling commands * Scrub non-commandable units from unit selection * Player-controlled APC can deploy only within 75m of an enemy target - It could previously deploy within 75m of a friendly target too