BATTLEZONE 1.5.0 CHANGELOG 2009-10-15: * Fixed all "backwards" FriendP/EnemyP uses 2009-11-16: FIRST PUBLIC RELEASE (Includes VC++ 2008 changes below, since I checked those in later) 2009-11-23: * Switched to Visual C++ 2008 Express * Replaced "afxres.h" with "winresrc.h" in resource files * Updated compiler settings - Optimized for size - Enabled link-time code generation - Disabled C++ exceptions - Removed run-time type information - Enabled COMDAT folding - Removed unreferenced symbols * Fixed iterator validation problems - TO DO: check other code for this idiom * Fixed divide-by-zero in Explosion animation when no frame rate is set * ScheduleGlue fixes - Clamped seeing range to 255 instead of wrapping around - Replaced ObjectList::iterator with an index to prevent iterator invalidation 2009-11-27: * Fixed frame rate dependency in camera rotation * Timer upgrade: - Added Get_TimeNow() wrapping the underlying timer function - Added matching end to multimedia timer begin period - Added optional support for high-resolution timers - Converted external usage of GetTickCount() to Get_TimeNow() * Updated RemoteDetonator to send "detonate" network events on deselection and deletion, not just manual triggering. * Added 1D Perlin noise to random * Clamped cinematic camera height before computing look-at (This fixes some of the cinematics, particularly mission 18) * Switched EarthQuake simulation to Perlin noise * Reduce camera descent rate in opening cinematic (Was not taking time step into consideration) 2009-11-30: * Player can only select units on the same team (not allied teams) 2009-12-05: * First release of the new D3D9 renderer 2009-12-07: * Fixed some performance problems with the renderer * Fixed seismic wave screwing up the terrain * Fixed divide-by-zero error in the AI that could make things go haywire * Simplified virtual memory allocations used by the terrain and high-level rendering system, which may or may not help with the DEPs. (It now commits the full amount instead of reacting to access violations and committing memory incrementally.) * By popular demand, disabled CD check for the duration of testing 2009-12-08: * Replaced MemDebug allocation with normal memory allocation * Removed the virtual memory exception handler to allow "normal" crash reports * Fixed faint alpha-blended sprites * Forced Z-buffering on and Z-split off to fix rendering problems * Added an emergency fix for bad geometry data * Fixed an AI invalid floating-point operation that crashed the second NSDF mission * Fixed slow mouse turning at high frame rates 2009-12-10: * Fixed most of the application minimize/restore problems * Eliminated the green tint on the target and sniper scopes * Removed CPU speed check that used privileged instructions 2009-12-11: * Added support for 32-bit frame buffer, enabled by default. Disable it in render.cfg "[D3D]" section with "Buffer32=0". * Enabled dithering for 16-bit frame buffer. * Fixed fog color not getting set properly (e.g. in first Soviet mission). * Turned off base address randomization so I can get meaningful results from crash reports... :) * Removed unused library dependencies. * Fixed calculation of v_mag_inv for small v_mag, which may fix some rare collision issues. * Fixed invalid floating-point operations in AI lateral movement, which should increase mission stability. * Added support for setting vsync, enabled by default. Disable it in render.cfg "[D3D]" section with "Vsync=0". * Re-added support for setting Z-buffer, since removing it broke software renderering. Hardware rendering is much faster with it enabled, almost 2x on my desktop computer. * Switched seismic wave and explosion shake to Perlin noise. The explosion shake is currently very weak, so it'll get tweaked later. * Dx sent a fix that makes 1600x1200 mode work again. It's pretty swanky. :) * Forced anisotropic texture sampling for everything, so sky sprites (e.g. Earth on the moon missions) look a lot better. 2009-12-13: * Increased maximum number of smoke sources to 256 (submitted by Dx) * Skip allied silo for team strat (submitted by Dx) * Fix for getting 5 pilots when one jumps out out of Barracks (submitted by Dx) * Send out player pings (submitted by Dx) * Fix buffer overflow when joining a game (submitted by Dx) * Automatic configuration of Z buffer setting (off for software, on for hardware) * Switched all "shake" effects to Perlin noise and ensured "round down" float-to-integer conversion * Fixed occasional floating-point invalid operation in the clipper when submitting a zero-vertex polygon (probably harmless, but still...) * Linked with latest Anet headers and libraries (submitted by Dx) * Fixed uninitialized member variables in Weapon, which could crash AI * Possible fix for visual glitches in the shell * Prevent camera view change after player dies (untested) * Fixed video mode switching (I think) 2009-12-16: * Pilot hopping out of a Barracks no longer adds pilots (it deducts 1 for now, but that may change) * Fixed SITE/Satellite camera rendering * Fixed external view camera controls at high frame rates * Changed shell controls to enumerate font once on creation * Geometry system attemps to repair bad vertex and face normals * Limited AIP update to 60Hz * Made AIP parsing more tolerant, treating integer and floating-point equally * Fixed invalid seeing range for non-Craft in AIP * Set unit hit points value correctly (used to determine strength) * Prevent changing camera views after player character death * Fixed some asserts in Inst04Mission * Fixed incorrect font in shell text areas (e.g. mission briefing screen) * Fixed an invalid floating-point operation in nacelle code when Hovercraft explodes * Fixed support for non-assembly routines in Math3D (currently unused) * GunTowerAttack just aims instead of calling DoStand() (This greatly reduces the amount of work it has to do) 2010-01-12: * Removed Anet cheat (submitted by Dx) * Recycler spawns closer to player, preventing it from getting stuck on blocked slopes (submitted by Dx) * Removed unused "to team" chat code (submitted by Dx) * Fixed a buffer overrun in the shell (submitted by Dx) * Fixed a copy-paste error in calc_poly_plane (submitted by Dx) * Mission 18 sets transport objective name to "Fury Transport" (submitted by Dx) * Reduced red out on craft and pilots (submitted by Dx) * Fixed multiple snipes on a pilot. (multi-player) (submitted by Dx) * Very Experimental: (submitted by Dx) - Increased "FAR_CLIP" from 1000m to 1304m (Horizon) - Increased "MAX_FAR_CLIPPING_PLANE" from 1280, to 1640m (Camera) * Replaced "nk_1sun1.map" and "nk_1mon1.map" with "sprite_a.map" (submitted by Dx) * Increased "SORTING_TABLE_SIZE" memory to allow larger view range (submitted by Dx) * Disabled Thumper on "CLASS_TURRET" to prevents Gun Towers from flipping under terrain (submitted by Dx) * Set angular velocity to zero on deployed turret to stops the wild flipping under ground (submitted by Dx) * Restored original walker code (submitted by Dx) * Enabled high-resolution ordnance matrix packing from trunk * Made Pilots hopping out of the Barracks free to prevent a pilot-draining exploit in strategic multiplayer * Experimental: increased depth buffer to 24 bit to fix rendering issues 2010-01-19: * Stopped power ups from beeping in DM when thumped (submitted by Dx) * Increased sniper scope visibility range (submitted by Dx) * Added more anti-cheating measures (submitted by Tug) * Fixed Tug crash when the target object has no hitch (submitted by Tug) * Prevent powerups and nav beacons from falling under ground (submitted by Tug) * Prevent tanks from getting stuck under ground (submitted by Tug) * Restored original Turret and Gun Tower reaction to seismic wave - TO DO: increase alphaTrack and alphaDamp in ODF files to prevent flipping * Experimental: switched health and damage from integer to float - TO DO: switch ammo and cost from float to integer as well * Experimental: changed depth test to "<=", which may help with ground reticule * Fixed height indicator lines appearing in front of radar icons * Fixed a possible divide-by-zero error in UnitTask::GotoForce (spotted by Tug) 2010-01-21: * Fixed engine flame disappearing when target cam is visible * Fixed lines to command panel appearing in front of radar icons * Cockpit and Map Radar indicate attack and show numbered icons for actual teammates instead of allies * Fixed line and icon sorting order for Map Radar * Fixed lava heat damage for Craft * Fixed Person damage multiplier applying all the time instead of just for collision damage * Fixed main view sky drawing into target cam view * Application now sleeps when deactivated * Experimental: Bullet collision update - per-object test now checks collision type flags - consolidated the two sphere tests - removed now-obsolete "don't hit owner" check 2010-01-29: * Updated cheat protection (submitted by Tug and Dx) * Fixed sniped pilot anim (submitted by Tug) * Fixed bug in respawn timer (submitted by Tug) * Fixed stack corruption on whisper (submitted by Tug) * Fixed firing through terrain (submitted by Tug) * Fixed possible problem when a vehicle avi is missing (submitted by Tug) * CTF Fixed crash when ship is destroyed (submitted by Dx) * Experimental Bullet collision updates: - Use bounding box when available - Ignore sphere when starting inside - (These fix vehicles shooting themselves, but may have gameplay ramifications.) * Fixed Terrain intersection not restoring rounding mode * Planar explosion properly rounds down frame number * Fixed incorrect ground sprite clipping (e.g. ground reticule) * Extensive video mode list update: - Build list from D3D mode list - HUD no longer depends on fixed resolutions 2010-01-30: * Fixed rendering order in shift-F9 view * Fixed gauge rendering in status display * Fixed potential divide-by-zero error in UnitTask GoTowards * Mouse sensitivity no longer depends on resolution * Ignore (de)activation events not directed to the main window Proper support for multisampling: * Added MultiSampleType option to render.cfg - A value of 0 disables multisampling entirely (the default) - A value of 1 uses MultiSampleQuality to access AA modes - Other values control the number of samples * Added MultiSampleQuality option to render.cfg - Value selects different settings for a given type - Experiment and see! * Fixed HUD elements that looked wrong with AA enabled * Added MaxAnisotropy option to render.cfg * Bullet collision changes: - Restored code to avoid hitting owner - Restored original sphere collision NOTE: the AA change required turning off lockable back buffer and dialog box mode in-game. This will improve performance (especially on older systems) but prevents dialog boxes from being visible. 2010-02-04: * Fixed a spurious error in joystick code when reading registry * Producer enemy kick-out changes: - Uses the full bounding box instead of a sphere - Applies only to vehicles instead of all enemies * Skip dead/gray scrap player (submitted by Tug) * Improved PathDisplay depth sorting: - Paths and objects sort behind text - Objects sort behind paths * Improved video mode enumeration to fix missing resolutions * Experimental: Damped AI steering and movement controls to prevent overshoot * Limited height of lava damage to be more consistent with BZ 1.4 * Experimental Command interface update: - Added attack commands to deployed Turret and Howitzer - Ignore uninteresting neutral objects (versus "follow" or "defend") - NOTE: skipping neutral objects may have unintended consequences (please test!) 2010-02-19: * VisibilityScale max 150 on the internet (submitted by Tug) * Fixed weapons "disappearing" from enemy tank when entered (submitted by Tug) * Respawn pilot while in net escape dialog (submitted by Tug) * Limit the sniper dot size and penetration (submitted by Dx) * Removed physical and virtual memory size checks (New operating system requirement takes care of that) * Fixed Beam doing negligible damage * Experimental: Ordnance network data now includes owner id - Seems to fix remote units hitting themselves 2010-02-26: * Increased number of dust puffs to fix a runtime warning (submitted by Dx) * Fixed intermittent crash on PowerPlant deletion (submitted by Dx) * Experimental: FriendP and EnemyP both return false for team 0 (neutral) (This should fix various oddities involving neutral objects) * Fixed external reticule and ground indicator appearing in target camera * Improved AI get repair/reload behavior - All units support repair/reload from base buildings - Deployed units prefer launched powerups, but will pack up and drive if necessary - Units resume normal behavior when fully repaired/reloaded * Filtered out resolutions below 640x480 * Entities now simulate every frame even when off-camera (This may slightly reduce frame rates in single-player) 2010-02-28: * Fixed alt-tab in network play (submitted by Tug) * Fixed crash/malfunction in Construction Rig UnBuild task after loading * Experimental: reset ally status when player leaves * Reimplemented Bullet IntersectBox to avoid divide-by-zero * Player preferences file now saved in user documents folder - TO DO: move all commonly-written files (e.g. saves) there 2010-03-19: * Experimental: DPI aware fonts. (submitted by Tug) - TO DO: Test single player, declare that bz is dpi aware? * Selections in chat windows. (submitted by Tug) - TO DO: Better scroll back * Fix bug in netnam2.txt reader. (submitted by Tug) * Changed chat color to green for improved contrast * Enabled D3D support by default - NOTE: Force software mode with "/SW" on the command line * Artillery and Turret AI auto-deploy when commanded to attack * Set Comm Sat and Barracks toggles to "ON" by default (submitted by Tug) * Set Sync Join to off by default (submitted by Dx) * UpdateOptionBox Fix (submitted by Tug) * Added Splinter Host Control (submitted by Dx) - TO DO: Add "+ multi_three {Splinter}" to label.map * Changed Default Player Lives to 3 (submitted by Dx) * Unlock mouse pointer on pause * Enabled close button in windowed build * Fixed cursors being left behind after exit * Added proper handling for missing cursor images * Re-enabled custom cursors in non-internal build 2010-03-27: * Encrypted session passwords (submitted by Tug) * More anti-cheating (submitted by Tug) * HideBox Fix (submitted by Tug) * Set Splinter Host Control to ON (submitted by Dx) * Mission version bump (submitted by Tug) * Safe spawn in DM (submitted by Tug) * Lobby uses map list to determine DM/ST icon * CraftClass uses selectReadyMsg if missing selectOtherMsg * Experimental: rebuild D3D if device reset fails (e.g. while recording with Fraps) * TurretTank weapons start disabled * Camera field of view compensates for wide-screen 2010-03-30: * Add TransportMode for TCP/IP LAN (submitted by Dx) * Added gsplint to PrjID (submitted by Dx) * Splinter Host Control now disables the weapon in vehicles (submitted by Dx) * Fixed camera view angle so it matches 1.4 for standard aspect * Cleaned up some camera initialization code * Fixed sniper interface positioning in wide aspect * Sniper camera now draws behind the target camera * Fixed shell keyboard input binding screen * Experimental: prevent launched items from hitting the Armory * Adjusted empty hovercraft physics to reduce sliding * Fixed units interpenetrating buildings - Point-box test now returns a collision when the point is inside - Integrated movement into Craft collision check to prevent double-move - HoverCraft simulation now checks collision after calculating acceleration 2010-04-13: * Fixed Editor black screen (submitted by Dx) * Clamped MDM shot timer to prevent multiple shots firing at once * Reduced empty hovercraft "friction" back to 1.4 levels * Fixed units getting stuck in buildings * Fixed TAG leader round adding ammo instead of deducting it * Tug fixes - TugProcess properly uses the Tug's hitch object - Tug no longer collides with its cargo (and vice versa) - Dropping a non-vehicle object snaps it to the ground - Moving an object properly updates its entity bounding box * Fixed crash when target dies during APC deployment * Fixed crash in "Bio-metal Scavenging" when the player kills the drone prematurely * Experimental: prevent collision raycasts from tunneling through terrain * Experimental: network ordnance synchronization - Quantized ordnance direction on sender side to match remote side - Added support for sending ordnance state updates (not just create) - MDM and Splinter shells to send state update on bounce - Popper shell sends state update on launching sub-munition - Aligned mortar shells with flight path since state update assumes it - Ordnance send expiration network events 2010-04-17: * Reduced pilot "stickiness" (submitted by Dx) * Changed Splinter button helpLabel (submitted by Dx) * Ordnance "catch-up" on receive will terminate if expired * TugProcess improvements: - Switched to common Say function, which features repeat delay and ODF configurability - Copied support for "get repair" command from ScavengerProcess * Fixed spurious collision sounds - RegCollision returns whether the objects "should" collide - Collision sounds trigger only when RegCollision returns true - Tug copies its linear and angular velocity to the cargo * Craft death/ejection improvements - Ejection marks craft as destroyed instead of exploding immediately - Reduced secondary explosions from one per frame to around five per second - Experimental: made craft owner of explosions * Explosion shake only affects dynamic objects * Person counts as a multiplayer kill only if has a positive pilot cost * Switched from Terrain_GetHeightAndNormal to Floor_GetFloor where possible * Floor_GetFloor now takes a double-precision position vector * Reduced cutoff altitude for dust effect * Bullets expire when leaving valid terrain * Tweaked AI targeting rules - Skip neutrals that haven't shot the AI unit - Skip empty vehicles * Extended player's valid region to the full play area (it was previously inset by 10 meters) * Experimental: player "death view" preserves original camera settings 2010-04-18: * Fixed units not collecting powerups (!) * Reverted craft ownership of explosions due to unwanted side effects * TugProcess properly approaches and withdraws from cargo - TO DO: hide cargo in first-person view * CanCommand returns false for destroyed objects * Greyed out destroyed objects in the command menu 2010-04-24: * Fixed Sync off strat crash (submitted by Dx) * Disabled Splinter Host Control from working in DM (submitted by Dx) * Initialized the variable buffer in EndEnum() (submitted by Dx) * Fixed sniper field of view * UnitTask Goto improvements - Skip cliff repulsion when pathing fails (e.g. trapped) - Apply boost when climbing a steep incline - Consider a unit stuck only if not making progress * Death view now preserves the camera stack so it doesn't affect Shift+F4 view * Reimplemented ordnance remote detonation - Sends a list of ordnance identifiers - No longer depends on owner object * Skip non-commandable units when broadcasting commands * Network Timer fixes - Toggle only works in net games with no time limit - Moved toggle function to CockpitTimer - MultSTMission now updates the timer properly 2010-05-05: * Fixed memory leak by preventing respawn while in net escape dialog (submitted by Dx) * Restored 1.4-style Bullet behavior * Fixed sniper shell not penetrating through some units * Fixed a buffer overrun in the /version chat command * Mostly restored original terrain behavior - Added some "thickness" to tolerate floating-point limitations * Improved craft collision with terrain and buildings - Prevents interpenetration - Reduces dragging/hanging * Remote bullet hitting local object sends expiration notice 2010-05-08: * Restored original PointBox behavior of setting time and normal only when there is a collision * Increased packet buffer size for RemoteDetonator detonation (because Anet adds data to the end) * Producers kick enemy pilots in addition to vehicles * Added open/close digitalvideo per Microsoft documentation * Flush D3D textures on cleanup (fixes missing terrain tile mipmaps) * Removed apparently-unnecessary device reset from D3D_Restore 2010-06-10: * Made Player Information labels more clear. Todo: Edit get_info, mail, url description in label.map (submitted by Dx) * Fixed netnam2.txt Player Information character length. (submitted by Dx) * Changed barrack, comm sat and sync labels (submitted by Dx) * Temporary change to override help labels in label.amp (submitted by Dx) * Mission version by build date. (submitted by Tug) * Mission version checks more files (submitted by Tug) * Reduced remote ordnance expiration network traffic: - Added notifyRemote ODF property to control remote expiration - Restricted remote expiration to rockets and shells by default - Only send notification when hitting a movable object * Disabled TurretTank attack commands * AI units will attack empty enemy vehicles if there are no higher-priority targets * Skip sending empty lines in the multiplayer lobby chat * Disabled save/load hotkeys in multiplayer * Force mode change when switching to and from shell mode * Reset the D3D device when restoring the window * Improved handling of application activation and deactivation * Cleaned up a few D3D initialization and reset issues * Chat messages no longer fade out * Added drop-shadows for better contrast * Color-coded messages based on source - sent by the system: white - sent by the player: green - sent by ally: blue - sent by enemy: red - broadcast: purple * Skip sending empty chat messages in multiplayer 2010-06-12: * Re-enabled code to look for movies in the local path * Shell uses modeless child dialogs instead of modal popup dialogs - Application window drag, minimize, and close now work properly - Increased reliability of shell animations in full screen - Improved D3D handling of window restore - Hide shell dialogs "behind" full-window pages instead of just disabling input 2010-06-13: * Fixed enter key processing in the shell dialog message handler * More shell tweaks - Fixed close button handling - Cleaned up some unused extern references * Fixed excessive CPU usage in shell dialog message handler * Fixed invisible map filter popup * Fixed "ding" when entering a chat message * Fixed spontaneous shutdown when leaving a net game 2010-06-15: * Fixed invisible error dialog box * Shell now uses mciSendCommand instead of mciSendString * Fixed movie player popping up (usually hidden) windows * Fixed lobby disappearing when showing the create room dialog * Shell loads button labels from (updated) labels.map * Restore input focus after returning to the application - Fixed input configuration screen - Fixed multiplayer chat edit boxes * Fixed load save game shell dialog 2010-06-19: * Fixed join net game shell dialog * Improved in-game chat display - Added word wrap to scroll region - Added automatic scrolling to input region - Reduced width so it doesn't cover the middle of the screen * Collision system fixes and enhancements: - Fixed reversed collision result when a craft hit the edge or corner of a box shape - Added time step parameter to various collision functions - Recursive check searches for lowest time to intersection instead of stopping on first hit * Added pre-build event to generate a build identifier * Updated CRC mission hash to use the new identifier 2010-07-11: * Removed SetCapture from net game dialog boxes to fix cursor rollover problems * NOTE: the main window can now be moved while a pop-up dialog is open * Net ally/enemy utility functions now take deathmatch team rules into account * Disabled ally/unally in deathmatch since team numbers are meaningless * Don't print matching files when performing /version * Fixed minor bug with syncBox (submitted by Dx) * Implemented sun occlusion in hardware renderer * Cleaned up glare effect calculation * ProximityMine scans every searchPeriod seconds (default 0.1) instead of every frame * Mine and ProximityMine record their state in save games * Size message handler does not change window position in Device structure * Restored support for multiple glare sources (not currently used) * Removed commented-out glare fade since it was inconsistent with software path * Moved occlusion query code from LensFlare to D3D renderer * Improved device reset handling to reduce errors and avoid full destroy and recreate * Display mode switch tries to keep the window as close as possible to the previous location * Calibrate occlusion query to correct for multisampling * Added render.cfg HardwareClip option to let D3D do polygon clipping * Treat remote sniper shells as normal bullets 2010-07-12: * Fixed bug when reading HardwareClip option from render.cfg * Added viewport clipping to sniper scope and target camera * Clear ordnance identifiers and mapping table on cleanup * Missile pack/unpack now includes ordnance identifier * Experimental: send sniper shell to remote players * Disabled hardware clipping by default since it has too many problems * Restored old lens flare behavior when occlusion query isn't supported 2010-10-19: * Fixed MiniMap bottom border (submitted by Dx) * Fixed ShellButton height for "Forward" and "Back" (Input configuration screen) (submitted by Dx) * Only lock vertex and index buffers once per batch * Producers cancel build in progress when destroyed * PointCarCheck takes a "fat" parameter (normally zero) like related collision methods * Avoidance never skips the player on the AI unit's team * Added creation timestamp to GameObject * DoCollision takes impact time into account - Apply original velocity until the impact time - Apply new velocity for the remainder of the time step - Negative impact time backs the unit out of the collision, resolving interpenetration * Added a short time delay between soldiers exiting the APC * APC sets itself as the owner of the soldiers * Soldiers will return to their APC instead of hiking all the way back to base * HACK: craft don't collide with other entities for one second after creation - This gives units a chance to escape the collision geometry of the unit that built them * Unit recycle now uses the go-to-object form of GotoTask * GotoTask takes unit radius and target radius into account * This fixes large objects not being able to satisfy the done condition * Fixed net game smap list disappearing after showing options menu * Producer blocks terrain based on its entity bounding box - This improves coverage by taking animation pose into account * Fixed divide-by-zero error when adjusting window rectangle on resolution change * Added child dialog for LicenseDlgProc (Fixes black screen when /edit is used) (submitted by Dx) * Renamed original Path system to Path_Original for reference * Imported pathing system from BZ2 - Divides map into 32x32 cell "zones" - Allows adding and removing path obstacles at runtime 2010-10-21: * Fixed problems with recycling units * APC uses an ODF property (soldierDelay, default 0) instead of a hard-wired constant - Fixed crash on completing the recycle process - Fixed units parking at a distance instead of recycling * Reverted changes to GotoTask since they caused problems * Cleaned up window initialization a bit * Fixed position adjustment when the width or height was larger than the screen 2010-10-23: * Reverted to original unit recycle behavior since it works better * Disabled soldier return to APC * Soldiers pick closest Recycler, Factory, Armory, or Barracks * Fixed D3D_Flip returning a possibly-uninitialized value * Fixed mouse input after returning to application via Alt-Tab * Removed redundant UnlockMouse from InputErrorOkOrCancel 2010-10-24: * Fixed an uninitialized value in the AI scheduler * PlanExists sets pathing type - This fixes some asserts and a crash on misn16b.bzn * Occlusion query calibration doesn't try to clear the z-buffer when there isn't one * Added memory pool class from VideoVenture * PathPoint and PathPlan now use memory pools * Fixed a memory leak in PlanExists * Fixed a memory leak in FindPlan when find path failed * Fixed support for "building" cell type - CellType return values match what the pathing system expects - Paths navigate around buildings but can end on a building footprint (unlike cliffs) * Restored original Soldier base selection - Only go to Factory if there is no Recycler - Only go to Armory if there is no Recycler or Factory * Soldier will go to a Barracks if it is closer * Pilots can return to barracks like Soldiers * GotoTask returns done if the unit physically touches its destination object * Recycling uses "go to object" form of GotoTask again - This allows recycling to commence if the unit touches the dropoff point * Fixed a buffer overrun when reading a PrjID with 8 characters from an ASCII .bzn file * D3D_Restore always resets the D3D device in full screen - This fixes the shell not returning to full screen after Alt-Tab * Can select and command units with no team slot * Units will try to grab a free team slot if they need one: - The unit has an AI process - The unit does not have a team slot assigned - The unit has a valid team slot category * Made some unreliable network messages reliable: - Host stopping the game (STOPGAME_PACKET_ID) - Snipe event (SNIPE_PACKET_ID) - Spawn point selection (SPAWNPOINT_PACKET_ID) * Improved team slot assignment - Added a new AssignTeamSlot method to GameObject - Assign slot if the object has zero pilot cost - Assign slot if the unit has an AI process (piloted) - Clear slot if the unit lacks an AI process (empty) * AiUtils BlockCells uses entity world bounding box * Added CLASS_ID_SIGN (e.g. pylons) as path obstacle * Removed redundant BlockCells from Producer 2010-10-25: * Fixed multiplayer pre-game player list and chat window after alt-tab * Reverted ability to command units with no team slot * Reverted changes to team slot assignment * Path display uses a precomputed color instead of looking it up all the time * GotoTask end condition uses unit collision radius instead of a hard-wired 5m radius - This fixes large units (>5m) not being able to reach the end of the path if it abuts impassable terrain - More specifically, this allows large units like Walkers to recycle themselves * Another round of pathing updates... - CellType uses BZ2-style terrain flags internally so I can mix and match - BlockCells marks the collision radius as water (since BZ doesn't use it) - FindPlan treats water as an impassable obstacle (like cliffs) - So: units can enter building cells, but will stop at the edge of the inner core * Non-player pilots set vehicles local on entering - This should fix pilots vanishing on entering vehicles in MP * Chat messages fade, but reappear while text input is visible * Cancel chat message input with the escape key 2010-10-28 * Collision clamps time-to-impact to +/- one time step - This prevents extreme collision responses (e.g. teleported, thrown into orbit, and so forth) * Collision treats objects with zero mass as immovable - This fixes problems when running into Gun Towers * Walker collision also treats zero-mass objects as immovable * GotoGeyser compensates for unit collision radius - This should fix producers sometimes not quite reaching geysers * GoPoints compensates for unit collision radius - This fixes Minelayers only laying one mine and then stopping * Prevent Scavengers from considering scrap on lava * Treat building area as traversible * Treat building core exclusion as cliff instead of water * Completed support for BZ2-style pathing types - Hover units use the default path type - Walkers, Soldiers, and Pilots will not try to cross lava - TO DO: use flying path type for airborne SAVs? * Turned off showPathSteps since it doesn't do anything * TargetCam uses sphere center for objects without an eyepoint - This fixes the camera view intersecting the ground * Made Geysers untargetable and unlockable when in use * Experimental: GetCommand ignores friendly CLASS_ID_SIGN objects - This eliminates the "defend" command for mines, seismic waves, and splinter shells - NOTE: this does not apply to the Tug * Restored some code in GotoTask that got lost * More path system tweakage... - Mark cells within CollisionRadius as "building" (like BZ1) - Mark cells within entity world box as "perimeter" - This seems to fix the residual pathing problems 2010-10-30: * Fixed goal distance check GoPoints::DoStateProlog - This should fix the Minelayer (again) * Clip paths entering building tiles - This fixes paths going around buildings to enter on one side * Loosened GotoTask restart condition - It now compensates for source, destination, and grid sizes - This fixes cases of units not being able to recycle * Experimental: clip paths ending on any too-expensive terrain * /kick works against players in-game and in the escape screen 2010-11-03: * Added a flag to GotoTask to override normal "done" behavior - This fixes issues with GoNear and GoPoints end conditions * Fixed a (spurious) floating point exception when clipping polygon lighting * Experimental: use edge path instead of terrain extents for pathing cells * Huge improvement in shift-F9 rendering performance * Experimental: perform common drawing setup operations only once - This improves frame rate slightly (a few percent) * MultSTMmission respawns players 100m in the air - This should help reduce spawn-camping * Synchronized PowerUp pack and unpack network state - Pack sends JAMMING flag (read by Unpack) - Unpack reads DEAD and DYING flags (written by Pack) - This probably doesn't fix any major problems, though... * Disable map boundary while in edit mode - Note: turning off edit mode while outside the play area may lead to hilarity ensuing :) * Softened the boundary effect - Player retains full vehicle control - Reduced the intensity of the push-back force * Increased chat text width to 240 pixels (40 characters) - This reduces the worst-case messages to three lines * Changed PathDisplay "[SHIFT] Cancel" to "[TAB] Cancel" - This reflects the actual key-binding 2010-11-06: * Fixed units wandering off when getting repaired or reloaded * GotoGeyser skips the normal GotoTask done condition - This allows it to use the original distance checks * Craft, Seismic, and Walker apply velocity in double-precision - This fixes precision problems on maps with large offsets * Experimental: delay deletion after receiving an ordnance-expired network event 2010-11-08: * Fixed BlockCells and BuildingCells potentially writing outside the cell array * Cell array uses map boundary instead of terrain boundary * Fixed cell array boundaries so all cells outside the boundary are impassable * Repair and Reload use GoNear and SitTask so they park near the building instead of spinning around inside it * Fixed producers overshooting geysers and having to back up 2010-11-19: * Fixed multiplayer pre-game and post-game screen redraw after returning from options (submitted by Dx) Pre-game screen: - Removed playersInSyncGame.Redraw() (Had no effect) - Added InvalidateRect List Player Status - Added InvalidateRect Edit Chat Line Post-game screen: - Added InvalidateRect Edit Chat Window - Added InvalidateRect List Player Status - Added InvalidateRect Edit Chat Line * Allow straight-line pathing when airborne regardless of terrain cell type - This allows pilots exiting the Barracks to navigate to their destination * Experimental: increased remote ordnance expiration time * PathDisplay picks object whose center is closest to the cursor - This helps in cases where two objects overlap * Fixed Pilots and Soldiers not reaching their destination - Use destination collision radius plus some padding - Override GotoTask normal ending condition * Updated AttackTask state machine with changes from BZ2 - Blast transitions to Goto instead of Slide when unable to hit a building - Slide transitions to Goto after 10 seconds - Slide transitions to Attack if able to hit (which fixes the "dancing") - Stand transitions to Flee instead of Slide after 8 seconds - Goto transitions to Blast instead of Slide if able to hit * Tweaked AtomicAction "ring" ranges a bit - Close distance is now 10m instead of 9m - Mid distance is now 25m instead of 24m * Use terrain boundary for pathing in single-player * Renamed low-level BlockCells to PerimeterCells since it affects that terrain flag * Removed some redundant code from FindPlan * AddCliffForce includes building cells (like BZ2) 2010-11-20: * Prevent reticle command when pointing off-map * Brought over some FireAt improvements from BZ2 - FireAt takes target size and distance into account - Attack tasks use a much smaller angle tolerance value * Further AttackTask enhancements - Blast actively evades its target's line of fire - Flee actively evades its attacker's line of fire - Flee points at the target instead of turning away - Flee transitions to Blast after a three-second delay * Increased radar object count to 512 * Prevent satellite cursor command when pointing off-map * Reverted path system to always use terrain boundaries * Experimental: Person sends ammo and health over the network 2010-11-29: * Experimental: disable normal bullet hit when sniper shell hits eyepoint - This should prevent double-kills when sniping units with low health * Application window now has a real icon :) * Experimental: Constructor no longer halts after selecting an item to build * Brightened the dark interface colors from 40% to 60% - This should make health and ammo gauges in the command panel easier to see * Experimental: treat zero health as dead instead of barely alive - Units now die if they take exactly as much damage as they have health - Game logic was somewhat inconsistent about this... - In practice, it won't make all that much difference (less than a hull point) * Removed unnecessary code from Bullet::Init that rebuilt the transform matrix * More attack task refinements - Adjusted fire cone values to reduce shooting into the ground - Fixed frame-rate dependency when computing pitch value * Improved PathDisplay task edit mode - Removed "CMD_" prefix from command text - Fixed SEND, GET_IN, and LAY_MINES command text - Hide task display if no subject is selected - Cleaned up subject information text - Command list wraps to the next line if necessary - Hide object line if no object is selected * Added "/startedit" option to start in edit mode * Fixed crash when using "/nobodyhome" option * Updated PathDisplay menus - Added "[Tab] cancel" to menus that lacked it - Fixed the tenth item of the build menu * CarRecurse pre-test uses bounding sphere center - This fixes collision with producer units * Craft::DoCollision treats deployed craft as immovable * Increased movement force in ScavGotoScrap::DoNear - This reduces Scavengers overshooting scrap and having to back up * Minelayers no longer attempt to lay mines on blocked terrain cells * Experimental: added "sloped" terrain type to pathing - Cliff terrain (impassable) at 100% grade instead of 70% - Sloped terrain (double cost) at 50% grade - This should allow units to navigate rough terrain better * Unit repair and reload commands will use the "who" parameter if set - This doesn't do much on its own, but allows a new usage pattern in the future:) * Person::DamageAlloc doesn't apply damage to remote people - This should fix the health "snap back" in multiplayer - This also makes it consistent with Craft and Building :) 2010-12-27: * ConstructionRig doesn't change state on CMD_BUILD - This allows the Rig to keep doing whatever it was doing * Gun Towers now block terrain like other buildings * Set health ratio to 1 for objects with zero max health - This should prevent indestructible objects from dying * Split steering logic out into separate functions - LookAtPos: steer towards a point in world space - LookAtLocalPos: steer towards a point in local space - LookInDir: steer towards a direction in world space - LookInLocalDir: steer towards a direction in local space - TO DO: include pitch control? * Steering PD controller incorporates desired turn rate - This should help when tracking fast-moving or circle-strafing targets * Updated shift-F9 editor view - Updated "New Object" menu builder list . Use human-friendly names from builder ODF files . Color-code names based on default team - Added "Build Team" menu to override default teams . NOTE: override doesn't affect first-person edit view (yet!) - Shortened some overly-verbose text strings * /version prints build date and CRC of check.odf files only locally - This eliminates a source of chat spam and network flooding * Updated unit GetCommand for objects: - Return "Get Repair" for a friendly Hangar if the unit needs health . Exception: Armory does not do this since it handles "Get Repair" differently - Return "Get Ammo" for a friendly Supply if the unit needs ammo . Exception: Armory does not do this since it handles "Get Ammo" differently - Return "Go To" for a friendly building . Exception: Scavenger returns "Follow" to keep it from wandering off * Experimental: flag objects to prevent multiple death messages * Experimental: attempt to repair bad Craft transform matrix * Prevent divide-by-zero in DoCollision when applying force at the object's origin * Experimental: reduce maximum simulation step time to 0.1s * Cleaned up simulation step time accumulator logic 2010-12-31: * Added GetAmmoGauge method, separate from GetAmmo - Default version returns ammo (as expected) - Scavenger version returns scrap - APC version returns soldiers * Control panel and status display use GetAmmoGauge * Fixed broken "0" item in first-person build menu * Strategy help counts as "inspect" for missions that care * APCs only return to friendly (not neutral) Barracks * Disable "isShot" target indicator when the target is dead * Fixed some minor compile warnings 2011-01-08: * Invalidate D3D texture cache on changing brightness setting - This ensures that textures use the newly-updated palette * ArtilleryProcess improvements - Can tell if it's out of range before firing - First shot is as accurate as subsequent shots - TO DO: figure out how to handle moving targets * Adjusted Mission 11 script to make it more reliable: - Trigger last attack wave 15 seconds after escape begins - No longer relies on transport reaching the launch pad nav beacon * Scavenger looking for scrap checks one path per update - This spreads out the cost over time, preventing "hiccups" * Greatly improved pathing performance - Much more efficient method for finding strip neighbors - Pathing aborts when it detects that there is no connected path - Set compiler to optimize for speed 2011-01-16: * InitRepair uses the current command "who" parameter (like it was supposed to) - This should make units go to the right place when sent to a Hangar or Supply * Send score reliably * Restored original "on-demand" linking of path strips - This saves a lot of unnecessary work and memory usage * Reverted special handling in GetCommand for Hangar and Armory - State-dependent commands break some assumptions in the command menu * Reverted to original implementation of IsStuck - Higher slope threshold means "cliff" tiles are rarely passable, so it's not worth being clever * Allow combined vehicle kill and snipe kill - It's equivalent to destroying the vehicle and killing the ejected pilot, minus the ejection part :) * Restored "isShot" target indicator when the target is dead * AssignColor uses pre-defined colors from DisplayInterface - This fixes target markers turning white on dead objects (of all things) - TO DO: make CockpitSelection sprite index mapping more robust * Reverted Scavenger looking for scrap to original behavior * Terrain uses ZFS file operations instead of memory mapped files - HGT and MAT files can now be included in ZFS files - Editing terrain no longer modifies files behind your back * Save terrain data as part of the mission file save (ctrl-S) - Modifying terrain in the editor marks it as changed - If saving to an existing BZN, write HGT and MAT only if changed - If saving to a new BZN, copy the original TRN and write HGT and MAT with the new name * Experimental: don't mark scrap as destroyed when deleting NetPlayer * Walker UpdateWeaponAim compensates for hardpoint orientation - This fixes the CCA Golem firing ~4 degrees to the right. * Fixed texture preload crash when not using mipmaps * Pathing supports team-specific "hazard" cells - Path cost is greater than sloped but less than lava - "Hazard 1" is costly to team 1 - "Hazard 2" is costly to team 2 * Streamlined rendering of pathing cells and strips * Added Gun Tower, Proximity Mine, and Weapon Mine as pathing hazards - This makes units navigate around those hazards when possible - TO DO: make Scavengers aware of hazard when selecting scrap? 2011-01-17: * Fixed Gun Towers not blocking terrain cells * Show scores in MP by default - Now that the minimum resolution is 640x480... * Hide engine flames, dust kick-up, and shadow while invisible * UnitTask FireAt knows how to trigger Launcher and ChargeGun - For Launcher, hold until locked on - For ChargeGun, hold until minimum charge, full charge, or a random charge level * RocketTankAttack uses normal FireAt instead of of custom logic * Fixed CalcRange range result for ChargeGun - This fixes units equipped with only MAG (versus MAG and some other cannon) * Launcher resets itself when it runs out of ammo - This fixes units accidentally firing after getting ammo 2011-01-20: * Allow player to change difficulty during a mission * RemoteDetonator updates - Detonate automatically clears the "armed" flag - Moved declaration into a header so other files can use it * Mortar weapons firing on a low arc attempt to lead moving targets * Fixed major bugs in world-space LookAtPos and LookInDir * Folded pitch control into LookAtPos and LookInDir * Units can use Remote Detonator (MDM) effectively - Fire normally, and detonate the shell near the target if it misses * Howitzers can use all mortar-hardpoint weapons - Pop Gun: wait until the target is within scan range - MDM: fire normally, and detonate the shell near the target if it misses - Mortar/Howitzer: fire in a low arc against moving targets * Fixed Comet missile not locking on - (It was using the wrong ammo cost value) * Two new difficulty options: Very Easy and Very Hard * Replaced damage/health adjustment in single player with a new mechanism - Very Easy: no damage to or from friends, 50% less damage from enemies, 50% more damage to enemies - Easy: 50% damage to or from friends, 25% less damage from enemies, 25% more damage to enemies - Medium or higher: normal damage * Difficulty setting affects enemy AI skill level in single-player - Very Easy: highest aim scatter, strong aim lag, no attempt at evasion - Easy: high aim scatter, weak aim lag, no attempt at evasion - Normal: normal aim scatter, no attempt at evasion - Hard: low aim scatter, improved tracking, evade only when fleeing - Hardest: no aim scatter, best tracking, evade at any time 2011-01-27: * Disable blocked terrain for the Spawnbuoy (NONCOLLIDABLE) (submitted by Dx) * Use terrain extents for pathing area in single-player - Single-player missions often place units outside the edge path - (I thought I had done this already, so I must have lost it) * Removed ArtilleryProcess pitch limit - This got added accidentally in a prior update * Reverted RemoteDetonator clearing armed flag in Detonate - This fixes the weapon unexpectedly firing another shot * UnBuild increases near distance threshold on deploying - This fixes the Construction Rig sometimes getting stuck when recycling an object * HoverCraft, Person, and TurretCraft compensate for hardpoint orientation like Walker - This should fix Pilot and Minelayer aim * CalcRange handles weapons whose ordnance is actually a GameObject - This fixes mine dispensers in particular * GetClosestEnemy includes player-controlled pilots - Player pilots are often more dangerous than AI vehicles :) * BuildObject automatically calls SetLocal on the host - This simplifies a bunch of MP script code managing powerups - This might help catch some cases where SetLogic isn't called * UnitTask performs steering before movement - Movement sets limits based on steering, so that needs to be done first - This should help units track fast-moving targets - (Units typically have much higher omegaSpin than omegaTurn) * Tweaked UnitTask throttle/strafe limit - Allow units to maneuver more when not using 100% steering 2011-01-29: * AdjustedMaxHealth always returns normal health - Health adjustment didn't get adjusted properly last time * ArtilleryProcess low-arc fire checks terrain intersection and friendly fire * Experimental: Scavengers skip scrap on lava or in hazard zones * Fixed a crash in FireAt when checking splash damage radius * Experimental: AddCliffForce applies (smaller) force for hazard and lava too - This should help units avoid dangerous terrain cells better * Experimental: mark cells adjacent to lava as hazard - This better matches the damage-causing area of lava 2011-01-29 update: * UnitTask FireAt can use lock-on cone angle for Launchers - This makes units much more likely to lock on and fire * Improved UnitTask aim controller - Uses relative velocity for more accurate tracking - Adjusted controller tuning parameters for better response - This fixes eternally-circling behavior for heavier vehicles * Updated unit debug info text in schematic (shift-F9) view - Moved it over so it doesn't overlap the "Build Team" menu - Rearranged entries and made them more consistent between units * Fixed a path node counting bug that would make pathing abort unexpectedly - This should fix units not finding paths to places they should 2011-02-05: * ArtilleryProcess will use high arc if the low arc is blocked by terrain * Initialize pathing system immediately after loading terrain - This allows game object initialization to access pathing cells - This fixes a crash on load in misn15.bzn when objects add hazard cells * Yet another revision of LookAtPos aim controller - Added a new term proportional to desired turn rate - This fixes circling/dancing without large tuning values - Restored original tuning parameters - Fixed turreted units overcompensating for target movement * Experimental: AI avoids shooting at Artifacts regardless of team - This fixes units firing on and destroying artifacts by accident * Experimental: fixed AI scheduler sending units to invalid locations - This should reduce the number of units getting stuck against cliffs * Fixed Soldiers not entering Barracks * Can now reload APC at a Barracks - reloadRange (50m): how close the APC needs to be to reload - reloadDelay (2s): delay time between soldiers - reloadReset (10s): cooldown time after deploy to begin reloading * Allow APC to reload at the Recycler too * APCProcess uses the new APC reload instead of "cheating" * Handle automatic leveling for remote players - This makes physics and weapon aim more consistent * Always generate pathing for the entire terrain area - Initializing pathing just after terrain crashed in MP :P - Clipping reticle/cursor commands should be enough * Gave Bolt ordnance an effect duration - This makes it more visible at high frame rates * Missile Pack/Unpack inherits from Ordnance version - This should makes it easier to maintain * Gave WeaponMine a Carrier for its weapon - This allows proper tethering for BeamGun * Experimental: reimplemented Beam and BeamGun - BeamGun creates a tethered Beam when it fires - BeamGun expires the Beam when it stops firing - Beam tracks the weapon direction while it's alive - This allows the Flash Cannon to work properly in MP * Reimplemented GameObject curPilot - Now stored as a GameObjectClass pointer . This ensures all pilot classes are loaded before runtime . (Incidentally, BZ2 works this way internally...) - GameObjectClass assigns pilot class based on nation and user/non-user . This consolidates half a dozen instances of the same code . TO DO: allow ODF to override the default assignment * ScrapField pre-loads GameObjectClass for scrap pieces * Simplified the Ordnance Pack/UnPack methods - Ordnance_SendNew and Ordnance_Receive do most of the heavy lifting - Pack and UnPack now just handle Ordnance-specific data * Improved CockpitRadar and ControlPanel object coloration - Attacked friendlies flash red instead of turning solid red - Menu modes show non-commandable (or dead) state properly * Added lead position for TAG Cannon * Improved APC reloading - Split reload out into its own state - Soldier reload replaces normal ammo-based reload - Automatically issue a reload command when empty - Do the range check every 0.2s instead of every frame - Fixed a bug with the reload delay timer * Added a variant of FindPlan to find a path to an object * Added a method to AiPath that returns its total length * Added a variant of GoNear that also takes a path * New APC reload logic - Picks its destination based on shortest path length - Uses the new path-based version of GoNear - Switches to SitSpinTask once it arrives * GotoTask can use a path as a plan if: - 1. it has no label, indicating it was generated by FindPlan - 2. it starts near the unit's current position - TO DO: find a better way to distinguish plans from loaded paths * ScavengerProcess update: - Removed RELOAD state since it's not relevant - Fixed code in Verify_Or_Request_Escorts * New Unit/Tug/Scavenger repair/reload logic - Picks its destination based on shortest path length - Uses the new path-based version of GoNear - Switches to SitSpinTask once it arrives * Thin down the Bolt effect over the effect duration * Switched Scavenger escort back to CMD_FOLLOW - CMD_DEFEND is for stationary objects like buildings :) 2011-02-06: * Fixed a case where ChargeGun wouldn't get selected as the active weapon - This fixes a crash when a NSDF Gun Tower is equipped with a MAG Cannon * Fixed ArtilleryProcess aiming - I accidentally removed the Normalize_Vector :) * Reduced APC reloadDelay from 2s to 1s * Producer uses ammo gauge as build progress bar * MultDMMission sets generated objects as local - This fixes powerups only appearing for the host * Experimental: show health and ammo gauges for base units 2011-02-06 update: * Fixed APCProcess when attached to a non-APC unit - The transports in misns2.bzn and misns7.bzn are Tugs - How did this ever work? :) 2011-02-10: * Actually fixed ArtilleryProcess this time - I thought my fix looked a bit off... * CommandPanel no longer draws black rectangles for missing names * Fixed Soviet units using American player ODF - Stupid copy/paste error... :P * Increased packing of reduced no-roll matrix - The compiler introduced padding between bitfield elements - Doing it manually shrunk it from 16 bytes to 10 (!) - This should allow more ordnance to be sent at a time :) - TO DO: expose bitfield utility functions for use by other code * Simplified some overly-complex reduce/expand functions in NetUtil * TargetCam Init clears its target and eyepoint pointers - This fixes a restart crash on misn15b.bzn * Added more ordnance types to the compact cfg list * Fixed bolts not appearing in MP (I think...) - Submit now updates the effect timer instead of Simulate - TO DO: split effect out into a separate object? * Experimental: play credits after finishing Soviet campaign * New format for reduced matrix with roll - Replaced floating-point positions with fixed-point (accurate to <1cm) - Simplified rotation encoding and made it more uniform - Doing this shrunk it from 20 bytes to 14 * BeamGun removes any tethered Beam on deletion * Fixed WeaponMine crashing when it explodes * Split Torpedo and TorpedoClass out into separate files * Fixed FireAt crashing when using RadarLauncher * FireAt now knows how to check TorpedoClass xplBlast - This should reduce units blowing themselves up by accident - TO DO: make units stay away from Torpedoes * Fixed APC constantly restarting its reload state - I hadn't set the AI process target object handle, so reload kept quitting * Fixed AvoidObject test for moving non-player objects with higher sequence number - I had the player test backwards :) - This ought to reduce units plowing straight into the player * SoldierProcess allows soldiers to strafe in combat - This helps them spread out and avoid obstacles * Improved compatibility with older hardware - Check a wider variety of pixel formats - Check depth buffer formats instead of assuming 24-bit 2011-02-12: * Fixed Bolt effect turning "inside out" while in edit-pause * NearestVehicle (used by avoidance) includes Torpedo - This makes units sort-of-try to avoid Comet/WASP * Joystick supports discrete versions of analog controls - X: HorizNeg, HorizPos - Y: VertNeg, VertPos - Z: ThrottleNeg, ThrottlePos - R: RudderNeg, RudderPos - U: USliderNeg, USliderPos - V: VSliderNeg, VSliderPos * Replaced Space Orb with Xbox 360 controller - NOTE: requires new giddi/xbox.std - Left Stick: strafe/throttle - Left Thumb: jump - Left Trigger: command - Left Bumper: alt-command - Direction Pad U/D: navigate menu - Direction Pad Right: menu select - Direction Pad Left: menu back - Right Stick: steer/pitch - Right Thumb: toggle target - Right Trigger: fire weapon - Right Bumper: cycle weapon - B Button: deploy/crouch - Y Button: hop out - B+Y Button: eject * AttackTask adds instead of replacing strafe it may hit friends * FollowTask can aim and fire at enemies without breaking formation * "Follow Close" keeps units in follow mode all the time - This prevents them from taking off after enemies - TO DO: allow units to evade while following * Fixed missing APC deploy message * Added GoNearAndSit task - Combines functionality of GoNear and SitSpinTask - Handles case where a unit gets pushed out of range * Converted units from GoNear/SitSpinTask to GoNearAndSit - Units should now move into range again if pushed out of range * Craft clears controls on snipe/abandon/eject * BeamGun detaches Beam instead of directly expiring it * Beam broadcasts reliable notification when it expires - Maybe these will help with the stuck Beam? * Person auto-levels while ascending during a jump or ejection - This fixes pilot orientation after ejecting from a large explosion 2011-02-15: * CockpitRadar draws height indicators only if they're more than 2 pixels - This reduces render state changes, improving performance - The start of play01.bzn went from 180 render batches to 110 * Fixed text buffer overflow in Alt-F framerate display - Triangle count and batch count now print properly * Replaced half-texel shift with half-pixel shift - This fixes text when forcing MSAA in the graphics driver - This also fixes blurry edges on HUD elements * Fixed a restart crash in BeamGun * LoadDefaultGame now works properly - This fixes a crash when loading from MakeTRN-generated data * TurretCraft sets itself to DEPLOYED state - This makes Howitzer use high-arc against it * Improved APC behavior when it has no reload site - Enters WAIT state for a second instead of pilot hopping out - Most importantly, it doesn't crash any more :) * Added a quick fix for the Soviet turrets in misn03.bzn - They were saved with a Reload command set to themselves - This most likely used to be a different command... 2011-02-28: * Updated crc32game asset check - Checks some additional files based on the ODF * /version command now generates the check CRC with crc32game * Host auto-kicks any player launching with an invalid vehicle * Divide rotational kick from ordnance by moment of inertia - This should prevent extreme spin and high bounces * Explosions inherit team flags like Ordnance * Fixed a crash when the damage owner dies before the damage source hits the player - TO DO: find a better way of marking damage as player or player-friend * Tweaked ordnance rotation kick - Now uses bounding sphere radius instead of collision radius * Added support for new mouse controls - X1 and X2 buttons (Windows XP): X1Btn, X2Btn ( - Vertical wheel (Windows 2000): WheelDown, WheelUp - Horizontal wheel (Windows Vista): WheelLeft, WheelRight * Added direct access to Special hardpoint - Input: added weapon_special control - Carrier: added TriggerSpecial method - UserProcess: connected the two :) - TO DO: update input.map * Renamed Carrier UnTriggerSelected to UnTriggerAll * Show join-game error messages before hiding all the dialog controls - This should fix the blank black screen behind the pop-up * D3D initialization calls set LastError - This should make the D3D error dialog show meaningful information * Slightly tweaked palette lookup of scroll-text colors - If anyone cares, it divided by 256 instead of 255 like it should have * Added support for switching between windowed and full-screen - This only works in-game; I couldn't get the shell to behave * Carrier stores the special hardpoint index - This greatly simplifies TriggerSpecial * Reduced damping and tracking for ascending airborne Person - Pilots flying upwards after ejecting gradually level out - Pilots jumping or hopping out of a vehicle don't level enough to notice * SetDamageFlags sets playerCollide and playerShot for remote players too * Experimental: toggle SpecialItem with the trigger * Craft death deletes carrier after ejecting pilot - This allows AI to reference weapons during cleanup * AI uses RED Field and Phantom VIR semi-intelligently - when attacking or attacked by a player - when attacking or attacked by someone with an affected weapon - when attacking or avoiding a torpedo (RED) - TO DO: make RED and VIR affect AI unit aim? * Experimental: compute chat color like score color - This may fix cases where the chat colors are wrong 2011-03-09: * Fixed D3D device creation for systems without HW vertex processing - The previous capabilities check didn't work as expected * FollowTask only checks for targets when weapons are enabled - This fixes Howitzers (and presumably Turrets) flailing around * Tug shows cargo in its ammo gauge * Adjusted the ordnance network-reduced matrix - XZ: 14 bit range, 6 bit fraction (was 7) - Y: 9 bit range (was 8), 6 bit fraction (was 7) - V: 12 bit angle (was 11) - This should fix ordnance disappearing on some maps * WeaponMine checks for terrain and friendlies in the way * Moved edge-path boundary check to AiMission - SP: apply only to the player - MP: apply to all craft and pilots * Alt-Enter full screen switch works in the shell now * Position window in the top left corner in full-screen mode - This fixes some rendering problems with the shell 2011-03-19: * WeaponMine skips line-of-sight for dispenser and radar launcher * Removed unused GameObject first/last/next/previous pointers * Added EnoughAmmo method to Weapon and derived classes * WeaponMine skips line-of-sight test for dispenser weapons * WeaponMine now uses Weapon EnoughAmmo method * Experimental: added some player info to the damage structure - dmg_player: did the damage come from a player? - dmg_player_id: network id of the player (or dp_ID_NONE) * RecordDeath and KillMessage now use network id from damage - This makes damage credit work even when the damage owner goes away * Experimental: disabled damage scale compensating for packet loss * Fixed window being stuck in topmost mode after switching from fullscreen * AiMission::Update skips player boundary check when there is no player object - This should fix the single-player crash when the player dies * Preliminary implementation of a new MakeZFS utility - Treats zfs files like an archive format - a: add files to zfs (applies LZO compression) - d: delete files from zfs (does not remove the original data) - x: extract files from zfs (to current working directory) - l: list files in the zfs - u: update files in zfs (does not replace the original data) - NOTE: writes can't modify existing data, only add to the end - TO DO: add a "rebuild" option to clean/compact a zfs? * Preliminary implementation of a new MakeZIX utility - Takes a descriptor file as input and generates the ZIX file - Descriptor files look like this: 0 D:\bzone BZONE 'Battlezone CD --- DIR: bzhw16l.zfs DIR: bzhw16.zfs DIR: bzhw.zfs DIR: bzsw.zfs DIR: bzone.zfs --- * Added support for mouse sensitivity setting - Minimum setting is 50% of normal - Maximum setting is 200% of normal * Producer enemy kick now hurls objects away from the center - This works much better for the Soviet units :) * Reduced APC cooldown delay to 5 seconds and reload delay to 0 seconds * Don't let a sniped pilot enter a vehicle - This fixes a rare but annoying vehicle "lockout" bug * Limit scrap value in multiplayer to half the scrap cost - This eliminates "scrapmaking" without requiring new assets * Tweaked Craft collision to avoid reading from the collided object - This should avoid some crashes where the object got deleted * Changed how the Craft explosion timer works - Set to a constant 5 seconds - Ignore health status - Ignore additional damage - Explode immediately on collision * Increased vertical "kick" on death * Dead HoverCraft uses "chunk" physics * Experimental: Tweaked AI avoidance - Don't skip moving non-player units with higher sequence numbers * Adjusted end condition in GotoTask - This might help fix an occasional crash * Doubled rotational kick for ordnance impact * Adjusted Craft terrain collision to work more like the original - This greatly reduces vertical bounce (by as much as 90%) * Restored some of the original mouse input code - Read the cursor position right before using it - Use client area instead of viewport - This shouldn't make much difference in practice... * Scavengers drop their cargo when they explode - It's only fair, and I've wanted them to do that for years :) * Moved unbuild logic from ConstructionRigProcess to ConstructionRig - ConstructionRig shows unbuild progress in its ammo gauge * Experimental: SpawnPoint GetClosestEnemy takes teams into account * Experimental: Only show base gauges when they are "interesting" - Health: when less than full - Ammo: when more than empty (e.g. showing a progress bar) * Made ZIX file name indexing more reliable - It expected names to be padded out to 16 characters with null bytes - Searching for a name not matching that requirement would fail - It now does that internally and places no restriction on the caller - This fixes some CRC checks that weren't being done * Simplified shell vehicle list loading a bit - This system is a terrible mess... :D 2011-03-28: * Properly set damage dmg_player flag - This should fix the target hit indicator * Updated Craft rotation caused by ordnance impact - Original way: no scaling - Previous way: scale by (5 * 5) / (radius * radius) - Current way: scale by 5 / radius - This reduces spin on large units, but by less than before * Silo and Producer drop excess scrap when they explode - This keeps scrap in the world instead of letting it evaporate * Fixed some effect list overflows when in the MP escape screen - This was mostly harmless but spammed trace messages in debug * Destroying a team-affiliated building counts as a kill * Restored original death threshold behavior - Objects die when their health is negative (not zero) * Added a "remote" flag to the damage structure * Restored the 7/6 damage scale for remote damage * Fixed collision damage setting perceived team - This fixes the player blowing their cover when bumping into things - This got changed by accident as part of another change :) * Fixed some Ordnance collision problems - Bullet collision handles some edge cases better - Bullet collision gets the surface normal from what it hits - Ornance hit takes that surface normal as a parameter - BounceBomb uses that surface normal to bounce - This fixes MDM and Splinter (not) bouncing * Fixed a crash in InitSpecial if UnitTask had no valid target * Checked in some changes that were in the previously-released build - Added a safety check when reading vehicle list data - Added support for wildcards in MakeZFS - /startedit implies /edit * Experimental: fixed switching to windowed mode when starting in full-screen 2011-03-30: * Fixed beams and bolts passing through targets * Revised fix for UnitTask InitSpecial crash - Again? But that trick never works... - This time for sure! :D * Not accepting level editor agreement cancels /startedit too * Disable /startedit in a net game * Fixed missing window border when switching from full-screen mode * Only give kill credit for CLASS_ID_STRUCTURE1 buildings - This fixes mines and other minor objects counting as kills * Allow Launcher target lock even without enough ammo to fire (like 1.4) * MapList Add loads the map description text instead of Load - This simplifies things a bit... * Fixed GotoTask trying to use the goto command "where" as a full path - This should make units navigate properly instead of getting stuck 2011-04-21: * Deployed craft (including Gun Towers) explode immediately * Use original building and perimeter area when unblocking - This fixes blocked cells getting left behind * GameObject sets up OBJ76 game object pointer - The constructor sets the value - The destructor clears the value - This makes GameObject_GetFromObj work much sooner * Fixed a crash in Dispenser::EnoughAmmo * AI keeps RadarDamper and ImageRefract enabled if they don't cost ammo - AI is still conservative about using them if they do cost ammo - This is mostly useful for mods * Fixed MakeZIX crash when not given an output filename - It now generates an output filename from the input filename * MakeZFS and MakeZIX projects deploy to a shared folder - They use the same destination as the game executable * Major revision to ParameterDB - Stores values in a hash table - Looks up values with label hashes - This is faster and eliminates a bunch of strings * Reverted pilot auto-leveling to 1.4-style behavior * Possible fix for crash in pathing FindStrip - Returns no strip instead of accessing invalid memory - Also removed unused useTunnel parameter * Added command-line options for saving BZN and SAV files - /asciisave saves in ascii format (default for debug) - /binarysave saves in binary format (default for non-debug) * Fixed a potential buffer overrun in to_zfsname * Increased Craft and Building scrap drop limit a bit - Odd scrapCost: allow up to scrapCost+1 (versus scrapCost-1) - Even scrapCost: allow up to scrapCost (same as before) * Adjusted avoidance "blocking" behavior - Set blocking if unable to proceed for 10 seconds (versus 5) - Reset blocking after not blocking for 1 second (versus 30) - This should reduce units plowing into obstacles * Update to TransportMode TCP (submitted by Dx) * zixBuildIndex includes files in subdirectories of addon - It has a limit of 256 paths so don't go too crazy... * Experimental: load AIP using ZIX functionality - AIPs can now be in ZFS files or addon subdirectories * Fixed Person using invalid sound names - Damage could read past the end of the painSound array - Dumb typos in PersonClass screwed up burnSound and dieSound * Fixed incorrect searchTimer save for ProximityMine 2011-05-05: * Fixed missing damage smoke on vehicles loaded from a save game * When tracking who shot it, GameObject ignores self-inflicted damage - This fixes units attempting to flee from themselves :) * UnitTask uses charge weapons a lot better - Start charging on entering combat - Continue charging if not able to hit - Choose charge level based on damage rate and ammo efficiency * TurretBlastAttack can use special weapons * FollowTask fires on enemies only while following normally - It breaks off when it needs to catch up with its follow target - This restores 1.4 behavior when it get too far away * Restored player spawn while in net escape screen... - ...but only in strategy games, where it's an exploit - Letting players take a break in DM games should be fine * Increased Craft and Building scrap drop limit to +2 total - Odd scrapCost: allow up to scrapCost+1 (1->2, 3->4, etc.) - Even scrapCost: allow up to scrapCost+2 (2->4, 4->6, etc.) * Fixed a crash in multiplayer with sniper off when a weapon was missing * Asset check in release build includes the game executable * Replaced game input key codes with virtual keys - This streamlines keyboard input quite a bit * Revised in-game text input - Gets keyboard messages from the main message handler - Handles multiple events per frame for better response - Allows key repeat like a Windows edit control - Gets fully-processed character values from Windows - Should fix input problems on non-US keyboards * Restored UnitProcess "defend" behavior during repair/reload 2011-05-06: * Fixed crash in read_gamekey_table for non-US input mappings * Fixed uninitialized key value when keyboard input is disabled 2011-05-09: * BlockCells uses an oriented bounding box for buildings like 1.4 - This fixes problems with buildings that have small collisionRadius * Fixed a potential invalid operation in NetUtil_ExpandMatrix - This would result in a completely-b0rked matrix and hilarity * Fixed uninitialized member values in Mapgrid_Goal - This was occasionally tripping a floating-point exception * Restored the original key mapping for game keys - This ought to fix problems with non-US keyboard layouts - Everything else still uses virtual keys * Restored original gamekey processing with only minor changes - The MapVirtualKey case is still baked into the VK-to-GI table * Fixed collision damage not giving credit for kills - GameObject fills in the damage structure and includes player id * Fixed incorrect usage of UnlockItem in several places - They were using the item data instead of the asset name (!) - This should fix occasional crashes in the shell lobby * Preload shadow texture instead of looking it up each time - This eliminates a bunch of UseItem calls at runtime * Switched compute_hash to a more modern hash function - Specifically: FNV-1a with XOR-folding - Also made handle a NULL pointer instead of crashing * Fixed lava and terrain-impact deaths awarding kills to all players - Damage now initializes dmg_player_id to dp_ID_NONE instead of zero 2011-05-14: * Mission cleanup now clears out the terrain editor state - This fixes stuck controls in MP after leaving SP with the editor on * Fixed a crash on starting a SP map after playing MP - Network system clears hosting and networking flags on leaving * In-game chat /kick uses the same functionality as the shell - The kicked player gets a notification and returns to the lobby * Added shell /lock and /unlock commands to control player joins * Allow shift-F9 view to zoom in further * Units treat (blocked) building cells like cliffs - This makes pathing more consistent with 1.4 * Rewrote DoStuck to handle obstacles better - Searches in 8 directions instead of 4 - Checks for collisions in those directions - This helps units escape semi-enclosed areas * Cleaned up all compiler warnings in UnitTask * Show kill message for destroying a building * Updated spawn point selection - Host player starts at a completely random spawn point - Non-DM maps spawn players at the safest location - DM maps spawn players at a weighted random location * Enabling text input clears pending key-down and character messages - This stops the game key activating the input from affecting input * Walker converges shots at the distance to its target - This makes the NSDF Sasquatch much more effective in combat * Prevent players from launching into an ended game and crashing - Host auto-locks the session when the game ends - Client in the pre-game shell disconnects when the game ends - Shell lobby game list hides locked sessions 2011-05-19: * Grey out locked sessions instead of hiding them entirely * Check for a locked or full game before attempting to join * Show a "Game Locked" message if the session is locked * Un-launched client gets a clear notification when the game ends * Fixed an exception in the shell when a map had no description - Shell uses the description file name if that file is missing - This makes it more obvious what needs fixing - TO DO: reimplement all this :) * Don't apply bullet impact scaling for objects smaller than 5m radius - This should restore "classic" strength for most user-pilotable units - As an added bonus, it solves that divide-by-zero error * More changes to DoStuck - Increased maximum search range to 50m - Checks for terrain collision in addition to geometry - Reduced false-positives in the collision check * In the 4th NSDF mission, mark the Lemnos factory as an objective * GetCommand treats objective-marked neutral objects like friends - This restores 1.4 behavior for those objects * Rebuilt the lower-right shell button bitmap - Fixed bad dithering - Fixed missing transparency * Added more color coding for game sessions - Red: unavailable map - Dim Green: full * Added an error message for unavailable map * Misn14Mission switches the team of the CCA power plants too - This fixes CCA Gun Towers not firing on the Furies * GunTowerProcess updates hazard region after switching teams * Fixed "Camera Stack Overflow" assert in Misn17Mission * Fixed crash on losing last life in strategy MP with sync off - This was a stack overflow caused by a recursive respawn loop (!) * Exit the simulation more cleanly after leaving a game - This prevents view update asserts in non-release builds - This also prevent an unnecessary resolution change :) * Shell commands support referencing players by id number - Added /players command listing players by id and name - Other commands can take an id in place of a name 2011-05-25: * Fixed a problem with SP campaign screen once the campaign is done - It was setting up mission info screen with bad data before jumping to the mission archive * Restored "/system on" and "/system off" commands * Adjusted the message displayed for a missing map - "Mission not found" (multi_error/missing_map) * NetPlayer iterator returns a dpid instead of a name pointer - This fixes chat not handling players with the same name * In-game whisper prompt shows numeric id in addition to name - This disambiguates players when they have the same name - For example, "To Ultraken (#1):" and "To Ultraken (#4):" * Added checks to the mission archive to prevent scrolling past the end * Allow pilots to strafe like soldiers - Now they can sidestep the player's line of fire too :) * Improved AI support for minimum safe range - CalcRange calculates minimum range based on blast radius - DoBlast and DoStand try to stay outside that range - UpdateWeapon won't fire while too close, but: . Slowly reduces the distance threshold over time . Quickly reduces that distance threshold when getting shot . Resets the distance threshold once it fires * In-game chat supports mute/unmute and system on/off * In-game chat supports lock/unlock commands * Added shared Net_KickPlayer, Net_LockGame, and Net_UnlockGame * Added system messages for kick, lock, and unlock * Fixed empty player list in the lobby after returning from a game - The net shell dialog resets all its lists and rebuilds them * Reorganized player info (I), email (E), and web page (P) code - It now looks up localized text as needed - Eliminated some temporary buffer allocations - TO DO: revise the localized text in label.map? * Howitzers will aim high to shoot over friendlies in the way * MayHitFriends ignores signs, mines, and spray bombs - This will make AI fire over or around these things * Added more protection against some divide-by-zero errors - Normalizing a zero-length vector was a common problem - Explosions with frameCount or frameRate of zero was another * Added /system and /nosystem as alternates to /system on and /system off * Adjust desired range in DoBlast - Add unit and target radius to the set value - Clamp the value between the close range and weapon range * UpdateWeapon now checks if the projectile will actually hit - This fixes AI's first shot(s) at some buildings going wide - This was most noticeable with tall, thin buildings - This especially benefits slow-firing weapons like the Rocket Bomb * CommandPanel shows gauges for producers only when health or ammo changes * Fixed a crash in WeaponMine on first simulation * Inst04Mission no longer asserts when startVoice is set to nothing * Adjusted SpawnPoint selection - Ignore teams in DM since everyone is an enemy - GetWeighted ignores things further than 300m away 2011-05-26: * Moved bullet collision test into a new IntersectGameObject function - This function handles "simple" collision (e.g. sphere) properly - This fixes AI units not shooting at deployed turrets 2011-06-06: * Fixed shell problems after finishing the training and USSR campaigns * SoldierProcess will use the target of CMD_GET_IN - This fixes engineers not going to the APC in Soviet mission 7 * Audio system rounds volume to nearest instead of down - This fixes the engine idle dropping out at effect volume 1 * Treat neutral collision or shot like friendly - This should fix spurious attack warnings * Weapon properly initializes its last fire time - This fixes an occasional invalid operation on startup in MP * Fixed missing player stats in net escape screen * User vehicle with no pilot works without errors: - BettyVoice can use vehicle nation as a fallback - Disable eject control - Enter "death cam" view and start respawn on death * Moved common player death operations to Net_KillPlayer - Deducts a life in strategy games - Sets the respawn timer * Moved common respawn operations to mission Respawn - Restores camera to cockpit view - Enables player input - ST only does this when the player has a life left * Net escape dialog monitors scores and win/lose conditions - Refresh the score display when something changes . TO DO: fix the visible redraw? - Pop up the appropriate message on win or lose . "You won" (multi_common/you_won) . "You have been eliminated!" (multi_common/you_lose) - Remove the back button when the game is over * Player numeric ids increase by 1 instead of 4 * Fixed issues with /mute and /unmute commands - In-game versions work :) - Shell versions work when using numeric id * Combined SyncGame (pre-game and in-game) and SyncPostGame (escape and post-game) player lists - This makes player state consistent throughout the game session - Mute works between pre-game, in-game, escape, and post-game * Updated ConstructionRig power check - Now includes ShieldTower (for custom IA maps) - Uses the same distance check as powered buildings * Remove AI process when a self-piloted Craft dies - This fixes an assert * Preliminary implementation of high-ping auto-kick - Default threshold is 2000ms - Override with AutoKickPing in net.ini * Increased Entity limit to 768 * Reduced the size of the Entity structure by 80 bytes (!) - Eliminated unneeded values (PosVel and half of shadowPoly[]) - Compacted some values (lodFlags and animFlags) * Fixed object Y position "wrapping around" in MP - This particularly affected launched powerups * Improved synchronization of airborne powerups in MP * Prevent DayWrecker from hitting the Armory on the way out * Don't send "local hit" notification for deployed craft * Reduced matrix sends height as offset from minimum terrain Y - This eliminates height range wasted below the ground * WIP: reformatted net logging output to pack.txt * Host waits to send out spawn points until after it has picked one - This fixes players ending up at the same spawn point * Reduced the size of PowerUp net state - It now uses the same compression as HoverCraft :) 2011-06-11: * Fixed problems with per-polygon collision: - Stack corruption and uninitialized values in BoxGeom - OBJ_CLSN_STATIC_ALLPOLY case in SetObjCollision - Broken inside_poly check in PointVelPoly * Added support for CLASS_ID_STRUCTURE2 buildings - classLabel = "i76building2" - Defaults to static per-polygon collision - Supports floor geometry (e.g. bridges) * Bullets use shared PointEntityCheck for hierarchical collisions - This allows per-polygon collision and eliminates some redundant code * Adjusted the Seismic Wave - Restored the vigorous shake effect for movable objects - Damped and leveled Gun Towers and Walkers so they don't flip around wildly - Replaced hard-wired constants with ODF parameters . waveRadius: size of the wave in meters (default 50m) . waveHeight: height of the wave in meters (default 6m) . rampUpTime: time to ramp up to full strength (default 5s) . rampDownTime: time to ramp down to zero strength (default 2s) . sweepOmega: how hard to sweep object rotation (default 100) . sweepVeloc: how hard to sweep object velocity (default 50) . shakeOmega: how hard to shake object rotation (default 1) . shakeVeloc: how hard to shake object velocity (default 5) . buildingScale: damage scale for buildings (default 1) - Gave it a distinct "wave" profile with crest and trough - Adjusted its falloff curve to have a wider, flatter peak and narrower fringe * Rewrote Floor_GetFloor to treat terrain as the absolute minimum - This prevents submarining/tunneling when the floor goes underground * Treat floor collision like any other collision * AdjustDamageValues uses dmg_player and dmg_source instead of damager - This should fix damage not getting adjusted if the damager dies * SprayBomb transfers player ownership to the created bullets * Popper transfers player ownership to its launched projectile * Initialize pathing in LoadDefaultGame - This fixes an AI crash after loading terrain with no mission * Clear collision range search pointer on cleanup * Don't call DoNetEscapeFrame if there's no current AI mission - This should help prevent an occasional crash * DistributedObject clearly separate local IDs and player data keys - Local IDs are 32-bit and based on owner player ID and sequence number - Data keys are 16-bit and based on global/local and sequence number - This fixes local IDs for later players wrapping around and conflicting * Added a player data value for the local object count - This fixes joiners not seeing some objects a long-running game * Ordnance now sends its owner object as a data key - This fixes ordnance ownership for the 8th player and beyond * Fixed players being unable to join after a host migration - Net::HandleSpawnPoint wasn't clearing the player wait for spawn * Fixed unit voice messages not playing at volume level 1 * Tweaked SeismicWave some more - Start half a wave radius ahead to avoid shaking launcher - Don't move around floor-owning objects (e.g. bridges) * Fixed AIP parser passing large string buffers by value * AIP_load_AIP now stops scanning the AIP name at the beginning - It previously kept going until it found a backslash somewhere in memory - This fixes an occasional crash due to stack overflow * Yet more SeismicWave tweaks - Scale shake effect by the time step again... - Added walkerScale and towerScale properties to the ODF - Added dampOmega and levelOmega properties to the ODF - Adjusted default tuning parameters 2011-06-14: * Fixed mission names not appearing in the Mission Archives in full-screen * Fixed up SAV attack - Fixed attack timing out while descending - Fixed weapon aiming too high * AI considers Torpedoes important friends - This fixes units accidentally shooting down WASP/Comet * Fixed AI choosing a Dispenser as its primary weapon - This fixes SAV/SAT not firing its lightning gun * Yet another SeismicWave adjustment - Reduced the overpowered shake effect - Set effect falloff with distance closer to BZ 1.4 - Added shakeFrequency ODF parameter (default 3Hz) * Fixed the "Mission Misson %s not found not found" dialog in the lobby * Updated Ordnance_Receive - Create and update use the same time adjustment code - Streamlined handling of large time adjustments 2011-06-19: * AI Scheduler prints error messages instead of exiting silently * Set default SeismicWave parameters to emulate "classic" behavior - This also means units get flipped underground again :( * Experimental: invalidate the window rectangle on mode switch - This might help with blank escape and post-mission screens on Vista 64 * Combined PlayerList DeletePlayers and Clear - This may fix cases where players don't appear in the player list * Updated high-ping auto-kick - autoKickStart: how long after join to start checking (default 10000ms) - autoKickTime: how long to allow high ping before kicking (default 1000ms) * Updated CD audio system - Reliably plays music from a virtual CD drive - Uses the audio mixer so music volume works on modern systems - TO DO: stop CD playback at zero volume * Auto-kick start and time actually work now :) * Fixed network debug display not appearing * Network debug display also shows stats for reliable messages * Moved Network debug display draw to RenderHUD * Added an in-game measurement of average loss based on ping packets - autoKickLoss: how high a loss to tolerate (default 50%) * Raised default auto-kick time to 10 seconds since pings get sent 1-3 seconds apart * Moved auto-kick mechanism to NetPlayer::SendOutPings - This makes the timing more consistent * Made lag notification less verbose * Fixed BettyVoice stopping notifications after a while - This would happen when it couldn't play the VO sound * Defer chat messages when they can't be sent - This prevents the " Send buffer full, message not sent." - NOTE: exiting a shell page cancels any deferred messages * Fixed some cases where IntersectGameObject was being used wrong 2011-06-25: * Switched back to the original volume setting code for CD audio - The mixer set the volume for the entire application (!) * Adjusted formatting for strategic AI logging * Initialize strategic AI attachments to zero * Workaround for invalid unit type in AI_Match_Get_Unit_Strength - It still asserts but won't crash - It also tries to print the name of the offending unit * Set the SeismicWave falloff to match the original version - I had made this change before but managed to lose it somehow * Auto-kick start time begins when a player first spawns - This should prevent spurious auto-kicks while loading * Rollback: invalidate the window rectangle on mode switch - It didn't help, unfortunately * Reverted: Allow straight-line pathing when airborne regardless of terrain cell type - Instead, units don't get stuck on blocked terrain while airborne - This fixes ejected pilots getting stuck while going straight to their target after landing * Fixed some memory copies in VehicleList and SimpleVehicleList Load * Pilot going for an empty vehicle locks it - This prevents other pilots on that team from going for it too * Shell WM_PAINT cases return 0 to indicate they handled the message - Maybe this will help with the black screen problem... * Barracks starts pilots as airborne so they can maneuver on the way up * Multiplayer shell fixes - Fixed some potentially uninitialized values - Fixed memory corruption in PlayerInfo constructor * Net game dialog now loads map description and vehicle list "on demand" - The dialog works correctly even if the map is not listed in netmis.txt - NOTE: it shows the map's filename instead of its label in that case * Fixed an exception in the net game dialog on exiting the application * Net error dialog runs the networking system if necessary - This fixes players lagging out if they don't click OK fast enough * Update networking thread more frequently while loading - This should reduce high ping times while players load * Enable C runtime library debugging features in the debug build - Log warnings, errors, and asserts to bzone.log and debug output - Show a dialog window for errors and asserts - Check for memory corruption if started from a debugger - Check for memory leaks if started from a debugger * File cache improvements - Read file data into the cache buffer directly without a memcpy - Add a null byte after the data so UseItem can be used as a string * Took advantage of the new null-terminated UseItem - Unfortunately, there were only two places that could use it - Other places modify the data buffer using strtok * Cleaned up memory leaks - Enabled full memory allocation tracking in debug - Fixed a bunch of places using delete instead of delete[] - Fixed a bunch of allocated objects that were never freed 2011-07-02: * Fixed the load screen image disappearing prematurely * Final (?) SeismicWave revision - Restored original "hump" shape - Restored original effect falloff - Removed the start offset by default * Fixed FindPath sometimes not moving the end point off blocked cells - This was the cause of severe frame rate problems in some cases * AiUtil and Path use terrain grid extents instead of computing their own * Restored original drag effect for empty HoverCraft - This should fix empty units from sticking to walls - It now uses a variant of Tug's fix to units getting stuck underground * Strategic AI clears all allocated memory - This fixes a bunch of uninitialized values 2011-07-10: * Allow sprite depth closer to near clipping plane * Fixed status display getting overdrawn by the sniper rifle in widescreen resolution * Offset position when spawning an object at a vehicle or building - This fixes units getting stuck inside the Recycler or Factory * Allow units to ignore collision in Stuck state - This allows them to escape bad situations * Erase unused entries from DistributedObjectMap * Ordnance uses 32-bit object identifier for its owner - This should fix cases where remote ordnance couldn't find its owner * DistributedObject generates keys for permanent state from game object indices: - eliminates conversions between object identifiers and keys - limits the range of possible keys to 512 - reduces memory use by reusing permanent state blocks - unifies permanent state for "global" (loaded) and "local" (created) objects - fixes objects created on a remote system (e.g. sniped vehicles) * BlockedCellClean cleans up any leftover building and perimeter areas * DistributedObject network updates - Send all state updates in combined update packets . It previously sent one combined packet and then single-object packets . This cuts out a lot of UDP packet overhead - Added support for data compression of combined state packets . This reduces packet size up to 40% . More object state fits in one packet, further reducing overhead UPDATE: * In-game chat uses its own setting for system messages - They're on by default in-game * Network data compression update - Added UseCompression option to net.ini, disabled by default - Send compressed packets with uncompressed time stamps - Shell handles compressed packets * Network shell update - Can read time stamps from compressed state packets - Added build date and check crc above the lobby chat window - Disabled system messages by default * Seismic wave limits time step like it did in 1.4 2011-07-16: * Added %loss to the stats in the score display - In-game measurement of loss isn't very accurate right now * Map/Cockpit radar toggle is now a normal game key - This means it can now be changed in gamekeys.map * If no text input is active, intercept the caps lock key - This prevents radar toggle from engaging caps lock - When text input is active, caps lock works normally * DistributedObject displays an error if it can't find the game object class - It previously crashed :P * Check device format when looking for a depth buffer format - This fixes a D3D debug error * Moved D3D_Flush_Texture_Cache ahead of D3DAppDestroy in D3DAppIResetDevice - That's the order Close_D3D_App does it 2011-07-24: * Allow the shell chat window to get focus when clicked - This makes Ctrl-C (copy) work correctly - This also enables keyboard navigation and selection * Return focus back to the chat edit box by pressing Tab * Shell zeroes out all pointers after deleting them - This fixed a crash when re-entering Combat Exercises after finishing the series * Minelayer checks for good positions using GoodScrapPosition - They now avoid hazard areas (e.g. Gun Tower coverage) and lava * Added experimental support for setting IP ports in net.ini - ConnectPortInternet: port to use for Internet (winets2.dll) - ConnectPortLAN: port to use for TCP/IP LAN (wudplan.dll) * Added more cases to re-enable collision after getting stuck - Maybe this will help with cass of units being uncollidable * Fixed a potential divide by zero in FindPath - This happened when the start and goal were on the same spot on blocked terrain * Fixed a floating-point conversion error in Precompute_Matches - It was trying to convert a value larger than the maximum integer value - Solution: make max_priority a double like the min_priority :) * Cap scrap drop to 75% of remaining game objects - This prevents a crash when trying to drop too much * Fixed large-radius bullets (e.g. MAG) sometimes not colliding * Fixed a potential divide-by-zero in Terrain_GetIntersection 2011-07-31: * Exiting stuck state properly clears the non-collide flag - This time for sure! * ApplyCliffForce takes object size into account - This should fix large units getting hung up on steep cliffs * Fixed Gun Tower leaving hazard cells behind * Fixed a crash in AIP_Load_Force_Matching when it can't find a unit - This would happen in a save game where all AI producers have been destroyed * Don't destroy objects created during mission load when the host leaves the game * Improved assert message for missing ODF files * Added error check when decompressing compressed packets * Added assert in decode_odf when the input value is out of range * Fixed state packet compression so it's safe to use now - State packets past the first were malformed when the first held ordnance data * Don't add sloped/perimeter cells around proximity mines * Added a separate GoodMinePosition function for use by Minelayers - It rejects locations in cells adjacent to hazard, lava, or cliff - This gives Minelayers a larger safety margin * GoPoints makes the unit sit while "thinking" instead of letting it drift - This fixes Minelayers sailing past their targets into hazards or off cliffs * Added GoPoints::DoArrived virtual function called when it reaches the next point - This fixes Minelayers laying several mines at the same spot when it gets not-OK paths * Grenade and Missile set notifyRemote by default instead of Rocket - This should fix disappearing shots for AT-Stabber and SP-Stabber - NOTE: this might cause issues with the Rocket Bomb weapon * PreloadTextures checks to make sure mipmaps are properly sized - If not, it disables mipmapping for that texture - This fixes a crash in D3D * Exclude edge_path from powerup spawn paths :) * Experimental: AddCliffForce extends area based on object velocity - This should give units more time to react when approaching obstacles * Ordnance_Receive calls Control in addition to Simulate when advancing ordnance - This should sync Missiles better at high network latency * Restored shell support for King of the Hill - Use K as the mission type in netmis.txt * Moved King of the Hill item in the map filter list * Update scores more often so King of the Hill time looks better - It previously udpated once every two seconds * Added separate packets and messages for auto-kick - System message: "Host auto-kicked " - Error dialog: "You have been auto-kicked due to lag" * Fixed some problems with MakeZFS - Check return value from zfsReadRecord to prevent a crash if it returns NULL - Free buffer allocated by zfsReadRecord to reduce excess memory usage * BounceBomb/SprayBomb send an ordnance update on bouncing - I added the code long ago but it was never triggered properly 2011-08-09: * Fixed default file extension for mission save dialog - It was "msn" when it should have been "bzn" * Fixed terrain save when the path had a period in it - It was chopping off everything after the first period (!) * Use strrchr to find file extension instead of strstr - It finds the last period instead of the first * Bullet simulation records a hit if it starts the frame underground - This fixes shots falling through terrain moved by SeismicWave * Torpedo gives proper kill credit when its owner dies mid-flight - The implementation is a bit sketchy but it works * Limit cliff force to 100% of the base value - This prevents unnecessary avoidance of sloped cells * Add sloped cells at the foot of sheer cliffs - This keeps unit paths away from walls * Terrain distance check in DoStuck takes object radius into account * Shell rendering update - Removed ValidateRect from WM_PAINT since BeginPaint already does that - Fixed flicker when drawing TextWindow and TabTextWindow contents - Net escape dialog draws the stats display instead of triggering WM_PAINT * Fixed a crash in ZFS when the file name was longer than 16 characters * MakeZFS now supports the ZFS encryption feature * Fixed MakeZFS version of crc32 - This fixes the -p option * Another MakeZFS update - Don't add a file if it already exists in the ZFS - Fixed formatting of the file list * Increased target cam visibility range to 250m - This fixes views of especially-large objects like Launch Pads * Prevent multiple calls to Net_KillPlayer from deducting more than one life * Clamp visible player lives to a minimum of zero * Fixed wildcard matching in MakeZFS * Added some checks in the shell for Net::dp being set * UnitTask DoGoto checks for straight path to the current target node - This prevents it from "snapping" a path segment when it would then cross a pathing obstacle * DistributedObject functions reading permanent state use the passed-in buffer - They previously ignored it and used dpGetPlayerData - This may help with the "breakdancing units" problem * Fixed area threshold in FindShortPath being too low * FindPath no longer tries FindShortPath first - It would sometimes generate strange or problematic paths - In particular, it could return a path going straight off a ledge (!) * Added high-cost "steep" cell type at 70% grade - Unit will cross "steep" areas only if they have to - This should makes pathing work more like 1.4 * Path BuildZone combines strips into slabs based on material, not cell type flags - Material is what actually matters to path planning :) * Added ReadyToFire method to Weapon * CellTypeChange allows masking * IsStraightPlan ignores friendly hazard cells - This cleans up unit paths passing through a friendly hazard area * Fixed CellIsBlocked treating sloped and steep as blocking * Improved Mine Layer - Lay mines in a tighter pattern to reduce navigation problems - Wait at a destination point only until the weapon is ready 2011-08-21: * Fixed bouncing ordnance sticking or bouncing oddly from steep walls - The bullet underground check didn't test whether the shot was incoming * Pathing tries several directions when moving the goal off building cells - This improves the chance of generating a good path on complicated maps - In particular, this fixes pilots getting stuck while trying to return to base * Adjust the size of the info/objective display if the text is too large to fit - This fixes some player-made maps that are unusually "talky" * Fixed state packet decode when ordnance state was 128 bytes or longer - It read the size as signed, which would "wrap around" to negative - It then tried to read ordnance state and random garbage as object state * Mission-loaded (global) objects now use a separate range of keys - This fixes destroyed objects not being destroyed for players joining late * Mission-loaded (global) objects belong to no player - This fixes the host's flag appearing over them if they were not neutral - This fixes the host getting credit for kills made by mission-loaded units * Fixed input configuration dialog not getting arrow keys * String form of ParameterDB::Get takes buffer size into account - This prevents it from writing past the end of the buffer * GoPoints no longer generates plans crossing lava - TO DO: handle this in a more general way...? * Changed how lava damage works - Apply damage only when touching or directly above a lava cell - Damage depends on the number of surrounding lava cells . 25% on an outer corner cell (3 neighbors) . 50% on an edge cell (5 neighbors) . 75% on an inner corner cell (7 neighbors) . 100% on an interior cell (8 neighbors) - Fixed position rounding so it's consistent in all directions * Reduced MultST spawn height to 50m * Fixed strategic AI not building units after a while * Fixed window minimize/maximize when clicking in the Windows taskbar * Add a more visible screen effect when taking lava damage * Changed object repulsion force calculation - Uses a simple a linear falloff instead of inverse-square - Works properly when using much smaller repulsion forces . LATERAL_AVOIDANCE_MULTIPLIER: 20.0 (versus 600.0) . REPULSIVE_COEFFICIENT: 20 (versus 1200.0) - Allows cliff repulsion forces to take precedence 2011-08-22: * Fixed units not being able to recycle - The pathing system wasn't generating the path properly * Reverted application activate/deactivate changes - This should fix the blank-screen problems * Don't try to restore the window on activation in windowed mode - Windows handles this on its own just fine :) * Fixed cases where ScheduleGlue could generate bad destinations * Fixed build effect when a producer has excess build time - This was most noticeable during the opening cinematic of misn14.bzn * PersonProcess supports independence - Will only try to get into vehicles or retreat when independent * Misn14Mission sets pilots waiting for rescue as not independent - This fixes those pilots retreating towards the Recycler * Fixed a potential divide-by-zero error in FindPotentialField * TurretTank aim converges and compensates for hardpoint orientation 2011-08-31: * TurretTank aim converges and compensates for hardpoint orientation * Added drop-shadow to multiplayer score display * Fixed a crash in InfoDisplay * Armory AI waits to launch repair/ammo until it's done building the previous item * Increased pathing "long search" threshold from 200 strips to 1024 - This should improve pathing quality on complex maps * Buildings don't drop scrap in DM - Vehicles already behave this way * Phantom VIR hides damage smoke too * Skip the local player when getting permanent object state from Anet - This is done at sync start and "checking for powerups" * Fixed some host migration problems - Fixed joiners not seeing destroyed global objects as destroyed - Fixed global objects getting the new host's identifier * Read permanent state of global objects only from the host player * New host takes ownership of global objects and the previous host's local objects on host migration - This fixes global objects becoming indestructible - This fixes powerups double-spawning * UnitTask DrawState draws the force vector in yellow instead of green - This makes it visible for friendly units with a large collision radius * Made DoRecycle more tolerant for large units - It's done when the unit gets within the sum collision radii plus 5m * Set shell to single-buffered - This might help with some of the shell rendering problems... * Fixed problems in the shell when repainting the window - Redraw the whole background bitmap to fix the black/glitched image - Fixed missing Combat Exercises and Load Saved Game icons * Reverted object avoidance changes - TO DO: add MicroPlan functionality from BZ2? * IA and DM missions don't try to use "path_" paths for powerups * Fix the Armory launching the wrong item to a unit requesting a repair/reload - This would happen after selecting a weapon powerup from the menu but not launching it 2011-09-01: * InfoDisplay will ignore a missing objective text file - This fixes the empty objective box on defeat in "Red Arrival" * Reverted changes from revision 989 ("Set shell to single-buffered") - This should fix the "Create D3D device failed" error * Rebuild pathing after editing the terrain * Added support for saving terrain without saving a mission file - Added "Battlezone Terrain (*.TRN)" to file types in the save dialog - When saving only terrain, write terrain data even if it hasn't changed * Scavengers now save how much scrap they're holding * UnitTask properly saves and loads the stuck check timer - This fixes units sometimes triggering stuck behavior on load * Fixed window paint in mission archive, net game, and joystick dialogs - TO DO: use off-screen compositing to fix flicker * DayWrecker uses a building explosion if destroyed in midair - TO DO: use a punchier explosion * Barracks only sends a pilot to an empty unit if it won't overfill the category - ...a teammate that has been abandoned or sniped (grey in the command menu) - ...a non-teammate in a category with an available slot 2011-09-03: * Joystick dialog clears the background area again * Fixed compression in TempStateSendAll failing in optimized builds - It would end up with an uncompressed data packet too large to send - This should fix the "breakdancing units" glitch * Uproot deployed TurretTanks and set their death timer when destroyed - They now get tossed into the air and knocked back like other craft * Removed weapon convergence from TurretTank - It wasn't necessary and may throw off the aim of Howitzers * Fixed some uninitialized values in GotoTask - This fixes producers not deploying at a geyser when loaded from a save game * Fixed recycling units and retreating pilots and soldiers not arriving - They now compensate for the target building's square footprint * UnitTask GotoForce only applies velocity damping for the last point - This ensures units normally use full throttle * Removed the player path hack in "Red Arrival" - I changed the path in the editor to clear all the obstacles 2011-09-08: * Don't apply cliff force to airborne units - This lets pilots hopping out of a Barracks escape properly - They still take cliffs into account when path planning * Pilot only goes to an empty unit if it won't overfill the category - ...a teammate that has been abandoned or sniped (grey in the command menu) - ...a non-teammate in a category with an available slot * Added network debug statistics for outgoing DistributedObject temp state - Packet: number of state packets sent out last update - Comp: compressed size of the packets sent out last update - Orig: uncompressed size of the packets sent out last update * Disable EXIT_SIM_FAIL (Ctrl+X) in multiplayer - EXIT_SIM_SUCCEED already worked this way * Fixed the "breakdancing units" bug (finally!) - dpSend wrote data after the packet, overwriting the next object's orientation * Added object count to the DistributedObject statistics * Producer checks to make sure its geyser power source is valid - This should help with constantly deploying/undeploying producer units in multiplayer - The producer would choose the wrong geyser before getting moved into position * TurretCraft manages hazard cells instead of GunTowerProcess - This makes terrain hazard work properly for remote Gun Towers * Reduced calculated range of Proximity mine to 50m (like 1.4) * FollowTask won't try to fire using a dispenser weapon - This prevents Minelayers from dropping mines while following 2011-09-12: * Fixed "ghost" objects hanging around when an object slot got recycled - DistributedObject tracks what identifier is associated withe each slot - Remove the object with the old identifier when the identifier changes * Fixed some issues with remote copies of Person - ...vanishing instead of exploding when killed (broke in revision 412) - ...hanging around for a bit after the original entered a vehicle * Shell update - Mute button toggles mute status instead of only setting it - Chat queues the message for any send error, not just "full" * Fixed the net game shell when no map was selected (e.g. everything filtered out) - Clear out the map icon and description - Hide the launch button and ignore any attempt to launch * Fixed some issues in Producer::HasPower - Unlock the Geyser before giving up on it as too far away - Reduced the auto-deploy radius so the Producer won't coast out of range * Disable strategy game victory condition when sync is off - This fixes players in the escape screen getting the notification * Non-host players stop simulating when they get a game-stopping event - This fixes players returning to the (now-disconnected) game after clicking OK * Shell prints the number of pending outgoing messages when they start to pile up - This usually indicates a connectivity problem * Show system messages in the net escape screen - ...assuming /system or /system on * Reimplemented system messages in the escape screen - It now uses a similar mechanism to regular chat messages - This is only marginally less hacky... :) * Net::Execute checks for stop game before doing anything else - This should fix some Anet-related asserts due to the session being lost * Disable the /lock command after the game ends - /unlock already worked this way * Don't spam stop-game packets after ending the game - Sending them reliably should be more than sufficient - This fixes a spurious Pending count in the post-game screen 2011-09-18: * Person delays deletion in multiplayer only until it gets sent - It vanishes instantly in single-player - It previously used a fixed 0.1s timer in both single- and multiplayer * Suppress "Pick Me Up" command for unpiloted vehicles - The player can never enter those vehicles so it was misleading * Added sanity checks to Craft - If the position is invalid (NaN), teleport to the center of the map - If the position is outside the world, teleport to the edge of the map - If the velocity is invalid (NaN), set to zero - If the velocity is higher than 1000 m/s, clamp it to that value - TO DO: figure out why units sometimes leave the world in multiplayer * Fixed object temp state packets not having their time stamps set - They were using whatever garbage was on the stack - Receivers got a floating-point exception if the value happened to be NaN - This should fix the crashes that sometimes happen when a player leaves * Reverted some of the changes to shell stop-game handling - Recent changes may have caused some of the post-game problems * (Re)fixed players returning to simulation after being disconnected - It now uses SetRunnning(RUN_WAS_QUIT) to stop the simulation directly * Fixed the "you won" message not appearing for a sync-on strategy game * Keep simulation running after defeat in strategic multiplayer - The player's base and units remain functional until the player leaves the game - This is how 1.4 worked * Reduce the send priority of empty, stationary hover vehicles - This works similarly to a deployed Producer * Remote powerups explode on death - This uses very similar logic to Person 2011-09-20: * Emergency fix for "infinite Torpedoes" bug - Torpedo wasn't responding properly to the new DEAD powerup flag * Don't print death notices for non-player-owned buildings and units * Fixed potentially uninitialized stuck state values in RecycleTask 2011-09-21: * Added Catapult animation for armories (submitted by Dx) * Strategy mission no longer quits the simulation on defeat * Run simulation while the escape screen error dialog is visible - This fixes remote copies of buildings and units going inert * Info display ignores cloaked and dead objects - This should hide not-quite-removed-yet pilots in multiplayer * Craft ignore collisions with deceased pilots 2011-09-23: * Restored the team check for recording deaths - This fixes players getting kill credits for empty vehicles * When (auto)kicked, close the session before showing the message pop-up - This fixes the host kicking repeatedly until the kicked player clicks OK * Don't relinquish spawn points in strategy games games - This prevents joining players from spawning in another player's base 2011-09-24 (RC1): * Assign the host's spawn point so joining players can't pick it - This should prevent players from spawning in the host's base * Armory starts catapult animation in LaunchItem - The pause at the start of the animation exactly matches the build time 2011-09-25 (RC2): * Fixed some minor issues with the net escape dialog - Fixed the "NULL" appearing at the bottom - Give the chat edit box focus on startup * Restored the original Producer auto-deploy radius (10m) * Getting (auto)kicked while in the options menu no longer breaks the shell * Added support for removing a player from the game when kicked - Added RemovePlayerOnKick option to net.ini, disabled by default - Auto-quit when receiving a delete player for yourself * Clear the user team list on quit - This fixes an occasional crash when starting another game * ReceivePermState won't create an object if DESTROY is set 2011-09-26 (RC3): * Fixed the crash when a player died in multiplayer * When going to a powerup or scrap piece, GotoTask uses the original 5m distance - This fixes Producers stopping short of nav beacons placed on geysers 2011-09-26 (RC4): * Lifted category restrictions on empty units for non-player teams - Barracks will create pilots for empty units even if the category is full - Pilots will go for empty units even if the category is full * Retreating pilots don't get absorbed by a Barracks when starting - This gives them a chance to seek an empty vehicle * SetLocal only writes Anet player data for objects saving permanent data - This is how 1.4 worked so it's best to revert to that behavior * Ignore packets from players no longer in the session - This fixes "ghost" objects when kicking players using RemovePlayerOnKick * Fixed a crash in Set_Cockpit_View when dropped from a net session * PowerUp RegCollision ignores collision when marked as DEAD * Zero out memory when building a remote-delete packet - Destroy and BroadCastGrabObject already work this way (as of revision 1021) * Powerup GetRank no longer depends on velocity - This may have been causing the powerup "respawn" right after being collected 2011-09-29 (RC5): * Fixed Music Volume not playing at volume level 1 (submitted by Dx) * Read BZPLYR.DEF from the application's install folder like 1.4 * GetEmptyVehicle and Barracks use a shared "team has a free slot" check - This fixes pilots sometimes not going for vehicle they should * Adjusted default settings for a new player profile - Sky Detail: FULL - Terrain Detail: HI RES - Object Detail: HI RES - Automatic Leveling: ON - Target Lead Position: ON 2011-10-01 (RC6) * Restored original PersonRetreat behavior * Fixed in-game chat echoing commands like normal messages - Other players didn't see it but it was confusing * Provide human-readable messages for chat commands - /system on or /system: "Show system messages" (multi_message/system_on) - /system off or /nosystem: "Hide system messages" (multi_message/system_off) - /mute: "Muted " (multi_message/muted) - /unmute: "Un-muted " (multi_message/unmuted) - /kick (host): "Kicked " (multi_message/kicked) - /kick (client): "Only the host can kick" (multi_message/only_host_kick) - /lock (host): "Game locked" (multi_message/locked) - /lock (client): "Only the host can lock" (multi_message/only_host_lock) - /unlock (host): "Game unlocked" (multi_message/locked) - /unlock (client): "Only the host can unlock" (multi_message/only_host_unlock) - TO DO: update label.map * Set focus on chat edit box as part of creating the net escape dialog - I had accidentally put it in the window paint event handler * Simplified how the network system tracks player lives - It now uses the value in Anet player data exclusively - This should reduce the chance of the value getting out of whack * Fixed a crash when the D3D occlusion query fails to initialize properly * PerimeterCells leaves non-flat terrain alone * TurretTank and Howitzer update pathing cells when deployed - They mark their collision radius as perimeter (like a Pylon) - They mark their engagement radius as hazard (like a Gun Tower) - This makes units navigate around them more intelligently * Synchronize player list on entering the net escape dialog - This should fix players names left behind in the list 2011-10-02 (RC6a) * Fixed a potential invalid floating-point operation in the scoring system - The "time in zone" case was messed up * Skip over yourself when selecting a chat destination in-game - Whispering, muting, and unmuting yourself are useless - Kicking yourself can break the networking system 2011-10-05 (RC7) * Reduced the delay time in the net escape screen when running simulation - It now uses a 10ms delay plus however long the simulation takes - This also applies while the message pop-up is active * Reorganized shell code that creates or joins a game session - It now does this before actually going to the net game dialog - This fixes the blank screen with an error dialog when things go wrong * Updated FlagDisplay - Fixed flags sorting in front of HUD elements - Fixed flag colors sometimes being wrong * DistributedObject state updates include a size value - This ensures receivers can skip objects without getting misaligned - This should fix the randomly-appearing units * Object deletion messages indicate whether an object should explode or not - Person and PowerUp now use this mechanism instead of waiting to send 2011-10-08 (RC8) * Holding Caps Lock no longer makes the radar flicker * Fixed Tug grabbing a Tug that was (possibly indirectly) holding it - The physics would freak out at that point... * Added Teams 3-7 to the Build Team menu in the Shift-F9 view - These teams are hostile to all other teams except 0 and themselves - NOTE: mission scripts don't set up strategic AI for these teams * Moved DistributedObject permanent state update to its own function * PowerUp updates its permanent state when it lands - This fixes late joiners seeing it in the wrong place * Network system clears the respawn flag and timer on startup - It previously left whatever value it had from the last game * Respawn checks for a specific value (1) instead of any non-zero value - This may help with the "sniped by the system" bug * Made code for dropping scrap consistent between all objects - Remote object or Deathmatch game: drop no scrap - Single-player mission: drop normal scrap - Strategy game: compensate for scrap-doubling * Buildings use the new "explode" flag - This ensures buildings only explode when actually killed - Remote buildings no longer explode when recycled by a Construction Rig - Joining players no longer see destroyed global buildings explode on startup * Display " has been defeated" message only when a player loses their last life * Wait 5 seconds before popping up the "You won" message 2011-10-13 (RC9) * Fixed a crash on receiving a chat message before the player entity got created during load * Only draw the reticle if it's in front of the camera - This fixes a potential divide-by-zero error * Added a kick button to the host's net escape screen - This uses a new background image, multipeh.bmp * Kicking with a kick button displays the "Kicked " message * Removed redundant ammo value from HoverCraft and Walker state packets * Cleaned up TurretCraft state packet - Removed unused data values and reduced the rest - This makes each state update 36 bytes smaller * Fixed localization key for auto-kick message in shell Timer function * Re-fixed "Infinite Torpedoes" bug :P * Added a play option for special item trigger - Off: by selection (BZ1 style) - On: by fire (BZ2 style) 2011-10-14 (RC9a) * Fixed ReceiveTempState freezing if it got a block with zero size - TO DO: find out where the zero-size blocks came from 2011-10-19 (RC10) * Clamp send rank of empty HoverCraft to a minimum of zero - This may help with remote units having the wrong position * Fixed problems with compression in TempStateSendAll - Removed LZO optimization since it wasn't necessary and sometimes failed - Always clear compressed data after a send, even if it wasn't used - This fix objects randomly appearing in multiplayer games * Cleaned up how DistributedObject reads state data * Added some basic runtime validation * Send shell chat to players individually instead of broadcasting - This fixes chat failing when one player has 100% loss for a while - This also fixes the perpetually-increasing Pending count (Anet bug?) * Fixed "Pending: 0" message * Check to make sure the player team is valid when deleting a net player - This should fix an occasional crash * Fixed some airborne powerup collision issues - Ignore collisions with other airborne powerups - Cancel airborne state if it collides with something 2011-10-26 (RC11) * Fixed /nobodyhome and reading from a .trn file on the command line * Fixed error message spam when the send buffer is full * When flattening terrain, Constructor clamps the height to the legal range * Fixed special item trigger option in play options showing the wrong value * Shell uses the local map list to limit the maximum player count - This helps when the host sets the limit higher than the map supports - NOTE: the implementation of this is not very clean 2011-10-29 (RC12) * Clear pending commands when a pilot gets into an empty unit - This prevents it from resuming the unit's previous action * Removing an AI process also clear the next command - It previously cleared only the current command * Strategic AI treats units with no AI (e.g. sniped) as destroyed - It should no longer command units that have been sniped and captured * Prevent the host from kicking themselves with the shell kick button * Fixed a crash in FlagDisplay when it can't find the user's net player - This sometimes happens when getting kicked * Reverse animations now play all the way to the end - They previously stopped about a frame short * Strategic AI now sets the squad team properly * Escort_Goal and Squad_Send_Units check unit teams - They remove units from squads if their teams doesn't match 2011-11-04 (RC13) * Fixed the player limit in the shell when the session has too many players - It now checks if the current count is greater than or equal to the limit * Pilot entering a vehicle only clears the command if the unit was an enemy - This fixes a design idiom used on a number of IA maps - (Designers place neutral units with pre-set commands and activate them by spawning pilots nearby) * SeismicWave uses GetZonePtr for terrain height instead of its own custom version * Allow Scavengers to collect scrap in hazard areas * Allow Minelayers to lay mines in hazard areas * When switching the user entity, update views in the camera stack - This should fix the camera following the wrong entity after returning from a cinematic if the user changed in the meantime * Building perimeters use a "perimeter" cell type instead of "sloped" - 5x path cost (versus 2x for sloped) - 0 avoidance force (versus 1 for sloped) - This fixes units getting stuck while trying to drive between buildings and adjacent impassable terrain 2011-11-12 (RC14) * Made GameObjectClass, OrdnanceClass, and WeaponClass destructors virtual - It's proper form for classes with virtual methods - This won't affect anything in practice, though * Increased size of SeismicWave height offset buffer - It was previously too small by one column and one row - I'm surprised the memory checker didn't catch it... - This may fix some random crashes * Pathing system allows off-map paths like 1.4 - Does not clamp positions to map boundaries - Treats off-map areas as flat instead of cliff - This fixes several Instant Action maps * UnitTask DrawState for Goto takes skip object into account * Fixed ally/unally staying visible after entering invalid input * Pilots use a "glide" task to reach empty vehicles within the Barracks footprint - It uses an approach similar to how PowerUp flies - TO DO: clean this up a bit 2011-11-23 (RC15) * Added missing Arrow Down CheckRollOver code for "Players in Room" window (submitted by Dx) * Added safety checks to the AIP loader - Reject non-units in the force matching section - Reject non-buildings in the building matching section - PROTIP: strategic AI classifies producers as buildings * Fixed message box popups getting stuck behind the main window * WeaponPowerup checks for UserProcess instead of assuming the user game object has one - Under normal circumstances, this should make no difference... * Added a ShellPlaySound function for playing sound in the shell - It encapsulates the repeated UseItem/ShellStartGASEvent/NextGAS/UnlockItem block - This cleans up the code and will make it easier to add new sounds * GameObject constructor no longer enables all weapons - Instead, it lets AiProcess do it - This fixes SpecialItem triggering on respawn in DM with "Special Item Trigger" off * Unit recycle and soldier/pilot retreat use the original 1.4 distances as a minimum - This should fix cases where they almost-but-not-quite arrive at the goal * Reduced perimeter cost back to 2x since 5x was too high * PathDisplay shows objects as oriented boxes when large enough on screen - This gives a better indication of size and orientation - It shows the object's collision radius as a circle * PathDisplay shows bounding sphere radius too * Major revision to BlockCells - Refactored the PerimeterCells and BuildingCells functions - Mark building cells only if they overlap the object's oriented box - Removed perimeter around buildings and deployed producers * Pilots can now enter vehicles on building cells - Pathing gets them to a nearby good location - Cross building cells if there is no obstruction * Adjusted several go-to tasks to better compensate for the target's size - GotoTask, ScavGotoDrop, SoldierRetreat, SoldierReturn, DoRecycle (cleaned up code) - NOTE: these use the original (1.4) distances as a minimum * FindPath checks to make sure the moved goal location is reachable - This should fix some cases where units get stuck * Fixed the implementation of IsKindOf * Craft sends "destroyed" flag across the network - This may help with the occasional "infinite explosion" * Properly initialized last scrap position in Scavenger AI task - This fixes a semi-rare crash on startup in IA missions * Fixed other uninitialized values in RecycleTask 2011-11-27 (RC15a) * Restored the original GameObject weapon selection - A few things relied on the original behavior and the change broke them * Fixed the special item selected trigger logic - It triggered on respawn because the carrier and user object were both NULL and matched - It now checks that the carrier is not NULL first :) 2011-12-04 (RC16) * Revised unit recycling again - GotoTask doesn't retry if the destination object is on blocked terrain - This should eliminate (or at least reduce) units not recycling * Revised how pilots and soldiers interact with scanners - People are no longer marked as "hidden" by default - Scanners specifically exclude pilots and soldiers not on the player's team - This lets players see pilots and soldiers on their team - Custom pilots can use a RED Field to avoid showing up on radar * Fixed radar lines disappearing when a terrain point went too high or low - The point still disappears but the line draw can continue past it * Radar draws grey icons for non-commandable team units in non-menu mode - This matches various menu modes and makes it more obvious when a unit is empty * 1.5 Final Release - ...assuming nothing goes wrong :) - Added a proper VERSIONINFO resource to the executable - Replaced the date stamp with a version number (currently 1.5.0.120) - Removed the _d3d9 suffix from the executable names