[Note: see Changelog_pb1.txt for items up to public beta 1, and Changelog_pb2.txt for items changed between pb1 and pb2. This file contains items changed since pb2] - In Gameprefs.ini, turned OldOrdnancePath to true. Speed hit wasn't worth the unnoticeable effects. [NM] - Turned down optimizations in AttackTaskP::WaitState and AttackTaskP::DoState to try and get a better idea about the cause of crashes noted in them. [NM] - Increased number of reticule laser beams from 2 to CARRIER_SLOTS, avoiding a crash in vehicles with more than two active weapons [Ken] - Tweak to low-level code. The various "X was NOT empty when destroyed MUST call UnlinkAll or DisposeAll" messages shouldn't appear in "_FINAL" (aka ReleaseEditor, ReleaseLTCG project configs). This was a bit of debugging code left in the DR2 code, but seems to be causing a spiral of increasing errors if things go wrong. This'll leak some memory, but only after something really serious has happened, and Windows will be around to clean up all memory in a second anyhow. Normal Debug & Release builds should still give the warnings, allowing Ken and I to see things. [NM] - Added GamePrefs.ini::SmoothCodePath. See comments there. TEST it. [NM] - Added console command game.memstats, which should appear below the AIP debugger. This was added to try and get some idea where things might be leaking memory in long botmatches. The numbers will fluctuate as the action does, but if you're seeing a consistent trend upwards in one of the numbers, let me know what's happening. [NM] - Changed std::map -> std::hash_map in code. Also changed DR2 NList -> std::list in code. Yeah, this is bloody dangerous. Shouldn't have done it, but I've got some pent-up optimizing to do. Let me know if you see any real difference in performance. [NM] -- b66a released - Fixed(?) particle system crash on second game played w/o quitting to windows. Caused by change immediately above. [NM] -- b66b released - Changed std::hash_map -> stdext::hash_map, as the former is deprecated. Also changed std::list and std::vector in a lot of places to PblList, some newer technology. That should reduce the number of temp/small allocs, and be a lot faster at removing items from the lists they inhabit. After all this, particle system crash seems to be fixed, as I could play multiple 32-bot matches on DM Bane, DM Titan and quit to shell between them. [NM] -- b66c released - Fixed some memory leaks in ParameterDB, InputEvent, RecyList, and Pathing systems. [Ken] - Improved performance of the AMDHack_* trigonometric functions by making them inline; in this particular case, the floating-point consistency compiler option forces the same result as turning off all optimizations. (I checked the dissasembly of the inlined code to confirm that it worked as it was supposed to.) [Ken] - Improved collision behavior for tracked vehicles by applying a minimum impulse velocity and adding an additional contact point on the front and back faces of the collision box. [Ken] - Internal soak tests revealed some asserts in the pathing code about conditions that weren't adequately handled. This could cause crashes or really weird issues around cliffs or something; not 100% sure. Made it hopefully not crash in such a condition. [NM] - Found case where Deathmatch DLL was unhappy after not spawning in a pilot as a 'vehicle' to be in. Should be better now. [NM] - Upgraded(?) to MS Visual Studio .NET 2005. Lots of little changes to code to account for things the new compiler does differently. There may be some occasional weirdness for a few builds. [NM] - Changed ParameterDB to use a static std::list instead allocating one, which seems silly for something that small. This should fix a crash when ParameterDB tries to open a file after being cleaned up. [Ken] - Removed unused recoilName array from AssaultTankClass. [Ken] - Added "assaulthover" turreted hover vehicle class, which uses strafe to steer like a walker or tracked assault tank. [Ken] - Added weapon convergence to AssaultTank class to make it consistent with every other vehicle type. [Ken] -- b66d released - ConstructionRig class with HoverRig=1 and ScavengerH class now use class_id CLASS_ID_CRAFT, so StrafeToSteer no longer needs special hacks. This should also fix problems generated by the AssaultHover HoverCraft changes made earlier. [Ken] - Fixed missing particles in TwirlTrailRenderer. The twirl trail group loop used an end condition that PblList didn't support right, and so never entered. [Ken] - Got everything compiling correctly with Visual C++ 2005 Express, which does not come with the Platform SDK built in. The main changes were fixing some mangled preprocessor definitions in the vcproj files and adding the necessary windows lib files. [Ken] - Switched Release build to Minimize Size like the Release Editor and Release LTCG builds. [Ken] -- b66e released - As the DR2 memory libraries seem to be unhappy with VS.NET 2005, switched to using VS.NET 2005 memory libraries. This may incur some speed hits. Some work has been done to use Memory Pools technology from the Red libraries. This should help reduce the numbers of allocations done on the fly by batching specific ones up and allocating large numbers ("pools") at a time. Most low-level systems and particles should now use them. There's still a fair number of places I can't change w/o some risky surgery. Let me know if this improves framerates any vs 66e. [NM] - Fix to particle systems - they'd allocate, but never clean up particles when BZ2 is alt-tabbed. Now, when the game is alt-tabbed, it won't create any particles. Thus, when you return, there may be fewer particles than normal for a few seconds. But, everyone knows that alt-tabbing is wrong, right? :) [NM] - Upped max # bots allowed in DM to 256. Just so I can stress-test things with a total unitcount possibly more like what heavy strat/MPI games have. Please don't complain that the framerate bites with so many units in close proximity. This is some code for stress-tests. [NM] -- b66f released - Fixed memory leak of TurretControl objects by walkers. [NM] - Leading tabs/spaces are stripped from network game passwords. Seems to fix an issue reported. [NM] - Certain exploit w/ rabbit mode should be gone now. [NM] - Optimized code somewhat to avoid hack I put in just before pb2 to make armory colors right in MW. Users are now saved first, so all unit colors should be correct after that. [NM] - Slightly reduced the number of times the game loops over every object, combining some loops where possible, and scanning over the list of just craft when the code was only looking at the craft in the list of all objects. [NM] - Fix to unsafe iterating(TM- VS.NET 2005) in CancelAllBuilds() that was causing a crash on mission cleanup. [NM] - Made TerrainClass::Done() kill all the MapClusterClass's at once by terminating their pool. Should be a little faster exiting a mission now. [NM] -- b66g released - Turned ellipsoid height calculation back on. [Ken] - Fixed lockup in XSI mesh reader. The latest C++ standard library default locale read comma-separated numbers (e.g. "1,2,3,4") as a single "grouped" number, so the mesh read went off the rails and died. I switched to the "C" locale, and that solved it. [Ken] -- b66h released - Added wire_ivintc.tga, sent on by Avatar. [NM] - Exploit fix. This entry has been sanitized for everyone's protection. [NM] - --Joiner is set to team #15 until they're fully joined. Not a serious issue, but prevents some unexpected ownership issues. Will be reverted if this causes any issues. [NM] - Person class no longer allocates pointer to 6 Joint_Control pointers needed for stock pilots. If < 8 pointers needed, it uses a fixed-size pool. If more are needed, it'll allocate memory like before. This should help reduce memory allocation overhead and fragmentation. [NM] - Upped some memory pools to be an appropriate size for the editor builds. Might make the first switch to the editor a little faster. [NM] - Moved engine flame mesh data into EngineFlameMesh, to avoid the unnecessary rebuild every time an object got constructed. EngineFlame uses this data to build the dynamic geometry inside Render(). [Ken] - Added #ifdef USE_RED_MEMORY to allow use of RedMemory; this is NOT defined by default, and not thoroughly tested. [Ken] - The shell.backgroundSound console cmd now tracks what file was last triggered. If it gets another request to play the same file, it ignores that request, and continues playing it. If it's a different file, it'll always kill off the old one before starting the new one. Also, the shell should properly kill off any background sounds when launching a mission. [NM] - ConvertHandle() did a linear search of all GameObjects under certain conditions, which is bloody slow to be called multiple times per update. Switched it to a PblHashTable, which should be a bit faster. [NM] - Moved some code from Scanner::SweepVisibility() to GameObject::Simulate(). This eliminates a loop over all objects to tweak their params by doing that tweak incrementally as part of a different loop over all objects. [NM] - If the game decides to skip rendering a frame, it should also decide to skip generating any (more) particles during that frame. [NM] -- b66i released - Fix to rabbit mode - should be a lot fewer gamestate checks if the rabbit bails out. [NM] - Dropped optimization on the Render_Editor_View(), RunCodes::Process() functions in order to try and get more info about some editor crashes reported. Please give as much detail as possible when reporting such issues. [NM] - Fixed rare case where custom DLLs could cause a double-deletion of an object. Ignored second one. Shouldn't really have any side effects. Save by Avatar. [NM] - Culling of empty vehicles in DM (or anything else using the DLL SelfDamage() callback) should work once again. [NM] - Back to DR2 memory libraries for all items not pooled by recent changes. This should give us a best of both worlds solution, as pools are faster than DR2, which is in turn faster than Visual Studio's allocator. [NM] - Deleted redundant SI_Material chunk from igbzka_skel.xsi (bad SourceSafe merge?). This might fix a rare crash related to them. [NM] - Strongholds (and all other armories w/ attached power objects) should remain powered after a load/save. Noted by many, savegame by Commando. [NM] -- b66j released - Finally found, fixed(?) a bug w/ ISDF rockets, and possibly other areas. Animation::SetFrame() would happily try and go off the end of an array, reading garbage memory. Fix was to not apply any animation if the index is outside of the valid range. Needed to tweak a map sent on originally by Commando to reproduce it on a fairly consistent basis (i.e. pretty much 100% within a minute). [NM] -- b66j2 released - Added vid.render.mipbias variable. This is a value from -2 .. 2 (default 0). As the value decreases (towards -2), there will tend to be more pixel detail, but at the chance of slightly more sparkly textures. As the value increases (towards 2), it'll tend to be smoother, but at the expense of detail. Some graphic cards may tend to slow down with more detail, so check what the effect is on your framerate. Defaults for these values are in GamePrefs.ini, with different values for shell, game. Maybe this might make TV's XSIs show up differently in the shell. [NM] - AV fix (I think) in WeaponPowerup::GiveWeapon(), when the modder botched something. [NM] - ReleaseEditor build should have framepointers for all functions now, which might give a bit more callstack info about any crashes. [NM] - Added [WalkerClass] is13Walker = true // Set to false for a 1.2 style walker hierarchy Also added fvwalk12.odf to demonstrate its use. This should be about the last major barrier to FE on 1.3, if I recall correctly. [NM] - Reverted igbzka_skel.xsi to what 1.0-1.2 used. It wasn't proven to be broken, so I'd prefer to use what's been tested more. [NM] -- b66k released - Oops. AV "fix" in WeaponPowerup::GiveWeapon() turned into a guaranteed crash all the time picking up things. Should be fixed now, and I shouldn't code when really tired, as I'll botch = and ==. [NM] -- b66k2 released - Converted all textures used in BZ2 to DXT format, pre-mipmapped. This should provide a general memory savings as DXT is a compressed format, and improve image quality by using a slower, offline, mipmap algorithm. Load times should also be improved, as there's a lot less work to do after the file is read into memory. If you really want to not use DXT textures, put "/nodxt" on the commandline. (If a modder shipped only .dxtbz2 textures, that will have no effect.) Please let me know if you notice anything, positive or not. Please also note that setting medium/small textures will make things look pretty ugly, as usual. Any modern graphics card should be able to handle large textures w/o issues. Modders: look at the DXTGen archive posted. It's got the offline tool used to create those textures. It should be relatively straightforward to adapt it for your own mods. In addition, the .dxtbz2 textures can be distributed without the source .tga/.pic/.etc files, give you a smaller size and some protection against those that want to scribble over your textures. Also, some date checking is done so that you should be able to update your source textures w/o re-running DXTGen every time. [NM] - Added [WalkerClass] Walker12Type = -1 // -1 = auto, 0 = isdf style, 1 = fury style This is used only when WalkerClass::is13Walker = false. If this is -1, it uses the first letter of the odf to determine the race ('i' == isdf, else = scion), which determines how the hierarchy fits together. Setting this to 0 might be needed for evwalk.odf. Relatively untested. [NM] - Added ScriptUtils.h :: WantBotKillMessages() . This tells the game that it wants 1.3's messages on any unit being killed, not just players. By default, this is back to false, for compatability with some old FE DLLs. DM, MPI, Strat DLLs updated to call this all the time in their Load(bool missionSave), so that any setting will stay applied. Custom DLLs for 1.3 will need to do the same. I figure that 1.3 DLL authors are more 'available' than 1.2 authors, as someone would have had to do the work. This is a very cheap function, so feel free to call it early and often. [NM] - Possible AV fix in TurretCraft.cpp when the modder broke something. Reported by Commando. [NM] -- b66L released - Oops. WalkerClass::Walker12Type had the 0/1 setting backwards. Fixed. This means that anything that had that setting set in 66L will need to go back and flip the setting. [NM] - Updated to some DXT textures posted - reduced # of mipmaps down to 1 for some more wire_* textures and other textures designed to be 2D-only. Also set it to only use 1 mip on the blue point-and-space square texture, which should prevent that texture from being inappropriately reduced by the graphics card. Also posted an update to the converter app, with a new .cfg that includes these changes. This is part of a separate download, and not this subbuild download. [NM] - Bit of an optimization put in -- when compiling for minimize size, MS Visual Studio's implementation of fabsf() calls _ctrlfp. This is really inefficient. I replaced the top half-dozen calls to fabsf with manual test-and-flip, and _ctrlfp went from 1.48% of CPU time in a 200-bot dmpyramid test to 0.35%. Hopefully this didn't just shuffle the damage around. [NM] - Added in support for higher 'TPS' (Turns Per Second) rates. This is controlled by a setting in GamePrefs.ini -- whomever hosts has their local setting set for everyone. Default is 10, but this can go to 15, 20 or 30. Note that higher values definitely increase network traffic-- 30 tps means 3x the number of moves per second that need to be transmitted. This setting is visible to potential clients on the 'Game Stats' column of the gamespy browser. Note: there may be some different physics behavior or the like at higher fps, as not everything may have taken dt into account. This is a rather experimental change -- Ken thought it'd make things smoother, but I think there may be a pile of bugs exposed. Note: only the MP DLLs that are a part of 1.3-official (DM, Strat, MPI, StratCTF) support this, as they had to be changed to take the higher rate into account. A lot of places used integers to track turns, and that's got a new scale. I'm not going to dig into the SP DLLs now. [NM] -- b66m released - Fixed bug in Craft.cpp where spawned pilots that weren't persons were causing some memory to be stomped. This wasn't the case in stock assets, but a bug exposed by a mod. Thanks to Commando for extracting files to make it appear quickly. [NM] - Update to MultiRenderClass.{h|cpp}. If it uses fewer than 16 items, it now has an internal array. This should save a call to the memory manager most of the time. [NM] - Changed ReleaseLTCG builds to keep around a lot more callstack info, in the hopes that some odd crashes that appeared this last build can be investigated. [NM] -- b66n released - Rearranged some memory used by UpdateInGameScoreDisplay(), in the hopes of at least hiding (for now) what looks like a memory trashing bug. [NM] -- b66n2 released - Apply_InterObjects_Impulse() returns false and doing nothing if the contact points are moving apart, reducing the chance of "sticking", and acting more like Apply_Impulse(). [Ken] - Removed unused bounding spheres from Mesh and MeshObj, saving 80 bytes per node. [Ken] - Changed DR2 engine Bool from 32-bit integer to bool type, slightly reducing memory usage. [Ken] - Reverted ReleaseLTCG callstack change from just above now that things are fixed. [NM] - Update to DXTGen - .tga textures that are saved as 32-bit, but have a 100% opaque alpha channel for 100% of the pixels are now properly read in as 24-bit textures. This allows the compressor to use DXT1 (6:1) vs DXT5 (4:1) compressing. Not sure if any stock assets used this, but it's a good fix. Also added a PlanarAlphaBorder param to the per-file chunks, which should fix a long-standing issue with draw_planar effects (e.g. ring.tga) on ATI cards. Partial solution noted by Commando, but the border allows for mipmapping to work. Modders should convert any textures of theirs used by draw_planar with a similar settings. [NM] - Fix to Arc cannon when tps > 10 -- would fire off salvos at higher rates. Noted by commando. [NM] - Instant.dll should now support higher TPS values. This is a local setting, so if you save, exit BZ2, change TPS, re-launch BZ2, and reload that save, the new TPS should be in effect. Also tweaked instant.dll, mpinstant.dll to use object class strings, not odf names, in determining things like sieges, etc. This should make them behave more consistently with other races. [NM] -- b66o released - MPI DLL accidentally had Iraqi mode on by default. Fixed. Btw, to enable this easter egg, turn the human starting unit skills to 3, the CPU unit skills to 0, and select the first 3 turrets/guardians in the starting vehicle list (and NOTHING else). [NM] - Made AIP code run at 10tps max, no matter what rest of game is at. Also found bug where initial game time was set to a negative value, which was then being treated as a large positive value. This prevented AIP code, items like GSs from working properly when tps > 10. Tested on MPI bridges with tps=30. [NM] -- b66p released - Seriously obfuscated tps>10 code as it's still causing lots of issues, especially in MPI. To get it back, you'll need to specify a hidden commandline parameter (Ken- cmdline.cpp, line 714), and add the entries back to Gameprefs.ini (look in history). I don't have time to really investigate all the issues, but maybe Ken can be persuaded to look into this. [NM] - Made the fps column for the ingame MP score display go red if a player's fps is less than tps*1.5, i.e. 15 for the defaults. Honestly, you're pretty borderline if you can't keep up 15fps in MP. [NM] - Added option for anisotropic filtering. To quote the DirectX 6 documentation, "Anisotropy is the distortion visible in the texels of a 3-D object whose surface is oriented at an angle with respect to the plane of the screen." This option (look in graphics options page, just below mipmap settings) ranges from 0 (disabled) to 8 (max). Its setting is most noticeable on polygons far away from the viewpoint, and stretched away from the camera -- especially flat terrain a distance in front of the camera. This setting defaults to 2; 1.3pb2 and earlier defaulted to 1. Higher values might put more work on the graphics card, so check framerates with this setting at higher values and lower values. [NM] - Tweak to fvtitan_skel.xsi by Commando. "I removed the __h from the left and right tractors so the treads show up in the interface and while the unit is being built." [NM] -- b66q released - Added Wug's AIP set, version 2.2. [NM] - Hid smoothing lines (line 7396 above) when the unit isn't supposed to be very visible. [NM] - Added [MagnetGunClass] TeamFilter = 0 // See 63u's documentation of ShieldTowerClass's TeamFilter for objects vs ordnance Untested. [NM] - Added [GameObjectClass] classLabel = "serviceH" aiName = "ServiceHProcess" aiName2 = "ServiceHProcess" [ServiceTruckH] supplyRange = ... // (and all other params that used to be under [ServiceTruck] Only somewhat tested. I tossed a ivservh.odf into the addon folder of sub-builds as a demo, but this probably won't be shipped with the next full build. [NM] - If you hit 'o' (== Objectives) in MP, it only hides the chat messages box, not zaps all items. Requested by Red_Devil. [NM] -- b66r released - New code added to StatsPanel::SetSurpressed() by last change above could crash the game if MP wasn't on. Added in a safety check that should fix that. [NM] - AV in MagnetGun::Simulate introduced above should be fixed. [NM] -- b66r2 released - HoverSTs driven by AI should turn more now, using less strafing to steer. [NM] - Another security pass at the code, cleaning up some behavior after some code I eyeballed made my think it was potentially exploitable. If all goes well, normal users shouldn't notice any differences after this change. [NM] - Chat messages [re]appear after closing Objectives/Info only if in MP. [NM] - Added [CraftClass] WeaponsConverge = true All types of craft (including pilots) should respect this flag; lots of duplicated virtual functions that just called back to the base class were removed. Relatively untested. [NM] - In the AIP code, [Plan#]::MinTtlScrap was being rounded up to the adjusted scrap cost of the object being built, plus 10. Not sure why the +10 is in there, but it was causing things to not be built that could be legitimately built. Removed the +10, but the rounding up of MinTtlScrap will continue unless someone can give a very good reason why not. (I think that transparently prevents it from submitting a build it couldn't do, which is a good thing). Noticed by wug. [NM] -- b66s released - Updated mpiisland.otf from wug - more accurate as to how many pools exist on the map. [NM] - Bit of a hack added - HoverSTs don't check the pathing type of intended targets, but check their speed instead. If they're not really moving, they're a candidate for healing. This seems to let HoverSTs service each other. Not sure why tracked STs behave differently. Save by Commando. [NM] - icslider.cpp changed to not try dividing by zero, which is pointless at best. This was causing issues when a listbox couldn't scroll (due to not enough items) but the user still tried to do it anyway. Noted off and on over the years by Commando; last time this happened, switching optimization settings "fixed" the issue. Guess I can't (successfully) blame MS for everything these days. Doesn't stop me from trying. [NM] - Finally updated IA pregame options screen to use listboxes for race selections. This should make life far easier for modders, except for those that tried to override the stock .cfg files from pb1/pb2. The changes to the .cfg should be relatively easy to port over. All the options like locking out race selections should work. [NM] - Updated STCTF extra options pages to delete reference to missing 3rd page, etc. Reported by various people playing pb2. [NM] - Added [CraftClass] UseAssaultSpecials = false // needs to be true for evartl2.odf If this is false (default), then it'll skip over specials when going after assault targets. Some units, namely evartl2.odf, possibly others, need this to be true to be compatible with their 1.2 behavior. Issue noticed by Pastel, save by Commando. [NM] ---- 1.3 beta 67 released======= - Updated comments for IFace_GetSelectedItem() in ScriptUtils.h, after a question emailed to me by Spiritplumber. Also added DLLEXPORT Handle DLLAPI GetLocalUserInspectHandle(void); DLLEXPORT Handle DLLAPI GetLocalUserSelectHandle(void); to scriptutils.h [NM] - DLL's AudioMessage() function now supports ogg files transparently - -if a "foo.wav" is requested, but it doesn't exist and "foo.ogg" does, -then the ogg file is used. Only if the .wav is missing will it look -for a .ogg. Noticed by Commando while compressing up FE. [NM] - Updates to inst006.des, mpidunes.odf to have correct # of pools. Sent on by Wug. [NM] - Updates to load voiceover code -- rather than trying to precalculate how long it is, it continually checks for whether it's done. This makes ogg'd voiceovers work properly. Noticed by Commando while compressing up FE. [NM] -- b67a released - shell.backgroundSound console cmd should prefer .ogg files to .wav files, should the .ogg version of a sound exist. All the rest of the code prefers .wav to .ogg. [NM] - Split Changelog.txt into 3 files, one up to pb1, one from pb1 to pb2, and this one, post-pb2. [NM] - Crash noted by Commando doing some of the game.cheat commands fixed. It could only happen in SP, so this is a case of protecting users from themselves. [NM] - Pilots shouldn't try to get into vehicles they just hopped out of. Side effect of sanity checks added in 66n. Noted by multiple people, save by Commando. [NM] - Tweak to Ken's Apply_InterObjects_Impulse() code above. It now jostles the position of one of the craft when they're already sorta moving apart. This seems to prevent interpenetrating STs in the savegame sent on by Commando, though one still REALLY wants to do so. Let me know how this works out. [NM] - Included Wug's 'standard_aip_23b' set of AIPs. [NM] - Changes to bzshell_instant.cfg again - if human or CPU's race selection is fixed, it hides the listbox and prints just the currently selected text. This should be a bit more obvious to people rather than non-functional listboxes. [NM] -- b67b released - AV in HoverCraftClass::HoverCraftClass() fixed when MSH file was missing in certain conditions. More of a modder problem than anything else. Save by Commando. [NM] - Tweak to timing code running AIP code and other associated code. After a bunch of emails to and from wug detailing issues he was seeing in it compared to pb2, I decided to rewrite some potentially problematic code (exacerbated by my change for high-TPSs above) to use ints instead of floats. This should avoid all precision issues, rounding, or the like. Also made the logfile write out the BZ2 version on the top line to help in my further debugging. [NM] - Tweak to AIP code. If a AIP chunk refers to a nonexistant pathpoint, it complains a LOT more aggressively. Messages are printed to the console, aip logfile. I thought about making the console pop open in (only) the editor build, but thought that might be too much. Modders can quickly check the console. It was reporting the error previously in the "buildLoc - found(0)" lines, but that's apparently too subtle for most. [NM] - Updated wug's AIPs to v2.3c. [NM] -- b67c released - Added some optional items to bzone.cfg. For example, the bottom of that file could look like this: // Make it active SetActiveStream("base"); SetPilotsDirectory("pilots13pb3"); SetSavesDirectory("saved13pb3"); } If those Pilots/Saves directories lines are missing, it'll use the defaults. Please make sure the paths can be created, or BZ2 will probably be unhappy. Suggested by Commando multiple times, but until I also heard the suggestion to put it in bzone.cfg, I wrote it off as too much work. Is CW out of a job yet? :) [NM] - Tweak to aircraft.cpp - landing craft are pushed down onto the ground pretty quickly-- much more the inverse of their takeoff. They're also force-rotated into a level heading, which may help some of the crashes noted when landing. Give it a test with some of the aircraft ODFs out there to see if this behaves a bit more sanely. [NM] -- b67d released - More tweaks to aircraft.cpp - during takeoff/landing, velocities are clamped to reasonable limits. This seems to fix issues noted during those phases. Save by Commando. [NM] -- b67d2 released - Again, aircraft changes. Further restricted state changes. Added [AirCraftClass] OverWaterFlying = true OverWaterLanded = true If these values are true, then water height on the map is taken into consideration. The flying value is used during takeoff, flying and landed states. [NM] - Added, for AIP plan chunks [Plan#] planType = "Attacker" attackType1 = "ivbomb" useScrapCost1 = true // new, might want to be false for bombers If useScrapCost# is false, then the cost of the unit referenced in attackType# isn't factored into the total scrap needed to execute this plan. However, you should try and make sure that it won't try and build the unit if none exists. [NM] - Bomber dispatched by "Attacker" AIP plans don't try and go thru the staging points. This allows them to be properly dispatched, as bombers don't like hanging around. Requested by Red_Devil a long time ago. (And if I had a penny for every request that takes a while to be implemented, I'd be a rich man now.) [NM] - Idle dispatcher now tracks bombers, and should only send them out against buildings. [NM] -- b67e released - Undid Ken's change to Apply_InterObjects_Impulse. Units seem to be phasing thru each other/merging too much. I'm not sure which cases triggered his change above. [NM] - Added [AircraftClass] MaxTakeoffSpeed = 5.0 Aircraft will not be able to take off unless their velocity is under this. [NM] -- b67f released - More tweaks to bomber dispatched by "attacker" AIP plans. Shouldn't get stuck in midair after attacking, and should wait until it's recharged before sending it out again. Saves by Commando, wug. [NM] - Reverted scanner.cpp change done for 66i, as it caused objects to be illuminated far longer than they should have been. [NM] - Added to AIP files [IdleDispatcher] BomberIdleSeconds = 120 // # of seconds before a bomber is sent out. Bombers are sent out on a different path than other units (w/o grouping), and shouldn't attack the human's craft, only buildings. The idle seconds timeout above should also respect the MinMissionSeconds param. Bombers also can't be sent out faster than their recharge cycle. Also changed idle dispatcher to choose one of the nearest target(s) to the unit being sent out. Pretty much untested. [NM] - Tweaks to aircraft - vertical velocity should be killed when deploy is hit. Also might rest above terrain a bit better when flying comes to a standstill. If this is still a problem, send a save. [NM] -- b67g released - Aircraft now support the force deployed/undeployed user controls. Further raised them off the ground when flying. Also added [GameObjectClass] aiName = "AirCraftFriend" aiName2 = "AirCraftEnemy" This is based on MorphTankFriend/Enemy, and seems to be useful enough in minimal testing to build an item, have it go near the droppoint, and attack items when told to. Don't start demanding much more, like realistic strafing. [NM] -- b67h released - Added [AirCraftClass] aiAltitude = x // default = minAltitude + 25% of dist between min, maxAltitude LiftSpring = 12.5 // all craft/pilots, during takeoff/landing AILiftSpring = 2.0 // AI craft ONLY, when flying to get to aiAltitude. aiAltitude is the aititude that the AI will try and fly at. If the item it's targeted at is higher, it'll try and fly at that height. [NM] - Bomber's bayConfig should work a little more forgivingly now. Reported by Commando. [NM] - game.gofast turns off particle generation while it's running in overdrive. That should make it exit that mode more reliably, as there isn't a bajillion particles to try and simulate/expire at once. Also made the bettyvoice system not queue up voiceovers if in gofast and one is already playing. That should reduce the stream of messages after returning from gofast. [NM] - Divide-by-zero error in targeting code found, fixed. Was a really chance issue, but was causing the tracked vehicles to FIXME. Also made that FIXME show up in logfile, hopefully. [NM] - Added some more taunts submitted by wug. [NM] -- b67i released - Change to ArcherProcess.cpp, MortarBikeProcess.cpp - if in GOTO state, and close enough, it also checks if it's able to hit the target before switching to ATTACK state. This seems to help a savegame sent on by wug where an archer/lancer is stuck pingponging between GOTO and ATTACK (which realizes it can't hit, and switches out). Parallel code in MBs also updated. [NM] - Tweaked collision code to give them an extra kick apart if they're moving slowly relative to each other. This seems to make some saves with tracked vehicles getting stuck sent on by wug, axeminister work after loading (usually takes a few seconds for the units to separate-- I didn't want to make too radical a change). See if this helps things any; also try colliding w/ really heavy units. I'm more interested in seeing whether this helps units not get stuck in the first place than whether this fixes old saves. [NM] - Added [PoweredBuildingClass] ShowIcon = true If this is false, icon for unit in 1..9 slot won't appear, but unit should still remain functional. [NM] -- b67j released - Added [CraftClass] HealthChangeLevelDelta = 0.1 // valid values are 0..1 This is the amount of health (percentage, divided by 100) the craft must lose before it sends a "change state" request to its AI process. Not all AI processes honor it, but the most popular ones will generally switch from ATTACK to STRAFE mode. If this delta is 0.01, a craft will send the request when 1% of its health is lost. If this delta is 0.5, it'll send the request when 50% of its health is lost. Increasing this might help with occasional requests for AI (especially scouts) that doesn't run all the time. Also added [CraftClass] StrafeTimeBase0 .. StrafeTimeBase3 = 0.5/1.0/3.0/5.0 StrafeTimeRandom0 .. StrafeTimeRandom3 = 0.5/1.0/1.5/2.0 RetargetOnStrafe = false The first two are the timeouts for when something using WingmanBlastAttack (a number of derived AI tasks use this; in the same file, TankFriend/Enemy, ScoutFriend/Enemy, MorphTankFriend/Enemy, AirCraftFriend/Enemy cah be found, but not all may use that function) or RocketTankAttack switches to STRAFE mode, with values for each of the 4 possible AI skill levels. (See paragraph just above for when/why a craft enters that mode). The total time spent in strafe is base +/- Gaussian(random). (Gaussians generate a random number up to the value, with values tending to be closer to 0). If RetargetOnStrafe is true, then when a unit (mostly those listed above, plus Mortar Bikes) is switched to STRAFE mode, it switches targets to the unit that last shot them. Setting this to true may make units more "reactive" to the units beating them up. Or, it may make them really chase after some targets they can't hit, like the bomber. Test it. [NM] - Added to AIP files [IdleDispatcher] MaxTargets = 4 MaxBomberTargets = 8 // was 4 from 67g..67j These are the max # of targets it'll pick from when finding something to send out idle units. The targets are sorted by distance from the attacking craft, and it picks one of the top N targets. If you want the AI to attack any unit, set N to be something big like 999. [NM] - Bomber can be dispatched by AIP "Attacker" plans after idle dispatcher used the bomber. Note: you'll probably want to remember to set maxAttacks = 999 or something, as "attacks" may sometimes go up faster than expected. Saves by Commando. [NM] - Added wug's AIP set, v3.1. [NM] -- b67k released - PoweredBuildingClass::ShowIcon = false should work. Wasn't tested when I crammed it in earlier, and it didn't work. Reported by Commando. [NM] - Added [CraftClass] Use13Aim = true // If false, tries to use 1.2's aim code Aim12Delay0 .. Aim12Delay3 = 0.1, 0.14, 0.23333, 0.3 HoverAim12Delay0 .. HoverAim12Delay3 = 0.5, 0.6, 0.83333, 1.0 AssaultAim12Delay0 .. AssaultAim12Delay3 = 0.7, 0.7, 0.7, 0.7 If Use13Aim is false, it tries to use the 1.2 aim code, as best as I could resurrect it while eyeballing lots of large code diffs. There may be issues, but it seemed to fix some circle-strafing issues around an ebgt2g.odf in a savegame that Commando sent on. Do test. Aim12Delay0..3, HoverAim12Delay0..3, and AssaultAim12Delay0..3 are the delays (actually the q param to a lowpass filter) for each skill level; the default values should be what 1.2 shipped with. Higher values may be better, not sure. Valid values are 0..1, and illegal values clamped to that range. [NM] -- b67l released - Oops. Saves in 67L weren't readable by 67L (or any other version). Quick fix posted. [NM] -- b67l2 released - Major changes to turrets, resurrecting a lot of old code that is used only when CraftClass::Use13Aim=false. (I think -- do test!) On the plus side, this seems to make turrets not wildly oversteer. On the down side, I had to really break file formats. You can NOT load any .sav (maybe even .bzn?) made with 67L/L2 that has turret with 1.2 aim (turrets w/ 1.3 aim are fine). Just open up the .sav/.bzn and look at the version # at the top of the file. If the version is <= 1138, all should be ok. If ther version is 1140, all should be ok. Only version 1139 has the issue of being unable to load if there were any 1.2-aim turrets. Also, with version 1140++ you can't change a turret odf's Use13Aim value to the opposite setting and expect old saves to work. [NM] -- b67m released - Tweak to UnitTask.cpp - for turrets or other units that deploy, made them check their ability to hit. If they can hit their targets, they won't packup. This partially undoes a change made for 54i that made such units pack up when they start moving. Note: changing targets of an AI unit *always* causes a GOTO to be executed. Changing that behavior is too darn dangerous. I don't know what issues the 54i was for, hopefully they're not back. Save by Avatar. [NM] - Updated wug's AIPs to v3.2. [NM] - Fixed bug in Attacker AIP plan introduced recently with all the bomber changes. If all units were dead by the time it came to stage the attack, it would sit infinitely in the stage step. (Bomber changes required it to wait for at least one unit to be alive and able to receive the attack order for it to proceed.) Now, if there are no alive units, it'll write a message and jump back to the FIND_TARGET state. Save by wug. [NM] -- b67n released - Added [CraftClass] Aim12CannonError0 .. Aim12CannonError3 = 0.75, 0.5, 0.2, 0.0 This is the time behind the guesstimated target position that a cannon on a craft using 1.2 aim code will aim at, for each skill level. These values are from the 1.2 codebase as far as I can tell. I believe I've exposed all of the skill-adjusted values from the AI. I'm getting tired of code changes. Play with ODFs if things aren't perfect. [NM] - Further changes to AIP plan code. Should go forward to next step rather than backwards if no units are alive, making it behave the same as pb2 did if no bombers are involved in the plan. Are we done yet? [NM] - Code using Animation_Joint (walker, crigs, land creatures) should now check that the last foot sound is finished before starting another. This should reduce auditory spam in some circumstances. Untested. [NM] - Added [MagnetGunClass] [MagnetMineClass] [MagnetShellClass] [ShieldTowerClass] ForceMass = -1 // if > 0, this is the base mass that forces apply to MinForceMassScale = 1e-4 // only used if ForceMass > 0 MaxForceMassScale = 1.0 // only used if ForceMass > 0 For all of these, if the ForceMass value is <= 0 (the default), then the behavior should be unchanged. However, if the ForceMass is > 0, then the force on the target object is multiplied by (ForceMass / pushObjectMass), clamped between the Min & Max values. Thus, if ForceMass is less than pushObjectMass, the object is pushed less than usual. A value of 1.0 for the Min means that the force will never be less than normal if the pushed object is really heavy. A value of 1.0 for the max means the force will never be greater than normal if the unit is really light. (Warning: setting the max higher than 1.0 may result in things being pushed around at really high values. BZ2 isn't guaranteed to be stable under such circumstances). Compiles, but otherwise untested. [NM] -- b67o released - Tweaked MPIIsland.bzn by Avatar, adding in pathpoints to make the AI behave a little better. [NM] - Recycler variants from Commando, wug added. Give them a test. [NM] - 1.2 bugs (gee, what a surprise) introduced in turrets w/ 1.2 behavior along with the resurrected 1.2 code should be squished now -- partial undeployments, sinking feelings, etc. [NM] - Added [CraftClass] AttackTaskAttackTimeout0 .. AttackTaskAttackTimeout3 = 8.0, 12.0, 16.0, 20.0 AttackTaskFleeTimeout0 .. AttackTaskFleeTimeout3 = 50, 40, 30, 20 AttackTaskStrafeAfterFlee0 .. AttackTaskStrafeAfterFlee3 = false, false, false, true AttackTaskStrafeToFleeTimeout0 .. AttackTaskStrafeToFleeTimeout3 = 0, 25, 50, 75 These are skill-dependent tuning behaviors for craft that subcontract out parts of their behavior to AttackTask.cpp. AttackTaskAttackTimeout# is how many seconds a craft will be in 'STAND' mode (~= stand and fire), before it switches to 'FLEE' mode. (Note: people talking about scouts that run away all the time, this is the number to change-- make it a lot higher, and let the CraftClass::HealthChangeLevelDelta param take effect). The FleeTimeout is the number of turns (1/10 seconds, so that 50 == 5.0 seconds) is how long it'll stay in FLEE. If StrafeAfterFlee is true, when FLEE is done, it'll go to STRAFE, otherwise it'll go to BLAST. StafeToFleeTimeout is how many turns it'll be in STRAFE, then it'll switch to FLEE. [NM] - More security cleanups to the code. If this was done correctly, normal end users shouldn't notice a thing. [NM] - Added [TrackedVehicleClass] UseGlobalFriction = false GlobalFrictionMaxThrottle = 0.04f GlobalFrictionMaxHeight = 2.0f GlobalFrictionStaticCoeff = 0.4f GlobalFrictionDynamicCoeff = 0.24f LiftSpring = 0.0 TreadForceFeedback = 1.0 LevelForce = 10.0 ThrustTrack = 0.0 If UseGlobalFriction is true, then some old code is used, and the params w/ GlobalFriction in their name take effect. MaxThrottle is the max throttle for the code to take effect; MaxHeight is the max height above ground for the friction to take effect. The coeff values are the static & dynamic friction coefficients. Note: to get behavior closest to 1.2, then UseGlobalFriction should be true, GlobalFrictionMaxThrottle should be at least 2.0, and GlobalFrictionMaxHeight = 2.0f LiftSpring is like the values in aircraft, but only takes effect when the unit is above ground. Positive values should help keep tracked vehicles more "stuck" to the ground; a value of 0 means no effect (traditional behavior). TreadForceFeeback is a multiplier (1.0 = unchange, < 1 means decrease, > 1 means increase) how much of the force from the treads (e.g. accelerate/deaccelerate) affects the rotation of the body. LevelForce is a constant found in the code, not sure on its effects. ThrustTrack seems to be another way of pushing acceleration into body rotation. [NM] -- b67p released - AV fix in Cannon::Simulate() caused by busted MOD (ordClass wasn't found). Shouldn't crash (or fire) if there's nothing valid to fire. Noted by Commando. [NM] - AV fix in NetManager::TellAllGoodbye(). Reported by Axeminister. [NM] - 1.2-style turrets should be targetable once again (though saves with the problem may not be fixed). Ken changed what the damped flag means for b18, but the code I resurrected was from before then. [NM] - Added [TrackedVehicleClass] LimitVelocity = -1 // If > 0, horizontal velocity clamped to this LimitVelocityDamage = 0 // If horizontal velocity is clamped, then is damaged by this amount The damage is proportional to how far over the LimitVelocity the craft is travelling at. Note that the LimitVelocity is quite independent of TrackedVehicleClass::velocForward, so one could easily make a craft that is damaged when running at full speed. Compiles, but is pretty much untested. [NM] - Fixed rare bug in session listing when a map preview wasn't available. Noted by Commando. [NM] -- b67q released - Fixed bug related to TrackedVehicleClass::LimitVelocity that caused velocity to get very large. Noted by Commando. [NM] - Editor legal screen should appear a little faster now. Memory pool removed for vnodes, as that code did some sorting that was causing a little too much thrashing. It's still ~3 seconds to appear on my main box, which is fine. [NM] -- b67r released - Fixed bug that could cause spurious "player has wrong dpid" message to appear at start of game. [NM] - Tweaked memory pool deallocator to not keep the free list in sorted order. This allows use of pools on the vnode structures, without any serious speed hit. [NM] - Added some commandline params: /UseMyDocs /Vista If either of these is present on the commandline, or BZ2 detects that Windows Vista (or later) is running, BZ2 will switch to using the My Documents folder for the files it writes, including logs, pilots, saves, etc. This can be useful if multiple people play BZ2 on the same computer. /NoVista If this is on the commandline, this overrides the autodetection of Vista, and puts the files written in the same directory as BZ2 is running. Note that if multiple, conflicting options are on the commandline that the rightmost one wins. Also, please note that the bzone.cfg SetPilotsDirectory() or SetSavesDirectory() function can no longer have "@rootdir\" in them. This is because things aren't guaranteed to be relative to the root directory anymore. It's best to make the params to these entries a single path, no subdirectories, or anything else. Sorry for changing up the syntax of this param, but it's only been in the private builds, so it shouldn't be too much work to change things. [NM] - Changed some defaults, for ODFs that didn't define these values [TrackedVehicleClass] TREAD_STATIC_FRICTION = 5.0 // was 1.5 LiftSpring = 5.0 // was 0.0 on suggestions from Avatar. [NM] - Updated wug's recy variant, and new recycler descriptions from wug as well. [NM] -- b67s released - Fixed code for /usemydocs (== /vista ) commandline to make sure that the battlezone.log and log.ini files are created in there, as well as making sure that the Pilots/Saved directories are created there as needed. Also tried a linker setting that may make the /usemydocs code work on Win98. Another test of this would be good. [NM] - Added [TrackedVehicleClass] Use13Treads = true If this is false, it uses the 1.2 Tread_Control_Helper class, which is where OmegaSpin is the only param used, not omegaSpin & omegaTurn. Done because Commando kept bringing up this issue. [NM] -- b67t released - Updates to bzone.cfg SetPilotsDirectory() or SetSavesDirectory() code -- thry can now have "@rootdir\" in them, but illegal path characters (including '\' and '/' and ':') are changed to '_' characters. This should give people some more flexibility, but help shut down attack vectors. [NM] - Items built via 'spawn' (ObjectSpawn.cpp) won't complain to the console if there's any errors. Done to shut up the editor somewhat as people complained for a while. [NM] - Documented, because I didn't see it elsewhere in the changelog: [ServiceTruck] or [ServiceTruckH] ServiceSTs = false ServiceCraft = true ServiceBuildings = true ServicePilots = false ServiceOther = false - Change to ServiceTruckHProces.cpp - for some reason (and I can't find it above) I "had" to make some changes to make them pick targets differently. However, this seems to have the side effect of making them ignore user commands. I've restored the code from tracked STs, and they seem to follow commands better. Whatever that other issue was, we'll find out soon, if it's still present. [NM] -- b67u released - Well, that "other issue" is that hoverservicers wouldn't service targets on command. Came up with a hopefully better fix that should handle both cases. [NM] - Really dangerous low-level change to interface system (icedit.cpp). When typing, control characters (ascii 1..31) are ignored. Note that tab is really control-I. This may have some side effects, but I couldn't find anything. [NM] -- b67v released - Window title for bzone.exe vs bz2edit.exe was backwards. Fixed. [NM] - Another fix for hoverservices - they should stop servicing when done. Save by Commando. [NM] - Items way outside the world are treated by the terrain code as being on flat, level ground. Better than a crash. But, it's a few more cycles spent on every terrain call. [NM] - Added [CraftClass] Lifespan = -1 // -1 == infinite; > 0 is # seconds of life before it goes *boom* Compiles, but pretty much untested. Damage effects aren't applied as a warning, or anything else. It'll just live and then go *boom*. There's always a boom tomorrow. [NM] - Added lucky_foot's recycler variant. [NM] -- b67w released - Fixed out-of-world crash. Was trying to move object after it had been removed from the world. That's unwise. Save by Commando. [NM] - Hoverservicers should lose target when it's healed. If it's close by when it needs help again, it may get picked as the next target. Save by Commando. [NM] - Moved [CraftClass]/[BuildingClass]::Lifespan code to [GameObjectClass] Lifespan = -1 // -1 == infinite; > 0 is # seconds of life before it goes *boom* Note that it will still read the lifespan under CraftClass/ BuildingClass (done for maximal compatability), and if an item is specified under both Craft/Building and GameObjectClass, then the Craft/Building parameter wins. Compiles, but otherwise untested. Note that Mines/Torpedos (and derived) have their own lifetimer params, but this code wasn't changed. [NM] - Fixed potential sync issue related to torpedos. [NM] - Updated wug's AIP set to v3.3. [NM] -- b67x released - Fixed code above to actually read in value from [GameObjectClass]::Lifespan. Ooops. [NM] - Added code to set the server's IP address in a MP game to the variable "network.session.serverip", in case a DLL wants to access it. The host should have that string set as an empty string (""). Requested by OvermindDL1. Untested. [NM] - Added more calls to ScriptUtils.h, at the bottom, as usual. Untested. Going to do a DLL source release soonish so people can play with them. [NM] -- b67y released - Third time's the charm for [GameObjectClass]::Lifespan. Previous build read in value from GameObjectClass, but then when Craft/BuildingClass came around, and didn't find a value under [CraftClass]/[BuildingClass], it was reset to -1. Now it should be happy. Are we shippable yet? [NM] -- b67z released ---- 1.3 Public Beta 3 released=======