[Note: see Changelog_pb1.txt for items up to public beta 1, Changelog_pb2.txt for items changed between pb1 and pb2, Changelog_pb3.txt for items changed between pb2 and pb3, Changelog_pb4.txt for items changed between pb3 and pb4a, and Changelog_pb5.txt for items changed between pb4a and pb5.1. ] Further note: 'Mantis' is the name of our bug/feature request database/tracking system. It's not open to the public for reading or submitting, sorry. - Service Bays might handle cases better where they don't supply health or ammo, only LocalAmmo. Noted by Avatar. Please let me know how this works. - Added AV workaround (untested), and also a console/logfile error message if it can't find the interface elements for all of the basepanel items. bzgame_base.cfg was updated for 1.3, but a bunch of MODs that seem to think they own the UI (which they do NOT, dangit) haven't been properly updated. [NM] - TurretCraft::AddPowerObject() will whine to logfile if it's trying to add a power object (~= tap) with a odf that doesn't exist. (This comes from the [TurretCraftClass]::powerName parameter in the ODF). Used to crash, noted on boards by Raven. I see this as an improvement. [NM] - As there are reports of _findfirst() and similar functions crashing once again (XP did that on opening IA screen or hosting MP, now getting reports of Vista 64-bit blowing up), switched away from perfectly good, NOT deprecated Windows functions, to some other windows functions - FindFirstFile(), etc. As long as the feckless cr**weasels at MS decide to support these set of functions for more than a week, this might provide longer term support. [NM] - Updated localize.odf's GamespyVersionStr to 1.3pb3a. Forgot to do that before pb3 came out. [NM] - Updated fvrecy_lw.odf, ivrecy_lw.odf from lucky_foot. These variants weren't distinct in pb3 due to an error. [NM] - When saving a bzn from the editor, it now warns you if the filename is > 11 chars long. Default behavior is to retry and allow the user to pick a shorter name if they want. However, the truly brave (and/or foolish) can save with long name should they pick the right dialog option. I wish we'd had this simple check right from the beginning, sorry. [NM] - Updates (more like reverts) to fblung.odf, fspilo.odf. Some testing values snuck in accidentally. [NM] -- b68a released======= - Service bay bug fixed-- was dividing by zero in some circumstances exposed by changes above. [NM] - Added [MissileClass] TeamFilter = 0 // 0 = targets all teams, 1 = targets same team only, 2 = targets only allies, 3 = targets only enemies, 4 = targets not same team [LauncherClass] TeamFilter = 0 // 0 = targets all teams, 1 = targets same team only, 2 = targets only allies, 3 = targets only enemies, 4 = targets not same team [PopperClass] TeamFilter = 0 // 0 = targets all teams, 1 = targets same team only, 2 = targets only allies, 3 = targets only enemies, 4 = targets not same team Compiles, untested. Note: I put this in the base class for various items, but not all derived classes support things. A quick cheatsheet of what classes should and should not work; use the closest chunk of the three above for which one to work. Works: (or at least I think it should) ThermalMissile ImageLauncher MultiLauncher (I think; inherits from ImageLauncher) ThermalLauncher Popper ImageMissile (note: targets whatever owner is currently pointing at, subject to filters) Does NOT work: (doesn't do a search for targets, but uses owner's target) Missile LaserMissile (may use whatever owner had targeted?) RadarMissile (may use whatever owner had targeted?) Launcher RadarLauncher TorpedoLauncher RadarPopper LaserPopper This should be all the types of weapon that use GameObjectRange to find targets, so I think that's all autotargeting weapons. [NM] - Added warnings to the ODF reader. When it tries to load an ODF, and it's looking for a GameObjectClass (i.e. another ODF), and that target ODF can't be found, it'll whine like crazy to logfile, console. This should help modders find serious errors. Also made editor builds note missing GameObjectClass entries, but 99+% of the time, this is intentional. [NM] - Added render.cfg/render_editor.cfg 'ShellDepth' parameter, as well as 2 new commandline flags: /shell16bpp /shell32bpp This allows you to override the usual choice of bits per pixel for the shell. (Default: same bpp as selected game resolution). Done because apparently some ATI Win Vista x64 drivers don't like either 16 or 32 bit shell backdrops. Allowing the user to change it here seemed like the least bad way to fix it. Note: if .cfg file line is uncommented and is 16 or 32, that will override any contradictory commandline entry. [NM] - Added support for opening BZ2's ports automatically thru UPNP routers, thanks to some free code on the internet - the MiniUPNP library. This applies only when hosting, and on gamespy (i.e. LAN Only is off). As long as you exit BZ2, it should close the ports. This behavior can be turned off from GamePrefs.ini ; look for UseUPNP in it. This seems to work with my Linksys WRT54G v5, latest firmware -- didn't open any ports by default, but with this option on, I was getting BZ2 gamespy queries thru. Not sure if this'll make local firewalls happy; I already had trained my WinXP SP2 firewall to allow BZ2 full access. Note that I don't think this code works well if multiple machines behind the same router are trying to host at the same port number. If you want to do this, I'd recommend editing GamePrefs.ini on the various machines-- set GameBasePortNumber to 17770 on the first machine, 17774 on the second machine, and so forth. That should allow them all to host at the same time. [NM] -- b68b released======= - Found case where units told to follow a scav that has since deployed would seem unresponsive when threats were nearby. They were stuck in WAIT state, and would only drop out of FOLLOW to go attack. Made it so that both follow & wait would trigger the aggressive behavior. This made it attack things that were nearby, then run back to their defended unit when the attacker got too far away. Noticed on boards by BZZERKER, possibly also llula. Savegame by Commando. [NM] - Major refactoring of MPI DLL source code while looking to make it launch and run with valuelogging builds. Renamed a whole bunch of varbs, and there's a decent chance MPI maps will run somewhat as expected when launched on the commandline. Might need to set up a few ivars if you don't want the CPU to play ISDF. [NM] - Found sync issue w/ AudioMessageManager, which could cause a game recording in singleworld to not play back correctly w/ MW on. [NM] - Possible memory stomp when looking for movies found, fixed. Also added commandline parameter "/nomovies" which will disable all prerendered movie playing. [NM] - Added call to stop all playing sfx before playing the fail or successMovie after a mission. Noted by Avatar. [NM] - More updates (more like reverts) to fsuser.odf, issold.odf. Some testing values snuck in accidentally. [NM] -- b68c released======= - Moved UPNP code fully to background thread. This should reduce any delays to just about nothing. Also made the UPNP lease 120 minutes (I think), which should be fine. [NM] - Noticed that *launcher code (e.g. shadowers, hornets, etc) weren't working reliably in a Link Time Code Generation (LTCG) build, but things were working fine in a less-optimized build. (Also, my laptop w/ VS.NET 2005 Express Edition seemed to produce ok code, but my main box has VS.NET 2005 Standard). So, turned off LTCG on the *launcher code, and those weapons seem to work ok in a test map sent on by Commando. Pushing out a build to test this. [NM] -- b68d released======= - Wug's AIP set v3.4 added. [NM] - AV in UPNPNetThread() fixed, probably for when there are no UPNP devices on the network. Reported by Red Devil. [NM] - Proper fix for *launcher code (e.g. shadowers, hornets). Was looking in their ordnance class for the team filter added in 68b, but launchers are weapons, so one must look in their weapon class. Undid LTCG change above. [NM] -- b68e released======= - Another pass at making sure that all class member variables are initialized by one of their constructors. At best, these would be harmless; at worse, these could cause some sync issues. Found a few such instances in some scav code, and that led to a search for similars items. [NM] - Added code to make some variables shared by RecycleTask/RecycleHTask, which weren't multiworld aware or properly saved/loaded do that properly. Exposed by next item above. [NM] - Change to icedit.cpp - can't type into a string that's already full (or overfull), as that would AV. Reported by Red Devil. [NM] - Added [ScavengerClass] or [ScavengerHClass] IsFearless = true // if false, will run to nearest friendly building when attacked. Requested by Avatar. Avatar mentioned that he thought "run away" behavior had been implemented at one point, but I can't honestly see that in the code. Anyone remember anything like this? [NM] - Weapons w/ local Ammo & addLocalAmmo correctly update any wireframe icon of theirs. Noted by Red Devil. [NM] - Added ability to remap which key is used for toggling the ingame console on/off in GamePrefs.ini. Look for the "ToggleConsoleKey =" line. [NM] - ImageMissile won't hit owner when launching -- was hitting self when launched from an ISDF scout. (might be a dangerous change; please test this on a few different types of vehicles). Save by Commando. Also made ImageMissile respect [MissileClass]::TeamFilter. Note: this weapon steers towards whatever the owner points at, so if the user's pointing at nothing, or something filtered out, the missile will tend to go straight. This is by design. Use one of the *Launcher weapons with a nearly-zero lockon time if you want some other behavior. [NM] -- b68f released======= - Fixed bug with infinite servicing of nearly-healthy buildings. Changes above for bays/trucks had a floor of 0.00001 to add to health. Fixed. Save by Red Devil. [NM] - Redid timeskew code once again. Servers now calculate when they receive move packets vs the local system clock time for when remote players' moves arrives, and tells clients to tweak their clock to match. Seems to work fine on limited LAN testing. Also: please note that the 'lag' column of the ingame score display is now approximately 10x more sensitive, so while it may seem high when a client joins, on the server, all the lag numbers should be zero within about 30 seconds of someone joining. [NM] -- b68g released======= - Oooops. Timeskew code above broke AI vehicles, causing lots of resyncs. Fixed. [NM] -- b68g2 released======= - Tweaked craft smoothing code (used by AI, remote humans) to try and save a little more info. This may have helped make things a little smoother in a 10-bot DM: Shangrila on my LAN. Let me know how it feels. [NM] -- b68g3 released======= - Added GamePrefs.ini :: Play_HistogramPosX & Play_HistogramPosY. [NM] - If the game can't find a shell cfg file at the higher res it's looking for, e.g. 'bzgame_stats_1280x1024.cfg', it'll log that to battlezone.ini so that there's some record of what it was looking for. Then, it's up to the modder to match their filename to that. (It'll also log if it does find a higher res file) Putting in a "bzgame_stats_640x480.cfg" into my addon folder did get that file used when testing in my normal windowed mode. [NM] - Added GamePrefs.ini :: RejectionsBeforeAutoBan , and a chatline command, "/clearautobans" . Pretty much untested. [NM] - Made a lot of GamePrefs.ini UI-ish settings adjustable ingame with the "gameprefs.*" console var settings. Note that a lot of these aren't adjustable in realtime, but if you set them in something called by a custom bzgame_init_(WIDTH)x(HEIGHT).cfg, that should take effect. (Or if not editable realtime, you can edit them in shell, launch map, see results, quit back to shell, edit again). Not all these items are fully tested. [NM] - Lag string shown ingame is worst of old, new systems. If using old system, it'll show "::#::", with the number in the middle. [NM] - Fixed RecyListMPI.txt from Commando, MPVehicles.txt & editor spelling fixes from Red Devil. Also merged in powerup graphic & light tweaks, tweaks to DM:Pyramid, DM:Volcano from RD. [NM] - Added [PowerUpClass] ExplodeEndOfLifespan = true // if true, when GameObjectClass::lifeSpan expires, goes boom. False = no boom. But, there's always a boom tomorrow. Seems to work in very limited testing. [NM] - Some initial work to check sync issues in multiworld. Did do some work to reset game clock at start of moving each turn, as that was an issue that seemed to be causing some values to go out of whack. This probably won't help with the warping of most vehicles, but might help more with larger decisions made in multiworld. [NM] -- b68h released======= - Updated fsuser_m.odf, player.odf by Commando; bzgame_stats.cfg by Red Devil. [NM] - Fixed stutter when recycler (and probably also scavs) deploy. [NM] - Tweaked clock time code. This seems to have fixed the laggy audio messages recently introduced, quite possibly a bunch of other things related to timing. [NM] - Fixed (I think) the game resolution-dependent cfgs. Resolution is read from current profile instead. [NM] -- b68i released======= - Further tweaked clock code -- my changes made for 68g/h are now done only after a multiworld swap. This should help reduce impact even further. [NM] - Multiworld can be turned off only in SP games now. [NM] - Added console cmd game.altremotepredict - toggles the resimulation of remote players. Done to try and test some things related to new clockskew code. Try this with stock vs built scouts. [NM] - Added [CraftClass] EndSlideWhenCanHit = true // if true, attacktask exits SLIDE state as soon as it thinks it can hit the target Setting this to true seems to fix a case where a scout seems to be in a weird state, approaching but not firing until it's pretty close. Save by Commando. [NM] - Wingman process (and maybe some other derived processes) should now take weapon range into consideration when deciding how close to get to target. Previously, they just drove up to a fixed distance away. Fixes a save Commando sent on where sabres w/ only mortars got unnecessarily close to their targets. [NM] - Found a few items in GameObject.h that weren't being properly load/saved. They were much more applicable to Craft only, so moved those items and some similar ones to Craft. Added some virtual functions for backwards compatability with old savegames. This should help (very slightly) on memory footprint, as a lot of items derived from GameObject (e.g. scrap, buildings), no longer have those items bundled. I wanted to do this over 6 years ago, and finally got my wish. [NM] - Health, ammo ratios in code now clamped to 0..1 range on writing, rather than nearly every place it's read. Seems more efficient to do this. [NM] - Added a bunch more accessors to ScriptUtils.h, mostly related to ODF reading. DLLs can now query things at will. [NM] - Added [CraftClass] AITargetLocation = -1 // -1 = default, or 0 = center, 1 = high, 2 = low, 3 = left, 4 = right Added to allow craft to override default AI processes targeting area on their intended victim. Done so that some assault tanks Avatar made that use attackTask = "ArtlAttack" (which defaults to aiming high) work in more situations-- those tanks need AITargetLocation = 0 to work properly. Save by Commando. [NM] -- b68j released======= - Start/launch button in MP shell should deactivate extras when it it is enabled. May fix issue reported by Commando. [NM] - AIP Idle Dispatcher should drop any craft that have no pilot. The idle dispatcher is called occasionally, so if a craft is sniped and entered pretty quickly, it might still be possible to get some messages intended for the AI. If this is still happening, then I don't think the idle dispatcher is at fault, no matter how much people want to blame it. [NM] - AddAmmo should work fine for pilots once again. Health ratio of objects should be recalculated on multiworld swaps once again. Optimized a little too much last build. [NM] - Investigated AI craft & MDM mortars. Yes, they don't handle them well. Solution: don't give AI craft MDMs. (Any possible fix is likely to be a lot of work and cause problems). [NM] - Added [CraftClass] MustBeLinedUpToHit = false If true, the 'AbleToHit' calculation now takes current heading & fire cone angles into account. Setting this to true seems to make a custom walker Commando sent on (using aiName = GechProcess, and min/maxheadYaw = 0) successfully attack. It did start moving, rather than spin in place, which may be somewhat unavoidable. Not sure what effect this might have on other craft types; things that deploy to fire ike turrets might behave a lot worse if this is true. [NM] - Changed CraftClass::EndSlideWhenCanHit to have default value of true. [NM] - Added GamePrefs.ini :: MaxDMBots and DefaultAltRemotePredict params. Also added MaxSmoothDTDecrease, MaxSmoothDTIncrease, but it doesn't seem to fix the behavior of craft when the altremotepredict is off. [NM] - Added commandline /whynoaltpredict . If this is on, and it decides not to use the alt remote predict (default), it'll try and log out why. This is to try and track down why built scouts are more warpy vs spawned scouts. Note: this can spam the logfile a LOT, so it can definitely affect performance. And so, it may disappear soon if it catches things. [NM] - Tweaked volcano.inf from Red Devil. Undid some recent changes. [NM] - Added [JammerTowerClass] DampTeamFilter = 2 // 0 = all teams, 1 = same team only, 2 = allies, 3 = enemies, 4 = not same team JamScannerTeamFilter = 3 // 0 = all teams, 1 = same team only, 2 = allies, 3 = enemies, 4 = not same team Note: targeting with the 't' key only respects the damped flag on enemies. Changing this would be a BIG change, as there's no tracking of how the damping is applied. For neutral items, such as ones on team 0, they're always frriendly, or at least not enemies. [NM] - Possible AV fix in AudioCache::GetItem, for when the passed-in filename it's looking for is empty or blank. Not 100% sure I got it, as this is only on a callstack w/o a lot of context. [NM] -- b68k released======= - Moved messages from /whynoaltpredict from logfile to ingame chat messages box. Much easier to track what's up. Also figured out why built scouts warp more than spawned-- in multiworld, per-world ship configs are made, which tripped up the quick "are these the same type of ship" tests. Switched to a slightly slower check that looks at the base configuration, and this seems to have made the messages go away after entering a built scout. (Note: some spam of messages about lockEnt is typical when a pilot exits (hop/bailout) a ship for a multiworld swap or two.) [NM] -- b68k2 released======= - Added Greenheart's IA Duststorm map. Will probably wait for next full build to include. [NM] - Armory dropoff point should be highlighted in MW now. [NM] - Added [CraftClass] GotoTaskHasLeader = true // if true, gotos will be done in a leader/follower model PersonRetreatRecycleDist = 25.0 // Distance a pilot needs to be from dest to recycle Note: default for anything that's a Person has the default value for GotoTaskHasLeader = false. Done to fix the stackup of pilots outside a recycler, savegame by Commando. Note: this setting is read when a goto is started, not anytime after that. So, this setting won't fix savegames that already have a leader set for pilots. You'll need to force the AI to change state, such as by hopping out to give them a new destination for a goto. Also, having a leader is a very useful performance optimization-- setting this to false for lots of craft might affect framerate, as it'll have to calculate a lot of paths. [NM] - In teamplay strategy02.dll/stratctf.dll missions, shouldn't get the "unknown teamgroup won" message anymore. [NM] - Added some more accessor functions to scriptutils.h. Added code so that DLLs can make sure a ODF is open and ready to be read. Also added code to allow a custom gameover reason string. Both are untested, but compile. [NM] - After a game, if a client hits "chat/more" before the server does, their player list entries should be filled out. [NM] - Remote human player craft w/ turrets (e.g. ISDF Rocket Tank) should have their turrets spin at somewhat normal speeds. Tested w/ Rocket Tanks on LAN game only, but should work for other ones e.g. guntowers. [NM] - Strat, MPI map INF updates, daywrecker model is 1.3 variant again, from Commando. Reverted bzgame_stats.cfg as it doesn't work at the default of 640x480 mode (I run windowed so that the debugger works well). Resolution-specific variants of that cfg might be added, but the default one needs to work at 640x480. [NM] - Users shouldn't be able to target items if scanner jammed, or other conditions that would prevent a lock -- did the validation when finding a target, not just every frame after that. Seems to fix a savegame sent on by Commando. [NM] -- b68L released======= - Spawnkill check shouldn't have a false positive if APC soldiers die around the same time as their human player. Noted by Commando. [NM] - In AIP code, crafts could sometimes find themselves on more than one attacker plan, and get conflicting orders from the different plans as to where to be sent. This was reported as a case of really warpy AI in multiworld by Commando, but the real cause was as listed above. Added in some code to attacker plans to force all other attacker plans to release a given craft once plan claimed it. Seems to fix the save. [NM] - Reduced optimizations slightly around Log::Client::Write(), hopefully so that it generates more detailed callstacks if a problem occurs within that function. Also made sure to fully initialize a helper stucture used in that function. This may help w/ a crash noted in there noted by Commando and others, but the callstack info in there is so incomplete that I might need to see how this new code works. Mantis bug #23. [NM] - Did some work to try and work around a possible crash in FamilyNode::SimSetState_Low, called by Craft::Simulate. AV log by Commando, but seems so puzzling I may not have gotten the true cause. Mantis bug #44. [NM] - Did some work after SetCooperativeLevel() in the DirectX Initialization level. If we get the error noting that exclusive mode was already set, it doesn't treat that as a fatal error, but tries to continue in normal mode. This might fix it, this might not. Noted by Greenheart (mantis bug #18). [NM] - Possible fix for mantis #16 - extra work to turn off the team selection shell file when the extra options open up. [NM] - Fix for mantis #17 - all AI processes should respect the anti-air flag when searching for nearby targets. Previously just OffensiveProcess respected it. This makes preplaced units vs spawned units behave the same. Not sure why preplaced units didn't seem to use the same AI process pathways. [NM] - Bumped size of buffer in InfoDisplay.cpp . This might help w/ mantis #20, as this is one of the changes made around the time a subbuild was made that broke this mission. [NM] - Asset checker shouldn't be as confused when a lot of stock assets are removed for some inexplicable reason. Fix for mantis #36, reported by Commando. [NM] -- b68m released======= - Added commandline "/odfwarnings" . If this is present, then it'll complain about game object class lines in ODFs that aren't specified to the battlezone.log file. If not present, it won't log anything. Note that most items being missing is normal, one major reason why this is off by default. [NM] - Added [CraftClass] WingmanProcessAttackMines = true NonWingmanProcessAttackMines = false These flags adjust behavior when looking for a new target nearby. There's two flags because that's the way the code worked-- only WingmanProcess would consider mines. [NM] - Changed rsqrt() function in code to the inlineable one found in http://www.beyond3d.com/articles/fastinvsqrt/ , rather than a nasty lookup table format. This ought to "just work," but keep an eye out for any new weirdness. Thanks to http://games.slashdot.org/games/06/12/01/184205.shtml for the link I saw. [NM] - Proper fix for mantis bug #23. Changes pre-pb3 for vista allowed builds to treat a file as writeable, which could get corrupted. Hardwired some values to the safe defaults. [NM] - Added Greenheart's 'Surprise' map, v2a, in IA, MPI flavors. Will probably distribute w/ next full build. [NM] - Fix for mantis #24, reported by Commando. Keeps more of AI bases alive in visual worlds, giving AI pilots ejected from craft somewhere to go to, rather than attacking until a MW swap. [NM] - Added (mantis #41) [GameObjectClass] CanAcceptPowerups = true If false, the unit should blow off powerups they receive. Compiles, but is untested. [NM] - More callstack logging around Matrix::Transform_Vectors(). Might help if mantis #49 shows up again. -- b68n released======= - Added commandline argument "/logsavesizes #", where the # is the number of seconds between updates. Use values <= 0 to turn off, or just omit this commandline param. This'll print out a fairly incomprehensible line, but it should make some sense to me. I'm mostly interested in which parts increase over time, especially in relation to lategame slowdowns. Done in part to get more info on mantis #46. [NM] - Added [CraftClass] LeaveExplodeScorch = true MaxScorchHeight = 20.0 // max height above ground to leave a scorch If a craft has both conditions above are met, it'll leave a scorch when it goes boom. Also added: [CraftClass] ClosestEnemyGoodEyes = false // but defaults true for CLASS_TURRETTANK items The 'GoodEyes' flag is used within the GetClosestEnemyWithin() code. If true, that function will allow units behind them to be considered, else only those in front of them. All three flags compile, but are untested. [NM] - Fix for mantis #25, reported by Commando. Fixed minor exploit with jammer and radars. [NM] - Fix for mantis #32, reported by Red Devil. SprayBuildings (e.g. splinter) work once again. [NM] - Fix for mantis #55, noted by Commando. Reverted rsqrt() function to what it's always been, as some things seem to need that bug-for-bug compatibility. [NM] - Fix for mantis #45, noted by Commando. Very reproducable resync (heck, I can barely believe the game ever stayed in sync with such a bug) fixed. WingmanProcess didn't behave properly on different teams. [NM] -- b68o released======= - Fix(?) for mantis #13 - don't do work resimulating remote players in tracked vehicles. Might be a little more warpy, but they shouldn't bounce around a lot in the process. [NM] - Fix for mantis #15 - vehicle list and/or description boxes should be filled in after host quits a session and chat/more is pressed. [NM] - Fix for mantis #14 - spawn objects have orientation preserved when someone joins. Was resetting to north as an optimization for network savegame size, but I think this is probably fine to relax. [NM] - Fix for mantis #53, reported by GreenHeart -- recycler/factories could get stuck in an unopenable state. This is a somewhat dangerous fix, as I seem to remember some tweaks a long time back in similar code. Do try all the possible shift-build, build extending, build canceling tricks to see if this code works. [NM] - Fix for mantis #57, reported by Red Devil. AI settings for tracked craft were being applied even when humans were piloting them. [NM] - Upgraded to Microsoft Visual Studio .NET 2005 Service Pack 1 (SP1). You shoue notice no changed behavior, if they did things right. [NM] - Errors in Explosion, Ordnance are reported to console a bit more consistently. [NM] - Fixed sync error seen when dying as pilot in fleshstorm (consistently). Might also fix sync error (intermittent, as far as I hear) when dying as pilot in stock DM. Save by Commando. [NM] - Console warnings when ODF names are > 15 characters. Results may be inconsistent afterwards, please fix these warnings. [NM] - Made ingame framerate display show a lot more info, in trying to make some progress on mantis #62 (stuttering). I'm not seeing all that much in the way of stutter here, or maybe I don't know what I'm looking for. I'm curious if there are times when the "recent low" fps drops significantly below the avg fps. [NM] -- b68p released============== - Further updated fps code to keep better track of high, low values, and recent high/low values. Only prints one digit of precision, as that's more than enough. [NM] - Added, for Mantis #34 (MP map inf file) [DESCRIPTION] network.session.svar12 = "ivrecyCPU" (IA map inf file) [DESCRIPTION] CPURecyPattern = "ivrecyCPU" These provide the ability to restrict races available on the CPU's team by providing a filtering string. See vars.txt for more info. [NM] - Possible fix for mantis #66, noted by Commando. Modified weapon convergence code to just assume a fixed, big (1e12) distance if weapon convergence is turned off. This seems to fix vertical alignment of shots w/ reticle. Might cause other quirks. Please test. [NM] - Fix for mantis #61 - added console variable game.aipdebugteam, defaulting to -1, which is what team is shown. If this value is < 0, then all AIPs are allowed to submit values. (IA defaults to team 5 for the CPU, MPI defaults to team 6, so -1 would work for both). If the value is > 0, then items from that team, and that team only, will be shown. This should have no effect on file logging of AIPs, just the onscreen display. [NM] - Added [GameObjectClass] SingletonGroup = false // if true: GroupPanel can only select this group, no others IdenticalGroup = false // if true: GroupPanel can only select this group w/ identical groups Certain vehicle classes (see mantis #47) have IdenticalGroup set to true by default. GroupPanel is the F# group manager code. This fixes mantis #47, I believe. [NM] - Bumped pretty much all 16-byte buffers for strings (e.g. ODFs) to 64 bytes. (Some audio filename fileds accepted 20, 24, or 32 chars, bumped all of them to 64 bytes also). This should allow modders to use much longer filenames all over the place, though such things will (ovbiously) be incompatible w/ earlier versions of BZ2. As ascii-saved bzns have had issues with items with a space in them, filenames with a space in them are similarly not recommended. Saved missions, and savegames should be compatible. If they're not, please let me know. [NM] - Some work to shrink savegame sizes. Saved approx 275 bytes per object (~33% on smaller props; a lower % of larger objects), probably a bit more for join saves. (Could compress more for multiworld swaps, but I'd rather not trade too much CPU here). Saved missions, and savegames should be compatible. If they're not, please let me know. [NM] - Possible fix for mantis #5 (or some other bug) - collisions w/ tracked vehicles, other units and terrain should be smoother in MW. More info related to collisions saved across MW swaps, which seems to reduce the amount of popping after saves from Commando with pushing a scav up a near-cliff. [NM] -- b68q1 released======= - Fix for mantis #70 - hoverscavs respect the [HoverCraftClass]::setAltitude in their ODF when they're deploying on a pool. This should fix any sinking to the ground when they get near their pool. Note that the dummyroot of the extractor it turns into might need to be lowered to make this look more seamless. Save by Commando. [NM] - Possible fix for mantis #9 - remote human players shouldn't be resimulated when targeted, as they've already got a bit of a special code pathway. AI units targeted should go thru the same code as before. [NM] -- b68q2 released======= - Added ability to reposition audio & FPS info from GamePrefs.ini. Defaults shouldn't overlap anymore. [NM] - Possible fix for mantis #77 - plants, land animals store more information across multiworld swaps, so they should appear a bit smoother in MW. On a player join or resync, this information isn't saved/loaded in order to save space. But, hopefully this should be a rare event. [NM] - Reduced optimization levels in ~ENTITY and Render_Shadow in order to get more callstack info in crashes Avatar's noting. [NM] -- b68q3 released======= - Added [CraftClass] ExplosionEnergy = 1000.0 // How much "energy" is passed in to the vehicle explosion NumChunks1 .. NumChunks5 = -1 // # of chunks per chunk type. max = 10 NumChunks = -1 // # of chunks overall. -1 = autodetermine, max = 25 If NumChunks1 >= 0, then the 1..5 values are used, not NumCunks. That count of # of chunks per chunk type (i.e. the same chunkEffect#) is generated, with random position & velocities. If NumChunks1 < 0, then NumChunks is used instead. If NumChunks < 0, then the craft's size is used to determine how many chunks are generated. Chunks are generated (once again with random position & velocities), balancing the chunk types as evenly as possible. A max of 25 chunks (i.e. 5 per type) will be generated). [NM] - Added commandline argument: "-nocdmusic" (quotes unnecessary). When present, turns off trying to read the CD drive on startup, or other times. Setting CD music vol to 0 would turn off use of it later, but it'd still try to read it on startup. [NM] - Added more warnings to battlezone.log that might help track down busted MODs. For example, the FElite.zip sent on now generates: WARNING: Couldn't find localize string 'ClearAutobansCmd'. Is this a mod that replaced localize.odf w/o being updated for 1.3? WARNING: Too many weapon groups for "viewstand.odf.odf". Skipping some - Possible fix for mantis #93 - if being towed, vehicles should turn off their engines. [NM] - Fix for #83, possibly also #106 (never could get the savegame loading in a reasonable amount of time; description seems similar). Exploding vehicle chunks shouldn't teleport in from center-of-map. [NM] - "Fix" for #78 - when game builds a .msh, that's logged to battlezone.log. If it locks up, at least you'll know which file caused it. [NM] -- b68r released======= - Fix for mantis #120 - armory should respect [ArmoryClass] soundBuild = "" // set to "somefile.wav" soundCancel = "" // set to "somefile.wav" soundFinish = "" // set to "somefile.wav" [NM] - Excluded .htm, .lib, and .exp files from the duplicate files check. [NM] - Fix for crashes seen at end of Avatar's missions. Squelched calls to DLL's DeleteObject() when the mission is closing down. This keeps DLLs from spawning things into areas of memory that are supposed to be cleaned out. [NM] - Updated wug's AIPs to v3.4.1. Update to MPI Surprise to v2b from GreenHeart. Latter will be in next full build. [NM] - Fix for mantis #116, reported by Commando -- find all recyclers among important base buildings, not just the first slot. Compiles, but untested. [NM] - Fix for mantis #124 - scavengers/hover scavs should try harder to find another piece of scrap when they've picked up their target. [NM] - Fix for mantis #68 - should resume music played after a shell movie, if the music is killed/restarted the way bzshell.cfg does it. Noted by lucky_foot. [NM] - Partial fix for mantis #88, noted by Commando. If modders want to use "null" for some ODF values, they'll have to do things like the following: [CraftClass] damageEffect1 = "NULL" // and other damageEffect# chunkEffect1 = "null.xsi" // and other chunkEffect# The second has always been there and the official way. The first is what changed. Double quotes around "NULL" is requried. [NM] - Fix for #129, noted by Commando. Added [BuildingClass] ReplacesObject = false // but extractors default this to true If this is true, then the building acts like extractors where any terrain object under the building is swapped out when this building is built on top, and swapped back when the building goes away. Note: if true, then this building should probably be the same size as what it replaces (e.g. pools). Compiles, but pretty much untested. [NM] - Tweaks for mantis #31, reported by Commando. As that bug grew large and encompassed multiple issues, this has multiple fixes. (1) scavs should be able to find the closest dropoff of buildings on their team or the allied teams in teamplay. It'll prefer the closest friendly building, whether allied or same team. (2) Human-piloted scavs now use that same dropoff-finding code, and respect the dropoff distance. [NM] -- b68s released======= - Updated nVidia DXT Compression libs to those found in the file DDS_Utilities_8.31.1128.1130.exe on their site. Claims to produce higher quality conversions than previous revisions. Updated BZ2DXTGen to use OpenIL DLLs, newer nVidia libs. Also updated BZ2DXTGen to read in .dds files, mainly for kicks. Reconverted all BZ2 textures w/ this new format, though I'm not really sure I can tell much of a difference. These reconverted textures will be in the next full build. [NM] - Began a long-overdue process of DLL'ifying BZ2's support code. Astute users should note the same bunch DLLs for BZ2DXTGen in the next full build. (These may not be byte-for-byte identical as the compiler includes some build date/time into output files, so if I've done a rebuild locally, it'll differ.) Also split out libogg, libvorbis, libvorbisfile into DLLs. Updated Bink DLL to v1.8.2 (aka 1.8c, 2005-05-21). Added dbghelp.dll v6.6.7.5, a free download from http://www.microsoft.com/whdc/devtools/debugging/default.mspx . This allows for much better and more reliable callstacks if (sorry, it's still 'when'), BZ2 crashes. Dbghelp.dll uses .pdb files now, instead of .sym files. [NM] ---- 1.3 beta 69 released======= - Changed link settings to no longer link against imagehlp.dll, as dbghelp.dll is so much better. [NM] - Fixed crash on trying to load ogg sound caused by DLL-ification above. BZ2 uses __fastcall for 99% of calls. DLLs now use __cdecl. Hilarity ensued. [NM] - Fixed crash on loading 8-bit bmp files - didn't account for that well in OpenIL file loader. Should now work fine. [NM] - Tweaked exception handling code to possibly write out 64-bit values on pre-WinXP OSs. [NM] -- b69b released======= - Fixed the displayed ammo count for partially-filled hardpoint groups and alternating-fire weapons (mantis #125) [Ken] - HoverCraft and AirCraft constructors now update the animation pose, preventing the animation glitch at creation (mantis #100) [Ken] - Fixed incorrect model pose when first activating a model viewer control using the neutral animation (mantis #100) [Ken] - Fixed pilots missing team colors (mantis #50). WeaponClass would load models without the findReplacementMap and findGlowMap flags set, and one happened to use the pilot model. As a result, the pilot's texture would get loaded without a replacement map. [Ken] - Tweaked DLL source to (1) style of the code is lot more 'traditional' in that there's a header for every cpp file. Member variables all got renamed with the 'm_' prefix for greater clarity. (2) compiles cleanly in VS.NET 2005 w/o warnings. (This probably means it requires VS.NET 2005, sorry). (3) Tweaked the readme so that you can easily rename what the DLL's name is, as well as how to place it in the right directory automagically. - Major surgery to BZ2 source code to do the same sort of tweaks as the VS.NET 2005 changes. This might introduce a little sort-term instability, in case I botched something, and there's more warnings when compiled, but I think it's going to be a bit safer and more secure. [NM] - Updated initial default texture size to 'large', for new profiles. It's 2007. Get hardware that can handle it. [NM] - Added Play_CockpitRadarColorR..B to GamePrefs.ini, and console varbs gameprefs.Play_CockpitRadarColorR..B. [NM] - Reduced the amount of data written by FamilyNode::Save()... 1. skip objectMatrix since true_pos and true_quat can recover it 2. skip last_pos if it's the same as true_pos 3. skip true_pos if it's the same as the corresponding mesh true_pos 4. skip last_quat if it's the same as true_quat 5. skip true_quat if it's the same as the corresponding mesh true_quat This makes a big difference for objects with lots of nodes. [Ken] - MeshEnt::IsLoadSaveCleared() now returns true only when no animation is set, as many objects rely on animation values to set up their pose (e.g. deployables). This should fix turret saves (mantis #75). [Ken] - Added [BuildingClass] AlignsToObject, which determines whether the building aligns itself with the object it replaces. [Ken] - Extractors default to not aligning with biometal pools, so the parent Scavenger can enter from any direction (mantis #132). [Ken] - Camera Pods (classLabel="camerapod") can now act as nav beacons, appearing in the "~" menu. They also display the target cam when selected, just like the BZ1 nav (mantis #134). [Ken] - GameFeature now uses a common mechanism for all functions, and correctly handles Add/Del functions during iteration. I used Nathan's Control function implementation as a basis. [Ken] - Removed cockpit timer from the satchel charge weapon, as it was ugly, out of place, and generally broken (mantis #95). [Ken] - SaveScriptUtils now saves team colors (mantis #145). [Ken] - Fixed double-speed particles and rain when a second camera view was active (mantis #118). Particles now update their positions as part of PostSimulate (once per frame) instead of Submit (once per camera per frame). Rain now only applies to the main camera view, since the smaller views are too small to see it anyway. [Ken] - Improved support for Scavenger pick-up animation (mantis #121). The Scavenger now plays the pick-up animation BEFORE collecting the a scrap piece. If the animation is two-way, it also plays the animation in reverse to finish the cycle. [Ken] -- b69c released======= - Fix for possible crash on starting a MP game, callstack probably in the chatline code. My bad. [NM] - Fix for mantis #158 - crash when modder mistyped things. Made it print out a console & BATTLEZONE.log file warning, hopefully not crash. Noted by Greenheart. [NM] - Fix for mantis #159 - crash when modder put one xsi for different LODs. Will spam console/logfile like above. Noted by Greenheart. [NM] - Fixed the free-eye camera so that it handles sensibly. It uses vehicle controls where appplicable (throttle, strafe, pitch, steer), along with track-pitch for vertical motion. [Ken] - Fixed NavigationListWorldPart::Cleanup blasting 120 bytes past the end of an array, which caused a crash at exit. [Ken] -- b69c2 released======= - AIPaths should be loaded correctly now. Broken by me as part of VS.NET2005 changes earlier. [NM] -- b69c3 released======= - Possible fix for mantis #150 - upgrader plans should try and find closest object to the rig used to upgrade them, not first by seqNo. [NM] - Possible fix for mantis #146 - CollectPool plans that have their scavs turn into buildings should have their state reset. [NM] - Possible fix for AV in ScavengerH::FinishScrap(). Reported on boards, mantis #165 [NM] - Possible fix for AV in script callback. [NM] - Fix for mantis #156 - planConditionCount should work for the various Exists plan types. In addition, there's a new planCompare item, defaulting to 0, that should allow some more flexibility in comparing values. planCondition = "Exists" planConditionClass = "ibarmocpu" planConditionCount = 1 planCompare = "==" // or "!=" or "<" or "<=" or ">" or ">=" planCondition2 = "Exists" planConditionClass2 = "ibsbaycpu" planConditionCount2 = 1 planCompare2 = "==" // or "!=" or "<" or "<=" or ">" or ">=" Compiles, but untested. [NM] - Names in irc channel window should be correct once again. Broke it w/ VS.NET 2005 changes. [NM] - Fix for mantis #137. Added [CraftClass] HasSeparateChunks = false // if true, then it reads SeparateChunkEffect1 .. SeparateChunkEffect5 SeparateChunkEffect1 = "iochnk01.xsi" ... SeparateChunkEffect5 = "iochnk05.xsi" If HasSeparateChunks = false, then items specified by chunkEffect1..chunkEffect5 are copied into what's read by SeparateChunkEffect1 .. SeparateChunkEffect5. If HasSeparateChunks = false, then SeparateChunkEffect* is used. The SeparateChunkEffect* is used for the vehicle crash, which I think takes place a little bit after the chunkEffect* items are generated. [NM] - Removed assumptions in StatusDisplay shot count calculation that all weapons in a selected group are identical (mantis #162). The new version should produce results similar to BZ1 for mixed weapons. [Ken] -- b69d released============== - Fixed buffer overflow in in(char *buf, size_t size) in non-binary save. It was passing size+1 to sscanf_s as the buffer size instead of just size, so it would write an extra byte past the end. (Of course, hiliarity ensued...) [Ken] - Player model now appears on the top-right camera when using cockpit view (mantis #169). GameObject::RenderScene was improperly hiding it even when not using the main camera. [Ken] - CameraPod now rotates to face in the player's eye direction instead of front direction (mantis #173). [Ken] - If the navigation list is full of camera pods, adding another nav beacon or camera pod will cause the oldest one to self-destruct to free up a slot (mantis #170). The navigation list preferentially sacrifices nav beacons in favor of camera pods, but always makes room for any player nav or pod placement attempt. [Ken] - Nav beacons no longer show target camera (mantis #171). [Ken] - Fixed HoverCraft/AirCraft fin-animation twitch when switching worlds. Their Save/Load functions weren't saving the filtered values that UpdateAnimation relies on, so everything would reset to zero. [Ken] - Fixed leaning pilots and other multiworld graphical wonkiness (mantis #161). My changes to MeshObj::Load/Save would leave true_pos and true_quat uninitialized instead of defaulting to mesh defaults. MeshObj::Load now always sets them to mesh defaults before entering FamilyNode::Load. [Ken] - Scavengers with two-way pickup animations now wait until the reverse animation is done before allowing another scrap pickup. (This really should be done with state machine states...) [Ken] - Status display will show meaningful ammo count for weapons using local ammo (mantis #179). For weapon groups mixing local ammo and global ammo weapons, the main ammo count will show global ammo count since the individual weapons will show local ammo count. [Ken] - Weapon addLocalAmmo now properly scales by time step and sets weapon icon based on shot count (ammo/cost). [Ken] - Made the StatsPanel (bzgame_stats.cfg) inert so it wouldn't block the cursor. This had been bothering me for a long time, and it turned out to have an easy solution. :) [Ken] - Added support for selecting multiple weapon groups. I added two new controls, "weapon_multi" (default left shift) and "weapon_toggle" (default same as fire button). Holding "weapon_multi" highlights the current weapon, and cycling next and previous moves the indicator instead of changing weapon selection. Pressing "weapon_toggle" toggles the selection of the currently highlighted weapon. This ended up being somewhat simpler than I originally anticipated, though there is a small matter of balance now that everyone can unload huge volumes of fire... [Ken] - Fixed problems with the target camera caused by earlier changes. The priority list is now camera pods, base buildings, and finally the player's target. (It previously wasn't clearing the target object pointer in some cases.) [Ken] - Fixed camera pods in multi-world (mantis #167) by moving their control logic into an AI process (CameraPodProcess). Selecting a pod now sends a CMD_LOOK_AT command with its team's player as the "who" parameter. Deselecting the pod sends a CMD_STOP command to clear out the existing command. CameraPodProcess then reacts to these commands and updates the controls like an AI process should. [Ken] - Fixed Armory-launched camera pods not making it to their target location. It turns out that the underlying PowerUpProcess update got tripped up by commands not meant for it so I changed it to only call GetWhat() for the CMD_GO command it understands.. The subsequent CMD_LOOK_AT will stay in the queue until the pod lands and the CameraPodProcess takes over. [Ken] - Fix for mantis #180. classLabel = "barracks" looks for HP_VEHICLE to spawn pilots at. Uses center of building as fallback if not present. (Code just copied over from factory.cpp). [NM] - Fix for mantis #178 - service[H]trucks shouldn't consider targets low on health/ammo if they can't supply that. [NM] - Added SetBestGroup() to ScriptUtils.h, which puts a unit in the best group possible. Changed instant, mpinstant DLLs to use that, instead of placing aipath-spawned units all on the F5 slot. Fixes mantis #81. [NM] -- b69e released============== - AIPaths now load correctly once again. Dueling fixes didn't make this happy. [NM] - Removed /nodxt commandline switch in favor of code that'll autodetermine. Sorry, work in progress that slipped out due to fix above. [NM] -- b69e2 released============== - Changed "lights" control back to debounced, which I had changed when I was temporarily using it as the weapon-multi control. [Ken] - Restored Person deploy-to-use-special functionality, which got lost when I copy-and-pasted the control logic from Craft. [Ken] - Replaced naive steering control in CameraPodClass with PID controller based logic similar to Craft::AimBody and Craft::AimTurret. CameraPod aiming is now VERY crisp and accurate. PowerUp controls are simple enough that I can compute the control parameters directly. [Ken] - Added command-line parameter for default turns per second (/tps). Network code will override this value, so it's primarily useful for single-player levels. [Ken] - Cleaned up the internal workings of MoveManager command handling so that it can handle arbitrarily-constructed AiCmdInfo. Taking advantage of this will require corresponding changes in NetManager::SendCommand, so it's not that useful yet. [Ken] - Target camera renders the entire scene when targeting an enemy unit, making it more of a telescopic zoom camera (mantis #186), and properly hides the unit model when targeting a friendly unit (eye-cam). [Ken] - Clicking on command panel buttons works correctly now in satellite view (mantis #182). The first problem was that the ICGauge control was not intert by default, so it would intercept clicks intended for the containing button. The second was that the mouse click would get translated into the space bar action even when that command had no reticule location. [Ken] - IControl now propagates rollover to any child marked as both INERT and ROLLOVER. The interface config files for the base panel, group panel, and command panel take advantage of this new feature to improve visual feedback in satellite view. [Ken] - Major surgery to Utils:: namespace. Got rid of wrappers for strcpy, and went w/ VS.NET2005's native security-enhanced forms. This touched lots of files, might cause some breakage. Noticed some char buffers were being exceeded, so converted those to std::string instead for a lot more space. [NM] - Work to try and get more info on mantis #163, irc having issues for some. More logging in places. Not sure if this'll help. More info does go to the BATTLEZONE.log file, so please attach at least a dozen lines above the first Vid::BeginScene: device->BeginScene problem. [NM] -- b69f released============== - Fix for mantis #202 - dmbane not happy on load. [NM] - Fix for mantis #205 (AV in GotoTask) [NM] - Fix for mantis #166 (DXT not supported on certain cards). Added render.cfg/render_editor.cfg::UseDXT setting. The autodetermine should turn things off for the following cards. http://developer.nvidia.com/object/device_ids.html doesn't list the GeForce 1/2 cards, which I've heard have problems, too. If DXT is turned off, either by the autodetermine or by setting the value to 0, then DXT textures will be automatically uncompressed on load. This should let modders ship all the nice fun DXT textures they want. Cards that'll force-disable DXT: "GeForce MX 4000" "GeForce2 MX/MX 400" "GeForce2 MX200" "GeForce2 MX/MX 400" "GeForce4 MX 420" "GeForce4 MX 440" "GeForce4 MX 440 with AGP8X" "GeForce4 MX 440-SE" "GeForce4 MX 460" Also, cards must claim to support DDCAPS_BLTFOURCC, DDCAPS_OVERLAYFOURCC, DDCAPS2_COPYFOURCC, and at least 5 numFourCCCodes to use DXT textures. Which my GeForce 7800GT does. Haven't tested this on lesser cards. The autodetermine is pretty chatty as to what it puts in the battlezone.log file if you want to search it for 'DXT'. [NM] - Fix for mantis #188. Added [CraftClass] AllowLinkWeapons = false // if true, weapons can be linked Compiles, but is otherwise untested. [NM] - Bumped [GameObjectClass]::provideCount to a maximum of 32. Old limit was 4. Just expanding limits. [NM] - Fix for mantis #183 (condition counts). Was only running down craft lists. Changed planCompare to be a string, which makes a whole lot more sense. Also added another parameter, planConditionClassProvided, which runs down the provideName="blah" of each unit checked. planCondition = "Exists" planConditionClass = "ibarmocpu" planConditionCount = 1 planCompare = "==" // or "!=" or "<" or "<=" or ">" or ">=" planConditionClassProvided = false // false:direct match only. True: check provides planCondition2 = "Exists" planConditionClass2 = "ibsbaycpu" planConditionCount2 = 1 planCompare2 = "==" // or "!=" or "<" or "<=" or ">" or ">=" planConditionClassProvided2 = false // false:direct match only. True: check provides [NM] Compiles, but is otherwise untested. [NM] - Added Commando's properly-rotated apcamr00.xsi and recovered BZ1 appowr00.tga texture. The texture is unfortunately low-quality, as it was a small, palettized texture despite being extracted from the large assets pack. Still, it's better than no texture. [Ken] - Replaced slightly-peculiar material texture assignment in meshread code. The replacment code properly assigns the texture name using Material::SetTexName() and then uses Material::GetTexture() like it should have been using all along. [Ken] - Consolidated some repeated code in Simulate and PostSimulate into ENTITY from its derived types. In several cases, the now-redundant PostSimulate method could be eliminated. [Ken] - Fix for mantis #180 a few subbuilds back wasn't properly tested. Should work now. [NM] - Fix for mantis #196. Added [CraftClass] GunTowerProcessCheckCantHit = true // true: retarget if intended victim can't be hit (only if GunTowerProcess is in use) Most of the other offensive processes do the same thing, moving until they can hit a target. GTs can't move, so they might as well be able to retarget. [NM] - Partial fix for mantis #207 - added [CraftClass] NavIsCraftRace = false // False: inherit user's team race (recycler). True: inherit craft's race Compiles, but otherwise untested. [NM] -- b69g released============== - Fix for mantis #133. Added [ScavengerClass] or [ScavengerHClass] AddScrapHoldToTotal = false // true: show up on scrap bar ScrapDelay = 0.0 // like recycler/extractor InitScrapDelay = 0.0 // like recycler/extractor [NM] - Improved handling of local-ammo weapons in StatusDisplay. Status slot ammo counters properly handles alternating-fire weapons (whereas they didn't before). The ammo gauge also matches the main shot count in that it shows local ammo instead of global ammo when the selected weapons all use local ammo. [Ken] - Added alternating-fire support to machine gun, in case anyone wants it. (It's a distinct simulation from Cannon.) [Ken] - Fixed bullet tracers (mantis #203). PostSimulate was the logical place for ParticleSimulateClass and ParticleRenderClass simulation, but the scene manager defers ENTITY::PostSimulate until just before rendering so the effects used the wrong position. I had to move them back into Submit, but check to make sure the camera is the main camera. [Ken] - Delete no longer affects camera pods. For one thing, this crashed the AI update. [Ken] - Changed some startup code; might be better about not crashing on startup on RD's box. [NM] - Possible fix for mantis #163, irc having issues. More clamps on ranges before calling the new buffer code. [NM] -- b69g2 released============== - Tried reverting Ken's MoveManager change to see if this fixes some crashes w/ AiPath::Release or ~GotoTask. In savegame on mantis #212, multiple human craft all have the same AiPath for their where command, so when the first one releases it, bad things happen to the next. Note: this does NOT fix savegames where the problems already happened. [NM] -- b69g3 released============== - More work to get log offsets working on Win2000 boxes. [NM] - Logging system should try harder to get AV reports out to disk, by flushing the file after every line printed. [NM] - Added in minor update #2 from Greenheart. [MN] - More under the hood logging, tweaks to try and get BZ2 starting up on RD's box. [NM] - Updated fix for mantis #133. Shouldn't crash when item is built. [NM] -- b69g4 released============== - Another mantis #133 crash fix, for scav deletion. [NM] - More changes to get Win2000 happy. It seems to be very pedantic about matching _wcsdup with free(), not delete[]. Dunno why XP doesn't care. [NM] -- b69g5 released============== - MoveManager now creates a unique path for each object receiving a command with a "where" component. The "correct" solution would have been to add reference counting to the path so everyone could share, but this was easier and worked. [Ken] - More Win2000 fixes to use memory more pedantically. This is a good thing in the long run, even if it's caused some short-term pain. [NM] - Added the concept of a 'level' to all file streams specified in bzone.cfg (or any custom cfg). This is done so that a .dxtbz2 file in a "lower" level in the cfg will never override a .bmp/.tga/.pic/etc file at a higher level. (The old code merely did date checks, which could get results other than modder's intent) Noted by Commando & Avatar on boards, not sure if there's a bug for it. Also made msh reader do the same - a .msh at a lower level won't ever override a .xsi at a newer level. [NM] - Fix(?) for mantis #220 - basepanel icons will use [GameObjectClass]::unitIcon if the object in that slot isn't a powered building (or derived class). I can't believe the icons ever worked, with or without custom configs. Might have some side effects. [NM] - Fix for mantis #222 - IASurprise (possibly other maps) could have units double-spawned. Compiler couldn't tell I was using a possibly unitialized variable. [NM] - Fix for mantis #155. Added planCondition = "Exists" // or anything else planConditionOr = false // false == 'and'. true == 'or' planCondition2 = "Exists" planConditionOr2 = false // false == 'and'. true == 'or' Note: for best results, set all possible conditions on a plan to either 'and' or 'or'. There's no parens, so the first 'or' condition that's satisfied will skip the rest of the conditions and execute that plan chunk. Likewise, the first 'and' condition that's not satisfied will skip the rest of the conditions, and skip that plan chunk. [NM] - Fix for mantis #60 - AIP service plans should direct STs to targets. Also added some more params under "Service" plan chunks: MinWreckAmmo = 0.1 MinWreckHealth = 0.25 MaxWreckAmmo = 0.8 MaxWreckHealth = 0.8 RepairTime = 20.0 // Max time a servicer will spend on a unit MaxWreckDist = 30.0 // Distance from service bay to unit to begin servicing The min/max ammo/health params are ratios, so their range goes from 0.0 (out) to 1.0 (fully healed up). [NM] -- b69h released============== - Reverted Ken's most recent MoveManager change. Might be the cause of crashes in AiPath seen in 69h. [NM] -- b69h2 released============== - Craft copies its animation state into the Vehicle_Crash chunk, so exploding vehicles retain the correct pose (mantis #87). [Ken] - ExtrudeMesh no longer generates spurious particles at the center of the world (mantis #113). [Ken] - Re-fixed MoveManager, as it wasn't checking to see if the command had a "where" part before duplicating the path (mantis #225). As one might expect, new AiPath(NULL) doesn't work so well. This was flagrant carelessness on my part... [Ken] - Streamlined logic in GameObject::RenderScene without changing the actual result. Unfortunately, the "un-hide terrain" operation gets applied AFTER the terrain has already rendered, so that will need to be fixed some other way. [Ken] - Fixed off-by-one texel positions on inverted sprites. While I was at it, I moved the sprite table out of the header since the only thing besides the sprite system that accessed it was FlagDisplay, and that's been disabled for a long time. [Ken] - Added "compass" directional reticles for turreted vehicles to make it more obvious which direction the turret is facing relative to the body. The current reticles are a dot at the front, large triangles at the left and right, a diamond at the back, and small triangles at the diagonals. These are not customizable (yet). - Added support for changing extrude effect line colors (and beam color where approprite) and cleaned up ExtrudeMesh rendering a bit. It now keeps track of all vertices being drawn at the clip plane and picks two of them at random to draw the spark effect. This makes the effect a LOT more dynamic (or--less charitably--jumpy). [ConstructionRigClass] [DeployBuildingClass] [FactoryClass] [ScavengerClass] [ScavengerHClass] ... ChromeEffect = 0 // 0/f/F = line, 1/t/T = chrome ChromeTexture = "" // reflection map texture AnimateChrome = 0 // 0/f/F = static, 1/t/T = animated BuildSparkConfig = "sparker" // renderer to apply at build vertices LineStartColor = "0 127 255 255" // line effect start color LineFinishColor = "0 0 255 0" // line effect finish color ... [ConstructionRigClass] [FactoryClass] ... BeamColor = "0 127 255 31" // beam effect color - Fixed lead indicator malfunction when when the target was behind the camera but the lead indicator position was in front of the camera (mantis #177). The indicator now only appears both positions are in front of the camera. [Ken] - Shouldn't need a condition on a plan to execute it correctly. My bad. [NM] -- b69i released============== - Removed invalid default sounds for [ChargeGunClass], [CraftClass], [DispenserClass], [LauncherClass], [MachineGunClass], [MortarClass], [SalvoLauncherClass], [SatchelPackClass], and [TargetingGunClass] (mantis #105). If any sounds go missing, please let me know! [Ken] - Fixed unexpected draw_twirl_trail effect dropout by increasing the default visibility from 275m to 400m at high LOD (mantis #105). The cutoff really should be replaced with something more gradual, but I don't know how preserve effect integrity while doing that. [Ken] - Fixed spurious jetpack animation when switching between standing and crouching stances (mantis #216). Several of the Person animation functions didn't check what animation cycle weapons were using, and would get tripped up when one was using a non-stance cycle. [Ken] - Fixed Scavenger pick-up animation, which was caused by my change to ENTITY::Simulate (mantis #226). The problem was that I had inadvertently reordered the SimSetState() and MeshEnt::Simulate() calls, so the animation pose was not being propagated into the visible state. [Ken] - UserProcess no longer plays weapon-switch sounds for remote players (mantis #234). (Proof that StatusDisplay should be doing it.) [Ken] - Rearranged sprite table to place new direction triangles at the end, fixing broken reticles in saved games. [Ken] - Objects using ExtrudeMesh as a build effect now hide it when they are not visible in satellite view (mantis #200). This isn't perfect, as the particle renderer persists for a while, but it does make the opponent's base harder to find. [Ken] - Fixed output paths for stripped mission DLL .pdb files. [Ken] - Fixed z-fighting while Scavenger deploys on a pool (mantis #236). The Scavenger temporarily removes the pool from the scene manager, as GameObject::RenderScene would re-enable the terrain if the pool were merely hidden. [Ken] - SelectionDisplay now only shows ammo indicator for allies with nonzero maximum ammo, as showing enemy ammo was an exploit. [Ken] - Converted some biometal pools I missed to use "tttt" tunnel connections instead of "wwtw". This should allow Scavengers to approach from any direction instead of only from the south. [Ken] -- b69j released============== - GameObjectClass::bSphere now excludes built-in terrain geometry and compensates for any Building deploy animation. SelectionDisplay uses this for tighter bounding boxes and more consistent positioning of name and status indicators (mantis #151). [Ken] - ConstructionRig now handles upgrading as a slight variant on normal construction, complete with a build effect (mantis #237). The unit now handles the upgrade itself instead of relying on the AI process to do the work (which was a hack). [Ken] - Fix for mantis #238 - plan conditions weren't being properly read in. (DevStudio *really* needs a warning like gcc's -Wshadow!). Also noted that conditionals for most AIP types except the builders weren't updated to handle the new 'or' rules. Fixed that by removing code duplicated in a lot of places and called one master function. [NM] - Did a little work on mantis #229 -- should write out a little more to log files in such cases. It may be nearly impossible to get this properly handled, sorry. [NM] - Fix for mantis #248 - scrap shouldn't be lost when scavs/scavHs deploy into something that can hold scrap. Code was in RecyclerVehicle.cpp (only), but moved it to DeployBuilding.cpp (base class of RV) and copied it also to scav & scavH. [NM] - Popper ordnance will make at least one target check before expiring (mantis #253), which is mostly relevant with short life spans. [Ken] - Added new properties to several kinds of ordnance: [PopperClass] targetAngle = 3.1416 // targeting angle in radians (>= PI means unlimited) aimAngle = 3.1416 // aiming angle in radians (>= PI means unlimited) [MissileClass] velocForward = shotSpeed // powered speed of the missile accelThrust = 50.0 // rate the missile can change speed delayTime = 0.0 // homing delay time (zero turn rate) rampTime = 0.0 // homing ramp time (from zero to full turn rate) avoidRange = 0.0 // terrain obstacle-avoidance range avoidStrength = 0.0 // terrain obstacle-avoidance strength (~2 seems best) [ThermalMissileClass] lockRange = lifeSpan * velocForward // homing lock-on range One side-effect of the missile acceleration change is that missiles don't have quite as much forward "push" when it comes to M-Curtain and MITS mines (making those much more effective). [Ken] - ThermalMissile allows cone angles larger than PI/2 (1.571). This can be used to create missiles that don't lose lock when passing their target, though there's a good chance it'll lock onto something else. Even better, it can be used create omnidirectional-targeting missiles when fired from a cannon. [Ken] - Missiles remember their initial direction, and try to line up with that while wavering when they don't have a target. This prevents unlocked missiles from corkscrewing off uselessly, so you can safely use much larger waver turn values (especially when combined with obstacle avoidance). [Ken] -- b69k released============== - Possible fix for AV when .wav files aren't found and the editor build is run under MM5. Reported off and on over the years, but I finally got a good callstack to take this apart with the recent changeover to the logging code. [NM] - Should get a proper icon in the alt-tab list, as well as the taskbar for BZ2. Quite possibly a bug in mantis, but I can't find it offhand. [NM] - Possible fix for mantis #267 - '\' is now allowed in the config file's SetPilotsDirectory(), subject to the following limitations: (1) the first character in the specified string can't be '\' (so that it's a relative path), and (2) you can't have two '\'s adjacent. For best results, the path specified should already exist; I don't think BZ2 will auto-create a user-specified path. [NM] - Upgraded to UPNP client source MiniUPNP v1.0-RC4. That's the latest posted version. [NM] - Possible fix for mantis #239. Shouldn't need to host two games in a row to get UPNP working. (UPNP thread was started before other parts of networking, which it depended on.) [NM] - Added GamePrefs.ini::UPNPTimeout. See comments above it for more info. [NM] -- b69L released============== - Updated bzshell_multi_clientoption.cfg, bzshell_multi_option.cfg from Red Devil. [NM] - Probable fix for mantis #96 - a resync caused by queuing up build items. Commando's guess that it's related to the fix for #53 was correct. I think I've got a fix for both in place, but if I have to choose, then #53 will lose. [NM] - Bumped some audio limits - now allows 128 channels max, 32 if in software mixing mode, 8 ogg streams simultaneously. [NM] - Fix for mantis #263 - allow one rotate per team per turn. Noted by Greenheart. [NM] - Fix for mantis #40 - AI units will cycle over ImageLauncher/ThermalLauncher weapons if that unit's target is currently cloaked (phantom vir). It may end up skipping over all weapons, but that shouldn't be any worse than how it is now. Reported by Commando. If there are other combinations of weapon classes and specials/states that are similarly useless, let me know. [NM] - Fix for mantis #262 - always unfreeze player controls after death in multiworld. Old code checked for MP, which is a subset of MW. [NM] - Possible fix for mantis #227. Not sure, though. [NM] -- b69m released============== - Fix for mantis #213. GameObject::SetSelected() had previously been doing a lot of stuff that's not gamestate-specific. Camera pods did, and that broke in multiplayer. Fixed by adding a virtual function to GameObject that sets whether it gets the classic or new behavior. The new behavior seems to work in MP on my lan, and doesn't seem too far off the classic behavior for camerapods. Reported by Commando. [NM] - Fix for mantis #276. Audio should pause when the game pauses. Even unpauses right where it left off when the game unpauses. [NM] - Added BZ1-style ground-splash to EngineFlame (mantis #261). The current implementation isn't the best, as its configuration properties are hardwired, but does work reasonably well for now. [Ken] - Pack weapons appear and shield weapons appear again (mantis #275) in the status display, though both are presently excluded from the weapon carrier group cycle. To do: visually indicate exclusion and make it a weapon property instead of a hardpoint property. [Ken] - Local ammo shows up again in the status display. [Ken] - Added GamePrefs.ini VerboseUPNPLog and NumGameQueriesLoggedPerSession settings. See comments above them for more info. Adjusted default UPNP timeout to 0 (~= infinite). [NM] - Fix for mantis #266. Added [BuildingClass] collapseTime = 1.5 // == 0.0 for SIGN. Not new, just documenting it. UseCollapse = true // Default: True if not sign and collapseTime > 0.0 UseChunks = false UseExplosion = false // Default: opposite of UseCollapse. Previously, the collapse and explosion were mutually exclusive. Now, they only default that way. UseChunks defaults to false, but if set to true, it needs the following entries set up, though NOT under the normal spot of [CraftClass] [GameObjectClass] ExplosionEnergy = 1000.0 // How much "energy" is passed in to the vehicle explosion NumChunks1 .. NumChunks5 = -1 // # of chunks per chunk type. max = 10 NumChunks = -1 // # of chunks overall. -1 = autodetermine, max = 25 chunkEffect1 .. chunkEffect5 = "iochnk01.xsi" .. "iochnk05.xsi" HasSeparateChunks = false // if true, then it reads SeparateChunkEffect1 .. SeparateChunkEffect5 SeparateChunkEffect1 = "iochnk01.xsi" ... SeparateChunkEffect5 = "iochnk05.xsi" xplChunk = ... xplCrash = ... damageEffect1 .. damageEffect4 = "dmgvhcl1" .. "dmgvhcl4" ExplodeSound = // "blah.wav" LeaveExplodeScorch = true // If craft can scorch, why shouldn't buildings? You might be tempted to move these items to [GameObjectClass] for both craft & buildings. That'd be bad. For all crafts, it'll still look for those items under [CraftClass], like it normally did. If a craft has these items under [GameObjectClass] and [CraftClass], then the entries under CC will win. Note: this code compiles, but is pretty much untested. [NM] -- b69n released============== - New [BuildingClass] explosion params are read from the ODF as the changelog says above. Ooops. Also added two more params under GameObjectClass usable by buildings; see last two items above for info. [NM] -- b69n2 released============== - A whole lot of under the hood changes to the ODF reading code. Most parameters are now in the source code as precalculated CRCs of the key strings. This should be (very slightly) faster at load time, reduce exe size, and make it harder for people to figure out things by dumping strings from the binary (sorry, folks!). Changes done via a quick perl script to rewrite .cpp files to have the precalculated hashes in the source code. Let me know if any weirdness results from this. [NM] -- b69n3 released============== - Tweaked ivscav.{xsi|.msh} from Red Devil. The light was down underneath the chassis before and now it shines out of its lamp area on the front. [NM] - Updated IA Surprise map from Greenheart. [NM] - Recycler list should support 64-character ODFs now. Forgot to update it. I think this is part of mantis #278. Another area was also not updated. Sample ODFs posted by Commando in that bug now pretty much load fine, with only a warning about a misspelled ODF-- which is valid and reasonable. [NM] - More ODF reader changes under the hood. Instead of linked lists and searching linearly, it should use a slightly more efficient search. Also made some changes to (1) fix crash intoduced earlier where broken ODFs would cause an AV, and (2) fix mantis #279, so that errors about broken ODFs should print out the most recently opened ODFs. (Most recent ODF is the 1st line, the next line down is its parent, etc) This should help modders get even more of an idea where things are called from. [NM] -- b69n4 released============== - AV fix in logfile error message added in 68a when interface parts are missing. Ooops. [NM] - MPVehicles code also supports 64-character ODFs now. Noted by Commando. [NM] - Fix for mantis #281 AV from BuilderPlan::Init caused by recent changeover to prehashed values should be fixed. Noted by Commando on the boards. This isn't related to 64-char ODFs, except for the fact with 64 chars, there's more chances to misspell something. [NM] - More logging from Idle Dispatcher to AIP log file -- notes what's getting attacked, and by what. This might help modders take apart what it's doing. [NM] - Possible fix for mantis #269. Non-buildings that are in a base slot should stay selected after a MW swap. Might have side effects, not sure. Do test. [NM] - Fix for mantis #280 - added ability for weapons using cannon hardpoints to request an arcing shot. It is: {ordnance.odf} [OrdnanceClass] //classLabel = "grenade" // example IsArcing = 0 // false/0: use old straight-shot code. true/1: more like mortars In the test assets provided, to get IsArcing=1 to work, I needed to adjust one param under the craft's ODF: {craft.odf} [CraftClass] AITargetLocation = 0 // see docs under 68i Even with both ODF tweaks, I needed to hop out of my craft and re-enter for the AI to attack in the savegame. I'm reasonably sure that new games won't have that issue. [NM] - Fix for mantis #174. Added [CraftClass] MustBeLinedUpToFire = false // Defaults to true for artillery(==archers) This parallels [CraftClass]::MustBeLinedUpToHit, but for archers, MustBeLinedUpToHit=true doesn't work as expected -- it never fires. Use MustBeLinedUpToFire=true instead, which is applied only by archers, and does what you'd expect. (Yes, this is a rude hack). You might want to reduce [CraftClass]::fireConeXBase/fireConeYBase to get a more on-target shot as well. [NM] - Partial fix for mantis #207. Added [CraftClass] NavConfig = "" // e.g. "ibnav", do NOT put .odf on the end If this is not an empty string, then the navbeacons dropped by this craft will be of the specified type. Note: this is not modified per race. A warning is printed to the log if the specified ODF can't be found, and it treats this as a blank entry if so. Compiles, but is untested. [NM] - Fix for mantis #258. Added [FactoryClass] scaleVelY = 0.0 If this is not 0, then this value is applied to the newly-built item's vertical velocity. This is *NOT* quite identical to the armory's scaleVelY, because the armory does a whole lot of code to calculate a resulting 3D position, and ends up setting a value a little different from what's in the ODF. This value for FactoryClass only sets the initial velocity. [NM] -- b69o released============== - Fix for mantis #256. Added [PoweredBuildingClass] powerTap3 .. powerTap8 = "" // powerTap 1, 2 already existed. Adding a few more powerName1 .. powerName8 = "" // 'powerName' already existed. Adding ability to make all 8 distinct In short, I upped the # of taps from 2 to 8, and allowed them to be distinct. For powerName1..8, they default to whatever powerName is set to, so you can easily make them all identical. Also made their powercost set from the ODF they derive from, and if the tap object's powercost is 0, then the building shouldn't go unpowered if it's destroyed. For replacing taps via rig/AIP, then only the item specified in powerName/powerName1 will be used. It'd be a bit more work to make upgrades go to the right one of several destroyed ones. [NM] - Fix for mantis #117 (effect altitude cutoff). Added [GameObjectClass] effectMinAltitude1 .. effectMinAltitude16 = -1e30 effectMaxAltitude1 .. effectMaxAltitude16 = 1e30 If an object's height is between the min & max altitudes, then it's enabled. If it's not, it should be disabled. Note: in order to make this go a bit faster, a min <= -1e29 or a max >= 1e29 won't be considered. You should never be that far off the ground, though. [NM] - Fix for mantis #251 (and several dupes). FactoryPanel should allow you to customize vehicles once again. Some over-optimizations to MoveManager caused this. [NM] - Partial "fix" for mantis #115. bzone.exe will now log when misbehaved DLLs spawn something at (0, 0, 0), and that happens to be underground. Bad things happen in such cases. Please get terrain height for a location before spawning. Or, use effectMinAltitude to ensure that the object won't create dust particles on top of the ground. [NM] - Fix for mantis #289 - particle effects should be stopped when the game pauses. This doesn't apply to the smoke on the escape-screen UI; zap that texture (vsmoke.tga?) to all blank to make it effectively disappear. [NM] - Possible fix for mantis #31. When scavs with doDrop = true are considering dropoff targets, they'll skip items on teams that are currently full up on scrap. This seems to avoid an issue with a save by Commando where a scav just audio-spammed and did nothing. [NM] - Possible fix for mantis #293. Flaremines will check to see if they have a 'hp_fire' object, and fire from that if present. If not, the traditional behavior should be used. Did tweak behavior for mantis #180 in the process. (Both use quite similar systems for fixes.) [NM] - Possible fix for mantis #291 - now kills all "too far" sounds from audio.list, not just non-looping ones. It used to stop all sounds, but only kill non-loopers. This may cause side effects, so I'd revert this rather quickly if there's any problem. [NM] - Some more work on mantis #288, static charge sticking around forever in MP. It might be less likely to show up on the player inappropriately, but it still seems to show up on AI craft that aren't truly using it. I'd still put "static in MP" on my "don't do it unless you REALLY need to" list. [NM] -- b69p released============== - More work on mantis #288, static charge. I've got something that seems to work w/o mis-renders or sticking around forever. Thanks to Commando for the test map w/ only static charge on it for tests. [NM] - Tweak to change to mantis #263 - might be more responsive now. Do test. [NM] - GameObject::Chunks now copies the full animation pose into the primary ("vehicle crash") chunk instead of assuming that the animation cycle, direction, and frame are sufficient (mantis #184). [Ken] - Fix for mantis #295, crash in CollectTask::ReturnState(). Wasn't properly handling case when there's no possible dropoff points. This is triggered a lot more after fix to #31 above, as 'full' teams remove themselves from consideration as dropoff points. [NM] - Fix for mantis #296. Added [SprayBuildingClass] LiftSpring = 3.0 // multiplier on how fast things want to rise MaxYSpeed = 1e6f // How fast, in m/s, things can rise Adjusting these down (especially MaxYSpeed) should make things take longer to rise to their set altitude. Not sure if any current ODFs use it, so I'll just note that you can delay the time to the first shot with [SprayBuildingClass] triggerDelay = 1.0 // # of seconds before first shot goes off. [NM] - Fix for mantis #297. Added [GameObjectClass] EffectsMask = 65535 and [MorphTankClass] MorphedEffectsMask = 65535 These are masks on what effects are allowable, with effect #1 being in the lowest bit, effect #2 in the next lowest bit, etc. As there are 16 supported effects per object, 65535 is the decimal equivalent of sixteen '1' bits. Note: min/max altitude for effects (see above) can disable bits out of this, never enable any. Compiles, but pretty much untested. [NM] - Added colorize.tga with new direction-triangle sprites used by turreted vehicles. The reticule code was previously rendering blank sprites where the triangles should have been. [Ken] - GroupPanel now supports mixed-class groups, which are functionally no different from ordinary mixed-group selections produced by multi- selecting several different groups. The main change is that a mixed- class group has no representative class, and so gets a generic icon (lightning bolt) instead of a class icon. [Ken] - Streamlined the group-move (CTRL+Fn) operation so it works with ANY selection instead of only whole groups. While "split group" still works, it is somewhat deprecated. [Ken] - In a mixed-class selection, CMD_NONE/MODE_NONE no longer conflict with other commands. Other commands still conflict as before. For example, CMD_ATTACK and CMD_NONE combine into CMD_ATTACK (instead of CMD_NONE), whereas CMD_ATTACK and (say) CMD_DEMOLISH combine into CMD_NONE as before. This makes mixed-class selection and groups a lot more useful. [Ken] - GroupPanel::SelectNone now IMMEDIATELY clears the selection list, instead of waiting a simulation step. This MIGHT fix an exploit where players can quickly move the reticule ground position to an adjacent (and invalid) square before the menu disappears and build in places they shouldn't be able to build (Mantis #260 item 4). [Ken] - TerrainClass::AlignTerrainReplace now centers models within the smallest enclosing cluster-aligned rectangle, and correctly handles both terrain-replacing and non-terrain-replacing models (mantis #246). All places that used AlignClusterCenter when isTerrain was false now just use AlignTerrainReplace. [Ken] - Fix for mantis #301. If a powered building had a unitname="" entry in its ODF, it'd mistakenly see the whole unit as needing power, and usually crash because modders didn't give it a powerName/powerName1. Fixed this in 2 ways: (1) only looks at items with a powerTap that's not an empty string, and (2) If there is a powertap, but the powerName points to a bad ODF, it'll complain to the logfile and not crash. [NM] - Fix for mantis #298. Added [CraftClass] DoWeaponCanHitCheck = true // if false, bug 40 comes back. See above for details Added because Commando thinks some people will whine and demand the old, buggy, behavior back. Compiles, but untested. [NM] -- b69q released============== - GameObject::Chunks now also copies animation type in addition to other properties, preventing a "pop" as the morph animation loops on morphing vehicles (mantis #184). [Ken] - Cannon fire point interpolation uses MissionHandler::m_TPS instead of assuming 10Hz simulation rate. [Ken] - Got SeismicWave ordnance working with the BZ2 terrain system. In addition, most of its parameters are now controllable from ODF: [SeismicWaveClass] waveRadius = 50.0 // maximum extents of the wave waveHeight = 5.0 // peak height/depth of the wave rampUpTime = 5.0 // time to ramp up after launch rampDownTime = 2.0 // time to ramp down before expiration sweepOmega = 100.0 // angular sweep/push effect sweepVeloc = 50.0 // linear sweep/push effect shakeOmega = 1.0 // angular shake effect shakeVeloc = 5.0 // linear shake effect buildingScale = 1.0 // scale damage for buildings I changed the falloff profile from a gaussian (exp(-2.5*r^2)) to a cosine (0.5+0.5*cos(PI*r^2)) which decreases to zero at the edge instead of merely "small". I also added a sine profile from front to back so it looks more like a "ripple" instead of a "lump". The "wave" effect is purely simulation-time with no render-time interpolation, so it only looks decent for high TPS--at least 30. (BZ1 got away with it because simulation ran at frame rate.) The checked-in ODF is not balanced, as I don't have the BZ1 version around to use as reference. It's fairly disruptive, but not all that damaging (even to buildings). Note: while the current implementation mostly behaves in multi-world, swept/shaken vehicles seem to "hiccup" badly on a world swap. I'm not sure how to fix that, so the weapon is not quite ready for multiplayer use just yet. [Ken] - AV fix in BaseBuildMinimums::Init(). Noted on boards by Axeminister. [NM] - Fix for #305 (dupe in 313) Can load games saved w/ 69q once again. Ooops. Things were unbalanced in the change for mantis #297. [NM] - Fix for mantis #308 - flaremine origin point is from object, not center of world. Fix for #293 wasn't right the first time. [NM] - Fix for mantis #311 - added [PoweredBuildingClass] PoweredByTaps = true // if true, and has taps, powered by them. If this is false, the building is powered by the traditional way-- it's powered if its powerCost <= 0, or the its team has power. [NM] - Possible "fix" for mantis #307. (Locally) reverted Ken's changes to Grouppanel made for 69q. This is just so I can get a build out the door sooner. [NM] -- b69r released============== - Added proper Save, Load, PostLoad, and Clean functionality to GroupPanelWorldPart so it correctly propagates state between worlds. The "incremental" technique introduced in 69q relies on coherency between turns (unlike the old way), so it needs proper saves. This change fixes both the crashes and the icon glitches. [Ken] !! Note: the change above isn't fully compatible with old savegames !! If it's problematic, I'll roll it back again. - NM - Added 0.0001-cluster tolerance in TerrainClass::AlignTerrainReplace to prevent it from rounding up the footprint of terrain-replacing buildings (mantis #303, #306). The problem was likely due to floating-point precision errors, so the tolerance helped. [Ken] - ChromeMesh copies more geometry information from the underlying MeshRoot, fixing GetVerts functionality used by a number of systems (AlignTerrainReplace in particular). This fixes the position spazz when moving Scion scouts with align turned on (mantis #306) [Ken] - Reduced Person flying/grounded threshold from HEIGHT_GRANULARITY (0.1 meter) to EPSILON (0.0001), preventing them from "sticking" to the ground (mantis #317). This was mostly noticeable in high-TPS situations, as the small time step meant the Person couldn't clear the threshold in one update. [Ken] - Fix for mantis #321 - flaremine should use the hp_fire for kick and damage centers. Compiles but is untested. [NM] - Fix for mantis #333 - AI units will cycle over ImageLauncher/ThermalLauncher weapons if that unit's target doesn't have the interact flag set on them. As with #40, if DoWeaponCanHitCheck is false, this won't be considered. As I said on #40, If there are other combinations of weapon classes and specials/states that are similarly useless, let me know. [NM] - "Fix" for mantis #319 - doesn't crash if a spraybuilding has an invalid payloadClass. Complains about that to console/battlezone.log so modders can tweak things. [NM] - Fix for mantis #320 - bolts should stop animating w/ the game's paused. [NM] - Fix for mantis #334 - shouldn't be able to get into an infinite loop when generating scrap. I'm keeping quiet on the cause & fix as it could cause an exploit in PB3 or earlier. [NM] - Fix for mantis #327 - added [GameObjectClass] LightsOnlyWhenPiloted = false // if true, lights on only when piloted. Setting this to false (default) should be the traditional behavior. [NM] - Fix for mantis #312. Added [MotionSensorClass] MaxCraft = -1 // If >= 0, a limit on how many items it paints MaxBuildings = -1 // If >= 0, a limit on how many items it paints Note: there is almost certainly NO sorting of what it paints. It's probably going to paint targets somewhat randomly. Requests to change that won't be entertained.. [NM] - Fix for mantis #328. Added [CraftClass] EngineSoundOnlyWhenPiloted = false // true: kill engine sfx when no pilot EngineSoundWhenDeployed = true // false: kill engine sfx when deployed. [NM] - Fix(?) for mantis #318 - SelectionDisplay::LoadShow() updates some more info across world boundaries. Not 100% sure this was the cause of things, but it seems reasonable. [NM] - Fix for mantis #274 - target indicator is stable across worldswaps. Note: if using rabbit mode to test, the display might disappear for a fraction of a second when a bot kills the rabbit-bot. That's shippable for me. [NM] - Fix for mantis #335 - IA DLL should track if recycler is upgraded to another building, or another vehicle -- do not go to gameover at that point. Eyeballing source code, ST, ST:CTF & MPI should be fine with this sort of behavior. [NM] - "Fix" for mantis #336 - added console commands "network.forceupnpon", "network.forceupnpoff", "network.upnpforward #" and "network.upnpunforward". These should do most of what they imply, though they have some very strict entry requirements. You can NOT start forwarding until it's determined the external IP address, which usually requires hosting a Gamespy game. You can NOT stop forwarding until you've started forwarding. More logging has been added. [NM] - Fix for mantis #331 - added [WeaponClass] AllowAimHigh = true // if false, will never try the really high arcing shot Updated gmortar.odf to set this to false. This seems to fix a savegame. Not sure offhand if all classLabel = "mortar" should to set this to false by default. For now, I'm defaulting it to true for everything. [NM] - "Fix" for mantis #290. Added [GameObjectClass] MaxPostExplosionVelocity = -1.0 // -1: autodetermine. If > 0, a velocity DamageIfVelocityClamped = 0.05 // Health ratio lost if velocity clamped This allows modders to tone down things. If the max post explosion velocity is < 0, then the 'autodetermine' code is used. Autodetermine is roughly this: for tracked vehicles: 250% of normal forward velocity; everything else: if they were accelerated by 50m/s by this explosion. The damage factor is a multiplier on health, so 0.1 is 10%, lost if the velocity needed to be clamped. Service trucks default the damage param to 0.2, or 20% off health. This modifies the item mentioned in changelog_pb1.txt, about line 6795 (just after b58e was posted), which says " Tweaked code done a bunch of builds back to extra-damage craft if an explosion near them gave them "too much" velocity." [NM] - Fix for mantis #259. Construction rigs should be better at finishing their orders, such as upgrade/demolish/power. Their getting close was triggering the 'done' state, which was inappropriate. [NM] -- b69s released============== - Backup build w/ GroupPanel changes reverted. [NM] -- b69s2 released===================== - Fix for mantis #339. The following DLL exported functions should finally be available for use: DLLEXPORT bool DLLAPI IsFollowing(Handle h); DLLEXPORT Handle DLLAPI WhoFollowing(Handle h); DLLEXPORT void DLLAPI IFace_SetIntegerRange(Name name, int low, int high); [NM] - Fixed some GroupPanel wonkiness caused by objects not clearing their group number when they should (pilot death/hop-out/eject, team change, set as user, set as remote user). In addition, units clear selection on becoming user-controlled. [Ken] - Changed terrain to allocate map clusters in bit-interleaved order instead of row-major order. This should make clusters that are close together in the world also close together in memory, improving memory access patterns. [Ken] - Factory::GetCommands returns CMD_CANCEL when stalled in addition to actively building, and is now the "right" way to cancel a stalled build. Pressing Tab (to deselect) previously stopped the build though it should not have. [Ken] - Fixed GroupPanel non-lockstep save/load, which sometimes dropped group sizes and always failed to load group classes. [Ken] - GroupPanel is much better about keeping group classes up to date, and takes build class into account. It previously updated them in a batch after processing the change list, but that meant the change list was working with out-of-date group classes (mantis #342). [Ken] - Fix(?) for mantis #361 - crash while optimizing terrain. Removed vid.optimize command (left a stub saying "doesn't work anymore"), and the /teropt commandline flag. [NM] - Removed 'NewMemory' code; should be fine to use the multithreaded MSVC code. (Used mainly when looking for gamespy sessions) [NM] - Fix for mantis #351 - corrected some typos in stock13_iia.aip, stock13_iil.aip, stock13_ifl.aip. Reported, changed by Commando. [NM] - Fix for mantis #348. Added [BarracksClass] ScaleVelUp = 20.0 This is a multiplier on the 'up' vector out of the barrack's exit point. [NM] - Fix for mantis #347. Added [FactoryClass] MultVelXZ = 1.0 This is a multiplier on the X/Z components on items spit out of the factory. [ScaleVelY is an 'add', according to the code.] 1.0 means leave things unchanged, 2.0 means double the value, etc. Compiles, but is untested. [NM] - Fix for mantis #371. Added [GameObjectClass] AcceptPowerupMask = 127 This is a bitmask, composed of the following possible value: NONE = 1, CAMERAPOD = 2, DAYWRECKER = 4, FLAGOBJECT = 8, MONEY = 16, SERVICE = 32, WEAPON = 64. Add them up to get the possible powerups the craft will accept. (Yes, I don't think it makes sense to be able to ignore daywreckers, and I don't think it'll work as expected. But, I'm just trying to be complete here.) Note: this replaces [GameObjectClass]::CanAcceptPowerups. If that old parameter was true, AcceptPowerupMask will default to 127. If the old param was false, AcceptPowerupMask will default to 0. If you have both the old param and the new, the new one will override the old. [NM] - Fix for mantis #357 - GamePrefs.ini::GameBasePortNumber is honored now. [NM] - Fix for mantis #217. If "/allowstackless" is on the commandline, and BZ2Stackless.dll (the __cdecl) version, and any other needed DLLs (python25.dll, maybe a boost_python one) are in the same directory as bzone.exe, then OvermindDL1's stackless python code is loaded. This ought to have very little affect on anything, but I'm not going to distribute or enable it by default. [NM] -- b69t released============== - Recylists should work once again. Oops. [NM] -- b69t2 released============== - Fixed terrain cluster allocation order optimization for non power of two map sizes (mantis #379). Previously, it would screw up the cluster map, yielding bizarre results. [Ken] - Fixed SlideIntoPlace for high TPS. The function previously used acos to determine the angular difference between the current and desired orientations, but that turned out to be fairly inaccurate for small angles. When the time step was sufficiently small, this inaccuracy prevented the function from ever finishing. I replaced it with atan2, which is more tolerant. [Ken] - GameObject::SetTeam no longer attempts to clear the group number if the object is ungrouped (-1) or ungroupable (<-1). This isn't that important now, but may prevent some minor problems later. [Ken] - GroupPanel listens for EVENT_COMMAND again, so it should correctly update group lists when a unit's command priority changes. [Ken] - GroupPanel flushes the group list for save file version 1153, which should prevent some nasty crashes (mantis #355). [Ken] - Removed Scrap::PostSimulate override that prevented scrap pieces from visibly moving. This fixes scrap within a building construction zone or rolled over by a seismic wave. [Ken] - Fixed some floating-point issues with rays very nearly parallel to a collision polygon. The velocity along the plane would sometimes be denormalized, and dividing by that tiny value would generate a floating point warning. [Ken] - Greatly improved seismic wave effect for both static and dynamic entities, and updated thumper.odf with more appropriate values. It now affects pretty much anything but objects with isTerrain=1, and leaves things in the right place after passing. [Ken] - Fix for mantis #381. Added 'game.oldordpath' console command. [NM] - Fix for mantis #377. Added Sound option 'Ammo depleted warning', which is saved to the profile. If set to 'on', this'll fire when you're out of ammo. It may trigger "too often," but it's a really hard thing to track multiple weapons, each of which may have local ammo, etc. [NM] - Probable fix for mantis #375 - crash in TrailRenderClass::AddSegment. [NM] - Snooze button for mantis #386 - AV in LandAnimalTask::DoState (or LandAnimalTask::ShouldLeaveFollowGroup()) -- more logging to see where it's crashing. This code's given a lot of problems before, and might be on the short list for things that need scrapping and rewriting. [NM] - Semi-workaround for mantis #363, #385 - in Ordnance::SaveShow() and Ordnance::Cleanup(), will do a quick sanity check on things. If things are bad, it'll complain to the logfile like so: WARNING: Invalid non-NULL Ordnance:renderObj, my class = 'xxxx.odf' If you see lines like this, please let me know what the full line is. [NM] - Possible fix for mantis #362, 382. If things are bad, will complain to logfile like Could not find src NetSVarCRCs[#], hash 0x######## Could not find src NetIVarCRCs[#], hash 0x######## Could not find dest NetSVarCRCs[#], hash 0x######## Where the # can vary. If you see lines like this, please let me know what the full line is. [NM] - Changed optimization model from floating point: precise to floating point:fast. Didn't seem to affect network sync when playing between my AMD 64 notebook and my Core2Duo desktop box. Might help w/ framerate slightly. [NM] - More callstack logging when switching worlds. Might not be enough to figure out what's up with mantis #388, but it's a start. [NM] - Fix for mantis #349 - the server info listbox is now linewrapped. Added a scrollbar too, just in case. [NM] -- b69u released============== - Updated GroupPanelWorldPart::Save to use GroupPanel's version of data instead of setting itself to the lockstep world. The new version is more consistent with other WorldPart Save implementations. [Ken] - Fixed GroupPanel multiworld crashes (mantis #403, #404, #407) by removing the (unnecessary) call to GroupPanel::UpdateBuild() in Factory::PostLoad(). Factory::PostLoad() gets called well before GroupPanelWorldPart::PostLoad() converts the handles, so every now and then GroupPanel::UpdateClass() would end up calling GameObject::GetClass() with a non-GameObject and die. [Ken] - Enabled a not-quite-as-fast rsqrt() that uses a second Newton-Rhapson iteration to make it accurate enough. The single-iteration version was only accurate to one part in a thousand, which (for mysterious reasons) led to visible cracks between tunnel pieces. [Ken] -- b69u2 released===================== - Made AIP log files have correct linebreaks for Windows. I usually view them in Emacs (my preferred editor, but not quite user friendly). For those of you who think that notepad is "usable", I really recommend ditching it in favor of the free replacement http://en.wikipedia.org/wiki/Notepad2 . Fast, powerful, doesn't suck. Just unpack notepad2 to somewhere under C:\Program Files\, then right click on a .txt/.log/.whatever file, select Open With, and browse to notepad2. Set it to always open w/ notepad2, and your life will be better. [NM] - Fix for mantis 417 - disabled message. Wasn't useful anyhow. [NM] - Rewrote TerrainClass::AlignTerrainReplace to make it more compatible with AlignTerrainCenter, as opposed to "cleverly" trying to center the model within the cluster. This fixes the "L" and "T" tunnel segments, which the previous way broke (mantis #420). [Ken] - Fixed Person physics not "sticking" to the ground (mantis #354). It uses the 0.0001m padding while flying to become grounded, and 0.125m padding while grounded to become flying. Jumping automatically sets the person as flying, so it can easily clear the (small) threshold in one step. [Ken] - Really reverted changes made for mantis #53. See if this helps fix resyncs. [NM] - Work on mantis 228: Added to AIP files: [Plan##] planType = "Attacker" or "ClearArea" or "DefendArea" or "Defender" or "Explorer" or "CollectField" or "CollectPool" or "Hold" or "Service" CheckProvides = true This provides tends to be used for both supply & targets -- e.g., in an attacker plan, the CheckProvides setting is used for both targetType = "xyz" and attackType# = "abc". I think I got all the cases, but I'm not sure. [There's a metric boatload of duplicated code in that file...] [NM] - Fix for mantis #434. Added [RecyclerClass] or [RecyclerVehicleClass] or [ScavengerClass] or [ScavengerHClass] or [SiloClass] RequiresExtractor = true // true: requires extractor to generate scrap [NM] - Fix for mantis #457. SupplyDepots should wait for the sound efx started to complete before they fire off another sound. Compiles, but is untested. [NM] - Fix for mantis #418, 447. Changed versions of Scrap Pit 2, ST: Desert Quarry, & STCTF: Desert Quarry sent on by GreenHeart so that there's no negative elevations to deploy on. Also a corrected IA:Iceberg that has pathpoints on land, also by GreenHeart. Files will be in next full build. [NM] - Added [WalkerClass] DeathTimer = 3.0 // Total time (in seconds) for a walker to go thru death anims ExplodeTimer = 0.4f // Time left in DeathTimer at which the explosion will happen Just exposing some more constants in the code. Compiles, but is untested. [NM] - Noticed AIP code keeping some varbs around on a join/resync. Had it clear them, in the hopes that this'll make late joins/resyncs not cause a storm of problems. [NM] - Fix for mantis #310. Added [CraftClass] IgnoreDestroyedTargets = true // If true, AI units will ignore a destroyed target Seems to work w/ savegame that Commando sent on. [NM] - Fix for mantis #458. New recy variants sent on by Commando. [NM] - Possible fix for mantis #444. After changing mipmap levels, I force-set anisotropy to 0, then back to what it was. If this doesn't fix it, I'm probably not going to spend any more time on it. [NM] - Fix for mantis #408 - should build items at the factory vs recycler a bit more accurately now. Comparison was backwards, so the first building encountered would tend to say it could build it. [NM] - Fix for mantis #440 - AIP log, chat & irc logs should be readable by other apps while BZ2 has them open. I went too secure earlier. [NM] -- b69v released===================== - Tweaks to make scrapit.bzn have fewer resyncs -- (1) unitprocess verifies that its target exists each time the code executes. (2) Same with unittask to re-verify himHandle. Yet another thing that might be the "death of a thousand papercuts" on our framerate. [NM] -- b69v2 released===================== - Found a better way to optimize fabsf() - when optimizing for size, _ctrlfp() is called way too much. The solution is to do something like this in some big headers: // This only makes fabs inlined; fabsf isn't touched. :( #pragma intrinsic(fabs) inline float fabsf_fast(float v) { double dv = v; float ret = (float)fabs(dv); return ret; } See if this helps framerate any. [NM] -- b69v3 released===================== - Reverted to old FPS measurement code. See if this helps framerate any. [NM] - Fix for 460, 445, 422, 411, 429(?), maybe others(?). Made particle effect code keep an 'owner pointer', so that it could unregister itself when an effect is deleted. This seems to fix some crashes in the particle code, especially ones seen when pausing/unpausing repeatedly when pilots were fighting. This affected pretty much all the particle code, so there may be some bugs introduced. Do test all the particles you can find. [NM] - Fix for mantis #486. If "/snapscrap" is on the commandline of an *EDITOR* build (only), then all scrap should be raised up to terrain level on load. [NM] -- b69w released===================== - Fix for crash of particles in MW, arccannon. [NM] -- b69w2 released===================== - Hopefully fixed arccannon. For real. [NM] -- b69w3 released===================== - Fix for mantis 494. Changed code for whether a nVidia video card can support DXT to reject the following: RIVA TNT, RIVA TNT2/TNT2 Pro, RIVA TNT2 Ultra, Vanta/Vanta LT, RIVA TNT2 Model 64/Model 64 Pro, Aladdin TNT2, GeForce 256, GeForce DDR, Quadro, GeForce2 GTS/GeForce2 Pro, GeForce2 Ti, GeForce2 Ultra, Quadro2 Pro, GeForce2 MX/MX 400, GeForce2 MX 100/200, GeForce2 Go, Quadro2 MXR/EX/Go, GeForce4 MX 460, GeForce4 MX 440, GeForce4 MX 420, GeForce4 MX 440-SE, GeForce4 440 Go, GeForce4 420 Go, GeForce4 420 Go 32M, GeForce4 460 Go, Quadro4 550 XGL, GeForce4 440 Go 64M, Quadro NVS, Quadro4 500 GoGL, GeForce4 410 Go 16M, GeForce4 MX 440 with AGP8X, GeForce4 MX 440SE with AGP8X, GeForce4 MX 420 with AGP8X, GeForce4 MX 4000, Quadro4 580 XGL, Quadro NVS 280 SD, Quadro4 380 XGL, Quadro NVS 50 PCI, GeForce2 Integrated GPU, GeForce4 MX Integrated GPU. In short, basically everything pre-Geforce 3. Card list from http://us.download.nvidia.com/XFree86/Linux-x86/1.0-9755/README/appendix-a.html Note: this code doesn't take effect if DXT is forced on/off via render.cfg; this only affects the autodetermine code. [NM] - Fix for mantis #515 - fixed AV in Attacker::Execute. [NM] - Fix for mantis #517 - removed sys.framecap variable. Code to do that was removed a long time back (pre v1.2? Don't have source history before then). Rather than try to make it work, it's faster to just kill that variable. [NM] - Fix for mantis #496, sort-of. The ingame FPS display is now disabled when the user wants it off, but the game *MUST* still measure it so that it can do any graphics drops needed, and report it to others in the same game. [NM] - Fix for mantis #466 - small possible exploit(?) w/ guntowers fixed. [NM] - Optimized code somewhat to reduce # of calls to QueryPerformanceCounter(), which was being called a few too many times per frame for my tastes. This might help framerates a little. Also added PrefsFile::MWSmooth_MinDT, as super-high framerates seemed to stutter more. [NM] - Code reformats on Deathmatch DLL. Also disabled code that retargeted them constantly, as that can cause MW popping -- they constantly get orders like this in the lockstep world, but those orders are not propagated into the visual worlds. [NM] - Fix for mantis #437. Hack(?) for sleepy GTs was affecting players. Made player-controlled GTs skip that test. [NM] - Fix for mantis #321 - flaremines with hp_fire should work as expected again. [NM] - Fix for mantis #500 - added commandline "/AdjustHeightOnLoad 0.0", for *EDITOR* builds, only. That takes a single floating point value, and moves all object positions vertically by the specified amount on load. [NM] - Fix for mantis #489 - reserved fewer slots in FFA when appropriate. [NM] - Fix for mantis #469. Added [CraftClass] MinWeaponPitch = {weaponPitch} // For turretcraft/turrettank (i.e. GunTower/GunSpire/turret) MaxWeaponPitch = {weaponPitch} // For turretcraft/turrettank (i.e. GunTower/GunSpire/turret) These values default to whatever 'weaponPitch' is in the ODF, which in turn defaults to 0.25 if not specified. Note: the code used to set the range from (-weaponPitch) .. (weaponPitch). Now, it's from (-MinWeaponPitch) to (MaxWeaponPitch). So, don't set MinWeaponPitch to be < 0 unless you really know what you're doing. [NM] - Fix for mantis #470. Added [GameObjectClass] DeployOnBuild = -1 // Valid values are: -1(auto), 0(force undeploy), 1(force deploy) Values outside of the range are treated as -1, i.e. no change to default state when built by recy/factory. Note: APCs, Bombers ignore this setting. [NM] - Fix for mantis #421. Done as two parts -- (1) DLL ensures that all items on the player's team are in the best group on initial load. (2) Grouppanel doesn't blow over initial group list with multiworld data on a .bzn/.sav load. Note: if there are other DLLs that are similarly broken, I'll need to know what they are. The fix is relatively quick, but I'm not going to load all the SP BZNs right now. [NM] - Fix for mantis #504. Squelched message, does nothing if there's no hardpoint set for weapongroup #5. [NM] - Fix for mantis #516 - Fixed missing quote from pool startColor entries. Submitted by DF-Mj.Gen.Dead_Eye. [NM] - Fix for mantis #487 - updated version of ST4play from Commando; fixes terrain elevation issues. Will be included in next full build. [NM] - Added latest version (v3.5) of wug's AIPs. [NM] - Tweaked ivrecy from Red_Devil. [NM] -- b69x released===================== - Fix for mantis #527 - Guntowers should be less sleepy. [NM] -- b69x2 released===================== - Major asset changes, as part of mantis #465, 532, 544. Also, latest rev of wug's AIPs. This is a lot of new files. [NM] - Actually included the OpenIL .vcproj changes that readme13.rtf advertises. Look under addon. [NM] - Switched builds of BZ2, and all DLLs (e.g. mission DLLs and 3rd party DLLs) over to using Multithreaded DLL runtime libs. Also switched it to use manifest files to force-load specific DLLs. This saves a moderate amount of size from the exe/dll files. But, if you don't have Visual Studio 2005 SP1 (express editions w/ SP1 should be ok) installed, you must install the vcredist_x86.exe package from MS. If you don't, BZ2 won't run. I'm uploading this along with builds, but if you don't trust my copy, you should be able to get that file from the horse's mouth: http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=en [NM] - Edited comments on MinWeaponPitch/MaxWeaponPitch above, as there was some confusion about them on the boards. [NM] ---- 1.3 beta 70 released======= - Better fix for mantis #421, 522, 543 - on loading a .bzn/.sav file, items are re-associated with the groups they're in. This seems to make ISDF16 have the right units on startup, as well as when saved/loaded. [NM] - Fix for mantis #480. irc chat lobby works once again. [NM] - Fix for mantis #546 - separate chunks should work. [NM] - Asset tweaks sent on by GreenHeart. [NM] - Fix for mantis #510. Another recy variant for FFA. [NM] -- b70a released===================== - Reverted change that made things use multithreaded DLL locally. [NM] -- b70a2 released===================== - Fix for mantis #550 - changed stock13_fi3.aip. [NM] - Fix for mantis #511 - changed fbWeaponLinkingEnabledRecyclerGreenHeart.odf [NM] - Got rid of Dark Reign II's 'String' class, replaced with std::string. Lots of code adjustments to cope. [NM] - Fix for mantis #539 - ship damage effects should appear correctly in MW. [NM] - 'Fix' for mantis #529. Added [GameObjectClass] DeployedPowerupMask = 127 See documentation above for mantis #371. [NM] - Fix for mantis #524 - 32 is a hard limit on the # of vehicles in mpvehicles.txt (and similar). Limit will *NOT* be expanded. [NM] - ibrckt.odf (and similar) update from mantis #436,554. [NM] - Fix for mantis #519. Added: [GameObjectClass] LightsOnEffectsMask = 65535 LightsOffEffectsMask = 65535 Parallels mantis #297 (see above). Another way for a craft's effects to be disabled based on the object's 'lights' state. This only gives the ability to kill effects, not turn them on. Compiles, but is untested. [NM] -- b70b released===================== - Undid over-optimization of timers in network code. Net code will do its own call to QueryPerformanceCounter to be more accurate. This should fix some of the unable to join and possibly some sync issues. [NM] - Switched all code off Dark Reign II's memory allocator to Visual C++'s. This may fix the spontaneous memory faults in MP games. [NM] - Rebased all DLLs so that they load at addresses that are unoccupied at startup. This will probably *slightly* optimize startup times. [NM] - Update mantis #519 - when a unit's lights are toggled on/off, it should recalculate effects better. [NM] -- b70c released===================== - Fix for crash on load caused by most recent update to #519. [NM] -- b70c2 released===================== - Fixes for mantis #558, 560. Both were in the AIP code. [NM] - Fix for mantis #563 - crashes when >8 players were in the game. MoveManager code had its own limit of 8 players, which has been bumped to the NetManager's max of 14. This is NOT to guarantee that >8 player games will work at all. [NM] - Wug's AIPs v3.51 added. Also mantis #564 - tweaked game cfgs for higher resolutions, mantis #567 - ibscup ambient sfx, mantis #568 - linking weapon configs. [NM] - Work on mantis #561 - added more logging and possibly a crash workaround. Please scan the battlezone.log file for things looking like ERROR - Couldn't find IVar(#+#), CRC 0x######## Where the # can vary. [NM] -- b70d released===================== - Tried one more build compiled against the Multithreaded DLL libraries. This should make things smaller, but had problems with b70. Depending on how things go with this, I'll probably kick out a b71 soonish that's based on 70d (static linking) or d2 (dll linking). [NM] -- b70d2 released===================== - Made clockskew in MP work again. Hopefully this'll make some issues (sync in MP?) seen recently better. [NM] - Tweaked smoothing of remote players to be a little smoother. The PositionFactor/VelocityFactor wasn't being scaled by dt, so that when the framerate got very high (as recent builds have done), then those parameters would tend to predominate. [NM] - Oops. Didn't have all of mantis #568 (linking vehicles) unpacked into subbuild folder. Fixed. [NM] -- b70d3 released===================== - Added GamePrefs.ini::SmoothCodePath 3 & 4, set default to 4 as it seemed to produce better results anyhow than all my work. [NM] -- b70d4 released===================== - Back to SmoothCodePath 0 for now. Bumped version #. ---- 1.3 beta 71 released======= - Fixed some jerkiness with smoothing accidentally introduced in 70d4. Was resimulating units multiple times per frame. [NM] - Fix for mantis #575 - ibscup.odf has provides set once again. [NM] -- b71a released============================ - Redirected Visual Studio security violations to the crash logging code. Code from http://blog.kalmbachnet.de/?postid=75 used to do this work. Thanks. [NM] - Fix for mantis #573 - made sure all root .cfgs used by game are check for resolution-modifying names. This includes a bunch of editor cfgs. [NM] - Fix(?) for mantis #571 - some more range checking. This might just push the problem elsewhere, not sure. [NM] - Tweaked craft smoothing again. More options in GamePrefs.ini, and added the ability to tweak them in realtime. [NM] <<<<<<< ChangeLog.txt <<<<<<< ChangeLog.txt -- b71b released=================================== - Deselecting the Armory clears its build queue if it is not actively building, such as when waiting for a location (mantis #463). [Ken] - TerrainClass::AlignTerrainReplace uses the center of the model's axis-aligned bounding box instead of assuming that the matrix position is the center. This should produce better results in general, though there are objects with screwed-up positions caused by the mesh reader "helpfully" re-centering the geometry. [Ken] - Fix for mantis #581 (pools not showing smoke). Breakage was caused by change for mantis #519, so please re-test that after I made pools work again. [NM] - Local fix for #582 - reverted back some of Ken's changes to the grouppanel code. It's got too many side effects for now. [NM] - Fix for mantis #585 - updated bzgame_weapon.cfg. [NM] -- b71c released=================================== - Disabled automatic group assignment in SetTeamNum, BuildObject, and GameObject::PostLoad. Early mission scripts relied on GroupPanel's selective blindness, as well as the group assignment side effect of SetTeamNum. Making group assignment explicit seems to have resolved most single-player problems (mantis #383, #582). [Ken] /* Split dynamics update to apply half of angular acceleration before applying angular velocity and half after, just like linear acceleration. This "midpoint method" produces positions (and orientations) identical to the closed-form solution for constant acceleration. [Ken] */ - Removed code from Strategy02 that set player and recycler health to 1), allowing instant-action maps like chill.bzn to work normally when run from the command line. (I use chill.bzn as a testbed for base building, driving around, and spawning enemies.) [Ken] - Disabled code in Planners.cpp that ran the planning system very aggressively for the first several seconds. This would mostly affect high-TPS games, but didn't seem to make much difference. [Ken] - Converted the widely-used sequence of GroupPanel::FirstEmptyGroup() followed by GroupPanel::FirstMatchGroup() into a single function, GroupPanel::GetBestGroup(). This is mostly a source-code change with no behaviour change, though a few places get the benefit of the additional FirstMatchGroup. [Ken] - Fix for mantis 346. Tugs should go to navs fine now. [NM] - Fix(?) for mantis #587 - dialed down optimizations in the functions potentially called by WorldPart::SaveAll, which is the last function I can recognize on the stack. Keeping frame pointers should let me get more info if this happens again. [NM] - Fix for mantis #474 - updated(==reverted) cewcap01.msh to the one from data.pak. [NM] - Fix for mantis #576. Added to AIP files: [Plan#] planType = "SwitchAIP" MissionTime = -1 // # of seconds that must elapse before this plan is done This is a time *relative* to when the AIP was started, NOT total mission time.. Values less than 0 will not use this timer. This can be considered another condition that must be matched for the plan to be executed. [NM] - Fix for mantis #579. Added [GameObjectClass] PowerupRaceMask = 134217727 DeployedPowerupRaceMask = 134217727 The above are bitmasks against the race (i.e. first character of the ODF filename) of the powerup. 'a' is the first (lowest) bit with a value of 1, 'b' the next lowest with a value of 2, etc. After 'z', there's one more usable bit, which is used for when the powerup's ODF doesn't start with a letter, for 27 usable bits. If a bit is set, then the powerup is usable. Like mantis 371, if [GameObjectClass]::CanAcceptPowerups is false, then this value defaults to 0. Note that a powerup must pass *both* this mask and the mantis 371 to be accepted. [NM] - Fix for something mentioned recently on boards. Added to aip files [IdleDispatcher] sendAllUnitsOnStartup = false If this is true, then it'll send all offensive units (i.e. everything but scavs, turrets, const rigs, and service trucks) at a random target (per item, not all at the same target). This is done once, at AIP 'startup'. This is not guaranteed to kill off all the AI's units, but it should shake them up a little. And hopefully the player too. [NM] - Fix for mantis #406, probably others. Killed the 'followgroup' code when multiplayer is on (not just multiworld, as you could do a 1-machine MP game w/ MW off). This is used by animals (where it crashed the most), as well as FollowTask, GetServiceTask, GotoTask, RescueTask, and some parts of WingmanProcess. This may well have some side effects; my understanding of the code is that it should behave as if there's no follow group and path independently of other units. [NM] - Edit control no longer clears contents when tabbed into, as that had been bothering me for the longest time. It turns out that the "tab" input was being received as a KEYCHAR event, and replaced the selected text. Now it explicitly ignores tab as KEYCHAR. [Ken] -- b71d released=================================== - Fixed severe Armory breakage caused by the last change. Now, instead of trying to clear an inactive build queue on deselection, it does it on selection. [Ken] (== mantis 589 - NM) - Reverted the above dynamics change, as it was the cause of all the interpenetration problems. I have no idea why it would, but it did, so it's gone. BZ2 code is extremely fragile, so changing stuff like that always seems to lead to tragedy. You would think that I would have learned that by now... :P [Ken] - Twiddled CollisionArray polygon test to give it more "thickness", making it more resistant to interpenetration. Craft collision now allows collision to "back out" of penetration a bit. You can still "work" the nose of a craft through a corner by shaking it back and forth while pinned, but it takes a lot more effort. [Ken] - Undid my change to SetBestGroup, as it needed to check for matching groups first and then empty groups whereas all the other places did it the opposite way. That reversal broke MPI with large or huge starting forces, making large numbers of units uncommandable. [Ken] - Added a real Quaternion multiplication operator based on code found at http://www.gamasutra.com/features/19980703/quaternions_01.htm. Nothing uses it yet, but it it may come in handy in the future. [Ken] -- b71e released=================================== - Fix for mantis #590. PowerupRaceMask/DeployedPowerupRaceMask now default to the values shown above if not specified in the ODF. [NM] - Some work on mantis # - added some logs to battlezone.log and the ingame messages box. If you see "ComputeFar bailing at check 1" (or check 2), let me know. [NM] - Some work on mantis 488 - noticed the code wasn't always handling buffer lost errors. Made it more robust. [NM] - Fixed SelectionDisplay object bounding box "popping" on world swap. SelectionDisplay::LoadShow would set the item bounding sphere pointer to the GameObject's bounding sphere instead of the GameObjectClass copy used everywhere else. Since the GameObjectClass bounding sphere is static, LoadShow doesn't even need to bother updating it. [Ken] (This may be mantis 423 - NM) - Fix for mantis 593 - undid change to gototask.cpp - allowed it to use followgroup. Animals and the other items above should still check for SP vs MP, though. [NM] - Fixed text stretching when centering text too wide for an interface control. The code was using unsigned integers, which wrapped around instead of going negative. [Ken] - Converted BZ1-style bzone.fnt to BZ2-style bzone.bmf, and converted the sprite-based font renderer to use the normal font system instead. The result looks identical to the old way, as the font itself is the same. Relatively few places use that code path (mostly debug stuff), but it was something I had been meaning to do for a long time. [Ken] - Fix for mantis #483 - ability to disable turret compass from escape pause screen. [NM] - Fix for mantis #401. This may help fix sync errors in other cases as well. [NM] - Fix for mantis #553 - units that are 9'd should produce a message and adjust scores. [NM] - Not a fix for mantis #591, but I can't repro it here. Added more callstack info to some of the functions listed in the callstack. [NM] - Fix for mantis #348. Added [FactoryClass] KickAllCraft = false If this is true, then all units built by a factory will get the same kick that empties currently do. If this is false, only empties get the kick. You should be able to use [FactoryClass]::MultVelXZ to modify the strength of that kick. Also noticed that MultVelXZ was being applied only when scaleVelY was not-zero; made it applied all the time. [NM] -- b71f released=================================== - Shell background music (from .wav/.ogg) plays properly when efx volume is set to 0, but music volume is > 0. [NM] - Fix for mantis #557 - attacker plan would find/send the same ship 4 times (or however many times the AIP called for), so sent groups were a little smaller than expected. Also tweaked the force-matching code, as it uses the same paradigm. [NM] - Fix for mantis #597. Creating savegames works once again. Over-optimized things. [NM] - Undid followgroup changes for FollowTask, GetServiceTask, WingmanProcess. Only the animal processes still make the SP/MP distinction. Hopefully this fixes #595, 596. [NM] -- b71f2 released=================================== - Undid followgroup changes for UnitTask. Only the animal processes still make the SP/MP distinction. Hopefully this fixes #595, 596, 603. [NM] -- b71f3 released=================================== - Fix for mantis 598 - updated splash.dxtbz2 to avoid artifacts on ATI graphics cards. Also updated BZ2DXTOptions.cfg so that future runs of things-- which is what generates all the .dxtbz2 files used. [NM] - Fix for mantis #602 - tweaked ivrecy.odf. If this is successful, the same changes should be made to the approximately 17,523 other ISDF recy variants. Give or take a few. [NM] - Fix for mantis #594 - LOCBowl had items spawning on team 1, corrected to be on team 0. Due to size, will be in next full build (b72). [NM] - Fix for mantis #439. Added to AIP, [Plan#] sections planCondition = "FriendlyExists" planCondition = "FriendlyUnits" planCondition = "NotFriendlyExists" planCondition = "NotFriendlyUnits" These can be in any of the condition places. A "FriendlyExists" is an item on a friendly team, e.g. allied teams or team 0. "Exists" will check only the same team as the AIP; "HisExists" is for hostile units. The other three cases should be relatively easy to figure out from there. Received only minimal testing. [NM] - Fix for mantis #604. For factories, whenever it reads in buildItem#, it also reads in buildEmptyItem#, whether grouped or not. The buildEmptyItem parameter is still read, and if it is > 0, will zap out a whole group/row. Note: a factory cannot have the exact same ODF in two places, one set to build empties, the other w/ AI -- the first one will set the AI presence/absence. Note: this parameter takes a boolean, and should be paired with a valid entry, like: buildItem3 = "fvhtank" buildEmptyItem3 = true // note: default = false, i.e. build piloted Compiles but is pretty much untested. [NM] - "Fix" for mantis #580. If an internal exception happens, it's logged to battlezone.log file, and a messagebox telling the user to go look at that file should appear. [NM] - Fixed up tracked vehicle physics (mantis #153, #197). The long- standing misbehavior was the result of two interacting problems: the collision contacts were too low on many vehicles, so they tended to "drag" on the ground. Second, collisions forced velocity into the treads in such a way that it overrode controls, leading to "sticking" problems. I now have tracked vehicles automatically computing their hull sphere (geometry minus treads) so COLLISION_RAISE is no longer necessary, and applying the change in linear and angular velocity as a result of collisions into the treads instead of blindly overriding them. [Ken] - Reduced the tread static friction to 1.0 (slightly better than rubber on asphalt), reducing "weeble-wobble", wheelies, and wall-climbing behavior in tracked vehicles. Relatively modest linear and angular acceleration values are now perfectly playable, so extreme traction is no longer necessary. [Ken] - Reduced accelThrust and accelSteer on the ISDF Recyclers in the addon directory, as they were set to abnormally high levels for a vehicle of that size. [Ken] -- b71g released=================================== - Mega-oops. Code for #604 turned all built vehicles unpiloted. Fixed. [NM] -- b71g2 released=================================== - Added support for ODF inheritance. The classLabel property can now reference another ODF, though the prototype names are still valid. This can greatly shrink the amount of data inside a derived ODF, as only the differences need to appear. [Ken] - Improved property inheritance for game object classes where possible. There are some properties that may not inherit correctly, particularly the MorphTankClass duplicates of GameObjectClass, CraftClass, and HoverCraftClass properties. I'll have to figure that one out. [Ken] - Improved property inheritance of weapon, ordnance, and explosion classes where possible. There may be some properties that do not inherit correctly, but most should behave as expected. [Ken] - Tweaked TrackedVehicle physics origin, setting it to the center of the full bounding sphere instead of the hull. It should be significantly lower now, reducing wheelies and leans. If it keeps causing trouble, I can set it to an even lower position. [Ken] - Converted InfoDisplay to use an interface list box instead of drawing text directly. This fixes the lack of newlines (mantis #599). [Ken] - Added support for explicitly specifying weapon groups (mantis #513): [GameObjectClass] weaponGroup<#> = // group number, -1 for automatic Hardpoints with automatic grouping join the group of the most recently assigned similar hardpoint, regardless of how that hardpoint got there. Mixed-type groups act like permanent multi-selection, though the weapon status indicator only lists the last weapon in the group. [Ken] - Weapon powerups skip over hardpoints containing the same weapon the powerup provides unless that weapon has used up some of its local ammo. They also affect a single group at a time, though this only comes up for otherwise-matching hardpoints placed in separate groups. [Ken] - Added damage over time and done explosion to LeaderRoundClass, making it a more general "sticky" ordnance (mantis #37): [LeaderRoundClass] damageValue(N) = damageValue(L) = damageValue(H) = damageValue(S) = damageValue(D) = damageValue(A) = xplDone = The damage values are rated in damage per second. The explosion only takes place when the ordnance has stuck onto a target. [Ken] - Added support for shifting TrackedVehicle center of gravity. [TrackedVehicleClass] CENTER_SHIFT = // -1.0 for bottom, 0.0 for center, +1.0 for top The default of -0.4 lowers the center of gravity to the previous value, reducing "wheelies" and "weeble-wobble" drastically. [Ken] - Increased IControl::RenderCtrlText internal buffer to 256 bytes. This was previously 128 bytes, and long names in the IRC chat lobby could overflow it and crash. [Ken] - Tweaked ICViewer control to add the mesh radius to the mesh distance, greatly reducing the chance of the computed field of view being invalid. (The "Tech" view in the BZClassic shell single-player mission screen had a view distance smaller than the radius of the NSDF Recycler, which is why it tripped up.) [Ken] - Tweaked CommandPanel to make it more-or-less impervious to missing controls, and moved redundant code to utility functions. [Ken] -- b71h released========================================== - Weapon powerups preferentially replace selected weapons, allowing the player to decide where the weapon goes. [Ken] - Extracted common functionality between GameObjectClass, WeaponClass, OrdnanceClass, and Explosion class into EntityClass. For now, it "emulates" the derived classes by reading from their root section. All four types now share a common "name space", so a single ODF can no longer contain multiple types (which nothing actually did). Due to conflicts, two classLabels have changed: [OrdnanceClass] classLabel = "leader" // was "targeting" [GameObjectClass] classLabel = "spraymine" // was "spraybomb" For now, the root types are still not interchangeable. [Ken] - Weapon powerups now consider all matching hardpoints, giving selected hardpoints priority. The previous version sometimes misbehaved. [Ken] - Fixed some leftover issues from the EntityClass change. GameObjectClass contained some data that was supposed to have been moved to EntityClass, leading to all sorts of trouble. [Ken] - Fix for mantis #588. (Not 100% sure, but it seems like the best guess to me.) ibnav.odf updated so that it can't be an idle dispatcher victim. Also made idle dispatcher ignore all items with a maxHealth = 0, i.e. invincible. It's fairly pointless to attack those items. [NM] - Switched to dlmalloc for the code (available from http://g.oswego.edu/dl/html/malloc.html ). This has proven itself to be faster and more efficient than the DevStudio memory libraries in tests at work. Also defined _STATIC_CPPLIB so that our custom operator new will be picked up by std::string. [Microsoft has the really annoying habit of giving you an 80% solution, where an operator new is picked up by std::vector and other containers, but not std::string unless you find the magic keyword for the other 20%. Murphy's law, however, says that _STATIC_CPPLIB will give me another 18%, and leave the last 2% for something else. Grrr] dlmalloc is also a bit more sensitive to memory manager misuse than the standard allocator, so there may be some "this app has requested it be terminated in an unusual way" messages if there's any code stupidities. That's a good thing in the long run. [NM] - Added ParameterDB::GetEntityClass functions for future use. [Ken] - Added some thread priority, affinity masks to GamePrefs.ini. See comments in there. [NM] -- b71i released================================================= - PoweredBuilding now supports "remote" terminal access, which disables the check that the user is still standing at the terminal. This is not all that useful by itself, but enables other features. [Ken] - CommBunkerClass (and CommTowerClass) use [GameObjectClass] CanSelect to control their selectability instead of a hard-wired hack. Upon selection, CommTowerProcess toggles (remote) terminal access to activate or deactivate the satellite view. To create a Battlezone 1 style Comm Tower: [GameObjectClass] CategoryTypeOverride = 9 CanSelect = 1 This feature is off by default. (mantis #249, issue 1) [Ken] - Nerfed the Base Panel so it can function with missing windows and child controls. The Cockpit and Map Radar displays correctly avoid trying to draw lines to nonexistent controls. It turns out that the Base Panel had ten potentially-visible slots, overlapping the space filled by the Group Panel, so I deleted the extraneous controls. [Ken] - Renamed the ISDF mortar shell ordnance mortar.odf to mortar_c.odf, avoiding a conflict with the MortarClass prototype (mantis #612). [Ken] - Fixed a dumb bug in WeaponPowerup that did the opposite of what I meant when trying to restrict weapon changes to a single group. [Ken] - Added safety checks to ParameterDB to ensure that nothing ever uses a prototype class directly. That should avoid problems like the mortar crash from recurring. [Ken] - GameObjectClass and MorphTankClass now process weaponMask from a string of 0 and 1 into a bit mask instead of a decimal value. This saves Craft and MorphTank from having to do extra work. [Ken] - Replaced weapon group-cycling code with a modified version of the cycling and linking code from Battlezone 1. With grouped hardpoints, the code behaves identically to BZ2. With ungrouped hardpoints, the code behaves identically to BZ1. It's the best of both worlds! (mantis #254, #513) [Ken] -- b71j released================================================= - Fixed a crash in UserProcess when picking up a weapon powerup for a currently-empty hardpoint. (It wasn't checking to make sure the weapon pointer wasn't NULL.) [Ken] - Fixed a dumb bug in WeaponPowerup where I was using GetGroupSlot() instead of GetSlotGroup(). Its should be working correctly now. [Ken] - Fixed a large number of compiler warnings, especially ones about insecure C runtime library functions. [Ken] - Got things working cleanly with stack and uninitialized variable checks in the Debug build, which may help trap problems. [Ken] - Cleaned up the implementation of TextRemap, though not much uses it beyond the "Please insert the Battlezone II CD" message. [Ken] -- b71j2 released================================================= - Disabled permanent auto-link for identical weapons. This difference from BZ1 was necessitated by the lack of weapon priority, which made it hard to get a weapon placed into the second (or higher) hardpoint in the link group. (Note: this change was subsequently reversed) [Ken] - UserProcess cycles the current group indicator independent of linkage and selection while weapon_multi is held, even when the unit forbids weapon toggling. The group indicator reverts back to the selection when weapon_multi is released so it won't stray too far. [Ken] - WeaponPowerup now offers better control over where to place the weapon, choosing empty hardpoints first, current group second, selected third, and unselected last. (BZ1 ensured empty hardpoints were filled first by assigning them absolute minimum priority.) [Ken] - Restored permanent auto-link by treating weapon_multi as a separate state instead of overloading the unlinked state. [Ken] - Renamed ordnance whose names clashed with prototypes, as they crashed the game when used. BZ2's asset naming scheme was very inconsistent, leading to this sort of problem. (mantis #611, #617), [Ken] - Fixed save games with the smaller UserProcess linkage data (version 1156). In thit case, UserProcess duplicates the unlinked state into the weapon_multi state so it will at least work. [Ken] - While fixing the save games, I corrected a number of bad copy-paste errors in UserProcess save/load. Sloppy, sloppy, sloppy... [Ken] - Added "canSelect" parameter to WeaponClass, indicating whether or not the weapon should be added to the group cycle, set to true by default. ShieldUpgradeClass sets this to false, as those weapons have no useful "fire" action. Person "pack" weapons (previously unselectable) don't, and so will be selectable unless marked otherwise in the ODF. [Ken] - Fixed an implicit dependency on turns-per-second in APC physics. The code is still pretty screwy, but it's better than it was. [Ken] - Added an autoDeploy parameter to PersonClass, set to true by default. When enabled, the person deploys (crouches) on equipping a weapon marked as Assault, and undeploys (stands) on equipping a weapon not marked as Assault, as usual. When disabled, the person instead uses the "deploy" control, and uses the switchMask like a MorphTank. [Ken] - Fixed b0rked geometry for weapons with visible geometry. It turns out that I could just let EntityClass handle it, and it worked fine after that. [Ken] - Fixed inappropriate use of animation maxFrame instead of endFrame. This fixes a visible "pop" in Person when standing up from a crouch, and an off-by-one-frame timing error in Deployable. [Ken] - Replaced the five separate usages of "get mask" functionality with a common ParameterDB::GetMask function. Code reuse is good. :) [Ken] - Tweaked Person grounded/flying check and made JetPack explicitly set the flying flag. This prevents the Person from incorrectly "sticking" to the ground instead of sailing off into the air. The "grounded" threshold distance is less than it was (0.01m instead of 0.125m), but the ISDF Pilot stuck to the steep cliffs at the edge of chill.bzn without slipping. [Ken] -- b71k released======================================================== - Fixed auto-linking. Stupid copy-paste error. :P - Weapon powerups treat an auto-deploy Person as a special case, applying to all matching hardpoints instead of the a single group. BZ1 would have had the same problem if it supported pilot weapon upgrades. [Ken] - Fixed MPVehicles list parser broken by my ham-fisted switch-over to the secure C runtime. [Ken] - Fixed implicit dependency on TPS in PowerUp powered-flight physics. This makes Day Wrecker bombs fall at a consistent speed, and may help powerups catapulted from the Armory land closer to their targets. [Ken] - Re-added ExplosionClass::Cleanup functionality to clear out the default ExplosionClass list. This fixes a number of crashes caused by things pointing to the old (deleted) default explosions (mantis #614, #621). [Ken] - Fixed uninitialized state matrix in the "null" MeshRoot, as it tripped an is-finite check after restart in a GameObjectClass using it. [Ken] - ASCII save quotes strings to preserve embedded spaces, and retains labels for class-type fields instead of substituting a generic "config" (mantis #501). Older builds won't skip over quotes, and so will choke on new ASCII saves. [Ken] - Fixed incorrect control group height in the Control input page so the bottom items ("Multi-Select Weapon Toggle" and "Abandon") are now bindable like they should have been (mantis #490). [Ken] - Fixed groupable TurretCraft, which unlike other craft have to deal with terminal and power state (mantis #545). In addition to saving its original team, it now saves its original group so it can restore its slot. [Ken] - TurretCraft now supports Building-style edges, tunnels, and replacement using the [BuildingClass] section (mantis #481). This is specific to the TurretCraft class, and creating a non-TurretCraft terrain-owning craft via ODF trickery will result in tragedy. ReplacesObject and AlignsToObject are turned off by default, like a standard building. [Ken] - Refactored StatusDisplay to make it much more customizable. It now uses VarItems extensively instead of trying to directly manipulate interface controls, allowing fairly drastic changes. If the StatusPanel contains a HullGauge or AmmoGauge control, it will use them instead of the built-in custom-drawn shapes, and apply the standard color scheme. Variable items: "status.hull.ratio" (float 0..1) "status.hull.text" (hull percentage) "status.ammo.ratio" (float 0..1) "status.ammo.text" (shots remaining) "status.weapon1.name" (weapon name) "status.weapon1.shot.count" (local shots remaining) "status.weapon1.shot.text" (local shots remaining text) "status.weapon2.name" (weapon name) "status.weapon2.shot.count" (local shots remaining) "status.weapon2.shot.text" (local shots remaining text) "status.weapon3.name" (weapon name) "status.weapon3.shot.count" (local shots remaining) "status.weapon3.shot.text" (local shots remaining text) "status.weapon4.name" (weapon name) "status.weapon4.shot.count" (local shots remaining) "status.weapon4.shot.text" (local shots remaining text) There is not a VarItem for weapon type, as icons cannot use VarItems to update their image. (mantis #249, item 2) [Ken] - Changed ObjectSpawn label parser to ignore non-numeric values after the last underscore split so the delay specified in ObjectSpawnClass applies (mantis #48). Previously, it would convert the non-numeric value to zero and use that instead of the default value like it should have used. [Ken] - Added "!LeftCtrl" to "frontal_target" ("T") and "mode_select_0" ("`") in bzinput_common.cfg, eliminating control conflicts with other bound inputs. (mantis #30). BindDiscrete supports two simultaneous physical inputs in a "chord", so this is the easiest way to prevent spurious actions. [Ken] - WeaponPowerupClass defaults to the weapon name only if unitName is blank (mantis #21). This allows more flexibility in naming powerups. [Ken] -- b71L released======================================================== - Fix to UPNP crash caused by Ken's aggressive security updates. [NM] -- b71L2 released======================================================== - Fixed a crash in Debug::Error::Err where a LOG_ERR call attempted to process the integer line number as a string. Oh, the irony... [Ken] - Reverted all of Ken's changes to mpvehicles.cpp to make MP work once again. (Repro steps: put "/host 0" on cmdline, launch any map, note no vehicle ingame). [NM] -- b71L3 released======================================================== - StatusDisplay now cleans up its command handler, which had been crashing the game on restart (mantis #627). [Ken] - DayWrecker::Explode now works more like the Mine equivalent, using the powered flag to determine whether it should detonate (xplBlast) or just die (explosionName), and copying the owner and team to the explosion to ensure proper damage credit. (Commando pointed this out.) [Ken] - Person triggers pack/special weapon with the "deploy" key (C) when set to autoDeploy (mantis #632). This got broken while adding the "turret tank: style control scheme. [Ken] -- b71L4 released======================================================== - Fixed GroupPanel showing units commanded by the mission script (mantis #630). The code that "scrubbed" the groups didn't check for groupability, so units that became ungroupable wouldn't be removed. This problem had been in the code for a long time... [Ken] - Updated LOCBowl.bzn to reference LOCBowl instead of LOCBowl2 so it will load correctly. [Ken] - Changed ParameterDB::Get functions to not ignore properties with blank values (mantis #626). This went unnoticed before as inherited prototype values tended to be "null" anyway. Once ODF inheritance came online, the old behavior made it impossible to clear a property back to "null". [Ken] - Fixed ShortPath::Update so it sets the open node cost value the same way ShortPath::Insert does. I don't know how much ShortPath gets used, so I don't know how much impact this will have. [Ken] - Added Commando's ODF-inheritance versions of ISDF and Scion Recycler (building) variants (mantis #626). Some of these rely on ParameterDB::Get treating blank values as legitimate, allowing derived ODFs to clear build items from the base Recycler. [Ken] - Added pitch/yaw/zoom to SatelliteView (mantis #343) and movement via throttle/strafe to SatelliteView and EditorView. Also fixed messed-up view area indicator in MapView when not looking downwards. [Ken] - Fix for mantis #605 -- asset checker concern. Keeping the details of the problem and fix quiet in this public log. Also fixed up one other area with similar code. Compiles, but not tested in practice. [NM] - "Fix" for mantis #610. If it happens again, it'll say something like "Could not find src NetSVarCRCs[#], hash 0x######## to the log file, rather than dying horribly. I'd like to get the values for those #s if it happens. [NM] - Work on mantis #520. Allowed vid.framerate to turn off the top-of-screen display completely, even in MP. MP uses its own measurer of framerate -- counts how long it took to render last 8 frames, uses that to guesstimate framerate. This calculation runs 100% of the time, and should be cheap enough to have no performance cost. This calculation is used by the onscreen scores/ping/fps MP display, as well as the graphics feature dropper. Its value might differ slightly from what vid.framerate shows, as they sample different periods. [NM] -- b71m released======================================================== - Person physics supports "eject" control in multiplayer after a one-second "debounce" period, allowing players to reset when they get stuck (mantis #380). This scores as a self-kill, so it should be used sparingly. [Ken] - Removed duplicate nepool01.odf which triggered assert on startup. [Ken] - For next full build (b72), compressed textures in bumps.pak into dxtbz2 format, moved them into patch13.pak. This removes the bumps.pak from the list of needed pakfiles. (Probably should have the installer delete that and the other texture pak files as they're deprecated now.) [NM] - Fix for mantis #451. Added commands for "network.session.guiban", "network.session.clearautobans", "network.session.gsoff" "network.session.gson" . Untested, but ought to work. [NM] - Fix for mantis #416. Added command "game.quicksave", which will save out a .sav game with the current time as the title/description. This does NOT work if multiplayer or multiworld is on. You should be able to bind this to a key, like the screenshot capability. [NM] - Fix for mantis #419. Added commandline "/svar # somestring" . Note: this works *ONLY* (1) when launching a .bzn via the commandline [UI will overwrite other svars], and (2) items read in by the DLL -- scanning the DLL source, it looks like only the following are supported: svar3 (MPI), svar5 (ST/MPI), svar6 (ST/MPI), svar11 (STCTF), and svar12 (DM). [NM] - Fix for mantis #449. Added a "No headlights" lighting option, sitting between "one" and "all." This is like 'all', but doesn't allow vehicle lights to be on. (Well, toggleable vehicle lights) Also added in gameprefs.ini settings to to turn this on/off as appropriate. [NM] - Fix for mantis #240 - (1) bumped max # of limitClass# from 8 to 32. (2) Made the provides count when checking against limitClass#. Compiles, but otherwise untested. [NM] - Fix for mantis #400 - (1) sniped AI craft should cause another to be spawned ASAP. (2) Added scriptutils.h callback to set a remaining lifespan on an object; sniped AI craft should stick around for 300 seconds max. If a player enters such a craft, the lifespan is sent back to the default infinite. Compiles, but otherwise untested. [NM] - Fix for mantis #352 - if a nav camera's owner is destroyed (bailout or otherwise), the viewport window from the nav camera is closed. [NM] - Fix for mantis #633 - a LOT of extra checks to make sure it doesn't dereference a null pointer. Will spam logfile/screen if something happens, looking roughly like ERROR: groupLists[#][#][#] is handle # obj ########, NO objClass If you see a message like this (with # replaced by values), let us know. [NM] -- b71n released======================================================== - Fixed weapon-switch multiplayer problems (mantis #634). UserProcess code copied from BZ1 used user_controls (global variable set by the input system) instead of userControls (local variable read from the move manager), so all player processes on the host ended up using the host's user controls for weapon switching. Replacing the user_controls usage with userControls like the rest of UserProcess fixed it. [Ken] - Generalized Construction Rig "add power" functionality so it no longer makes assumptions about nationality or power state (mantis #344). Instead, it checks for missing attachments directly, taking into account build cost and prerequisites. [Ken] - Planner no longer attempts to map provide/require names directly into class configs. Instead, it uses a new BuildDependencyCheck "provide map" (i.e. "what class provided this requirement") to look up potential builders. It also no longer assumes that the builder requirement will be the first one in the require list. [Ken] - Fixed the unsafe assumption in CellType that terrain-owning craft were TurretCraft. It instead checks for TurretCraft directly. [Ken] - Planner BuilderSlot function checks factory/recycler classes found through requirements to see if the class to build is one of the build items, and uses the team slot of that factory/recycler class if so. This should prevent problems with any cross-team requirements. [Ken] - Possible fix for mantis #633. Added another check (IsGameobject) before calling IsGroupable. [NM] - Probable fix for mantis #94 (multiple upgraders going at a target. However, the savegame for #94 doesn't work as expected after Ken's BuildDependencyCheck changes above. (Plans get hung up on no fbkiln, but there's a fbforg instead). So, this change is really untested. [NM] - Did asset tweaks referred to in mantis 636. [Side note: I *really* wish asset tweaks would be sent in with the same relative paths that they exist in patch13.pak . That'd save me a lot of time merging things in.] Only thing not done is the deleting of extractor.odf from patch13.pak (will require a new full build). [NM] -- b71n2 released======================================================== - Added early-out path in ParameterDB::Get class functions, so blank values don't trigger spurious warnings. [Ken] - Improved missing/prototype reporting in the ParameterDB::Get class functions, adding the config name to the output. This should make it easier to figure out where things went wrong. [Ken] - Further tweaks for mantis #449 - 'no headlights' means that a bit more aggressively. Still pops on for a fraction of a second during a worldswap, grrr. (Crashes are more important right now...) [NM] - More work on mantis 633 - didn't do the IsGameobject() test in enough places. Have one that fixes the crashes, but the build-empty-after-canceling-scav test might leave the scout in a weird grouppanel state. [NM] -- b71n3 released======================================================== - Changed Construction Rig "add power" menu to enable the option when any object in range needs taps added (regardless of scrap, power, or prerequisites). The power menu itself no longer shows objects that do not need taps added. [Ken] - Fixed the underlying cause of mantis #633. When I added a GroupPanel update between load and post-load to make sure TurretCraft could get an original group, that call would attempt to process handles before world conversion. As a result, it would sometimes get non-GameObject results and crash (or at least spam errors). The solution was stripping out that ill-placed update and moving it to the specific place where it was needed. [Ken] - Added clearBuildZone = 0 to fblung.odf so upgrades don't push them away from their normal positions (as seen in mantis #344). [Ken] - PoweredBuilding and TurretCraft create attached power taps as part of Init(). This solves the problem with non-powering taps not appearing until the Construction Rig was selected. [Ken] -- b71n4 released======================================================== - Fixed multi-selected weapons unselecting on release of multi-select (mantis #646). UserProcess was constantly updating the selection mask instead of only when link or cycle changed. [Ken] - Fixed doubled-up power taps in multi-world (mantis #654) caused by the above power tap change. Instead of adding them in Init (which conflicted with the subsequent Load), UpdatePowerState gets all taps to ensure that they have been added. [Ken] - Enabled weapon linkage by default in CraftClass, but added a profile option (single-player) and server option (multi-player) to control it. The server disables weapon linkage by default (just like before), but enabling it no longer requires a separate vehicle list or modified ODF files. This should reduce the combinatorial explosion of variant ODFs a bit. :) [Ken] - Fix for mantis #655 - AIP code was thinking things needed power when they didn't. [NM] - Fix for mantis #484 - don't allow things w/ IdenticalGroup = true to be selected w/ other items. [NM] - Added Commando's updated ODFs (mantis #465), now fortified with the recommended daily allowance of ODF inheritance. Also removed all of the now-obsolete weapon-link-enabled variants, their builder variants, and their entries in the vehicle lists. The weapon linkage server option now controls all of that directly. [Ken] - Changed _snprintf_s in cintools LoadCameraArray to sprintf_s, as the _snprintf_s variant damaged the stack when set to _TRUNCATE. [Ken] - Updated mission ISDF05 based on suggestions by lucky_foot, giving Manson's escorts names and distinct spawn points, and setting the team color to blue so his squad matches other missions. [Ken] - Updated mission ISDF04 with the same names for Manson and escorts as in ISDF05. Consistency for the win! :) [Ken] - 'Fix'(?) for mantis #652 - turned off callstack optimizations for all of planners.cpp - offset mentioned in crashlog was unreasonably large, so I need more info. (A 2-line function is not over 1KB in size, thank you very much.) [NM] - UserProcess now considers combat vs. assault when computing whether groups should be linkable. Previously, units like the Rocket Tank would consider their weapons linkable when they should not have. [Ken] -- b71o released=============================================================== - Fixed uncommandable Recycler in mission ISDF13 (mantis #657), and set the nav beacon to the correct localization string (mantis #674). [Ken] - Updated pilots and soldiers to use ODF inheritance, and added craft control parameters to the base ODFs. This fixes the Shabayev "back and forth" dance in ISDF02, among other things. [Ken] - Added weapon multi-select to play option menus. [Ken] - The [GameObjectClass] baseName property defaults to the class config when inheriting from a prototype class (e.g. "hovercraft"), and to the parent baseName property when inheriting from a non-prototype class (e.g. "ivtank"). Unless otherwise specified, the baseName will be the config of the root non-prototype class. [Ken] - StatusDisplay health/ammo gauges reposition correctly on video mode switch. When StatusDisplay::Mode got called, the status panel control had not yet had its screen position updated, so the gauges used the wrong positions. StatusDisplay::Mode now explicitly requests that the control update itself. [Ken] - CommandPanel now sets text and cost field states in the "select unit" menu. It previously neglected to do that, so the elements retained whatever state they had in the previous menu. [Ken] - Fixed the Armory in multi-world (mantis #639)... this time for sure! It turns out that ArmoryProcess was never getting the final CMD_CLOSE due to changes in the way the group panel worked. CommandPanel now treats CMD_CLOSE as an "instant" command instead of explicitly clearing the selection, ensuring that the command is broadcast to all selected units. The Armory itself no longer needs to clear its build queue on selection or deselection. [Ken] - Added GaugeImage() property to gauge control, which sets the texture of the filled portion and takes the same parameters as the background Image() property. [Ken] - Applied Red Devil's missile scout name fix. [Ken] - Fixed broken texture coordinates in ICSquareGauge::RenderSelf in the two-triangle case (mantis #668). It now draws itself correctly at all fill values. That may have been in there since the game shipped. [Ken] - Red Devil noticed that the MPI DLL's pathpoint name to preplaced vehicle cracker was still using 32-byte max ODF lengths. Bumped to 64 bytes for consistency. [NM] -- b71p released===================== - Commando reverted MPISurprise ivdrone_a.odf to its original version, removing inheritance. [Ken] - CommandPanel and StatusDisplay hull and ammo gauges now use ColorGroup indices (0 normal, 1 low, 2 critical, and 3 empty) instead of hard-wired color values. The command panel config uses "HULLGAUGE" for the green/yellow/red/black hull palette and "AMMOGAUGE" for the blue/black ammo pallete. SelectionDisplay and the curved StatusDisplay gauges still use hard-wired colors (for now). Custom gauges can ignore color indices by using a constant-color group such as "WHITE" (mantis #668) or define their own colors. [Ken] - Added Red Devil's updated Hover Pack (ighjetp.odf) (mantis #675). [Ken] - Added two more ScriptUtils.h callbacks: DLLEXPORT bool DLLAPI DoesFileExist(const char* filename); DLLEXPORT bool DLLAPI LoadFile(const char* filename, void* pData, size_t& bufSize); Existing DLLs don't use them, but I think OvermindDL1 ought to be able to put them to use. Compiles, but is otherwise untested. [NM] - Fixed model viewer control visibly clipping models (as seen in mantis #272 comments). The problem was that the control set the camera displacement on activation, but didn't update it when the model changed. A larger model would clip against the near and far clipping planes which had been set based on the first model. The control now sets the camera displacement to the value specified with SetModelDistance, and pushes the model back by the model radius during rotation. [Ken] - Updated CommandPanel "Select Unit" functionality so it doesn't rely on group selection. It collects selected units into the buttons and "locks" the sorting so it can clear the selection immediately afterwards. This avoids a timing problem for mouse-click access (mantis #677) and even supports multiple selected groups. [Ken] - Tweaked bitmap loader. It'll give more drastic errors when trying to re-read a DXT into an existing bitmap. (Right now, I'd rather force a hard exit than any sort of lockup.) Also changed messages like Bitmap::Create: ddx->CreateSurface ...One or more of the parameters passed to the method are incorrect. To have a third line, with some more parameters as to what it passed in. [NM] - Added Commando's ivmislm2 (Missile Scout Mk. 2) that got neglected in the last big ODF update. [Ken] - Updated MicroPlan to use the full angle value for steering instead of maximum steer for targets to the rear (z < 0) and the small-angle approximation for targets to the front (z > 0). For vehicles with low alphaSteer, the maximum steer could lead to oscillation. [Ken] - Updated UnitTask::AimAt to use a less "spazzy" variance technique. It now uses the "waver" technique from Missile, accumulating separate randomly-advancing "phase" values for steer and pitch, then applying a sine function to generate the actual steer and pitch offsets. Low- skill units tend to swing their aim direction around a moving target, but the pitch value doesn't "twitch" violently as it did before. [Ken] - Removed redundant aim variance from MorphTank::AimAt, as the UnitTask "wrapper" already handles that. [Ken] - Halved the omegaSteer and alphaSteer of the service trucks to reduce their tendency to go out of control (mantis #637). They previously had unusually high turn rates for a tracked vehicle. [Ken] -- b71q released===================== - Moved weapon icon updates into a common function (Weapon::UpdateIcon), and corrected a case where AddLocalAmmo didn't generate an ammo event or update its icon upon completely restoring the local ammo supply (so the icon never updated to its "full" state). [Ken] - Added "Recall" menu item to the Bomber per Commando's request. It uses MODE_CANCELBOMB as the menu mode, and sends a CMD_STOP to the AI process, which returns the Bomber to the Bomber Bay. [Ken] - Planner BaseBuilder::FindNextSpot uses its buildClass parameter instead of the oClass member, though the two never seem to be different so this change doesn't make any significant difference. [Ken] - Factory, Recycler, and Armory now treat the stalled-build state (i.e. not enough scrap to start the next item in the build queue) as "busy". This prevents the build from canceling when closing the command menu, as even a stalled build is still a build. [Ken] - Extended allowed sample playback rates to a minimum of 0 and a maximum of the audio mix rate. This specifically fixes the frequency of the MAG charge-up sound, which previously clamped against the previous limits of minimum 0.9x and maximum 1.5x sample rate (mantis #586). [Ken] - Added Red Devil's wire_ighjetp images (mantis #675). [Ken] - Changed Collapse to use its own simulation-time properties instead of CollapseMesh internal values, updated CollapseMesh to use WORLD_REALTIME clock, corrected CollapseMesh animation, and set default collapse time to a realistic real-world fall time based on building height. It looks a lot better now, and might even fix (rare) sync errors. [Ken] - CollapseMesh properly supports team colors, like ExtrudeMesh. [Ken] - Building::Explode used its flags.team value to initialize the Collapse entity team number, but that value became invalid after calling Remove. It now saves off the team number before removing itself (which is how Craft::Explode does it), so team colors should work properly. [Ken] -- b71r released===================== - Fixed incorrect inheritance of [WalkerClass] properties (mantis #679). A number of properties get processed fairly heavily after being read, and some would be processed even when inherited from a parent. Those properties are now only processed when read directly from the ODF. [Ken] -- b71r2 released===================== - The optional HullGauge control now correctly updates its color index (mantis #682). It previously used an unmodified copy of the ammo gauge case, which of course did nothing for the hull gauge. [Ken] - Updated gauge control to compute texture coordinates using the (integer) gauge fill rectangle, ensure texel alignment. The texture previously "warped" slightly as the texture coordinates changed but the rectangle itself did not. [Ken] - CollapseMesh now handles skinned models, allowing the Scion Matriarch and ISDF Extractor to collapse properly. Building::Explode creates the Collapse entity and sets relevant properties (like GameObject::Chunks does when generating the VehicleCrash entity) before removing itself, and initializes the Collapse entity later. [Ken] - Added checks in splat and mirror commands to prevent crashes when called in the shell. These really should be moved to the actual systems they control... [Ken] - Increased TwirlTrailRenderClass trail item limit and BoltRenderClass segment limit from 256 to 1024. This should prevent some of the warnings and dropped particles. [Ken] -- b71r3 released===================== - Fixed the messed-up reticule sprite caused by removing the float-to-int conversions. It now rounds to nearest, which may stop the horizontal pixel twitch effect (mantis #683). [Ken] -- b71r3 re-released================== - Fixed ordnance vanishing in multiworld. OrdnanceWorldPart::FindLockEnt was looking in the current world instead of the lockstep world, so the ordnance would get an entity from the wrong world. ConvertHandle would then find a world mismatch and return a null handle. [Ken] - Migrated FindLockEnt, SaveShow, and LoadShow from GameObjectWorldPart, WeaponWorldPart, and OrdnanceWorldPart to EntityWorldPart. All entities now benefit from this functionality. [Ken] - Updated Collapse and CollapseMesh to be fully multi-world capable. The CollapseMesh itself works more like ExtrudeMesh, with the fill and fade ratios updated from outside (by Collapse) and Render interpolating them. Collapse and CollapseMesh use SaveShow/LoadShow to transfer animation properties between visible worlds, avoiding visible glitches. [Ken] -- b71r4 released===================== - The Bomber now sets itself as the bomb's owner, so it gets credit for what the bomb destroys (mantis #685). This is consistent with dispensed ordnance from other AI-controlled units. [Ken] - Reduced BoltRenderClass segment limit from 1024 to 512, as the higher limit seems to provoke an occasional crash inside Camera::ProjectClip. A bolt render segment produces twice as much geometry as a twirl trail item, so this is actually balanced. [Ken] - Added support for horizontal layout to the ScrapGauge display (mantis #667). A gauge width of 0 triggers this behavior. A horizontal layout will need to different Pos(), Size(), and Geometry() values to align segments properly, especially when using Align(). [Ken] - The bzgame_scrap.cfg layout file now uses Geometry() and Align() to position gauge segments automatically, requiring no intervention from the ScrapGauge display. [Ken] -- b71r5 released===================== -- b71s released===================== - Fix for mantis #699 - IA map previews should appear when there's only a .dxtbz2 file for them. This issue only seems to affect SP, in my limited testing. [NM] - Reduced font sizes on IA map selection screen. Some map names were getting too big for the space provided. [NM] - Possible fix for mantis #695 - more logging when net varbs disappear. Also refactored code that whines about problems (e.g. this, bad ODFs, etc) to go thru a more centralized point -- fewer duplicated lines throughout the code. [NM] - Fix for mantis #693 - should behave better when copying text into system (Windows) clipboard. [NM] - Fix for mantis #692 - AV in GroupPanel::SelectGroup should be fixed. [NM] - Fix for mantis #689 - fixed case where limits could be reached at half the expected value. [NM] - Fix for mantis #661 - Added, for armories: [ArmoryClass] DropoffDX = 0 DropoffDZ = 32 This should parallel similar items under [FactoryClass]. Also made the armory look for a pathpoint 'dropoff_armory_#', where # is the team # for the armory. If that's found, it's used, ignoring the DropOffDX|DZ. Also tweaked the recy/factory code, because I was copying from it. It would check for pathpoint 'dropoff_recy_#' or 'dropoff_fact_#', only if the buildings were in the right base slots. Changed code for recy/factory/armory to look for 'dropoff_base#_#' if it's not in the default base slot. The first # is the slot, and the second # is the team. Compiles, but is relatively untested. [NM] -- b71t released===================== - Modified CommandPanel to support Text and Cost controls inside Item, though it also supports them inside a Text wrapper for compatibility. Simpler is better. :) [Ken] - BasePanel blinks power indicator using selection flag instead of visibility. [Ken] - GroupPanel recursively activates child controls like other displays. It doesn't seem to have much effect either way, though. [Ken] - Updated bzgame_base.cfg, bzgame_command.cfg, and bzgame_group.cfg to use ConfigureInterface() DefineControlType(), eliminating vast swaths of replicated control configuration and drastically shrinking those files and cleanly separating presentation from structure. The perl scripts that build them are no longer necessary, and creating versions for different resolutions should be much easier. [Ken] - Fix for mantis #706 (my feature request tracking bug). Added a bunch of audio functions to Scriptutils.h. This should allow modders to do all sorts of things, including some sort of background music player. See comments in ScriptUtils.h for more info. Compiles, but is pretty much untested. Please test. [NM] - Some work on mantis #690/699 - did some work to make sure the load screens behave better if focus is lost while loading. Also made bitmap code more resilient to surfaces being lost -- they'll try and call RestoreAllSurfaces(), as that seems to be the recommended DirectX call to make under such circumstances. Give this a try. If you still see problems, please try and submit the battlezone.log file after things go sour. [NM] -- b71u released===================== - Added in support for playing the CD's audio tracks as ogg files instead. To accomplish this, place files 'cdaudiotrack2.ogg' .. 'cdaudiotrack11.ogg' under addon -- or any other place that BZ2 can find files. If the 'Ingame Music From CD' audio option is set to 'On', and the Music Volume slider is > 0, then it'll look for those ogg files in preference to the CD (redbook audio) tracks. If you have a system that's in any way recent, this should be preferable to using the CD tracks, as there should be no pauses while the IDE drive takes its sweet time seeking to a new track and killing your framerate. I'm not going to provide those ogg files; if you have a legit CD, you ought to be able to use a program like CDex from http://cdexos.sourceforge.net/?q=download to rip from your personal copy of the CD and convert to ogg files. Or, provide your own soundtrack from your personal music collection, which I would hope is all legal. UPDATE: some other converters are: - http://audacity.sourceforge.net/ - free, but doesn't do batch conversions of wav -> ogg - http://www.nch.com.au/switch/index.html - nagware (free to download, but tries to get you to pay for an upgrade), does batch conversions. - Cool Edit Pro (was trialware, now purchased by adobe.com) - Goldwave from http://www.goldwave.com/ - nagware (free to download, but tries to get you to pay for an upgrade) I have to say, it is a little scary to see that the 1.3 patches are now larger than all the music tracks OGG'd up. Then again, some game demos have hit the gigabyte mark, so we're still on the relatively lightweight side. [NM] - More work on mantis #699 (BZ2 vs ZoneAlarm). Made the initial socket creation calls run in a separate, very short-lived thread. This is because I believe that the open socket calls are being intercepted and not allowed to complete until the firewall's message prompt is dealt with. Putting things on another thread should allow the main message pump and graphics redraw code to run w/o hinderance. Just a test though, I've not installed ZA on my box here. [NM] -- b71u2 released===================== - Fixed the recently-introduced "pitch jiggle" (mantis #687). The updated DoLookAt() function no longer normalized the target direction, as the new steer angle calculation didn't need it. Pitch, however, did still need need it and malfunctioned as a result. [Ken] - Fixed the all-white group entries appearing in multiplayer strategy (mantis #711). Recursively activating the window activated the extra groups, though GroupPanel normally switches them off for empty groups. Multiplayer strategy reduces the number of groups, though, and those extra groups did not get switched off properly. Reverting to a non- recursive activation corrects this. [Ken] - Further fix for mantis #699. Made the irc OpenSockets call run on a mini-thread, just like the hosting fix above. Should be unnoticeable to everyone who doesn't have a paranoid program like ZoneAlarm getting in the way. [NM] - Fix for mantis #718. 'CD audio' ogg tracks started in missions are stopped when going back to the shell. [NM] - Possible fix for mantis #713 - DefendArea will ignore units with a MaxHealth = 0. Might fix the problem noted, but without a proper save, I can't tell for sure. [NM] - Fix for mantis #716 - updated ibarmogh.odf. Did get a lot smaller; might want to look into that. [NM] - Fix for mantis #698 - audio system plays sound properly if game/DLL/etc requests a .ogg file by name, rather than specifying a .wav and hoping that it'd do a switcheroo and play the ogg instead. [NM] -- b71v released===================== - Fix for mantis #717 - BZ2 uses 64-bit time(), 64-bit _stat calls now in all the places I could easily find it. Not needed for another 30-odd years, but good to have anyhow. And, it squelches some compiler warnings. [NM] - Fix for mantis #707, possibly #715 also. Correctly recomputed whether lights are set on/off when loading a visual world. [NM] - Possible fix for mantis #409 - commbunker/commtower check is now an integer, not a boolean. Siege mode is triggered by a non-scav being close (250m) to the CPU's recycler for 45 seconds. Pilots may not count either. The CPU also needs to have built a commbunker/commtower for the DLL to go to siege mode. Also made the GetNearestEnemy() DLL callback ignore invulnerable items. [NM] - Fix for mantis #645 - added to AIPs, for 'Attacker' targetType1 = "blah" ... targetType# = "foo" Once a gap is seen in numbering, or an item points to an invalid config, scanning is stopped. (The only limit on # of targetTypes is memory, but I'd suggest that 64 would be a good practical limit.) targetType still needs to be present, and is the first possible victim of a plan. TargetType1 is the second possible victim of a plan, TargetType2 is the third possible victim of a plan, etc. The AIP processor will pick whatever target is closest to the first attacker when all the units are at the staging point. It checks all possible victims of all of the targetTypes, and uses whomever's closest. [NM] - Possible fix for mantis #552 - Attacker plans keep a list of targets focused on by a team, so that multiple attacker plans should focus on separate ones, even if the class is the same. Same concept as the upgrader plan updates above. The second part of the bug is not a bug, as using 'NotExists' and '==' comparison types will force it to check for *in*equality. [NM] - Fix for mantis #719 - added in support for LocalPrefs.ini . This file is read after GamePrefs.ini, and should allow for users to put specific overrides of items in GamePrefs.ini in their *own* file. If an item is not found in LocalPrefs, the value in GamePrefs is used. That way, people can have their prefs in LocalPrefs, and when I update GamePrefs, it shouldn't conflict with user's choices. [NM] - DLL callback PlayMovie() will now look for cineractive movies in all of the current .cfg's AddDirRecurse() dirs, not only data/Movies. For example, with the default bzone.cfg, it'll look in Addon/Movies first. [NM] - Fix(?) for mantis #340 - on ISDF05, increased distance recycler needs to be from "recy_deploy" pathpoint from 15 -> 25m before the cineractive starts. This starts the cineractive about the time the Shabayev's voiceover finishes. Not sure how this compares to what 1.0/1.2 had. [NM] - Fix for mantis #415 - for attacker/clearArea/DefendArea chunks in the AIP, added a new tuning value: searchRadius = 400 This value can be reduced from 400, but cannot go above 400. [NM] - Fix for mantis #367. Client's ammo is correct in visual worlds -- was getting extra resimulations when it shouldn't have. (Looking at the blue bar above the human in CTF: Canyons showed the issue a lot faster). [NM] -- b71w released===================== - Full build installer updates: (1) some code cleanups, more use of the secure CRT functions. (2) split off 'modder' assets to a separate download -- all .bmp/.jpg/.pic/.png/.tga/.xsi files, goes into a 6MB .7z file. (3) Full installer bundles vcredist_x86.exe (at a 2.75MB cost) and installs it as part of the process. This is a necessary step, but not everybody reads the fine print. (4) Added in some commandline support for the full installer. If the commandline starts with "/S /D=" or "/NOREDIST /S /D=", then the rest of the commandline is treated as the full path to install to, e.g. BZ2_v13_Installer.exe /NOREDIST /S /D=C:\temp\InstallTemp No quotes should be used after /D, if you're installing to a directory with spaces in the name. No GUI is presented during a commandline install, and it skips the check for a previously installed BZ2 copy in that directory. The "/NOREDIST" option skips the installation of the vcredist files. The vcredist_x86.exe file is always left in the BZ2 install directory, should a manual reinstall be desired. If you want to run that installer in silent mode, then run it as "vcredist_x86.exe /q:a", or the other possible commandlines documented at http://blogs.msdn.com/astebner/archive/2006/08/23/715755.aspx [NM] - Fix for mantis #726 - added fspilo.inf. [NM] - Fix for mantis #725 - GreenHeart Variant Update. [NM] - Work on mantis #7 (probably winner of the bug open the longest). Moved AI time calculations from floats (i.e. seconds since game started) to integers -- # of turns elapsed since game started. This is because of continual problems keeping float game clocks exact across MW/MP boundaries. Integers ought to be more reliable as values get large, due to floating point precision issues. This is a fairly dangerous change, as I might have gotten some less than/greater than signs flipped in the process of rewriting a LOT of stuff. Also, file formats had to change. I think I've got it backwards compatible, but I may have busted something. Do test. Also, found a more significant difference that could lead to AI popping -- several unitTask variables were't being properly saved and reloaded. This could also lead to resyncs-- I'm amazed it hasn't shown up on the radar more so far. [NM] -- b71x released===================== - Should be able to re-enter a craft you've exited. Also bugs w/ the 'being attacked' beeps, and objectified items fixed. Broke in time changes above. [NM] - Even more slight optimization changes -- used 'const Vector&' when possible, instead of 'Vector'. This should save some unnecessary copies of items. I doubt this'll be noticeable, though. [NM] - GameObjects, Weapons, Ordnance, and Explosions correctly set their entityClass. This is a new item added by Ken a while back, and was present, but unused. Doing this should fix occasional crashes seen in LoadShow when a handle pointed to the wrong object. (Mantis #712, 724) [NM] - Slight change to multiworld logic -- if the scheduled world swap is more than .3 seconds late, it forces it to happen. This might help with the occasional visual world being out of sync on slower systems. (Mantis #551, 710) [NM] - Fixed TwirlGroup memory leak. [NM] - Some slight optimizations, removing GetTickCount() calls from the code when possible. [NM] -- b71y released===================== - Fix for mantis #731 - inst006.bzn, mpiisland.bzn updates to re-add pathpoints. [NM] - Tweaked DM: Loc Bowl to have powerups on team 1, and also to make sure the internal name for the map's trn is 'locbowl' not 'locbowl2'. Recent changes were fixing one or the other, not both. [NM] - Mantis 728 - asset changes. Should be merged in properly. [NM] ---- 1.3 beta 72 released======= - Added multip_1a.png, multip_extra.png to sub-build distributions, and to .pak file in future full builds. Those two need to stick around because they're shell backgrounds, and aren't .dxtbz2'd. [NM] - Fix for mantis #739. Relaxed asset checks for some files. [NM] - Fix for mantis #725 - fixed assets that were submitted, but had errors. [NM] - Fix for mantis #735 - stack overflow caused by assets submitted w/ errors. fbstow.odf was submitted with a classLabel pointing back to fbstow.odf, which is a bad idea. Reverted back to the previous version of fbstow.odf, and put in code to detect such a condition -- and die horribly. Please test assets before sending to me, thank you. [NM] - Fix for mantis #738. Turrets work again. Broken as part of changes for 71x. [NM] - Fix(?) for mantis #734 - added another sanity check. May generate battlezone.log entries like: UHOH- don't know how to set pixForm for type=# If you see lines like this please let me know. [NM] - Fix(?) for mantis #723 - tweaked optimization settings to hopefully get more callstack info for crashes like what was seen. [NM] -- b72a released===================== - Fix for mantis #743. igsnip1.odf had a bad altName parameter. Also updated code to notice this error, and whine (screen & battlezone.log) about such a condition. This is something that modders will have to fix; as the logfile message says, simply commenting out the 'altName' line is the fastest/safest solution. [NM] - Fix for mantis #740 - updated fbmtow1.odf, fbstow.odf. Two different versions in two subsequent subbuilds... [NM] - Fix for mantis #741 - craft lifespan should be working once again. Yet another thing fixed after 71x. [NM] - On a resync/player join, shouldn't kill any OGG music playing in the background. Part of bug 737; this has the side effect of jumping to the next music track. I noted the cause, and Commando asked about fixing the effect in comments. [NM] - Removed calls to timeGetTime() left in the pathing code. It was part of debug build info, but the calls were being done in all configurations. This might help framerate slightly. [NM] - Started using lightweight mutexes in code, rather than EnterCriticalSection(). The lightweight mutexes are inspired by dlmalloc.c, which I've refactored out the code to look like this: // Lightweight mutexes. Some notes on their use: // // 1) At startup, initialize *pMutex=0 // 2) These are NOT re-entrant. If you call AcquireMutex() twice // from the same thread w/o a release between, it'll deadlock. // Similarly, calling ReleaseMutex twice is a bad idea. // 3) Generally, be sane about these. // AcquireMutex will return true if it ever had to Sleep(0) to // acquire the mutex bool AcquireMutex(volatile long* pMutex) { bool slept = false; // Code borrowed from dlmalloc.c for(;;) { if(!InterlockedCompareExchange(pMutex, 1, 0)) return slept; slept = true; Sleep(0); } } void ReleaseMutex(volatile long* pMutex) { // Code borrowed from dlmalloc.c InterlockedExchange(pMutex, 0); } - Rest of mantis #737 - added mutexes to the OGG 'fill buffer' and 'kill sound' code. I believe there was a chance the two could run simultaneously, which would lead to bad things. Also added an console command, 'audio.purge', which kills all sounds (including ogg), if you want to test hammering on the ogg kill code by using ingame music. [NM] - Work on mantis 733 - switch network code over to lightweight mutexes. This could be somewhat dangerous. [NM] -- b72b released===================== - Work on mantis #551 - changed multiworld build logic to be slightly closer to it was before I optimized out a lot of expensive clock calls, while still being overall more efficient than before. [NM] -- b72b2 released===================== - Reverted most of the lightweight mutexes in the network code. It seemed to run fine on my LAN in limited testing, but died in real life. :( Still using it for IRC, chat output, as that's a trivially non-reentrant case. [NM] -- b72b3 released===================== - Turrets should deploy now, once again. [NM] -- b72b4 released===================== - Fix for mantis #748, 753. Tweaked odf/cfg files. Thanks, folks. [NM] - Tweaked fix for mantis #739. Gameprefs.ini is now asset-checked once again, even though it could possibly be excluded. Please move your customizations into localprefs.ini. Thank you. (This is somewhat of a way to make sure localprefs.ini gets tested :P ) [NM] - Fix for mantis #749 - in bzgame_weapon.cfg, added space for a 4th digit of ammo; used to have space for 3 digits. In code, if the # of shots remaining is > 9999, it shows as 9999. A 5th digit would go under the blue ammo bars, so this seems like the least bad fix. (The 4th digit is already getting close to clipping, I think.) If you have over 9999 shots, I think there might be some balance issues, and it'd take *forever* to exhaust ammo. [NM] - Possible fix for mantis #751 - reloads some more textures when launching a mission. [NM] - Fix for mantis #391 - made SatchelPackClass ordnance show the # of shots. Note: because it deploys a GameObject, not true ordnance, it assumes that it has ammoCost == 1. That's somewhat arbitrary, but it's better than reading invalid memory like it used to. [NM] - Ordnance sound efx (from [OrdnanceClass]::shotSound = "blah.wav") is now updated every simulation frame. This allows sfx that was lost or never played due to distance to [re]start when acceptable. All ordnance, including bullets, missiles, etc support this. [NM] - More work on mantis #7 (AI Warp in MW). Path.cpp's SkipPoints() function would modify things differently in lockstep vs visual worlds. Made it more consistent. [NM] -- b72c released===================== - Fixed bug (mantis 755) that could cause 'buffer to small' errors, especially in MP. [NM] -- b72c2 released===================== - More work on mantis #7 (AI warp in MW) and pathing. Fixed another issue. I've spent a LOT of time on this, and am getting closer to saying "ship it," as the bugs I've found are significant enough to cause some serious warpage. [NM] - Added GamePrefs.ini|LocalPrefs.ini::MaxColorFade . See comments above it. Also made it properly multiworld aware -- it was accepting contributions from all worlds, when that's just going to stack up too far. [NM] - More work on mantis #551 - did a lot more looking, before noticing that my work a few subbuilds ago almost did the right thing. Changed 2-3 lines, and all seems reasonable to me. Also updated the histogram to show more info. [NM] -- b72c3 released===================== - Fix for mantis #756 - clamped variable to sane ranges. [NM] - Fix for mantis #772 - clamped variables read from .cfg to sane ranges, in order to avoid crashes. (Security code is jumping on sword to prevent serious issues; want to keep this under wraps.) [NM] - Fix for mantis #778 - full build installer tweaks: - Should rename off the 'saved' and 'logs' folders under $(MYDOCUMENTS)/My Games/Battlezone II if the version doesn't match. - Should also always create those folders, too. bzone.exe/bz2.exe changes: - Tweaked the code that creates the My Games/Battlezone II folder to use SHCreateDirectoryEx() instead, which is simpler/cleaner code. It'll complain to the battlezone.log file if it can't create it. - Check to see if they can write a logfile in the current directory on startup. If it can't (limited user acct on XP? running from a CD?), it switches to using MyDocs. [NM] - Added [ExplosionClass] StartUpright = false // if true, then initial matrix only uses passed-in position. false: use passed-in rotation & position. [NM] - Fix for mantis #765. Added, to all particle render base classes, such as xcarxpl.odf, under [Flame1] StartDelay = 0.0 // in seconds, should allow for a delay on starting particles. Values specified that are less than 0 are clamped to 0. This should work for any particle classes that count down to 0 to start things -- I'm not full sure if all do, but draw_emit and draw_twirl_trail both seem to do that. Also, note that for particles with a lifespan, the startDelay doesn't extend the lifespan -- e.g. a particle with startDelay=5 and lifespan=3 will be killed off two seconds before the startDelay is finished. [NM] - Fix for mantis #766 (crash in GroupPanel::SelectGroup) [NM] - Added GamePrefs.ini::SPPreferFPS . See comments above it for info. Might help with mantis #007, not sure. [NM] - More work on mantis #007 - all gaussian random #s used by AI are now calculated in sync, based on a 'complicated' formula involving the world turn and the craft's unique identifier. Also, made AIP code that detects out-of-ammo craft not do anything when MW is on -- this was causing lockstep vs visual world differences; mbikes were the most prone to this, as they've got a combination of (1) high velocity and (2) low shot count. [NM] -- b72d released===================== - Found some console messages about bad assets that weren't showing up properly. Fixed. [NM] - Tweaked fix for mantis #765. Above change was only to particle *render* classes. Now added it to particle *simulate* classes as well, such as xtherma.odf's [core] StartDelay = 1.0 Seems to work in limited testing. [NM] - Tweaked the histogram display code to show negative values for late as 0. Should reduce confusion. [NM] -- b72d2 released===================== - Asset tweaks from mantis 767, 771, 773, 787. Also posted a 'wheretoputassets.7z', which lists the proper hierarchies for files that live under data and addon, so that future asset submissions can go smoother from my standpoint. [NM] -- b72e released===================== - A bit more work on mantis #7; probably the last I'll do simply because I feel like I've spent hours on it with diminishing returns. Perfection in MW just ain't possible given how complicated things are, folks. Found one largish source of MW pops in the AI code, where it was trying to get the group's "target." It could do so by looking at all 'siblings' tagged as in that group, and use the first one with a target. Problem: in MW, units that are far away get optimized out of visual worlds. Changed things somewhat so that when a unit is assigned a target, it's stored for that group in one consistent place. However, this is NOT guaranteed to be consistent, because if the target is optimized out of the visual world, then it'll be as if that group has no target. This fix will work better in some cases, and shouldn't be any much worse. Old savegames with group targets won't be read identically anymore. There's a small chance that I botched something and there'll be a lot more resyncs, hopefully that won't happen. [NM] -- b72e2 released===================== - Some slight optimizations and crash fixes to GetNearest*() DLL callbacks. [NM] - Some tweaks to D3D startup issue seen by OvermindDL1. It won't give any messages about 'no meory available' during the first pass at enumerating DirectX/Direct3D devices. Also made it more explicit as to complaints about no devices in battlezone.log. I doubt this'll fix anything, but hopefully give me more clues. [NM] - Fix for mantis #769. Added [MachineGunClass] OneSoundPerShot = false // If true, will spam sound channels (NOTE: REPLACED by [MachineGunClass]::soundPerShot, see below) I'm iffy as to whether there's going to be any constructive results to setting this to true, but then again, I don't install most mods. [NM] - Fix for mantis #745 - another fix for lifespan broken as part of 71x. [NM] - Change to cannon shot sounds -- shouldn't trigger in non-active worlds. [NM] - Added GamePrefs.ini|LocalPrefs.ini::MapClusterCacheCount and MaxFramerate tuning values . See comments above them for details. [NM] -- b72f released===================== - Fix for mantis #813 - added another file to asset checks. [NM] - Fix for mantis #764 - ogg sounds should be played at their default rate as specified in the .ogg file. I never could repro this bug on my system here, but just put in an extra "force buffer rate" call on creating buffers. [NM] - Added GamePrefs.ini|LocalPrefs.ini::AggressiveCatchupWhenLate. See comments above it for details. Also added another line of text to the histogram. This may help w/ mantis 551, either fixing it or giving me more info. [NM] -- b72f2 released===================== - Fix for mantis 759. Added [GameObjectClass] teamlimitClass1 = "" // e.g. "ibrecy", *NO* ".odf" on item teamlimitClass1Count = 0 teamlimitClass1Text = "" Basically, these should act like another 32 limitClass items, but they check all allied units, too. I did a cut & paste on this code, so there's a chance I botched it somewhere. [NM] - Fix for mantis #818. Added these classes to return values possible in DLL callbacks: CLASS_EXPLOSION (Not sure if DLLs could ever see one of these) CLASS_BOID CLASS_BEAM CLASS_BOUNCEBOMB [NM] - Possible fix for mantis #782 - arccannon at higher TPSs. Just taking a stab here, not 100% sure. [NM] - Fix for mantis 762. Found some unintialized varbs in DR2 interface code. Not sure why it usually tended to work; preinitializing them to 0 seems to make it all happy. [NM] -- b72f3 released===================== - In GamePrefs|LocalPrefs, allowed MaxFramerate value to have a minimum value of 30. Also split up the SleepInGame* values to be split between 'slow' and 'fast' values, with some tweaked defaults. Please don't override these defaults in localprefs until you've had a chance to test these. Also, please don't set the SleepInGame*_Amount to a value greater than 1, as comments indicate. [NM] - Added a 'low' framerate to the ingame framerate display. This is arguably the more critical value, as the display in the screen only shows the average of the last 8 frames. With GamePrefs|LocalPrefs's MaxFramerate set to -1, my laptop averages 435+ fps, but a low around 10. (And, most of that long time is in the middle of the graphics driver deciding that it REALLY needs some quality time with the CPU. It's not BZ2.) But, with MaxFramerate = 120, the average drops, but the minimum doubles to at least 22. And, that feels far smoother when turning. Low MWF values may also pull the minimum down; this should give people more info about what's going on. Basically, it's better to pull down the peak/average fps if that helps the minimum fps. I'd suggest trying some alternate values in localprefs: setting MaxFramerate = -1, and setting all 4 of the SleepInGames* values to 1. This may help when framerates drop under MaxFramerate value. I don't have time to test that now. [NM] - Possible fix for mantis #826. Turned off team limit checks when transferring units to an ally under the assumption that it would have to have passed sometime before. [NM] - Possible fix for mantis #827. Undoing an object placement in the editor won't do anything if that's the user object. [NM] - Fix for mantis #836. Items with [GameObjectClass]::limitClass1 or [GameObjectClass]::TeamLimitClass1 values > 0 are tracked as important for multiworld and kept in visual worlds. Note - I only check the first limit slots of each type for speed; please don't skip that value. [NM] - Some work on mantis #829. Tweaked optimizations to give me more info if that crash happens again. [NM] - Work on mantis #837 - added in a lot of checks to the code executed in that crash. If it detects anything amiss, it'll complain to the logfile, and exit asap. This is the kind of bug that needs to be detected and not left for later. [NM] - Possible fix for mantis #838 - if an ordnance's particle effect is missing/lost, it'll attempt to recreate it. This isn't going to be a perfect solution, but it seems to work in limited testing. [NM] - Fix for mantis #830. Blue ammo bar is updated correctly when using localAmmo only weapons. [NM] - Fix for mantis #831. Added [WeaponClass] ShowShotsRemaining = true // true = default. False: don't show shots left on a per-weapon basis Note: multiple weapons may be mapped to one of the groups, making this harder to work as 'expected.' In the save sent on for this bug, the user's craft has both a gslammcann_c.odf *and* a gchain_c.odf in the first onscreen slot. Right now, I've coded it so that if any weapon in an onscreen slot has ShowShotsRemaining = false, then the number doesn't show up for the group. [NM] - Fix for mantis #834 - generalized check for whether service trucks could service an item. This is used to skip servicing targets it can't supply (when autodetermining), and as a filter on the F# -> 3 service list, allowing it to not show targets it couldn't handle. Note: for speed, it only uses the first selected (hover) service truck's parameters in the filtering; a mixed group of trucks with differing capabilities may be filtered out. [NM] -- b72g released===================== - Work on mantis 271. For all particle *SIMULATE* items, added the ability to specify a sound effect that'll play. This is particle chunks with simulateBase = one of { "sim_chunk", "sim_dust", "sim_ember", "sim_null", "sim_smoke", or "sim_spray" }. Basically, in the ODF section with the simulateBase entry, add a line like this: [e1] simulateBase = "sim_smoke" // Or one of the others above SimulateSoundEffect = "" // blank is no sound; otherwise, something like "blah.wav" Compiles, but is pretty much untested. This has the possibility of flooding the sound system with a few too many requests. Use sparingly. [NM] - Further tweak for mantis #830. Blue quarter-circle of ammo display is force-updated any time the user's weapon(s) change. [NM] -- b72g2 released===================== - Fix for mantis #825. Folded in latest rev (#9) of the GreenHeart variant Update. [NM] - Fix for mantis #845. Added [SupplyDepotClass] // Individual classification tweakers serviceSTs = 1 serviceCraft = 1 serviceBuildings = 0 servicePilots = 0 serviceOther = 0 Also unified the code to check this into a common function used by STs, hover STs, and supply depots. [NM] - Fix for mantis #847 - if a client decides to quit due to excessive lag, it'll send a chat message to all about that. In case that codepath isn't executed, there's a catchall message also sent in the TellAllGoodbye function. This might help give info as to why players leave. [NM] - Fix for mantis #848. Added [BomberClass] AiCommandToBomb = 3 // == CMD_GO AddPilotToBomb = false // may need to be true to make bomb have an AiProcess Valid values for the AI command parameter are given from this list of enumerations in the code. Parameters outside of the valid range are treated as CMD_GO. Note: not all game objects/AI processes support all commands. Feature requests to make a command 'work' will probably be shot down. CMD_NONE, // == 0 CMD_SELECT, // == 1 CMD_STOP, // == 2 CMD_GO, // == 3 CMD_ATTACK, // == 4 CMD_FOLLOW, // ... you do the math. Values increase by 1 per line CMD_FORMATION, CMD_PICKUP, CMD_DROPOFF, CMD_UNDEPLOY, CMD_DEPLOY, CMD_NO_DEPLOY, CMD_GET_REPAIR, CMD_GET_RELOAD, CMD_GET_WEAPON, CMD_GET_CAMERA, CMD_GET_BOMB, CMD_DEFEND, CMD_RESCUE, CMD_RECYCLE, CMD_SCAVENGE, CMD_HUNT, CMD_BUILD, CMD_PATROL, CMD_STAGE, CMD_SEND, CMD_GET_IN, CMD_LAY_MINES, CMD_LOOK_AT, CMD_SERVICE, CMD_UPGRADE, CMD_DEMOLISH, CMD_POWER, CMD_BACK, CMD_DONE, CMD_CANCEL, CMD_SET_GROUP, CMD_SET_TEAM, CMD_SEND_GROUP, CMD_TARGET, CMD_INSPECT, CMD_SWITCHTEAM, CMD_INTERFACE, CMD_LOGOFF, CMD_AUTOPILOT, CMD_MESSAGE, CMD_CLOSE, CMD_MORPH_SETDEPLOYED, // For morphtanks CMD_MORPH_SETUNDEPLOYED, // For morphtanks CMD_MORPH_UNLOCK, // For morphtanks CMD_BAILOUT, CMD_BUILD_ROTATE, // Update building rotations by 90 degrees. CMD_CMDPANEL_SELECT, CMD_CMDPANEL_DESELECT, [NM] - Tweaked the ComputeFar() check to try harder to keep working if there's no camera owner. [NM] - Fix for mantis #846. Added [JetPackClass] ForwardThrust = 0.0 This is a velocity add applied to the 'front' vector. Compiles, but is untested. If it doesn't work as expected, I may not do any more work on this. [NM] - Possible fix for mantis #833. (Sidenote: I do *NOT* get this current fascination w/ local ammo. Please work on stock assets instead.) [CraftClass] ScanLocalAmmo = false If this is true, every call to GetAmmoRatio() will do a more expensive check on all selected weapons. If all selected weapons use local ammo, it'll return the ratio of the last selected weapon. (It may well be possible to have multiple weapons, each of which has different local ammo supplies, and therefore ratios... do you see why this is NOT anything approaching a clean or fast solution?). If this fix doesn't work, I'm likely to just revert it. Please work on testing stock assets. [NM] -- b72h released===================== - Fix for crash seen in NetManager::TellAllGoodbye() introduced last build. [NM] -- b72h2 released===================== - Updated error message in FileSrcPack::ReadData() to not put bogus data into the battlezone.log file when it complains before dying; vastly expanded the message it reports. This error message has typically been encountered when running BZ2 on vista while not running as admin. If you're still having issues in such a case, please report the last few lines of the battlezone.log file (especially lines before the error and callstack). [NM] -- b72h3 released============================ - Work on mantis #835. Possibly made scavs w/ doDrop = true work once again. Don't have a good save, so can't be 100% sure. [NM] - Fixed bug where battlezone.log wasn't being properly opened. My bad. Also tweaked hints to Windows so that .pak files are flagged as random access as a hint to optimize file caching. This might help things, not sure. [NM] - Fix for mantis #855, 861. Added in latest rev of GH variant updates, Surprise map tweaks respectively. [NM] - Fix for mantis #860. Root cause: fix for mantis #833 above, adding in the 'ScanLocalAmmo' flag. Once again, not seeing the fascination with localammo. [NM] - Fix for issue noted in comments on mantis #828. Added [AirCraftClass] AltitudeLookahead = 2.0 // Parallels BomberClass::AltitudeLookahead. This setting is used by the AI when flying, only. Looks ahead the certain # of seconds, and takes the maximum ground height of the samples as the "current" ground height. Code used to use a value of 0.0, effectively. Also, clamped both AltitudeLookahead values to the 0 .. 10.0 range -- values outside of that are clamped to the closer endpoint. [NM] - Fix for mantis #828. Added [CraftClass] AircraftAttackMustDeploy = false // == true for any Aircraft If this is true, and if the AirCraftAttack code is used (I believe that's used if aiName = "AirCraftFriend" and aiName2 = "AirCraftEnemy"), and if the craft has an attack order while it's sitting on the ground, it'll request a deploy (take off). This check is done before the weapon range checks. [NM] - Made options code save current pilot's file even more often, and also write to the UserPrefs file in the save directory on every change. (Userprefs is what's read in before you log in at the first screen.) Might help with some reports of preferences not being fully saved. [NM] -- b72i released===================== - Fix for mantis #337. Added [CraftClass] SitAttackCheckAbleToHit = false // == true for all tracked vehicles If this value is true, then when SitAttack decides that it might want to consider going from WAIT to ATTACK (i.e. timeout or was hit by enemy fire), it does an AbleToHit() check. If it can't, it stays in WAIT state. This makes rocket tanks respect HOLD more, as they'll stay still if they don't have line of sight or the like. [NM] - More on mantis #859 -- even more logging to battlezone.log for the first 64 calls to CreateFile() -- successfully or not. (Basically, enough to get an idea as to what it's doing, but not so much as to kill performance ingame.) Anyone running these builds on Vista w/o administrator, please send on the *entire* battlezone.log file after a crash. Thanks. [NM] - Fix for mantis #852. Found some variables not saved across multiworld boundaries. Might be bulking up saves a bit unnecessarily-- lots of Craft-derived items already saved this state, but some didn't. My fix will double-save it for the ones that already did the right thing, but I'd rather burn the memory than try and track down all possible codepaths that did the same thing. [NM] - Fix(?) for mantis #863. FactoryPanel does a lot more checks on items present in the Xweapon.odf it's reading in. Should complain about errors, quite possibly also recover from them. This is the sort of thing modders should make sure work before releasing, though. [NM] -- b72j released===================== - Objectives window works once again. My bad. (Broken in 71x) [NM] - Fix for mantis #774 - added in some rude hacks to isdf03 script to make it progress more. [NM] - Fix for mantis #874 - service bay tweaks. Also, in code, changed the default for this parameter: [SupplyDepotClass] ServiceBuildings = false so that mods should also work as expected. [NM] - More work on mantis #859 - added a (long-overdue) version resource to the exe. Also added a manifest, as suggested by http://msdn2.microsoft.com/en-us/library/bb756929.aspx . Right now, it runs BZ2 w/ the same flags as the user. I can up it to always request running as admin, but that's a rude hack. If I could get some logs from testers (and it'd probably be a dozen logs and builds), maybe these hacks could be avoided. [NM] - Work on mantis #730 (internally generated bug). Checks a lot more items at asset load time. Seems to work not generate any false positives when joining between my laptop and main box. But, there's a chance this might generate some false positives. [NM] - ODF opening/closing/querying functions in ScriptUtils.h now all take const char*, not char*. This will probably mean that all 3rd party DLLs using these functions will need to be rebuilt. This will probably inconvenience 2-3 people, tops, as these are all post-pb3. If I haven't posted a new DLL source w/ 72k, bug me. [NM] - Work on mantis #703 (self-generated feature request). Added in a new feature: deletion of most of the addon/*list*.txt files, and replaced them with autoregistering Recyclers, AIPs, Animals, and STCTF Goals. This should let modders work on various things, and not have to worry about stepping on each others toes in the *list*.txt files. Now, BZ2 will scan each AddDirRecurse() folder (from the bzone.cfg, or local override), looking for a folder named 'autoreg' under that, and *.autoreg files in there. Each .autoreg file is essentially an ODF file, with structure as follows: [RecyclerList] or [RecyclerListFFA] or [RecyclerListMPI] or [AIPList] or [AnimalList] or [STCTFGoalList] or [IAHumanRecyclerList] or [IACPURecyclerList] or [IAAIPList] ODFName = "ivrecytb" // Config of file, must *NOT* end with .odf Description = "Strat/MPI: No Empty Scouts" // What's shown to the user A single .autoreg file can have as many of the chunks listed above as desired; each specific chunk can only appear once within a file. (If you want more than one item with the same specific chunk header, then you'll need one .autoreg file for each type). I've generated a few of the .autoreg files from the existing list files, but haven't completely finished the job. (There's a *lot* of MPI recy variants.) If map .inf files point to an existing .txt file, then that file is used. But, if the .txt file is missing or blank, then it'll autoscan for things. For private build testers, you'll still have the .txt files until the next full build is released. If you want to help create the rest of the .autoreg files, I'd recommend renaming the existing .txt files to help force it to use the autoreg files. I'd like to put out a new full build soonish, as soon as the autoreg files are finished. Tested minimally. Will probably induce some bugs in the short term, but I think the end result will be worth it. [NM] - Tweaked 1.3 full build installer: - VS2005 redist files are now triggered a different way that should make their install more obvious and reliable. - Added version resource, paralleling game exe - Added manifest for vista, requiring administrator access. Should see this next full build. [NM] -- b72k released===================== - Defaulted [SupplyDepotClass]::ServiceSTs = false. Also changed documentation above for 72h to show the current, set of defaults in the code. Basically, only craft & STs are supplied by default. [NM] - Possible fix for mantis #849. Added support code, and a new entry in bzinput_common.cfg: BindDiscrete("link", "K"); (I think that key's unused). This should keep lights on the L key, and linking on the K key. Do test, especially in MP, to see if I've introduced any sync errors. I think I've been careful, but it was an area affected. [NM] - Possible fix for mantis #130. Added, to AIP files [Start] IdleAllCraft = true If this is true, then when this plan is switched to, all craft on the specified team should be idled. This should enable that AIP to better control them, or find (now) idle units. The code used to effectively default this setting to false (by not doing anything). Compiles, untested. [NM] - Fix for mantis #870. Added [PoweredBuildingClass] AutoBuildTap1 .. AutoBuildTap8 = true If true (default), the tap object will be created when the building is. If false, the tap object won't be created. Compiles, but is untested. If there are problems, I may put this item back on the 'Not for PB4' pile. [NM] - Some fixes for creature sounds. Was looking for the painSound under the wrong section; moved it to [LandCreature] painSound1 .. painSound6 = "" All the rest of the parameters should be as documented in the b64w docs (ChangeLog_pb2.txt). [NM] -- b72L released===================== - Fixed asset check so that it doesn't produce false positives. (Reminder, please put all bugs in mantis, even if you think they're so serious I would have read about it on the forums... helps me keep track of things.) [NM] - Folded in new assets from mantis #879. [NM] -- b72m released===================== - Added in __restrict keyword to any pointers passed into the top 20 or so functions as identified by the profiler. This is a hint to the compiler that modifying one pointer won't have side effects in reading another pointer. This might be a slight performance optimization, or it might cause some graphical glitches onscreen. [Unsurprisingly, virtually all of the top 20 functions, and definitely all the functions I modified are in the graphics system.] Do keep an eye out for any such problems. [NM] - Fix for mantis #882. Added in a input bindings version field to the prefs/pilots file. If this version doesn't match the code version, it should drop back to the default bindings. This should fix things. Also made sure that the texture size defaults to large. Best way to test this is to have a 1.2 and/or 1.3pb3 install, to another directory. Copy the 'Userprefs' file (same dir as bzone.exe) and the pilots folder from the 1.2/1.3pb3 folder to the private build folder. Then, launch the new private build, and ensure that (1) bindings work, and (2) texture size is set to large, regardless of what it was in 1.2/1.3pb3. [NM] - Some work on mantis #881. Made [LandCreature]::crushSound = "" more likely to play -- should play when it collides with something. The [LandCreature]::eatSound has never been used. The curiousSound* items are, and have always been, played when attacking something. Most of these sounds will play only if there's no sound currently playing on a creature. Also did a little revisionist history in ChangeLog_pb2.txt (just before b64w's release) to remove the eatSound entry, and add in a little more clear. [NM] - Tweaked mantis #880. [PoweredBuildingClass]::AutoBuildTap1..AutoBuildTap8 should default to true as advertised. Also noticed a few items under [CraftClass] had the same bug - not reading parent's defaults. [NM] - Work on mantis #739. Squelched some "error" messages from the battlezone.log file. They were handled correctly, so they're not an error. [NM] - Marking mantis #664 as fixed. Cannot repro on my LAN here. Nobody's provided a counterexample. [NM] ---- 1.3 beta 73 released======= - Noticed Max showing up in the top-20 list of functions. Made it an inline function instead, with variants for each of the general variable types. This seems to have forced things to go inline now, which might provide a *slight* speed boost. [NM] - Used __restrict in a few more places, once again in the graphics code. Once again, I'd be surprised if this has a noticeable affect on framerate, but it (1) takes me almost zero time to do this, (2) trivial to revert if it causes issues, (3) makes me feel better about feeding the compiler useful info. [NM] - Fix for mantis #880. Several places in the code would not allow power-producing objects to be built if the team was missing more power than the object being built. Now, objects that have a cost <= 0 (i.e. free or power-producing) will always pass the power part of the 'can I build this?' checks. Ditto for scrap checks; power & scrap limit checks were usually side by side and did parallel checks. [NM] - Added ScriptUtils.h, another variant of GetNearestEnemy() that lets DLL authors request some filters, also GetNearestPowerup() & GetNearestPerson() requests. Also, I don't think the audio functions added recently were being properly exported -- I don't think anyone ever spoke up about that, and definitely not on mantis (where I want bug reports, anyhow). New DLL source should be posted along with this; bug me if it's not. If there are other flags or versions of GetNearest* that you'd like to see, please speak up. [NM] - Fix(?) for mantis #878. [I think -- savegame doesn't load locally.] Made IA, MPI DLLs use just-added functions to ignore pilots, scavs when checking for sieges. Also made DM DLL use the GetNearestPowerup() & GetNearestPerson() for the bot code. Also, some minor refactoring of code, mainly renaming variables. [NM] -- b73a released===================== - Partial fix for mantis #886. Consolidation of autoreg files won't be done. But, I did add code to alphabetize the output list by the description text. Note - this should be like the map list, which is filled in by a ton of individual files, from multiple input directories. That's been my whole point in adding these autoreg files. Also, fixed mantis #885 - FFA & MPI recylists should be properly handled, if the map's .inf requests that. [NM] - Potential, partial, fix for mantis #878. This is due to an item added for b64c (see changelog_pb2.txt). That fix (1.5 years ago), prevented the CPU from switching to the a/l/s plans if it didn't have a commbunker built. The logic behind that was users could wedge AIPs if they got too close to the cpu recycler early in the game; the 's' plans didn't (especially back then) necessarily build back up a base. If the user got close to the enemy, destroyed any/all commbunkers, then wandered off, the request to move off from the S plan would be ignored. Now, switching to a/l/s plans is allowed if the last plan was an a/l/s plan, or the CPU team has commbunkers. Also, the DLL will keep trying to switch off the S plan when appropriate, until it succeeds. So, if the S .aip eventually builds a commbunker, this should succeed. Old IA saves invalidated. [NM] - Fix for mantis #883. Root cause: custom bzgame_stats.cfg that wasn't updated for 1.3. Made the game whine to console & battlezone.log about that, and crash less. (Hopefully not at all, but hard to tell.) Once again -- I reserve the right to make changes to the game's UI at any point. Please try and keep up. [NM] -- b73b released============================ - Added in some hard limit checks on # of verts/indices tried to be manipulated at once. Done to try and look into mantis #887, which looks like a memmory trashing crash. Random crashes in dlfree() are almost always a sign that someone (else?) trashed memory in a drive-by attack. The code that died is usually just a victim, not the cause. [NM] - Removed _STATIC_CPPLIB from preprocessor definitions in all BZ2 project files. This was a semi-hack put in to make sure that the various C++ classes (especially std::string) use our internal memory allocator, not raw malloc/free. As nice as this is to me, I've realized that it's going to be nearly impossible to get this to play nicely with memory allocated by DLLs - especially if I try and pass std::string or std::vector across the DLL boundary. As a bonus, this might decrease the download size slightly. [NM] - Quitting should work once again. Ooops. [NM] - Fix for mantis #889. New bzescape_input.cfg that supports binding the link key. [NM] - Fix for mantis #888. Added in a pair of SetCommand() callbacks from DLLs, allowing more or less unfettered access to the AI processes of AI craft. This could be used for great good, and could probably open up LARGE cans of worms in the meantime. Not all of the commands listed are supported in any way or form. Bug requests to make things work will probably be filed in the 'Not for PB #17' bin. (And, I'm sure hoping to finish with BZ2 well before then.) Most of the useful AI commands already had a callback; for example Service(me, him, priority) is essentially the same as SetCommand(me, 29, priority, him); Compiles, but is pretty much untested. RD is lucky I'm feeling generous (and that these changes were about a dozen lines of code) [NM] -- b73c released============================ - Wrote a bunch of code to cull the lights from the non-active multiworld, but had to disable 95% of it. Done initially because I noticed that the 'figure out which lights apply to this area' was by far the #1 function when playing pyramid.bzn under the profiler. (Probably due to all of the powerups, which now have their own lights.) Running down a *large* list (well, bintree) lots of times each frame makes even my nice fast CPU hurt. It's got to hurt more on slow boxes -- it's got to slog thru that list even when lights are set to one/off. Only way around that is to put /nolights on the commandline -- watch how much of a framerate boost that gives you to pyramid.bzn in multiworld.) However, culling lights from some worlds makes multiworld crash in not fun ways. So, I disabled everything but the refactoring of light init/cleanup. A better fix for all this would be to switch to quadtrees or some other data structure that allows really efficient spatial tests. However, I don't feel like doing massive overhauls of the graphics code. [NM] - Added [CraftClass] CanInteractWithTerminal = false // default = true for all pilots/persons. If this value is true, then the local user's object will be allowed to interact w/ terminals. [NM] - Fix for mantis #890 - PlanarRender could submit too many indices, which would trash memory. (It'd previously allow this, w/o noticing or complaining.) Made PlanarRender do a sanity check on how many verts/indices it'll use before it submits an object. If it would trash memory, it'll skip that item entirely, and whine to the console. Best way to fix this: make it apply to fewer terrain cells. [NM] -- b73d released============================ - Finally got the light code working more as I'd like. It still has to create lights in all worlds. But, instead of one monolithic binary tree of all lights, it has two lists, one of 'enabled' lights (present & switched on), and one of 'disabled' (present, but switched off). So, if the lighting flags are set to anything other than 'All', then it has a MUCH shorter list to run thru. This makes the 'figure out which lights apply to this area' function almost disappear completely from the profiler's list. This should increase performance on all maps whenever lights are not set to 'all'. Do test, in case I broke something. [NM] -- b73d2 released============================ - Fix(?) for mantis #896. Lights should be enabled by default once again, which should make terrain look like 73c/d with lights set to one or more. Did further optimizations to code -- added a third list, "wrong world" list, which should help filter out lights created in a world not being visually shown. I think this may help (slightly) w/ multiworld performance when lights are set to 'all', as I have a feeling that the lockstep world's lights were being considered and used. [NM] -- b73d3 released============================ - Work on mantis #902, maybe also #906. Headlights should disappear when no headlights is selected, toggleable with L key, etc. My bad. [NM] - Work on mantis #901. Added a whole bunch more logging to the enumeration of DirectX devices, drivers, modes, etc. Hopefully this will give me some clues as to what's up on OM's box. [NM] - Fix(?) for mantis #899. Made icon_.tga the default texture for unit icons, if not found in the ODF. (Previously, there was some inheritance checks that I didn't understand, but that only took effect when the odf didn't have the line specified.) Also, teampanel was checking for the .tga exactly, not allowing the .dxtbz2 to be found. Tested on hilo on my lan by setting the first 4 lines of stratstarting.txt to 'ivhmisl' or 'ipserv' in the supplied assets. If this is still doesn't work, try not depending on inheritance and setting things up fully manually, e.g.: [GameObjectClass]::unitIcon = "icon_blah.dxtbz2" [NM] - Possible fix for mantis #868. When restoring a pilot's weapons as they hop out, replaced the code to be as if they just picked up weapon powerups containing the specified weapons. This seems more reliable than the old weapon restore code, which seems to have gotten hung up on the new linking, cycling, etc code. This may have side effects; do test lots of entering and leaving craft with various pilot weapon configs. [NM] - Fix for mantis #904 - updated bzgame_command_1280x1024.cfg, bzgame_group_1280x1024.cfg. [NM] - Fix for mantis #897, #35 (dupe bug). Added to IA map .inf files, [DESCRIPTION] AIPListFile = "" HumanRecyListFile = "" CPURecyListFile = "" If each of the specified entries is not found, blank, or points to a file that doesn't exist, it'll use the autoreg files like before. Otherwise, it'll read in the file, and use that for later. Modders can still use [DESCRIPTION]::options_instant_string1 and [DESCRIPTION]::options_instant_string2 to set the initial defaults for the human & cpu recyclers, respectively. Also updated the list filling code to do file checks, so that if, for example, the entry has the ODFName = "ivrecy_myspecialmod", and the CPU's race is "w", if "wvrecy_myspecialmod.odf" doesn't exist, that entry's not shown in the list. Note, however, that this check is done *only* when filling that list, i.e. going to the IA/ST/MPI extra options screens. It's up to the modders to make sure the initial defaults are sane. [NM] -- b73e released============================ - Changed optimizations for the lowest-level function seen in mantis #907. I can't tell what's going wrong while staring at the disassembly. This function's called *all* *the* *time* (basically, "what is the terrain's height here?"), so if there was a serious issue, I think it would have been seen already. [NM] - Possible fix for mantis #892. Tweaked OffensiveProcess::ChooseAttackTarget to use the previously-ordered target, if set & still valid. Seems to make a savegame work "as expected"(?). Basically, the target in that savegame has so much clutter around it that 40+ units sent to attack it will spend plenty of time trying to find a place to fire from. Checks added to the code verify that all of the 'AbleToHit' checks from my units are targeting the recycler. They do seem to succeed in taking out that target. Also tweaked some code changed in 71x to be more like it was before the changeover. [NM] - Bonus feature -- time for some more constants to be less hardwired. For all maps, in their .trn file: [World] Gravity = 12.5 // default. Reduce for less gravity, etc Compiles, only minimal testing. [NM] -- b73f released============================ - Fix for mantis #908. Fix for #892 used the existing target as who to attack. Changed that to 'existing target, if they're an enemy'. Otherwise, it uses the existing code. Compiles, but is pretty much untested. [NM] - Feature add. In MP map .inf files, for all ivars except for #4 and 6 (bitfields), and 63 (launch flag), added: [NetVars] ivar0Min .. ivar62Min = 0 ivar0Max .. ivar62Max = 9999999 Note: you must specify both the min & max entries for it to be used. Trying to set ranges from .cfg files isn't going to work because I override things in code. #9, 25 (strat only), 26, and 27 may still be overridden by code. [NM] - Feature add - DLL ability to change gravity at will. This is the same as the .trn file's gravity setting, and affects everything. So, no Super Mario Galaxy cylindrical planets for you. New DLL source should be posted w/ this build, bug me if not. [NM] - Added a meaning for ivar30 in the default maps. In DM, this is the gravity setting, default value = 25. Tweaks to extra options pages to allow this to be edited before the game w/ a slider. DM extra options pages updated; the other DM-related pages will need this work also done to them. Any volunteers? Thanks. [NM] - Reduced optimizations (i.e. enabled callstack frames) for all Simulate() functions. This should help get more info in the callstack on crashes seen in mantis #911. The editor exe should always have these optimizations disabled, so if you can get a crash, it'll usually help me more if you crash it under the editor. [NM] - Better fix for mantis #911. Checks whether GameObjectClasses, OrdnanceClasses, and WeaponClasses are loaded properly in ODFs. If you refer to a type other than what it's expecting, it'll whine to the console at load time. Also, for targetingguns, it does a secondary check to see that it refers to ordnance, and prints a message explaining that pb4 requires classLabel = "leader" for ordnance, not "targeting". [NM] - Better fix for mantis #868, 909. Doesn't completely destroy and re-give weapons to pilots when hopping out. Just re-gives them their weapons. This fix seems to make the saves for both bugs happier. The problem(?) with the assets/save on 909 is that the weapons seem to be of the wrong hardpoint type -- when trying to give them their weapons, it won't give a 'CANN' weapon to a 'HAND' hardpoint. [NM] - Fix for mantis #912. Lights weren't toggleable for anything with linkable weapons. Seems to have been part of the previous binding of both lights & link to the same key, and making sure that only one function happened. Fixed. [NM] -- b73g released============================ - Move DM's gravity slider to ivar31. ivar30 was used for linking, but wasn't documented in vars.txt. Updated that also. [NM] -- b73g2 released============================ - Possible fix for mantis #927. Added sanity checking to a bunch of calls, including SetControls(), EjectPilot(), HopOut(), KillPilot(), RemovePilotAI(), HoppedOutOf(), IsDeployed(), Deploy(), SetAvoidType(), ClearThrust(). These all now check that they're passed a craft before working on that. Also made SetSkill() clamp the passed-in skill value to 0..3, which is all we store anyhow. I'd prefer to reject invalid values outright, but that may have bigger side effects. Looking at the code, SetSkill() can be safely called on anything that's a GameObject, including buildings, etc, but it's used mainly by craft. [NM] - Fix for mantis #931. Squelched 'Uhoh' message in logs. It was debugging code left in for some other items, and not relevant anymore. Better to shut it up than answer questions about it forever. [NM] - Fix for mantis #936. When alt-tabbed, BZ2 should use less CPU. Not zero. Just less than 100%. Hopefully less than 25%. [NM] - Fix for mantis #945. Tweaked bzeditor_fog.cfg, bzeditor_init.cfg from GreenHeart. (Included in editor build distributions only until next full build.) [NM] - Fix for mantis #937. BoltRenderClass changed to avoid adding too many segments that would cause a buffer overflow. It will whine to the log file (once per run) with the offending effect. [NM] - Fix for mantis #943. Added [GameObjectClass] AlwaysShowAmmo = false // if true, SelectionDisplay will show this for enemies. false = allies only [NM] - Fix for mantis #928. Added, to AIP attacker plans [Plan##] ForceStagePoint = -1 // -1 => random. Otherwise, stagepoint # ForceStagePoint = 1 should use 'stage1', ForceStagePoint = 2 should use 'stage2'. Note: valid values are -1 or 1..32, with values outside that range treated as -1. Also, if you specify a stagepoint that is too high for the list of points on the map, it'll also treat it as -1 (random). [NM] - Added linker commandline option '/pdbpath:none' . This should reduce the looking in directories that almost certainly don't exist on your boxes. 3rd party and most mission DLLs will probably wait until the next full build for distribution. [NM] - Fix for mantis #915 : updated bzshell_multi_client_mpi.cfg. [NM] -- b73h released============================ - Updated libpng to v1.2.25, libmng to v1.0.10, libvorbis to v1.2.0, libcms to v1.17, MiniUPNP to v1.0, PCRE to v7.6. Also, in the jpeg libs, defaulted them to using floating point conversions of files, not integers. Modern superscalar CPUs should be slightly faster when they keep more functional units in flight at once. This may slightly affect the output; I know that the metal1-4.dxtbz2 changed slightly as a result of this. Most of these updated DLLs will be in the next full build, though you ought to be able to copy the ones from DXTGen v12/13 into your BZ2 folder if you're *really* curious. Updated Readme13.rtf as well. [NM] - While updating UPNP, I noticed that GamePrefs.ini|LocalPrefs.ini's VerboseUPNPLog was read, but then ignored. Fixed. Also, UPNPTimeout in the same file was never read, and treated as always 7200. (That's 2 hours in seconds.) Fixed, though GamePrefs still sets the default to 0 (unlimited). I don't seem to be able to test UPNP these days, though -- current wireless router doesn't seem to support it. [NM] - Fix for mantis #953, #924, possibly others. Just disabled the pilot bailout, completely. I could never repro the resyncs here, and it seems to be related to exploits. This feature may eventually reappear in the future, but not for pb4, sorry. [NM] - Fix for mantis #961 - tweaked pbtunn01.odf that AI can use. Please test the first few ISDF SP missions, as that ODF might be used in them. [NM] - Fix for mantis #938. Added GamePrefs.ini|LocalPrefs.ini value, NobodyHomeIsPersistent. If this is false (default), then only the first map/level loaded will lose everything. If this is true, then every map/level loaded will lose everything. Compiles, but is untested. [NM] - Fix for mantis #955. If an object being placed in the editor has no mesh, it will always treat it as unaligned placement. Gets around a crash. [NM] - Fix for mantis #964 - full build installer puts the vcredist exe in a 'redist' subfolder. This is for general cleanness; I also now have VS2008, which has its own, different, vcredist exe, so it'll make sense to have one folder for these things. (Plus, the redist folder can be safely nuked after installing if you're terminally low on HD space.) Also rearranged paths everything's built to on my box so that I can clean up temporary files better/faster. [NM] - Fix for mantis #963 - when full build installer writes GamePrefs.ini, it's now write protected, just to give the hint that users are to modify localprefs.ini instead. [NM] - Rearrangement of non-map assets out of the addon\Missions\Multiplayer folder and into addon\objects. This is a bit cleaner, and allows those items to be separated from the maps. [NM] - Possible fix for mantis #920, others. There's a limit on the # of selected items the network code can handle on a frame. Added in some error messages if that's exceeded, and also tweaked non-net code to respect that limit in MP. [NM] - Undid some of the MW pop-reducing done last summer in the DM DLL. It was allowing bots to stay still on a powerup they couldn't possibly use. Restored that so that there's a 15-second timeout or 2-meter distance from the powerup, then it'll retarget. This retargeting is done only in the lockstep world, which causes a visual world pop. [NM] - Fix(?) for mantis #954. Does a lot more checking for buffer overflows on the editor texture brush data. [NM] - Not a fix for mantis #929, but going to document it here for those who don't have access to mantis. For those who are having trouble getting the ` key to work (shown as ~ ingame, erronously), try extracting and editing bzinput_common.cfg, around line 38: BindDiscrete("mode_select_0", "`", "!LeftCtrl"); Change that to some other key ("q"?), and then reload input bindings from the options. [NM] - Possible fix for mantis #932. Instead of crashing, it should whine (loudly) and try to recover. There's some nonsense going on in the DR2 variable systems, and I can't quite figure it out. Or, this is a drive-by memory trashing. Either way, not fun. [NM] -- b73I released============================ - Fix for mantis #968 - memory leak under certain circumstances. Also, found a better place/way to handle mantis #936 - BZ2 uses lots of CPU when alt-tabbed. [NM] -- b73I2 released============================ - Fix for mantis #894 - building collapse and explosions sometimes appearing at the center of the map in MW. Fix is related to mantis #83, possibly also 106. I now save/restore a bit more info, and it seems to play the included savegame w/o errors. Do test that I've not broken something else. [NM] - Fix for mantis #952. Command button's state wasn't being updated when changing to group split mode. [NM] -- b73I3 released============================ - Fix for mantis #972. Added [HoverCraftClass] soundJump = "" If this is set to a valid wav file, it'll play when the vehicle is jumping. A .wav file consisting of five seconds of silence, then "CHEATER CHEATER CHEATER" would do well. :) Also, vastly simplified the calls to StopGasObject() all throughout the code, making an accessor function that tests, stops, and zeroes out the handle. [NM] - Not listed as a bug, but I decided to do something about this. vsmoke.tga was hardwired in three separate places in the code. Made all three of the places point to different textures now: vsmoke_selectiondisplay.tga - used by SelectionDisplay.cpp vsmoke_conetex.tga - cone texture, used in lights(?) vsmoke_interface.tga - used to highlight UI backdrops, e.g. large windows Mods that had their own vsmoke.tga (and there's apparently a lot), will need to copy that texture to the three new names. Or, it'll use the one in patch13.pak. Also, restored gsplat.tga, raindrop.tga, and wsplat.tga to the full res sizes found in data.pak. They were shunk earlier as an optimization, but now that they're dxtgen'd, the graphics card should have enough info to pick the right mip on the fly. [NM] - Fix for mantis #971. Added [SprayBombClass] HitExplodeTypes = 0 BuildSprayOnHit = true ExplodeOnHit = false This is a bitfield, consisting of the sum of one or more of the following: 1: building, 2: craft, 4: person, 16: terrain, 8: (none of the above). If 0 (default), then the traditional behavior is used. If 1, then it'll explode when it hits a building, or bounces really slowly. If 2, then it'll explode when it hits a building, or bounces really slowly. If 3 (i.e. 1+2), then it'll explode when it hits a craft, building, or bounces really slowly. BuildSprayOnHit defaults to true -- a flag as to whether it builds the payloadName item when it hits something matching one or more of the HitExplodeTypes. ExplodeOnHit can be used to just make the ordnance go *boom* when it hits something matching one or more of the HitExplodeTypes. Note: splintbm.odf by default has [OrdnanceClass]::xpl* = NULL, which means there's no default explosion for ExplodeOnHit to use. [NM] - Fix for mantis #917 - latest rev of Greenheart Map Pack. Note: a 'addon\objects\ISDF\vehicles\ivcons\backup' folder was included, which clashed with a bunch of files in the usual places. I've summarily deleted that folder. Also, stock assets use 'ivconst' folder. Plus, I see this in my logs here: File clash: @rootdir\addon\objects\mantis_465\Shared Objects\bindata\ibgtoww03.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\ISDF\Assault tower\ibgtoww03.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\bindata\ibgtoww04.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\ISDF\Assault tower\ibgtoww04.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\bindata\ibwstr01.xsi File clash: @rootdir\addon\objects\mantis_465\Shared Objects\ISDF\Tall Wall\ibwstr01.xsi Please make sure submitted assets fit with the name & location guides I've published. Next time, I may just reject things that don't cleanly merge here. [NM] -- b73j released============================ - Changed HSPRITE to SPRITE_ID to avoid a compile error [Ken] - Updated PathDialog.rc to compile under Visual C++ 2008 Express. VC++ 2008 does not support MFC or ATL natively, but replacing the "arxres.h" include with "winresrc.h" and adding a definition for IDC_STATIC works around that problem. [Ken] - Fixed previous-weapon switching in multiworld (mantis #940). The UserProcess::Save function wrote out the selectNext array instead of selectPrev due to a copy/paste error. [Ken] - Fix for mantis #972 - jump sfx was interfering w/ fly sfx due to copy & paste glitches. Should be better now. Also deprioritized jump sfx from AI units to 'ambient', which should allow the channels to be given up on demand. Using these sfx may increase channel demand, a lot. [NM] - Fix for mantis #976. As above, addon/objects/ISDF/vehicles/ivconst is the folder the stock assets use for that vehicle. [NM] - Fix for mantis #973, updated health on bbgtow9.odf. [NM] - Changed defaults for sky, particles, objects to high. Also applied this to profiles upgraded from 1.2, and did a 1-time forcing (for current 1.3 profiles) to change these settings to high. You should be able to drop this if desired, but I'm just trying to make the defaults look a little prettier. Most people's systems should be able to handle this out of the box these days. Also made profile saving try and do so only when changed. This should slightly reduce the number of writes to disk. [NM] - Fix for mantis #971. Fixed crash when colliding w/ terrain. Also added some things, put documentation above w/ the first #971 fix. [NM] -- b73k released============================ - Some of the version info on bzone.exe/bz2edit.exe was backwards. [Right-click on the exe in Windows, get properties, go to the version tab, and look thru the 'other version info' fields.] Fixed. [NM] - Fix for mantis #977 - 32nd vehicle in mpvehicles.txt didn't have its info shown in the shell. Also cleaned up a little dead code. [NM] - Possible fix(?) for mantis #967, though it only happens with BZC, as far as I can tell. If you see items like this in your battlezone.log file, ERR |GLOBAL | varitem:197 |21:33:42|99502 |Error - trying to clear a NODELETE variable 0x######## ERR |GLOBAL | varitem:271 |21:33:42|99502 |Error - trying to destroy a NODELETE variable 0x######## then there's something colliding in name hash with one of the network variables. Not good. (Name hashes are what take things like 'network.session.svar6' and turn that into 0x14E3006B -- note that it scrambles it into a short form. There's an off chance that two strings will hash into the same name.) If you're really lucky, it'll die with Unable to create '%s' since hash 0x%08X already exists and tell you exactly what is colliding. Rename the thing that it's failing to create, and it should work better. [NM] (Update: a bit more explanation on this bug: (1) Humans like strings, like 'network.session.svar6'. (2) Strings are slow to a computer, compared to native types like integers/floats. (3) To try and balance these two competing goals, we use a hash function (see http://en.wikipedia.org/wiki/Hash_function ). This turns a string into an 32-bit integer, e.g. network.session.svar6 -> 0x14E3006B. (4) The problem with hashes is that you're trying to shove more than 32-bits into a 32-bit value. Thus, there's the chance of a 'collision' -- two strings that end up with the same output 32-bit value. (5) All interface items are looked up by hash. This includes things like network.session.svar6. And, the names for all interface items mentioned in .cfg files. Some of these interface items are only temporary -- they go away when you close the shell or the like. When that happens, the item (referred to by hash) is deleted. (6) Mantis #967 referred to a problem where network.session.svar6 (or, more precisely 0x14E3006B) was getting deleted, and the network system couldn't find it later. This made the net code very unhappy. (7) I did work to set a special flag on the network.session.svar* variables so that nobody could create another item with the same hash. It's also not allowed to be deleted (w/o whining) until the network system says "I'm done with this item." -- b73k2 released============================ - Tweaked full build installer. Now creates patch13.pak file with the same hierarchy as the input data on my HD. This should simplify the job of people wanting to send me patched assets trying to figure out where the heck anything lives. [NM] - When running in windowed mode, it'll use render.cfg's ShellWidth/ ShellHeight when looking for expanded game UI files, e.g. bzgame_team_640x480.cfg vs bzgame_team_1920x1200.cfg (assuming that your ingame profile was set to the latter). [NM] - Fix for Mantis #979 - updated autoreg files for Wug's AIP set. Also mantis #981 - corrections to various GH files. [NM] - Made full build installer park .inf/.bzn for stock IA/MPI maps in a separate folder from addon. This is done at install time only. [NM] ---- 1.3 beta 74 released======= - Made scrap bar manager also track the 'sequence #' for all items on the list. This should help make sure the items on the scrap bar are sorted consistently on all machines. This could be a cause of resyncs. Not 100% sure, though. The fix seems to be safe, though, and shouldn't make things any worse than they already are. [NM] - Updated readme13.rtf to note where dbbghelp.dll is coming from, note Pandemic's 2005 merger w/ Bioware, and 2008 merger w/ EA. Also added link to Activision's website, despite their total uninvolvement w/ this patch. And, a note acknowledging the graciousness of my wife letting me work on BZ2 in my spare time. Basically, pb3 went out just before I got married, so there's been a bit of work on BZ2 since then. [NM] - Fix for mantis #985 - update to fgsnip_c.odf. [NM] - New feature. Added [GameObjectClass] VehicleSearchFilter = 0 // == 0(vehicles only), 1(pilots only) 2(vehicles+pilots+animals) 3(plants only), 4(buildings only) Values outside of 0..4 treated as 0. This is used in a bunch of places, including AlternateAnimalProcess.cpp, LandAnimalProcess.cpp, WingmanProcess.cpp, KingOfHill.cpp, ProximityMine.cpp, Seeker.cpp, TripMine.cpp, WeaponMine.cpp. Basically, this allows the default search behavior to be modified somewhat. Don't laugh at allowing a search for plants -- the code already had a function to do this, so this was trivial. Not sure if anyone will have a use for it. [NM] - Fix for mantis #986. Editor build was producing spurious errors on shutdown. [NM] -- b74a released============================ - Made 3DFX, Matrox cards default to assuming that DXT support isn't present on them, if render.cfg::UseDXT is set to -1 (autodetermine). I know there's a few models of their cards that do support this fine, but I (1) don't have a list of the DXT-capable (or incapable) models offhand, and (2) I asssume that they sold a lot more of their earlier, DXT-incapable cards than capable. End users can edit the render.cfg line to set this to on/off if desired. [NM] - Added some code from http://msdn2.microsoft.com/en-us/library/aa364726(VS.85).aspx to the full build installer. The long and the short of it is that if you're on XP (or higher), it should prompt you as to whether you'd like to add an entry for BZ2 to the Windows Firewall list of apps and ports. Give it a try. [NM] - Changed AIP code. In attacker plans, if maxAttacks = 0, it's now treated as unlimited, same as maxTries = 0 in other plans. [NM] - Fix for mantis #989. Missing skydome is now whined about to the console & logfile. [NM] - Added GamePrefs.ini|LocalPrefs.ini::EchoConsoleToLogfile . See comments above that in Gameprefs. [NM] - Fix for mantis #988 - IA, MPI DLLs should jump to the 1/3 plans when there are preplaced recyclers on the human teams (1). Also made them look for the recyclers by object class string, not "brecy" in the ODF's names. This is more reliable. [NM] -- b74b released============================ - Updated ShortPath.cpp (used in pathing code) to use std::set, as opposed to std::priority_queue. The priority_queue code would occasionally die in some STL debugging iterators for no good reason that I could tell. If STL was unhappy, this might be the cause of some of the random crashes seen in dlmalloc. Do check to make sure that things aren't radically different in pathing. [NM] - Updated network ivar/svar broadcasting code to push svars first. This fixes a specific issue where the server was hosting MPI, sitting in the shell, w/ CPU team set to Scion. The client would join, and see the options set for CPU team on ISDF. This may have side effects; do keep on the lookout. [NM] - Tweaked pilot profile defaults to assume broadband is on. Users can still modify this, but it'll just default this way. [NM] - Noticed that AIP log code would (1) silently die if the 'Logs' folder wasn't created, and (2) wasn't putting the logs folder under My Docs/My Games/BZ2 if vista mode was enabled. Fixed. Also used SHCreateDirectoryEx() to make directories. [NM] - Added more logging to AIP idle dispatcher, and also all AIP commands sent by it and the like to the logfiles. [NM] - Battlezone.log and AIP log file will now print out which timestep a sync error took place at. If it's a resync caused by the idle dispatcher, I *might* be able to get some info as to this if I get the AIP logs for all machines involved. No guarantees. But, I've seen some resyncs today that weren't caused by the dispatcher. The ID's code sure doesn't seem like it might be resync-capable at first glance. [NM] -- b74c released============================ - Made loading screen progress bar code update the screen a bit less often. That's not the cheapest operation around, so if it can be a little more jerky, that's acceptable. [NM] - If a resync is pending, AIP logging code will dump out a LOT of info per craft, and do so every frame. [NM] - In GamePrefs.ini|LocalPrefs.ini, added an aipLogging line, currently defaulting to true. This should have the same effect as /aiplogging on the commandline. Remind me to default this to false before pb4 goes live. [NM] - Fix for mantis #991 - handle invalid data passed to SetPlan() a little better by whining to logfiles. [NM] - A little more work to ensure fewer (no?) leaks of FollowGroup objects. Noticed a bit of that this weekend while doing sync tests on my home LAN. [NM] -- b74d released============================ - Actually added GamePrefs.ini's aipLogging line. No code changes other than bumping version #. [NM] -- b74d2 released============================ - Fix for mantis #991. Buffer was too small for things. Ooops. [NM] -- b74d3 released============================ - Fix for mantis #957 - lag under certain circumstances. Optimized things a little too much. [NM] - Fix for mantis #995 - asset changes for mega statue AV fix by GH. Note: only the items under addon\objects included w/ subbuilds; IACircle.ter and STCircle.bzn will be in the next full build due to size. [NM] -- b74e released=================================== - Added, to AIP files [Start] CheckProvides = true // true = default The value read by this is used by all plan chunks as their default value. Should allow modders to tweak this value fairly quickly. [NM] - Fix for mantis #1000 - AV in terrain code. Could only happen when something is *way* outside of the world. Since this was a late join, I suspect it may be something to do w/ what was sent. The AV shouldn't happen anymore, but it's a little worrisome. [NM] - Potential fix for mantis #997, or at least an optimization of the resimulation of remote players. Also made it apply to the local user, which seems to help w/ a testcase provided. [NM] - Edited project build settings for all exe and DLLs to do the following: (1) Enable /DYNAMICBASE to allow vista to apply the address space layout randomization (ASLR) security tweaks to them. (2) Disable minimal rebuild, enable string pooling. (3) Floating point consistency set to fast for BZ2 and its DLLs; precise for OpenIL and Vorbis DLLs. [Not sure if Vorbis is adversely affected if set to fast.] (4) No frame pointer omissions for BZ2 main project, though the graphics lib can still use that. (5) /pdbpath:none for all linker settings -- the pdbs are in the same directory as the exe/dll; without this, it'd look first in the directory they were originally built to (c:\src\bz2\... , which is my local paths) Need someone w/ vista or above to ensure that things still work after change #1. [NM] - Fix for mantis #998 - added mpicircle.TER to the next full build. Also #999 - ivphtankm2.xsi tweaks, next subbuild. [NM] -- b74f released=================================== - Fix for mantis #996. Particle effects are handled better in MW. [NM] - Slight revert of mantis #997 change made above. Caused the reticule to really bounce around in MW. [NM] -- b74f2 released=================================== - Found a large list of ATI graphics cards and device IDs at http://www.pcidatabase.com/vendor_details.php?id=240 . Sidenote: I wish they had some sensible numbering scheme, where their deviceIDs only increase over time, like nVidia does. Made the game auto-disable DXT textures for the following cards, unless you override it in render.cfg: mach64 ct pci, Mach64 CX, ATI Rage Pro AGP 2X 8mb (gt-c2u2), Rage 3D Pro AGP 2x, ATI ALL IN WONDER PRO (8MB), ATI 3D Rage Pro 215GP, ATI (GT-C2U2), Rage 3D II Graphics Accelerator, 3d rage 2 + dvd, Graphics Accelerator, Mach 64 GT, m3d agp card on agp slot, Rage IIC AGP, Rage 3D LT Pro AGP 133 MHz, Rage 3D LT Pro AGP 133 MHz, Rage 3D LT-G, Rage 3D LT Pro, Rage P/M Mobility AGP 2x, Rage Mobility l, Rage 3D LT Pro PCI, Rage 3D LT Pro PCI, Rage P/M Mobility agp, Rage L Mobility PCI, Rage 128 Pro PA PCI, Rage 128 Pro PD PCI, 3d Rage pro agp 2x, Rage 128 Pro PH AGP 2x, Rage 128 Pro PI AGP 4x, Rage 128 Pro PJ PCI (TMDS), Rage 128 Pro PK AGP 2x (TMDS), 4x (TMDS), Rage 128 Pro PM PCI, Rage 128 Pro PN AGP 2x, Rage 128 Pro PO AGP 4x, Rage 128 Pro PP PCI (TMDS), Rage 128 Pro PQ AGP 2x (TMDS), Rage 128 Pro PR AGP 4x (TMDS), Rage 128 Pro PS PCI, Rage 128 Pro PT AGP 2x, rage 128 pro agp 4x tmds, Rage 128 Pro PV PCI (TMDS), Rage 128 Pro PW AGP 2x (TMDS), PX AGP 4x (TMDS), Rage 128 GL PCI, Rage 32MB, Rage 128 VR RK PCI, Rage 128 SF 4x AGP 2x, Rage 128 4x SK PCI, Rage 128 4x SL AGP 2x, Rage 128 4x SM AGP 4x, Mach 64 VT VIDEO XPRESSION, Mach 64 VT4 PCI, ATI 3D Rage Pro AGP 2X [NM] - Some work on some MW differences seen between lockstep and visual worlds here. Did the following: (1) made waitplan do a proper save/load of its data, (2) if MW is on, made the low level Range_Search() function sort its results by seqNo so that the results are identical across worlds and possibly also machines. If nothing else, this helps make sure my MW tests stay more in sync. Might help with resyncs, at the possible cost of some performance. Not sure. [NM] -- b74f3 released========================================== - Restored ThermalMissile targeting "aim-at" functionality from BZ1, making them less likely to wander off towards seemingly random targets while still being spoofable with countermeasures (mantis #970). [Ken] - Fix for mantis #1005. Added some params to GamePrefs.ini: BZoneLoadConsoleOpenTime BZoneIngameConsoleOpenTime BZ2EditLoadConsoleOpenTime BZ2EditIngameConsoleOpenTime aipExtraLoggingOnResync See documentation above them. Also made the game read GamePrefs.ini, then LocalPrefs.ini, then either [LocalPrefs_bz2edit.ini or LocalPrefs_bzone.ini ]. A file read after another file will override its settings. This allows users to have personal settings for either build. [NM] - Fix for mantis #1003. Craft and buildings already had a friendly fire check in place; added this to persons (==pilots), powerups, landcreatures, torpedos. Also made it slightly more lenient -- it used to only check for same team, now it checks for allies too. [NM] - Fix for mantis #1008 - tweaked fbrckt.odf. [NM] -- b74g released========================================== - Made memory allocator cause an immediate AV if it runs out of memory. This'll help ensure that callstacks reflect what happened. Solution: use less memory. [NM] - Possible fix for mantis #1017. Do not set ForceStagePoint = 0 in an AIP, or that will force it to use a random one. Use 1..N. [NM] - Fixes for mantis #1016, 1019 - updated assets. Note: *please* use the paths in B74's patch13.pak. I mean it. [NM] - Fix for mantis #1013. Made it so that the AIP 'exists' check will fail on any building that needs a tap. As long as the AIP has a running basebuild/basebuildminimums section that'll build that building, it should dispatch a crig to fix the missing lung on that. [NM] - Made .dxtbz2 file reader, when DXT textures are off, read in all mipmaps from the .dxtbz2 file, and unpack them from DXT -> bitmap format via the OpenIL libs. Previously, it used BZ2's fairly naive mipmap generation algorithm. The results might be slightly slower, but the quality should be higher. You can turn DXT off in your render.cfg to test this, even if your card can handle DXT. [NM] -- b74h released========================================== - Fix for mantis #1029. Craft already had 'hp_smoke' / 'smoke' as a smoke emitter, falling back to the center of the object if not found. Added 'hp_moresmoke_2' .. 'hp_moresmoke_8' - if they're found, they're used to emit more of the same type of smoke. Note: searching is contiguous -- if 'hp_moresmoke_3' isn't found, then it won't bother looking for or using hp_moresmoke_4 .. 8. [NM] - Fix for mantis #1012. Added, to particle effect sections: [Chunk] renderBase = "draw_sphere" or "draw_geom" InitialPitch = 0.0 InitialYaw = 0.0 InitialRoll = 0.0 AddPitch = 0.0 AddYaw = 0.0 AddRoll = 0.0 These values are in degrees, for the 'Initial' values, and degrees per second for the 'Add' values. Compiles, tested for draw_sphere; copied & pasted into draw_geom, but not tested. [NM] - Potential fix for mantis #1028. Boosted initial spawn position for users by 1 meter vertically. [NM] -- b74h2 released========================================== - Fix for mantis #1038 - AV after doing some unsafe typecasting. Did some more RTTI checks before doing that in the half-dozen places in the code it did that particular cast. [NM] - Fix for mantis #1012. Forgot to call base class after adding a function in the derived class. [NM] - Updated items in mantis #1019. Also asset tweaks from #1031, #1032, #1041, with higher #s unpacked last. (I'm not sure if there were any items duplicated between them, but if you're not seeing a particular rev of your file, please check this.) Note: the .xsi files from 1032 aren't in the sub-builds to reduce download size somewhat. [NM] - Fix for mantis #1033. Added [GameObjectClass] aiAddHealth = 0 aiAddAmmo = 0 Note: if these values are not specified in the particular ODF, then they default to whatever values were read in for addHealth/addAmmo *in that particular ODF*. Thus, this violates some of the normal ODF inheritance/hierarchy rules. [NM] -- b74i released========================================== - Fix for 1047 - added 'update3' to GH's MPI Circle map. Also mantis #1055, 1057, 1045, 1062 in that order. [NM] - Possible fix for mantis #1050 - made the 'GetScanner()' call return false when its owning craft is unpiloted. May have some side effects, not sure. [NM] - Fix for mantis #1049 - network prefs weren't being read from LocalPrefs_bzone.ini/LocalPrefs_bz2edit.ini. Other values should have been read in, however. [NM] - Fix for mantis #1053, 1046, 1036 (bug seems to have been reported several times recently). Tugs should work better now -- damped their controls when they've started deploying. I tested w/ savegame from #1053 only. [NM] - Found some variables not saved/loaded as properly as I'd like in OffensiveProcess.cpp. Fixed. This may help w/ late-game joins that go out of sync instantly, and/or visual world popping, not sure. Just makes me feel better to do this. [NM] - Fix for mantis #1056. Items using OffensiveProcess (and derived, like AssaultTankProcess, GechProcess AttachOffensive, PersonProcess, SoldierProcess, SupportProcess, WingmanProcess) will keep after their target as long as it's an enemy. This may cause other behavior; to go back to the old code, I've added [CraftClass] OffensiveProcessIsTenacious = true // 1.0-1.3pb3 used a default of false - Fix for mantis #1063. Added in some protection and logging on what seems to be a malformed ODF. BZ2 should now log what file it's unhappy with and exit when it runs into problems, rather than just crashing. [NM] - Possible fix for mantis #947. Re-enabled code that kills default pilot weapons when hopping out. (This was disabled for mantis #909, which was due to a bad weapon type.) Also made the statusDisplay's bulletUpdate flag reset to false when its work is done. [NM] -- b74j released========================================== - Fix for mantis #1066 - AV in multiworld. Should be better now. [NM] - Probable fix for mantis #1069. Found some uninitialized variables in tugs. Fixed. Seems to work better for me. [NM] - Fix for mantis #1067 - icon_fvcons.dxtbz2, 1055 (updated) 1065 - more asset updates. [NM] -- b74k released========================================== - Added [CraftClass] OffensiveProcessIsTenaciousAITeam = false // 1.0-1.3pb3 used a default of false This value is used instead of OffensiveProcessIsTenacious if the craft is on an AI-controlled team -- i.e. it's not friendly towards any human player's team. [NM] -- b74k2 released========================================== - Asset updates: merged in #1055, 1075, 1077, in that order. [NM] - Possible fix for mantis #1074. StartDelay in particle ODFs was working best for items that counted time down, like EmitRender and StaticRender (and derived). BoltRender, ColorRender, and LightRender (and derived) count time up. Made it internally flip the setting for bolt, color, light. [NM] - Possible fix for mantis #1072. Made "ShellMultiTeam.Teams.MPIHumanTitle" toggle on/off along with "ShellMultiTeam.Teams.MPIOpponentTitle". Compiles, but is untested. [NM] - Fix for mantis #1076 - made GamePrefs.ini|LocalPrefs.ini's LOD1_MRM/LOD2_MRM values adjust the 'mesh.mrmfactor' console variable. Note: LOD0's mrm value is fixed at 3.0. [NM] - Fix for mantis #1073 - made ivar13 (in MPI) setting stick in more cases. Previously, if you were on a MPI map, and switched to another w/ ivar13 set, it'd work. But, going DM -> MPI w/ ivar13 set didn't work. [NM] -- b74L released========================================== - Fix for mantis #1081 - made AIP files's [Start] CheckProvides = true // true = default be read and used correctly. AIP plan chunks didn't know which team they were on until after the constructor. Fixed. [NM] - Fix for mantis #1082 - svar12 is read and applied correctly ingame. DLL code wasn't updated to read that. [NM] -- 1.3pb4 RC1 released========================================== - Fix for mantis #1093, AV in Targeting::ValidateTarget(). Probably been there forever. [NM] - Some work on mantis #1100 - made a few more files keep callstack info. If you can get this crash again, hopefully the callstack will have some more pointers for me. [NM] - Work on mantis #1102. This is a continuation of #1066, under slightly different circumstances, I believe. Made it do a count of child/sibling nodes before saving, and checks that on loading. If they differ, it should fast-forward the save. This might lead to an occasional pop of attached weapon states, but that's better than a crash or spontaneous exit. [NM] - Fix for mantis #1104. SwitchAIP plan had time check backwards. My bad. [NM] - Fix for mantis #1098 - texture filename ended in .tga.tga. Locally renamed it. [NM] - Possible fix for mantis #1092 - when a client clicks on "chat/more", then they'll re-request all ivars/svars from the server. This should help ensure the pages are correct. [NM] -- pb4rc1a released================================================= - Tweaked work on mantis #1102 above. Made it check earlier in the LoadShow code. [NM] - Work on mantis #1085. As a bunch of testers fingered the DeployBuilding changes for b64a as breaking G66, I put in code to re-enable the old behavior. Added [DeployBuildingClass] DoExtraBuildzoneCheck = true // false = 1.0 .. 1.3pb1 behavior, true = pb2 .. current I assume that G66 has custom CPU recyclers, so adding this shouldn't affect human teams. If this gets abused on human teams, I might make the false pathway only take effect when the AI is commanding the craft's team. [NM] - Fix for mantis #1106 - AIP idle dispatcher was reading UnitIdleSeconds, BomberIdleSeconds as seconds, then converting that to turns (i.e. * 10, at default 10tps). However, when updating idle time, it was incrementing by # of seconds. Thus, things would be flagged as idle only when the craft was idle 10x as long as specified. I believe that MinMissionTime is read correctly, though. [NM] - Work on mantis #1037 - did two things that might help things resync less: (1) iterate over all AIProcesses in a list sorted by the associated craft's seqence #, which is guaranteed unique and should behave the same on all platforms. (2) Tweaked grouppanel code that stores targets to store it on a per-world basis and not copy things around so blindly. This latter bit fixes code introduced for 72e2. I've taken steps so that it should be compatible w/ old savegames, but might have broken something. Hope not. Major thanks to Commando for putting together a map that resync'd fairly quickly. [NM] -- pb4rc1b released======================================================== - Made IA/MPI scav cleanup code call SelfDamage() on any scav it wants to remove, not Remove(). This'll make the killing of that scav more "natural" to anyone watching -- it should explode, rather that just vanishing. It'll still spontaneously explode w/o any reason. Hard to do anything about that. [NM] - Fix for mantis #1120, AV introduced as part of work on mantis #1037. Savegame works fine now. [NM] - Fix for mantis #1114. Idle dispatcher waited until the # of idle units was > minAttackForce. Changed check to >=, which seems to produce the desired effect. [NM] -- pb4rc1c released======================================================== - AIP Idle Dispatcher's UnitIdleSeconds now has a minimum of 1 second. Shouldn't really affect much. [NM] - On some tips from Ken, defined _SECURE_SCL=0 and _HAS_EXCEPTIONS=0 in the releaseltcg/releaseeditor build configurations. This shaves a decent amount off the exe size, and hopefully also gives it a speed boost, though that's almost certainly unnoticeable. [NM] - Work on mantis #1094 - attack groups will ensure to send their leader at the target. Also, added [CraftClass] AttackTaskUsesGroups = true If true (default), will use traditional behavior -- leader/follower. If false, then each tank in the group will act independently and charge at the target. Items built (only) by CPU recyclers might want to have this set to false, not sure. Give it a test. [NM] - Fix for mantis #1123 - don't allow multilauncher to go into an infinite loop. Put a limit of 256 iterations thru its loop. [NM] -- pb4rc1d released======================================================== - Probable fix for mantis #1014. Added [OrdnanceClass] RestoreFxSavegame = true RestoreFxLockstep = false RestoreFxVisual = true These allow selective undoing of mantis #838, which was done for 72g (above). The 'Savegame' one is used after loading a .bzn, .sav, or MW join/resync. Lockstep is done only in the lockstep world (i.e. multiworld is off). Visual is done only in the visual world (i.e. MW on). My guess is that some particle fx die out naturally before the ordnance does, and were getting "resurrected" when they shouldn't. The above flags should allow people to turn this off in such cases; I don't have any good way right now to tell the difference between a natural death of fx and those that were lost due to MW differences (mantis #838), etc. [NM] - Possible fix for mantis #1127 - scrap gauge will ignore any item with a scrapHold/capacity of 0, preventing them from taking up an entry in the scrap bar. Also upped max # of items tracked by scrap manager and scrap gauge code from 16 to 32. Compiles, but is untested. [NM] -- pb4rc1e released======================================================== - Found that TeamSlots.h had a limit of 10 items per team that are scrap items, and a separate limit of 10 power items per team. Upped limits to 32, 128, respectively. Made ScrapGauge/ScrapMgr inherit from new constants in TeamSlots.h, rather than multiple, clashing, #defines. [NM] - Fix for mantis #1105. Added [GameObjectClass] SmartIsAirUnitCheck = true If true, then the "IsAirUnit" check in code will only check the flying flag for artillery, bombers, APCs, and SAVs; every other type of craft will flagged as "not an air unit." If false, it uses the "isFlying" flag on the craft. False was the default for 1.0-1.3pb3. (Note: non-craft, like pilots/soldiers, are always "not an air unit," with either setting.) Also made jetpacks not set the flying flag for boosters that only give horizontal thrust, walkers/tracked vehicles will never allow the isFlying flag to be set. Hovercraft will clear this isFlying flag when they're within 2*setAltitude of the ground. [NM] -- pb4rc1f released======================================================== - Fix for mantis #1136 - recy variants with empties' upgraded costs tweaked, at 30, 35 & 40 scrap respectively. Some vets had whined about this a while back, and couldn't be bothered to do a trivial amount of work. All new files, so I'm vetting this myself. [NM] - Executive decision on mantis #1084. Reverting mpvehicles.txt to (internal CVS) revision 1.2, made on 2007/02/04, tagged as "updates since pb3." This is more or less identical to patch 1.2's mpvehicles.txt, with only some naming tweaks on vehicles, e.g. "Thunder bolt" -> "Thunderbolt". This rolls back version 1.3, made on 2008/5/5, tagged as "Fix for 1047 - added 'update3' to GH's MPI Circle map. Also mantis #1055, 1057, 1045, 1062 in that order." Also rolls back version 1.4, made on 2008/5/13, tagged as "Asset updates: merged in #1055, 1075, 1077." I'm doing this because there's a ton of 3rd party maps, not included in the 1.3pb4 installer, so re-ordering the list breaks backwards compatability. If people want to add items to mpvehicles.txt, they should only append to the end. Sorry, guys. [NM] - Fix for mantis #1134 - updated bzgame_scrap.cfg to support the 16 new possible entries. [NM] - Fix for mantis #1129 - scion morphtank ODFs w/ [morphtankclass] entries restored. They were deleted during the "great inheriting," when ODFs were made as simple as possible. The ODF items under [morphtankclass] were never handled properly by inheritance; everything else seems to work w/ inheritance. As Ken's not gotten around to fixing this, the simplest solution is to restore those entries. [NM] - Probable fix for mantis #1133 - AIP recover plan won't see buildings as permanently non-idle. Also, now asks the target (needing repair) units to come to it, making it somewhat more reliable. [NM] - Fix for mantis #1119 - ivrecycmd1.autoreg correction. [NM] - Fix for mantis #1095 - added [CraftClass] CanAIPForceIdle = true If true (default), then when an AIP switches, the IdleAllCraft will stop this craft. If false, then IdleAllCraft will ignore this craft. [NM] - Fix for mantis #1140 - ffa/mpi recycler autoreg entries would show on stock strat maps if you switched to a ffa/mpi map. Now, for every strat map, it'll act like recylist.txt was specified, forcing a switch back. May have some side effects. [NM] - Added localprefs_bz2edit.ini, localprefs_bzone.ini to this subbuild, with aiplogging turned on. Not part of the next full build. [NM] - Added changed files from mantis 1131, 1122 (after some fixes!), 1125 (bad path to asset, fixed). Not really following my vetting rules, am I? [NM] -- pb4rc1g released======================================================== - Asset updates from mantis 1125, 1122, 1126, 1091, 1142. [NM] - Fix for mantis #148, 1141. Added [ScavengerClass] or [ScavengerHClass] ScrapFirst = true If true (default), then scavs not under AIP control (e.g. those on a human team, or idled ones) will look for loose scrap before capping a nearby pool (within ScavengerCollectPoolRange or scanner distance, if present, scanner distance overrides the first range). If false, then nearby pools come first. Unified a bunch of code duplicated between scavs/hoverscavs. [NM] -- pb4rc1g2 released======================================================== - Added something I might end up regretting. But, I like the security code. Added: [HoverCraftClass] MoreLike12Physics = false If true, then it acts more like 1.2's hovercraft code. With some important differences - what goes up must come down. Sooner, perferably, rather than later. [NM] - Upgraded libpng to v1.2.29 (security update). Will be in next full build. [NM] - Fix for mantis #1143 - goal list didn't show up in bzshell_multi_client_stctf2.cfg [NM] -- pb4rc1h released======================================================== - Fix for mantis #1148 - tweaks to some files, deleted one. [NM] - Updated comments above on mantis #604 fix. The ODF params weren't very clear in my first pass. [NM] - Possible fix for mantis #1152 - changed 'OR' rules in AIP plan conditions to be more consistent. It's always been that if any condition fails with an 'AND', it'd short-circuit the conditions (with a fail). Made it so that if any 'OR' condition is satisfied, it'll short-circuit the conditions (with success). Also made it log more when it does short-circuit things with conditions left to check. [NM] - Found some uninitialized variables in MicroPlan's constructor. Fixed. [NM] - Asset updates: mantis 1149, 1153, 1155, 1151, 1156. [NM] -- pb4rc1i released======================================================== - More info in callstacks (I hope) on any crashes in the ParameterDB code. (Basically, just did #pragma optimize("y", off) at the top of the file.) [NM] - Version info of remote servers is always shown in the pregame info box now. Used to be poweruser only. [NM] - Reverted to internal revision 1.4 of bzgame_base.cfg. Ken made some changes last fall for interface groups, etc, but they don't work with custom icons. (Mantis #1158). For now, I think it's easier to revert. [NM] - Fix for mantis 1157 - updated some assets. [NM] -- pb4rc1j released======================================================== - Possible fix for AV mentioned in mantis 1161. Problem is, it's dereferencing a nearly-NULL pointer. Not sure that a NULL check will really work. [NM] - Probable fix for mantis #1158. Basepanel icons now track the ODF of the object in that slot. If that changes, it'll re-apply the current ODF's, as it might have changed. [NM] - Fix for mantis #1167 - added files for the GH variant, after some edits. [NM] - Fix for mantis #1164, probably also 1162. Attacker AIP plan wasn't reading in targets ever since changeover to allowing targetType# to be specified. Also, didn't like the way it was choosing targets. Switched it over to the search function other pieces of code are using, made that function (optionally) check provides. [NM] - Possible fix for mantis #941. Attacker AIP plans now recompute their target to be the closest victim of all possible victim types (targetType or targetType#) to the first attacker vehicle, after the attackers have reached the staging point. This doesn't prevent the AI from fixating on a target on the far side of an enemy base from where the units are. For example, if an attacker plan only has targetType = "ibrecy", then it'll focus on that, and that only. (And probably get killed by any base defenses, unless it's a bomber being sent.) If it has targetType = "ibrecy" and targetType1 = "ibgtow", then it'll focus on whatever's closer to the attacker. Compiles, but is relatively untested. [NM] -- pb4rc1k released======================================================== - Another quick change to attacker plan - it was trying to not send units after the same victim as other attacker plans. But, it forgot to exclude the current attacker plan's victim, causing it to sometimes choose an invalid target. Fixed. Also made the final "send to targets" not care about other attacker plans. [NM] - More work on mantis #1161 - if nearly-NULL pointers are found (i.e. within first 64Kb of address space), it'll whine to console/logfile. (Note: bzone.exe, by default, won't force open console after mission start; adjust localprefs). [NM] -- pb4rc1k2 released======================================================== - Fix for mantis #1161 (for real, this time). SceneManager's Range_Search() would return how many it actually found, which could be bigger than the results buffer passed in. (Such a programming style is useful to run once, allocate large-enough buffer, run again, but BZ2 really doesn't use that style.) Made all places that call Range_Search ensure they take the minimum of the # of results and the input buffer size. [NM] -- 1.3pb4 RC2 released========================================== - Possible fix for audio not working on WINE. It may be that their mmioOpen() call is more strict than Windows's, and dies horribly if MMIO_ALLOCBUF is passed as part of the bitfield in the third param for a memory file. Not sure -- don't have WINE or care to install it. In any case, bug-for-bug compatability is a good thing. Let me know if .wav files don't play after this change, and I'll revert it. [NM] - Restored AIP attacker plan's "make sure other plans aren't currently targeting this victim" code. Also, increased logging during the finding of units and staging phases, so that it should be possible to tell, earlier, when things go wrong. Edited comments about targetType# above, as it was confusing everyone. [NM] -- pb4rc2a released======================================================== - Tweak to AIP attacker plan (mantis 1175). If it was building something, and there's an empty item for the attackType# slot, it used to always place what it built in that slot. Now, it checks whether what it built can go in that slot (i.e. either class exactly or provides), and puts it in the slot only if appropriate. Also collected the half-dozen places in the AIP code that checked provides into one utility function. [NM] -- pb4rc2b released======================================================== - Fix for mantis #1144. Added Wug's AIPs, v3.6b4 [NM] -- 1.3pb4 released========================================== - Fix for mantis #1179. Forgot to check for NULL in some of the AIP attacker code I just changed up. Ironically, it was a line I added trying to log info (added for rc2a) that tripped it. [NM] - Made Dark Reign II interface libs more forgiving of an invalid colorgroup specified -- if they can fall back to 'default', it'll do so silently (though it'll whine to the .log file). If it can't find 'default', it'll still die, though hopefully with more info than before. [NM] - Work on mantis #1178 - tweaked multiworld catchup code slightly. If it's more than 30 turns late, the lockstep world is considered to have enough time to do work. Parallel code existed in the buildworld, copied to lockstep world. [NM] -- pb4_a1 released======================================================== - Fix for mantis #1182. Added Wug's AIPs, v3.6.1. From his notes: Updated version of 3.6. Fixes some typos and minor bugs. Main changes are: - Scavenger deployment changed slightly to go after more scrap pools during early game - Improved late game attacks for Scion vs. ISDF AI [NM] - Bumped Gamespy version # to pb4a. [NM] -- pb4_a2 released======================================================== - Gametime reported in pre-game sessions is now correct when tps != 10. - Work on mantis #1180 - if the remote server isn't playing, it'll report how long it's been sitting in the shell, in minutes. Note: the remote server must be running pb4a or higher to see this info. [NM] - More work on mantis #1178 - reduced 'late' tolerance to 2 turns. Also tweaked histogram slightly. [NM] - Fix for mantis #1182. Added Wug's AIPs, v3.6.1a. [NM] -- pb4_a3 released======================================================== - Redid CPU scav cleanup code, which exists in IA, MPI DLLs. Refactored it into a separate function. Also made it do extra checks to ensure that before it kills anything, that it's still a scav/hoverscav on the CPU's team. It used to ensure it was still on the CPU's team, but didn't do the class checks. [NM] - Added in another line of logging to the bottom of the ingame histogram. Done for mantis #1178, as the info in the screenshots shows everything in the histogram looking normal, but there's definite oddities in what's rendered. Maybe more logging will expose things. [NM] -- pb4_a4 released======================================================== - Work on mantis #1184. IA DLL allowed to go from A (anti-assault) plan to L (late) back to assault again. This makes it more consistent w/ MPI. Also cleaned up unused variables in IA/MPI code. [NM] - Work on mantis #1185 - clearArea/DefendArea plans check provideName. Done by switching more code away from the attackTargets/defendTargets lists, and into the IFCondition::FindObject(). [NM] - Fixes for mantis #1182, 1183. Wug's AIPs v3.6.1b, GH variant updates. [NM] -- pb4_a5 released======================================================== - Fix for mantis 1190 - silly bug in newly rewritten IA scav cleanup code. MPI did the right thing. [NM] - Fix for mantis #1198 - AV in upgrader plan, triggered by MOD. Multiple layers of fixes went in, starting w/ checkProvides needs to check for exact matches, even when it's on. If the exact ODF check succeeds, it doesn't bother doing the in-depth provides checks. [NM] - Fix for mantis #1195. Added [CraftClass] FireWhenCanHitFriends = false If this is false, firing is prevented when the unit thinks it'll hurt its allies in the process. If it's true, the unit fires anyhow. Cue up Weird Al's _Trigger Happy_ for these units. [NM] - Possible fix for mantis 1185 - the IsIdle() check now treats units with a command of CMD_NONE and command priority 1 as idle. [NM] - Fix for mantis #1196. Added, to ScriptUtils.h // Sets whether objects made with BuildObject() are automatically // slotted into the 'best' group (with SetBestGroup()). Also, if this // is true at turn 5, all units preplaced on the map will get // SetBestGroup() called on them if not already set. Stock 1.3pb4++ // DLLs set this to false, because they completely manage grouping. // For backwards compatability, this defaults to true if not called. DLLEXPORT void DLLAPI SetAutoGroupUnits(bool autoGroup = true); Also updated all the stock DLLs to call this with false at startup. This seems to provide the best mix of backwards compatability and work with Ken's changes for grouping in the stock missions. [NM] -- pb4_a6 released======================================================== - Fix(?) for mantis #1194. Added [ThermalMissileClass] ActLikeBZ2 = true If true (default), should act like BZ2 thermalmissiles before mantis #970 was applied. If false, this uses some code added by Ken from mantis #970. (Added between b74f3 and b74g, see above, search for #970). [NM] - Fix(?) for mantis #1137. Added [PersonClass] UseFastTransitions = true // If true, starts deploying/undeploying based on weapon selection, not animation finishing autoDeploy = true // Been this way since 71k If UseFastTransitions = true, it's best used w/ autodeploy = false. That combination should behave much more like BZ2 used to. Note: not all 4 possible combinations of UseFastTransitions/autoDeploy may work well. My gut feeling is that setting them to opposite settings may work best. Compiles but is untested. [NM] - Added a lot of range checks to Reticule, Sprite drawing code. It had asserts for a debug build, but those went away in builds for the public. Now, it asserts, then Does The Right Thing(tm), whining to the logfile then exiting w/o doing any damage. Same w/ ChargeGun -- made sure its charge level is within range on saving & loading, but no whining to logfile when things are in a bad state. [NM] - Added some bulletproofing to the Spawnpoint code. AV was exposed on some new maps by Dataanti when he didn't have any spawnpoints on the map at all. [NM] - Undid mantis #465 for stflyway.bzn . Fixes mantis #1207 - map didn't load. Probably due to CVS checkin of binary data when filetype was ascii. [NM] - Added some code on loading .bzn/.sav files -- if an object's matrix is invalid, it'll reset it to a safety position/orientation (i.e. at center of map), and whine to logfile. [NM] - Fix for mantis #1201 - AV in sprite. Caused by object model hierarchies not being identical on load. Had to do the following: (1) make marker code re-entrant, so that multiple nested markers could be done in binary savegames. (2) code to check count of nested object hierarchies had to switch from a simple sum-of-child/sibling-counts to a CRC of a flattened hierarchy w/ ODF checksums. [NM] - Asset updates - mantis #1209, 1210, 1200, 1188. [NM] -- pb4_a7 released======================================================== - Restored SatchelCharge's use of the cockpit timer. People complained about Ken's removal of it. Added [SatchelChargeClass] UseCockpitTimer = true This allows modders to disable things. [NM] - Possible fix for mantis #1225. Check for null pointer before dereferencing list. [NM] - Fix for mantis #1204 - added background to ingame stats display. Also added a F# key column so that people can track which ally is on which key much easier. I'm not 100% sure I'm happy with the size of the background at 640x480. [NM] - Fix for mantis #1219 - ST:Flyaway updates, w/ corrected heights on objects. [NM] -- pb4_a8 released======================================================== - Updated message window for crashes to include (1) Windows version info, (2) last 4 lines printed to battlezone.log file. This may help with retrieving info on some crashes. [NM] - In Full build installer, replaced SHCreateDirectoryEx() with SimpleFile::MakeDirTo (my code) for some more Win98 compatability. Also found a few cases of that function being called in bzone.exe/bz2edit.exe, also replaced w/ same code. (Used in creating custom pilots/saved dirs if the .cfg called for it). I think Win98 w/ IE 5.0 or higher is reqired. [NM] - Backdrop for ingame scores panel toggles w/ rest of contents. [NM] - A lot more logging for mantis #1203. It'll spam the messagebox with a lot of detail if it notices some MW lag going on. You'll want to have GamePrefs.ini::KeepChatLogFile = true turned on to capture all that it dumps out. I'd need to pour over those logs to get a little more info on what's going on, possibly also w/ a screenshot with the histogram up like before. [NM] - Possible fix for mantis #1216 - pilots will trigger their special on either deploying, or via the input bound for the special weapon. [NM] -- pb4_a9 released======================================================== - Increased logging for the case of loading into a small buffer. Should die w/ a callstack now. [NM] - Added GamePrefs.ini :: FilterOutNoMap, LagSpamTimeout, MinMWLagSeconds, MinLaggedPlayerSeconds, MinReallyLaggedPlayerSeconds, UseScorepanelBackdrop. See comments above them for more info. [NM] - Even more logging for the MW lag case (mantis #1203). [NM] -- pb4_a10 released======================================================== - Some slight tweaks to the MW lag cases. Might be better; do try this out. [NM] - Undid fix for mantis #1216 (done for a9). Back to the code that was in a8 or before, where specialweapon is triggered if (1) the input for triggering the special weapon is done, or (2) [autodeploy=true and input for deploy is true]. I'm really not understanding what's broken, and why, with these various bug reports -- please be more specific as to (1) what you're seeing and how that differs from (2) what is expected. Saves would be helpful, too. [NM] -- pb4_a11 released======================================================== - Asset updates: mantis #1229, 1221 (wug's aips v4.0), 1237, 1231, 1170. [NM] - Changed default value for persons: [PersonClass] autoDeploy = true // Been this way since 71k This seems to allow 'c' to work to deploy the jetpack. Hopefully nothing else is broken now. :( [NM] -- pb4_a12 released======================================================== - Fix for an issue noted on pb4 boards. Added [AirCraftClass] AlwaysDeployed = false AlwaysUndeployed = false Note: setting both to true is probably a bad idea. If either of these is true, then requests to change state are ignored. Compiles, but is untested. [NM] - Fix for part of mantis #1200. Red_Devil noticed that the tug in isdf03 behaved significantly differently in b71c -> 71d. Cause was due to "Fix for mantis 346. Tugs should go to navs fine now." . Now have a fix that seems to fix mantis 346 as well as the tug in isdf03. [NM] - Work on mantis #1199 - hoverscavs & deploy height. Added [DeployableClass] HoverScavDeployAtAltitude = true If this is true, it uses the setAltitude to offset its position during deploying. If false, it ignores setAltitude. 1.3pb3 effectively treated this as false. [NM] - Fix from mantis #1240 - fbstroin (and related) changes. [NM] -- b71b released=================================== - Deselecting the Armory clears its build queue if it is not actively building, such as when waiting for a location (mantis #463). [Ken] - TerrainClass::AlignTerrainReplace uses the center of the model's axis-aligned bounding box instead of assuming that the matrix position is the center. This should produce better results in general, though there are objects with screwed-up positions caused by the mesh reader "helpfully" re-centering the geometry. [Ken] - Fix for mantis #581 (pools not showing smoke). Breakage was caused by change for mantis #519, so please re-test that after I made pools work again. [NM] - Local fix for #582 - reverted back some of Ken's changes to the grouppanel code. It's got too many side effects for now. [NM] - Fix for mantis #585 - updated bzgame_weapon.cfg. [NM] -- b71c released=================================== - Disabled automatic group assignment in SetTeamNum, BuildObject, and GameObject::PostLoad. Early mission scripts relied on GroupPanel's selective blindness, as well as the group assignment side effect of SetTeamNum. Making group assignment explicit seems to have resolved most single-player problems (mantis #383, #582). [Ken] /* Split dynamics update to apply half of angular acceleration before applying angular velocity and half after, just like linear acceleration. This "midpoint method" produces positions (and orientations) identical to the closed-form solution for constant acceleration. [Ken] */ - Removed code from Strategy02 that set player and recycler health to 1), allowing instant-action maps like chill.bzn to work normally when run from the command line. (I use chill.bzn as a testbed for base building, driving around, and spawning enemies.) [Ken] - Disabled code in Planners.cpp that ran the planning system very aggressively for the first several seconds. This would mostly affect high-TPS games, but didn't seem to make much difference. [Ken] - Converted the widely-used sequence of GroupPanel::FirstEmptyGroup() followed by GroupPanel::FirstMatchGroup() into a single function, GroupPanel::GetBestGroup(). This is mostly a source-code change with no behaviour change, though a few places get the benefit of the additional FirstMatchGroup. [Ken] - Fix for mantis 346. Tugs should go to navs fine now. [NM] - Fix(?) for mantis #587 - dialed down optimizations in the functions potentially called by WorldPart::SaveAll, which is the last function I can recognize on the stack. Keeping frame pointers should let me get more info if this happens again. [NM] - Fix for mantis #474 - updated(==reverted) cewcap01.msh to the one from data.pak. [NM] - Fix for mantis #576. Added to AIP files: [Plan#] planType = "SwitchAIP" MissionTime = -1 // # of seconds that must elapse before this plan is done This is a time *relative* to when the AIP was started, NOT total mission time.. Values less than 0 will not use this timer. This can be considered another condition that must be matched for the plan to be executed. [NM] - Fix for mantis #579. Added [GameObjectClass] PowerupRaceMask = 134217727 DeployedPowerupRaceMask = 134217727 The above are bitmasks against the race (i.e. first character of the ODF filename) of the powerup. 'a' is the first (lowest) bit with a value of 1, 'b' the next lowest with a value of 2, etc. After 'z', there's one more usable bit, which is used for when the powerup's ODF doesn't start with a letter, for 27 usable bits. If a bit is set, then the powerup is usable. Like mantis 371, if [GameObjectClass]::CanAcceptPowerups is false, then this value defaults to 0. Note that a powerup must pass *both* this mask and the mantis 371 to be accepted. [NM] - Fix for something mentioned recently on boards. Added to aip files [IdleDispatcher] sendAllUnitsOnStartup = false If this is true, then it'll send all offensive units (i.e. everything but scavs, turrets, const rigs, and service trucks) at a random target (per item, not all at the same target). This is done once, at AIP 'startup'. This is not guaranteed to kill off all the AI's units, but it should shake them up a little. And hopefully the player too. [NM] - Fix for mantis #406, probably others. Killed the 'followgroup' code when multiplayer is on (not just multiworld, as you could do a 1-machine MP game w/ MW off). This is used by animals (where it crashed the most), as well as FollowTask, GetServiceTask, GotoTask, RescueTask, and some parts of WingmanProcess. This may well have some side effects; my understanding of the code is that it should behave as if there's no follow group and path independently of other units. [NM] - Edit control no longer clears contents when tabbed into, as that had been bothering me for the longest time. It turns out that the "tab" input was being received as a KEYCHAR event, and replaced the selected text. Now it explicitly ignores tab as KEYCHAR. [Ken] -- b71d released=================================== - Fixed severe Armory breakage caused by the last change. Now, instead of trying to clear an inactive build queue on deselection, it does it on selection. [Ken] (== mantis 589 - NM) - Reverted the above dynamics change, as it was the cause of all the interpenetration problems. I have no idea why it would, but it did, so it's gone. BZ2 code is extremely fragile, so changing stuff like that always seems to lead to tragedy. You would think that I would have learned that by now... :P [Ken] - Twiddled CollisionArray polygon test to give it more "thickness", making it more resistant to interpenetration. Craft collision now allows collision to "back out" of penetration a bit. You can still "work" the nose of a craft through a corner by shaking it back and forth while pinned, but it takes a lot more effort. [Ken] - Undid my change to SetBestGroup, as it needed to check for matching groups first and then empty groups whereas all the other places did it the opposite way. That reversal broke MPI with large or huge starting forces, making large numbers of units uncommandable. [Ken] - Added a real Quaternion multiplication operator based on code found at http://www.gamasutra.com/features/19980703/quaternions_01.htm. Nothing uses it yet, but it it may come in handy in the future. [Ken] -- b71e released=================================== - Fix for mantis #590. PowerupRaceMask/DeployedPowerupRaceMask now default to the values shown above if not specified in the ODF. [NM] - Some work on mantis # - added some logs to battlezone.log and the ingame messages box. If you see "ComputeFar bailing at check 1" (or check 2), let me know. [NM] - Some work on mantis 488 - noticed the code wasn't always handling buffer lost errors. Made it more robust. [NM] - Fixed SelectionDisplay object bounding box "popping" on world swap. SelectionDisplay::LoadShow would set the item bounding sphere pointer to the GameObject's bounding sphere instead of the GameObjectClass copy used everywhere else. Since the GameObjectClass bounding sphere is static, LoadShow doesn't even need to bother updating it. [Ken] (This may be mantis 423 - NM) - Fix for mantis 593 - undid change to gototask.cpp - allowed it to use followgroup. Animals and the other items above should still check for SP vs MP, though. [NM] - Fixed text stretching when centering text too wide for an interface control. The code was using unsigned integers, which wrapped around instead of going negative. [Ken] - Converted BZ1-style bzone.fnt to BZ2-style bzone.bmf, and converted the sprite-based font renderer to use the normal font system instead. The result looks identical to the old way, as the font itself is the same. Relatively few places use that code path (mostly debug stuff), but it was something I had been meaning to do for a long time. [Ken] - Fix for mantis #483 - ability to disable turret compass from escape pause screen. [NM] - Fix for mantis #401. This may help fix sync errors in other cases as well. [NM] - Fix for mantis #553 - units that are 9'd should produce a message and adjust scores. [NM] - Not a fix for mantis #591, but I can't repro it here. Added more callstack info to some of the functions listed in the callstack. [NM] - Fix for mantis #348. Added [FactoryClass] KickAllCraft = false If this is true, then all units built by a factory will get the same kick that empties currently do. If this is false, only empties get the kick. You should be able to use [FactoryClass]::MultVelXZ to modify the strength of that kick. Also noticed that MultVelXZ was being applied only when scaleVelY was not-zero; made it applied all the time. [NM] -- b71f released=================================== - Shell background music (from .wav/.ogg) plays properly when efx volume is set to 0, but music volume is > 0. [NM] - Fix for mantis #557 - attacker plan would find/send the same ship 4 times (or however many times the AIP called for), so sent groups were a little smaller than expected. Also tweaked the force-matching code, as it uses the same paradigm. [NM] - Fix for mantis #597. Creating savegames works once again. Over-optimized things. [NM] - Undid followgroup changes for FollowTask, GetServiceTask, WingmanProcess. Only the animal processes still make the SP/MP distinction. Hopefully this fixes #595, 596. [NM] -- b71f2 released=================================== - Undid followgroup changes for UnitTask. Only the animal processes still make the SP/MP distinction. Hopefully this fixes #595, 596, 603. [NM] -- b71f3 released=================================== - Fix for mantis 598 - updated splash.dxtbz2 to avoid artifacts on ATI graphics cards. Also updated BZ2DXTOptions.cfg so that future runs of things-- which is what generates all the .dxtbz2 files used. [NM] - Fix for mantis #602 - tweaked ivrecy.odf. If this is successful, the same changes should be made to the approximately 17,523 other ISDF recy variants. Give or take a few. [NM] - Fix for mantis #594 - LOCBowl had items spawning on team 1, corrected to be on team 0. Due to size, will be in next full build (b72). [NM] - Fix for mantis #439. Added to AIP, [Plan#] sections planCondition = "FriendlyExists" planCondition = "FriendlyUnits" planCondition = "NotFriendlyExists" planCondition = "NotFriendlyUnits" These can be in any of the condition places. A "FriendlyExists" is an item on a friendly team, e.g. allied teams or team 0. "Exists" will check only the same team as the AIP; "HisExists" is for hostile units. The other three cases should be relatively easy to figure out from there. Received only minimal testing. [NM] - Fix for mantis #604. For factories, whenever it reads in buildItem#, it also reads in buildEmptyItem#, whether grouped or not. The buildEmptyItem parameter is still read, and if it is > 0, will zap out a whole group/row. Note: a factory cannot have the exact same ODF in two places, one set to build empties, the other w/ AI -- the first one will set the AI presence/absence. Note: this parameter takes a boolean, and should be paired with a valid entry, like: buildItem3 = "fvhtank" buildEmptyItem3 = true // note: default = false, i.e. build piloted Compiles but is pretty much untested. [NM] - "Fix" for mantis #580. If an internal exception happens, it's logged to battlezone.log file, and a messagebox telling the user to go look at that file should appear. [NM] - Fixed up tracked vehicle physics (mantis #153, #197). The long- standing misbehavior was the result of two interacting problems: the collision contacts were too low on many vehicles, so they tended to "drag" on the ground. Second, collisions forced velocity into the treads in such a way that it overrode controls, leading to "sticking" problems. I now have tracked vehicles automatically computing their hull sphere (geometry minus treads) so COLLISION_RAISE is no longer necessary, and applying the change in linear and angular velocity as a result of collisions into the treads instead of blindly overriding them. [Ken] - Reduced the tread static friction to 1.0 (slightly better than rubber on asphalt), reducing "weeble-wobble", wheelies, and wall-climbing behavior in tracked vehicles. Relatively modest linear and angular acceleration values are now perfectly playable, so extreme traction is no longer necessary. [Ken] - Reduced accelThrust and accelSteer on the ISDF Recyclers in the addon directory, as they were set to abnormally high levels for a vehicle of that size. [Ken] -- b71g released=================================== - Mega-oops. Code for #604 turned all built vehicles unpiloted. Fixed. [NM] -- b71g2 released=================================== - Added support for ODF inheritance. The classLabel property can now reference another ODF, though the prototype names are still valid. This can greatly shrink the amount of data inside a derived ODF, as only the differences need to appear. [Ken] - Improved property inheritance for game object classes where possible. There are some properties that may not inherit correctly, particularly the MorphTankClass duplicates of GameObjectClass, CraftClass, and HoverCraftClass properties. I'll have to figure that one out. [Ken] - Improved property inheritance of weapon, ordnance, and explosion classes where possible. There may be some properties that do not inherit correctly, but most should behave as expected. [Ken] - Tweaked TrackedVehicle physics origin, setting it to the center of the full bounding sphere instead of the hull. It should be significantly lower now, reducing wheelies and leans. If it keeps causing trouble, I can set it to an even lower position. [Ken] - Converted InfoDisplay to use an interface list box instead of drawing text directly. This fixes the lack of newlines (mantis #599). [Ken] - Added support for explicitly specifying weapon groups (mantis #513): [GameObjectClass] weaponGroup<#> = // group number, -1 for automatic Hardpoints with automatic grouping join the group of the most recently assigned similar hardpoint, regardless of how that hardpoint got there. Mixed-type groups act like permanent multi-selection, though the weapon status indicator only lists the last weapon in the group. [Ken] - Weapon powerups skip over hardpoints containing the same weapon the powerup provides unless that weapon has used up some of its local ammo. They also affect a single group at a time, though this only comes up for otherwise-matching hardpoints placed in separate groups. [Ken] - Added damage over time and done explosion to LeaderRoundClass, making it a more general "sticky" ordnance (mantis #37): [LeaderRoundClass] damageValue(N) = damageValue(L) = damageValue(H) = damageValue(S) = damageValue(D) = damageValue(A) = xplDone = The damage values are rated in damage per second. The explosion only takes place when the ordnance has stuck onto a target. [Ken] - Added support for shifting TrackedVehicle center of gravity. [TrackedVehicleClass] CENTER_SHIFT = // -1.0 for bottom, 0.0 for center, +1.0 for top The default of -0.4 lowers the center of gravity to the previous value, reducing "wheelies" and "weeble-wobble" drastically. [Ken] - Increased IControl::RenderCtrlText internal buffer to 256 bytes. This was previously 128 bytes, and long names in the IRC chat lobby could overflow it and crash. [Ken] - Tweaked ICViewer control to add the mesh radius to the mesh distance, greatly reducing the chance of the computed field of view being invalid. (The "Tech" view in the BZClassic shell single-player mission screen had a view distance smaller than the radius of the NSDF Recycler, which is why it tripped up.) [Ken] - Tweaked CommandPanel to make it more-or-less impervious to missing controls, and moved redundant code to utility functions. [Ken] -- b71h released========================================== - Weapon powerups preferentially replace selected weapons, allowing the player to decide where the weapon goes. [Ken] - Extracted common functionality between GameObjectClass, WeaponClass, OrdnanceClass, and Explosion class into EntityClass. For now, it "emulates" the derived classes by reading from their root section. All four types now share a common "name space", so a single ODF can no longer contain multiple types (which nothing actually did). Due to conflicts, two classLabels have changed: [OrdnanceClass] classLabel = "leader" // was "targeting" [GameObjectClass] classLabel = "spraymine" // was "spraybomb" For now, the root types are still not interchangeable. [Ken] - Weapon powerups now consider all matching hardpoints, giving selected hardpoints priority. The previous version sometimes misbehaved. [Ken] - Fixed some leftover issues from the EntityClass change. GameObjectClass contained some data that was supposed to have been moved to EntityClass, leading to all sorts of trouble. [Ken] - Fix for mantis #588. (Not 100% sure, but it seems like the best guess to me.) ibnav.odf updated so that it can't be an idle dispatcher victim. Also made idle dispatcher ignore all items with a maxHealth = 0, i.e. invincible. It's fairly pointless to attack those items. [NM] - Switched to dlmalloc for the code (available from http://g.oswego.edu/dl/html/malloc.html ). This has proven itself to be faster and more efficient than the DevStudio memory libraries in tests at work. Also defined _STATIC_CPPLIB so that our custom operator new will be picked up by std::string. [Microsoft has the really annoying habit of giving you an 80% solution, where an operator new is picked up by std::vector and other containers, but not std::string unless you find the magic keyword for the other 20%. Murphy's law, however, says that _STATIC_CPPLIB will give me another 18%, and leave the last 2% for something else. Grrr] dlmalloc is also a bit more sensitive to memory manager misuse than the standard allocator, so there may be some "this app has requested it be terminated in an unusual way" messages if there's any code stupidities. That's a good thing in the long run. [NM] - Added ParameterDB::GetEntityClass functions for future use. [Ken] - Added some thread priority, affinity masks to GamePrefs.ini. See comments in there. [NM] -- b71i released================================================= - PoweredBuilding now supports "remote" terminal access, which disables the check that the user is still standing at the terminal. This is not all that useful by itself, but enables other features. [Ken] - CommBunkerClass (and CommTowerClass) use [GameObjectClass] CanSelect to control their selectability instead of a hard-wired hack. Upon selection, CommTowerProcess toggles (remote) terminal access to activate or deactivate the satellite view. To create a Battlezone 1 style Comm Tower: [GameObjectClass] CategoryTypeOverride = 9 CanSelect = 1 This feature is off by default. (mantis #249, issue 1) [Ken] - Nerfed the Base Panel so it can function with missing windows and child controls. The Cockpit and Map Radar displays correctly avoid trying to draw lines to nonexistent controls. It turns out that the Base Panel had ten potentially-visible slots, overlapping the space filled by the Group Panel, so I deleted the extraneous controls. [Ken] - Renamed the ISDF mortar shell ordnance mortar.odf to mortar_c.odf, avoiding a conflict with the MortarClass prototype (mantis #612). [Ken] - Fixed a dumb bug in WeaponPowerup that did the opposite of what I meant when trying to restrict weapon changes to a single group. [Ken] - Added safety checks to ParameterDB to ensure that nothing ever uses a prototype class directly. That should avoid problems like the mortar crash from recurring. [Ken] - GameObjectClass and MorphTankClass now process weaponMask from a string of 0 and 1 into a bit mask instead of a decimal value. This saves Craft and MorphTank from having to do extra work. [Ken] - Replaced weapon group-cycling code with a modified version of the cycling and linking code from Battlezone 1. With grouped hardpoints, the code behaves identically to BZ2. With ungrouped hardpoints, the code behaves identically to BZ1. It's the best of both worlds! (mantis #254, #513) [Ken] -- b71j released================================================= - Fixed a crash in UserProcess when picking up a weapon powerup for a currently-empty hardpoint. (It wasn't checking to make sure the weapon pointer wasn't NULL.) [Ken] - Fixed a dumb bug in WeaponPowerup where I was using GetGroupSlot() instead of GetSlotGroup(). Its should be working correctly now. [Ken] - Fixed a large number of compiler warnings, especially ones about insecure C runtime library functions. [Ken] - Got things working cleanly with stack and uninitialized variable checks in the Debug build, which may help trap problems. [Ken] - Cleaned up the implementation of TextRemap, though not much uses it beyond the "Please insert the Battlezone II CD" message. [Ken] -- b71j2 released================================================= - Disabled permanent auto-link for identical weapons. This difference from BZ1 was necessitated by the lack of weapon priority, which made it hard to get a weapon placed into the second (or higher) hardpoint in the link group. (Note: this change was subsequently reversed) [Ken] - UserProcess cycles the current group indicator independent of linkage and selection while weapon_multi is held, even when the unit forbids weapon toggling. The group indicator reverts back to the selection when weapon_multi is released so it won't stray too far. [Ken] - WeaponPowerup now offers better control over where to place the weapon, choosing empty hardpoints first, current group second, selected third, and unselected last. (BZ1 ensured empty hardpoints were filled first by assigning them absolute minimum priority.) [Ken] - Restored permanent auto-link by treating weapon_multi as a separate state instead of overloading the unlinked state. [Ken] - Renamed ordnance whose names clashed with prototypes, as they crashed the game when used. BZ2's asset naming scheme was very inconsistent, leading to this sort of problem. (mantis #611, #617), [Ken] - Fixed save games with the smaller UserProcess linkage data (version 1156). In thit case, UserProcess duplicates the unlinked state into the weapon_multi state so it will at least work. [Ken] - While fixing the save games, I corrected a number of bad copy-paste errors in UserProcess save/load. Sloppy, sloppy, sloppy... [Ken] - Added "canSelect" parameter to WeaponClass, indicating whether or not the weapon should be added to the group cycle, set to true by default. ShieldUpgradeClass sets this to false, as those weapons have no useful "fire" action. Person "pack" weapons (previously unselectable) don't, and so will be selectable unless marked otherwise in the ODF. [Ken] - Fixed an implicit dependency on turns-per-second in APC physics. The code is still pretty screwy, but it's better than it was. [Ken] - Added an autoDeploy parameter to PersonClass, set to true by default. When enabled, the person deploys (crouches) on equipping a weapon marked as Assault, and undeploys (stands) on equipping a weapon not marked as Assault, as usual. When disabled, the person instead uses the "deploy" control, and uses the switchMask like a MorphTank. [Ken] - Fixed b0rked geometry for weapons with visible geometry. It turns out that I could just let EntityClass handle it, and it worked fine after that. [Ken] - Fixed inappropriate use of animation maxFrame instead of endFrame. This fixes a visible "pop" in Person when standing up from a crouch, and an off-by-one-frame timing error in Deployable. [Ken] - Replaced the five separate usages of "get mask" functionality with a common ParameterDB::GetMask function. Code reuse is good. :) [Ken] - Tweaked Person grounded/flying check and made JetPack explicitly set the flying flag. This prevents the Person from incorrectly "sticking" to the ground instead of sailing off into the air. The "grounded" threshold distance is less than it was (0.01m instead of 0.125m), but the ISDF Pilot stuck to the steep cliffs at the edge of chill.bzn without slipping. [Ken] -- b71k released======================================================== - Fixed auto-linking. Stupid copy-paste error. :P - Weapon powerups treat an auto-deploy Person as a special case, applying to all matching hardpoints instead of the a single group. BZ1 would have had the same problem if it supported pilot weapon upgrades. [Ken] - Fixed MPVehicles list parser broken by my ham-fisted switch-over to the secure C runtime. [Ken] - Fixed implicit dependency on TPS in PowerUp powered-flight physics. This makes Day Wrecker bombs fall at a consistent speed, and may help powerups catapulted from the Armory land closer to their targets. [Ken] - Re-added ExplosionClass::Cleanup functionality to clear out the default ExplosionClass list. This fixes a number of crashes caused by things pointing to the old (deleted) default explosions (mantis #614, #621). [Ken] - Fixed uninitialized state matrix in the "null" MeshRoot, as it tripped an is-finite check after restart in a GameObjectClass using it. [Ken] - ASCII save quotes strings to preserve embedded spaces, and retains labels for class-type fields instead of substituting a generic "config" (mantis #501). Older builds won't skip over quotes, and so will choke on new ASCII saves. [Ken] - Fixed incorrect control group height in the Control input page so the bottom items ("Multi-Select Weapon Toggle" and "Abandon") are now bindable like they should have been (mantis #490). [Ken] - Fixed groupable TurretCraft, which unlike other craft have to deal with terminal and power state (mantis #545). In addition to saving its original team, it now saves its original group so it can restore its slot. [Ken] - TurretCraft now supports Building-style edges, tunnels, and replacement using the [BuildingClass] section (mantis #481). This is specific to the TurretCraft class, and creating a non-TurretCraft terrain-owning craft via ODF trickery will result in tragedy. ReplacesObject and AlignsToObject are turned off by default, like a standard building. [Ken] - Refactored StatusDisplay to make it much more customizable. It now uses VarItems extensively instead of trying to directly manipulate interface controls, allowing fairly drastic changes. If the StatusPanel contains a HullGauge or AmmoGauge control, it will use them instead of the built-in custom-drawn shapes, and apply the standard color scheme. Variable items: "status.hull.ratio" (float 0..1) "status.hull.text" (hull percentage) "status.ammo.ratio" (float 0..1) "status.ammo.text" (shots remaining) "status.weapon1.name" (weapon name) "status.weapon1.shot.count" (local shots remaining) "status.weapon1.shot.text" (local shots remaining text) "status.weapon2.name" (weapon name) "status.weapon2.shot.count" (local shots remaining) "status.weapon2.shot.text" (local shots remaining text) "status.weapon3.name" (weapon name) "status.weapon3.shot.count" (local shots remaining) "status.weapon3.shot.text" (local shots remaining text) "status.weapon4.name" (weapon name) "status.weapon4.shot.count" (local shots remaining) "status.weapon4.shot.text" (local shots remaining text) There is not a VarItem for weapon type, as icons cannot use VarItems to update their image. (mantis #249, item 2) [Ken] - Changed ObjectSpawn label parser to ignore non-numeric values after the last underscore split so the delay specified in ObjectSpawnClass applies (mantis #48). Previously, it would convert the non-numeric value to zero and use that instead of the default value like it should have used. [Ken] - Added "!LeftCtrl" to "frontal_target" ("T") and "mode_select_0" ("`") in bzinput_common.cfg, eliminating control conflicts with other bound inputs. (mantis #30). BindDiscrete supports two simultaneous physical inputs in a "chord", so this is the easiest way to prevent spurious actions. [Ken] - WeaponPowerupClass defaults to the weapon name only if unitName is blank (mantis #21). This allows more flexibility in naming powerups. [Ken] -- b71L released======================================================== - Fix to UPNP crash caused by Ken's aggressive security updates. [NM] -- b71L2 released======================================================== - Fixed a crash in Debug::Error::Err where a LOG_ERR call attempted to process the integer line number as a string. Oh, the irony... [Ken] - Reverted all of Ken's changes to mpvehicles.cpp to make MP work once again. (Repro steps: put "/host 0" on cmdline, launch any map, note no vehicle ingame). [NM] -- b71L3 released======================================================== - StatusDisplay now cleans up its command handler, which had been crashing the game on restart (mantis #627). [Ken] - DayWrecker::Explode now works more like the Mine equivalent, using the powered flag to determine whether it should detonate (xplBlast) or just die (explosionName), and copying the owner and team to the explosion to ensure proper damage credit. (Commando pointed this out.) [Ken] - Person triggers pack/special weapon with the "deploy" key (C) when set to autoDeploy (mantis #632). This got broken while adding the "turret tank: style control scheme. [Ken] -- b71L4 released======================================================== - Fixed GroupPanel showing units commanded by the mission script (mantis #630). The code that "scrubbed" the groups didn't check for groupability, so units that became ungroupable wouldn't be removed. This problem had been in the code for a long time... [Ken] - Updated LOCBowl.bzn to reference LOCBowl instead of LOCBowl2 so it will load correctly. [Ken] - Changed ParameterDB::Get functions to not ignore properties with blank values (mantis #626). This went unnoticed before as inherited prototype values tended to be "null" anyway. Once ODF inheritance came online, the old behavior made it impossible to clear a property back to "null". [Ken] - Fixed ShortPath::Update so it sets the open node cost value the same way ShortPath::Insert does. I don't know how much ShortPath gets used, so I don't know how much impact this will have. [Ken] - Added Commando's ODF-inheritance versions of ISDF and Scion Recycler (building) variants (mantis #626). Some of these rely on ParameterDB::Get treating blank values as legitimate, allowing derived ODFs to clear build items from the base Recycler. [Ken] - Added pitch/yaw/zoom to SatelliteView (mantis #343) and movement via throttle/strafe to SatelliteView and EditorView. Also fixed messed-up view area indicator in MapView when not looking downwards. [Ken] - Fix for mantis #605 -- asset checker concern. Keeping the details of the problem and fix quiet in this public log. Also fixed up one other area with similar code. Compiles, but not tested in practice. [NM] - "Fix" for mantis #610. If it happens again, it'll say something like "Could not find src NetSVarCRCs[#], hash 0x######## to the log file, rather than dying horribly. I'd like to get the values for those #s if it happens. [NM] - Work on mantis #520. Allowed vid.framerate to turn off the top-of-screen display completely, even in MP. MP uses its own measurer of framerate -- counts how long it took to render last 8 frames, uses that to guesstimate framerate. This calculation runs 100% of the time, and should be cheap enough to have no performance cost. This calculation is used by the onscreen scores/ping/fps MP display, as well as the graphics feature dropper. Its value might differ slightly from what vid.framerate shows, as they sample different periods. [NM] -- b71m released======================================================== - Person physics supports "eject" control in multiplayer after a one-second "debounce" period, allowing players to reset when they get stuck (mantis #380). This scores as a self-kill, so it should be used sparingly. [Ken] - Removed duplicate nepool01.odf which triggered assert on startup. [Ken] - For next full build (b72), compressed textures in bumps.pak into dxtbz2 format, moved them into patch13.pak. This removes the bumps.pak from the list of needed pakfiles. (Probably should have the installer delete that and the other texture pak files as they're deprecated now.) [NM] - Fix for mantis #451. Added commands for "network.session.guiban", "network.session.clearautobans", "network.session.gsoff" "network.session.gson" . Untested, but ought to work. [NM] - Fix for mantis #416. Added command "game.quicksave", which will save out a .sav game with the current time as the title/description. This does NOT work if multiplayer or multiworld is on. You should be able to bind this to a key, like the screenshot capability. [NM] - Fix for mantis #419. Added commandline "/svar # somestring" . Note: this works *ONLY* (1) when launching a .bzn via the commandline [UI will overwrite other svars], and (2) items read in by the DLL -- scanning the DLL source, it looks like only the following are supported: svar3 (MPI), svar5 (ST/MPI), svar6 (ST/MPI), svar11 (STCTF), and svar12 (DM). [NM] - Fix for mantis #449. Added a "No headlights" lighting option, sitting between "one" and "all." This is like 'all', but doesn't allow vehicle lights to be on. (Well, toggleable vehicle lights) Also added in gameprefs.ini settings to to turn this on/off as appropriate. [NM] - Fix for mantis #240 - (1) bumped max # of limitClass# from 8 to 32. (2) Made the provides count when checking against limitClass#. Compiles, but otherwise untested. [NM] - Fix for mantis #400 - (1) sniped AI craft should cause another to be spawned ASAP. (2) Added scriptutils.h callback to set a remaining lifespan on an object; sniped AI craft should stick around for 300 seconds max. If a player enters such a craft, the lifespan is sent back to the default infinite. Compiles, but otherwise untested. [NM] - Fix for mantis #352 - if a nav camera's owner is destroyed (bailout or otherwise), the viewport window from the nav camera is closed. [NM] - Fix for mantis #633 - a LOT of extra checks to make sure it doesn't dereference a null pointer. Will spam logfile/screen if something happens, looking roughly like ERROR: groupLists[#][#][#] is handle # obj ########, NO objClass If you see a message like this (with # replaced by values), let us know. [NM] -- b71n released======================================================== - Fixed weapon-switch multiplayer problems (mantis #634). UserProcess code copied from BZ1 used user_controls (global variable set by the input system) instead of userControls (local variable read from the move manager), so all player processes on the host ended up using the host's user controls for weapon switching. Replacing the user_controls usage with userControls like the rest of UserProcess fixed it. [Ken] - Generalized Construction Rig "add power" functionality so it no longer makes assumptions about nationality or power state (mantis #344). Instead, it checks for missing attachments directly, taking into account build cost and prerequisites. [Ken] - Planner no longer attempts to map provide/require names directly into class configs. Instead, it uses a new BuildDependencyCheck "provide map" (i.e. "what class provided this requirement") to look up potential builders. It also no longer assumes that the builder requirement will be the first one in the require list. [Ken] - Fixed the unsafe assumption in CellType that terrain-owning craft were TurretCraft. It instead checks for TurretCraft directly. [Ken] - Planner BuilderSlot function checks factory/recycler classes found through requirements to see if the class to build is one of the build items, and uses the team slot of that factory/recycler class if so. This should prevent problems with any cross-team requirements. [Ken] - Possible fix for mantis #633. Added another check (IsGameobject) before calling IsGroupable. [NM] - Probable fix for mantis #94 (multiple upgraders going at a target. However, the savegame for #94 doesn't work as expected after Ken's BuildDependencyCheck changes above. (Plans get hung up on no fbkiln, but there's a fbforg instead). So, this change is really untested. [NM] - Did asset tweaks referred to in mantis 636. [Side note: I *really* wish asset tweaks would be sent in with the same relative paths that they exist in patch13.pak . That'd save me a lot of time merging things in.] Only thing not done is the deleting of extractor.odf from patch13.pak (will require a new full build). [NM] -- b71n2 released======================================================== - Added early-out path in ParameterDB::Get class functions, so blank values don't trigger spurious warnings. [Ken] - Improved missing/prototype reporting in the ParameterDB::Get class functions, adding the config name to the output. This should make it easier to figure out where things went wrong. [Ken] - Further tweaks for mantis #449 - 'no headlights' means that a bit more aggressively. Still pops on for a fraction of a second during a worldswap, grrr. (Crashes are more important right now...) [NM] - More work on mantis 633 - didn't do the IsGameobject() test in enough places. Have one that fixes the crashes, but the build-empty-after-canceling-scav test might leave the scout in a weird grouppanel state. [NM] -- b71n3 released======================================================== - Changed Construction Rig "add power" menu to enable the option when any object in range needs taps added (regardless of scrap, power, or prerequisites). The power menu itself no longer shows objects that do not need taps added. [Ken] - Fixed the underlying cause of mantis #633. When I added a GroupPanel update between load and post-load to make sure TurretCraft could get an original group, that call would attempt to process handles before world conversion. As a result, it would sometimes get non-GameObject results and crash (or at least spam errors). The solution was stripping out that ill-placed update and moving it to the specific place where it was needed. [Ken] - Added clearBuildZone = 0 to fblung.odf so upgrades don't push them away from their normal positions (as seen in mantis #344). [Ken] - PoweredBuilding and TurretCraft create attached power taps as part of Init(). This solves the problem with non-powering taps not appearing until the Construction Rig was selected. [Ken] -- b71n4 released======================================================== - Fixed multi-selected weapons unselecting on release of multi-select (mantis #646). UserProcess was constantly updating the selection mask instead of only when link or cycle changed. [Ken] - Fixed doubled-up power taps in multi-world (mantis #654) caused by the above power tap change. Instead of adding them in Init (which conflicted with the subsequent Load), UpdatePowerState gets all taps to ensure that they have been added. [Ken] - Enabled weapon linkage by default in CraftClass, but added a profile option (single-player) and server option (multi-player) to control it. The server disables weapon linkage by default (just like before), but enabling it no longer requires a separate vehicle list or modified ODF files. This should reduce the combinatorial explosion of variant ODFs a bit. :) [Ken] - Fix for mantis #655 - AIP code was thinking things needed power when they didn't. [NM] - Fix for mantis #484 - don't allow things w/ IdenticalGroup = true to be selected w/ other items. [NM] - Added Commando's updated ODFs (mantis #465), now fortified with the recommended daily allowance of ODF inheritance. Also removed all of the now-obsolete weapon-link-enabled variants, their builder variants, and their entries in the vehicle lists. The weapon linkage server option now controls all of that directly. [Ken] - Changed _snprintf_s in cintools LoadCameraArray to sprintf_s, as the _snprintf_s variant damaged the stack when set to _TRUNCATE. [Ken] - Updated mission ISDF05 based on suggestions by lucky_foot, giving Manson's escorts names and distinct spawn points, and setting the team color to blue so his squad matches other missions. [Ken] - Updated mission ISDF04 with the same names for Manson and escorts as in ISDF05. Consistency for the win! :) [Ken] - 'Fix'(?) for mantis #652 - turned off callstack optimizations for all of planners.cpp - offset mentioned in crashlog was unreasonably large, so I need more info. (A 2-line function is not over 1KB in size, thank you very much.) [NM] - UserProcess now considers combat vs. assault when computing whether groups should be linkable. Previously, units like the Rocket Tank would consider their weapons linkable when they should not have. [Ken] -- b71o released=============================================================== - Fixed uncommandable Recycler in mission ISDF13 (mantis #657), and set the nav beacon to the correct localization string (mantis #674). [Ken] - Updated pilots and soldiers to use ODF inheritance, and added craft control parameters to the base ODFs. This fixes the Shabayev "back and forth" dance in ISDF02, among other things. [Ken] - Added weapon multi-select to play option menus. [Ken] - The [GameObjectClass] baseName property defaults to the class config when inheriting from a prototype class (e.g. "hovercraft"), and to the parent baseName property when inheriting from a non-prototype class (e.g. "ivtank"). Unless otherwise specified, the baseName will be the config of the root non-prototype class. [Ken] - StatusDisplay health/ammo gauges reposition correctly on video mode switch. When StatusDisplay::Mode got called, the status panel control had not yet had its screen position updated, so the gauges used the wrong positions. StatusDisplay::Mode now explicitly requests that the control update itself. [Ken] - CommandPanel now sets text and cost field states in the "select unit" menu. It previously neglected to do that, so the elements retained whatever state they had in the previous menu. [Ken] - Fixed the Armory in multi-world (mantis #639)... this time for sure! It turns out that ArmoryProcess was never getting the final CMD_CLOSE due to changes in the way the group panel worked. CommandPanel now treats CMD_CLOSE as an "instant" command instead of explicitly clearing the selection, ensuring that the command is broadcast to all selected units. The Armory itself no longer needs to clear its build queue on selection or deselection. [Ken] - Added GaugeImage() property to gauge control, which sets the texture of the filled portion and takes the same parameters as the background Image() property. [Ken] - Applied Red Devil's missile scout name fix. [Ken] - Fixed broken texture coordinates in ICSquareGauge::RenderSelf in the two-triangle case (mantis #668). It now draws itself correctly at all fill values. That may have been in there since the game shipped. [Ken] - Red Devil noticed that the MPI DLL's pathpoint name to preplaced vehicle cracker was still using 32-byte max ODF lengths. Bumped to 64 bytes for consistency. [NM] -- b71p released===================== - Commando reverted MPISurprise ivdrone_a.odf to its original version, removing inheritance. [Ken] - CommandPanel and StatusDisplay hull and ammo gauges now use ColorGroup indices (0 normal, 1 low, 2 critical, and 3 empty) instead of hard-wired color values. The command panel config uses "HULLGAUGE" for the green/yellow/red/black hull palette and "AMMOGAUGE" for the blue/black ammo pallete. SelectionDisplay and the curved StatusDisplay gauges still use hard-wired colors (for now). Custom gauges can ignore color indices by using a constant-color group such as "WHITE" (mantis #668) or define their own colors. [Ken] - Added Red Devil's updated Hover Pack (ighjetp.odf) (mantis #675). [Ken] - Added two more ScriptUtils.h callbacks: DLLEXPORT bool DLLAPI DoesFileExist(const char* filename); DLLEXPORT bool DLLAPI LoadFile(const char* filename, void* pData, size_t& bufSize); Existing DLLs don't use them, but I think OvermindDL1 ought to be able to put them to use. Compiles, but is otherwise untested. [NM] - Fixed model viewer control visibly clipping models (as seen in mantis #272 comments). The problem was that the control set the camera displacement on activation, but didn't update it when the model changed. A larger model would clip against the near and far clipping planes which had been set based on the first model. The control now sets the camera displacement to the value specified with SetModelDistance, and pushes the model back by the model radius during rotation. [Ken] - Updated CommandPanel "Select Unit" functionality so it doesn't rely on group selection. It collects selected units into the buttons and "locks" the sorting so it can clear the selection immediately afterwards. This avoids a timing problem for mouse-click access (mantis #677) and even supports multiple selected groups. [Ken] - Tweaked bitmap loader. It'll give more drastic errors when trying to re-read a DXT into an existing bitmap. (Right now, I'd rather force a hard exit than any sort of lockup.) Also changed messages like Bitmap::Create: ddx->CreateSurface ...One or more of the parameters passed to the method are incorrect. To have a third line, with some more parameters as to what it passed in. [NM] - Added Commando's ivmislm2 (Missile Scout Mk. 2) that got neglected in the last big ODF update. [Ken] - Updated MicroPlan to use the full angle value for steering instead of maximum steer for targets to the rear (z < 0) and the small-angle approximation for targets to the front (z > 0). For vehicles with low alphaSteer, the maximum steer could lead to oscillation. [Ken] - Updated UnitTask::AimAt to use a less "spazzy" variance technique. It now uses the "waver" technique from Missile, accumulating separate randomly-advancing "phase" values for steer and pitch, then applying a sine function to generate the actual steer and pitch offsets. Low- skill units tend to swing their aim direction around a moving target, but the pitch value doesn't "twitch" violently as it did before. [Ken] - Removed redundant aim variance from MorphTank::AimAt, as the UnitTask "wrapper" already handles that. [Ken] - Halved the omegaSteer and alphaSteer of the service trucks to reduce their tendency to go out of control (mantis #637). They previously had unusually high turn rates for a tracked vehicle. [Ken] -- b71q released===================== - Moved weapon icon updates into a common function (Weapon::UpdateIcon), and corrected a case where AddLocalAmmo didn't generate an ammo event or update its icon upon completely restoring the local ammo supply (so the icon never updated to its "full" state). [Ken] - Added "Recall" menu item to the Bomber per Commando's request. It uses MODE_CANCELBOMB as the menu mode, and sends a CMD_STOP to the AI process, which returns the Bomber to the Bomber Bay. [Ken] - Planner BaseBuilder::FindNextSpot uses its buildClass parameter instead of the oClass member, though the two never seem to be different so this change doesn't make any significant difference. [Ken] - Factory, Recycler, and Armory now treat the stalled-build state (i.e. not enough scrap to start the next item in the build queue) as "busy". This prevents the build from canceling when closing the command menu, as even a stalled build is still a build. [Ken] - Extended allowed sample playback rates to a minimum of 0 and a maximum of the audio mix rate. This specifically fixes the frequency of the MAG charge-up sound, which previously clamped against the previous limits of minimum 0.9x and maximum 1.5x sample rate (mantis #586). [Ken] - Added Red Devil's wire_ighjetp images (mantis #675). [Ken] - Changed Collapse to use its own simulation-time properties instead of CollapseMesh internal values, updated CollapseMesh to use WORLD_REALTIME clock, corrected CollapseMesh animation, and set default collapse time to a realistic real-world fall time based on building height. It looks a lot better now, and might even fix (rare) sync errors. [Ken] - CollapseMesh properly supports team colors, like ExtrudeMesh. [Ken] - Building::Explode used its flags.team value to initialize the Collapse entity team number, but that value became invalid after calling Remove. It now saves off the team number before removing itself (which is how Craft::Explode does it), so team colors should work properly. [Ken] -- b71r released===================== - Fixed incorrect inheritance of [WalkerClass] properties (mantis #679). A number of properties get processed fairly heavily after being read, and some would be processed even when inherited from a parent. Those properties are now only processed when read directly from the ODF. [Ken] -- b71r2 released===================== - The optional HullGauge control now correctly updates its color index (mantis #682). It previously used an unmodified copy of the ammo gauge case, which of course did nothing for the hull gauge. [Ken] - Updated gauge control to compute texture coordinates using the (integer) gauge fill rectangle, ensure texel alignment. The texture previously "warped" slightly as the texture coordinates changed but the rectangle itself did not. [Ken] - CollapseMesh now handles skinned models, allowing the Scion Matriarch and ISDF Extractor to collapse properly. Building::Explode creates the Collapse entity and sets relevant properties (like GameObject::Chunks does when generating the VehicleCrash entity) before removing itself, and initializes the Collapse entity later. [Ken] - Added checks in splat and mirror commands to prevent crashes when called in the shell. These really should be moved to the actual systems they control... [Ken] - Increased TwirlTrailRenderClass trail item limit and BoltRenderClass segment limit from 256 to 1024. This should prevent some of the warnings and dropped particles. [Ken] -- b71r3 released===================== - Fixed the messed-up reticule sprite caused by removing the float-to-int conversions. It now rounds to nearest, which may stop the horizontal pixel twitch effect (mantis #683). [Ken] -- b71r3 re-released================== - Fixed ordnance vanishing in multiworld. OrdnanceWorldPart::FindLockEnt was looking in the current world instead of the lockstep world, so the ordnance would get an entity from the wrong world. ConvertHandle would then find a world mismatch and return a null handle. [Ken] - Migrated FindLockEnt, SaveShow, and LoadShow from GameObjectWorldPart, WeaponWorldPart, and OrdnanceWorldPart to EntityWorldPart. All entities now benefit from this functionality. [Ken] - Updated Collapse and CollapseMesh to be fully multi-world capable. The CollapseMesh itself works more like ExtrudeMesh, with the fill and fade ratios updated from outside (by Collapse) and Render interpolating them. Collapse and CollapseMesh use SaveShow/LoadShow to transfer animation properties between visible worlds, avoiding visible glitches. [Ken] -- b71r4 released===================== - The Bomber now sets itself as the bomb's owner, so it gets credit for what the bomb destroys (mantis #685). This is consistent with dispensed ordnance from other AI-controlled units. [Ken] - Reduced BoltRenderClass segment limit from 1024 to 512, as the higher limit seems to provoke an occasional crash inside Camera::ProjectClip. A bolt render segment produces twice as much geometry as a twirl trail item, so this is actually balanced. [Ken] - Added support for horizontal layout to the ScrapGauge display (mantis #667). A gauge width of 0 triggers this behavior. A horizontal layout will need to different Pos(), Size(), and Geometry() values to align segments properly, especially when using Align(). [Ken] - The bzgame_scrap.cfg layout file now uses Geometry() and Align() to position gauge segments automatically, requiring no intervention from the ScrapGauge display. [Ken] -- b71r5 released===================== -- b71s released===================== - Fix for mantis #699 - IA map previews should appear when there's only a .dxtbz2 file for them. This issue only seems to affect SP, in my limited testing. [NM] - Reduced font sizes on IA map selection screen. Some map names were getting too big for the space provided. [NM] - Possible fix for mantis #695 - more logging when net varbs disappear. Also refactored code that whines about problems (e.g. this, bad ODFs, etc) to go thru a more centralized point -- fewer duplicated lines throughout the code. [NM] - Fix for mantis #693 - should behave better when copying text into system (Windows) clipboard. [NM] - Fix for mantis #692 - AV in GroupPanel::SelectGroup should be fixed. [NM] - Fix for mantis #689 - fixed case where limits could be reached at half the expected value. [NM] - Fix for mantis #661 - Added, for armories: [ArmoryClass] DropoffDX = 0 DropoffDZ = 32 This should parallel similar items under [FactoryClass]. Also made the armory look for a pathpoint 'dropoff_armory_#', where # is the team # for the armory. If that's found, it's used, ignoring the DropOffDX|DZ. Also tweaked the recy/factory code, because I was copying from it. It would check for pathpoint 'dropoff_recy_#' or 'dropoff_fact_#', only if the buildings were in the right base slots. Changed code for recy/factory/armory to look for 'dropoff_base#_#' if it's not in the default base slot. The first # is the slot, and the second # is the team. Compiles, but is relatively untested. [NM] -- b71t released===================== - Modified CommandPanel to support Text and Cost controls inside Item, though it also supports them inside a Text wrapper for compatibility. Simpler is better. :) [Ken] - BasePanel blinks power indicator using selection flag instead of visibility. [Ken] - GroupPanel recursively activates child controls like other displays. It doesn't seem to have much effect either way, though. [Ken] - Updated bzgame_base.cfg, bzgame_command.cfg, and bzgame_group.cfg to use ConfigureInterface() DefineControlType(), eliminating vast swaths of replicated control configuration and drastically shrinking those files and cleanly separating presentation from structure. The perl scripts that build them are no longer necessary, and creating versions for different resolutions should be much easier. [Ken] - Fix for mantis #706 (my feature request tracking bug). Added a bunch of audio functions to Scriptutils.h. This should allow modders to do all sorts of things, including some sort of background music player. See comments in ScriptUtils.h for more info. Compiles, but is pretty much untested. Please test. [NM] - Some work on mantis #690/699 - did some work to make sure the load screens behave better if focus is lost while loading. Also made bitmap code more resilient to surfaces being lost -- they'll try and call RestoreAllSurfaces(), as that seems to be the recommended DirectX call to make under such circumstances. Give this a try. If you still see problems, please try and submit the battlezone.log file after things go sour. [NM] -- b71u released===================== - Added in support for playing the CD's audio tracks as ogg files instead. To accomplish this, place files 'cdaudiotrack2.ogg' .. 'cdaudiotrack11.ogg' under addon -- or any other place that BZ2 can find files. If the 'Ingame Music From CD' audio option is set to 'On', and the Music Volume slider is > 0, then it'll look for those ogg files in preference to the CD (redbook audio) tracks. If you have a system that's in any way recent, this should be preferable to using the CD tracks, as there should be no pauses while the IDE drive takes its sweet time seeking to a new track and killing your framerate. I'm not going to provide those ogg files; if you have a legit CD, you ought to be able to use a program like CDex from http://cdexos.sourceforge.net/?q=download to rip from your personal copy of the CD and convert to ogg files. Or, provide your own soundtrack from your personal music collection, which I would hope is all legal. UPDATE: some other converters are: - http://audacity.sourceforge.net/ - free, but doesn't do batch conversions of wav -> ogg - http://www.nch.com.au/switch/index.html - nagware (free to download, but tries to get you to pay for an upgrade), does batch conversions. - Cool Edit Pro (was trialware, now purchased by adobe.com) - Goldwave from http://www.goldwave.com/ - nagware (free to download, but tries to get you to pay for an upgrade) I have to say, it is a little scary to see that the 1.3 patches are now larger than all the music tracks OGG'd up. Then again, some game demos have hit the gigabyte mark, so we're still on the relatively lightweight side. [NM] - More work on mantis #699 (BZ2 vs ZoneAlarm). Made the initial socket creation calls run in a separate, very short-lived thread. This is because I believe that the open socket calls are being intercepted and not allowed to complete until the firewall's message prompt is dealt with. Putting things on another thread should allow the main message pump and graphics redraw code to run w/o hinderance. Just a test though, I've not installed ZA on my box here. [NM] -- b71u2 released===================== - Fixed the recently-introduced "pitch jiggle" (mantis #687). The updated DoLookAt() function no longer normalized the target direction, as the new steer angle calculation didn't need it. Pitch, however, did still need need it and malfunctioned as a result. [Ken] - Fixed the all-white group entries appearing in multiplayer strategy (mantis #711). Recursively activating the window activated the extra groups, though GroupPanel normally switches them off for empty groups. Multiplayer strategy reduces the number of groups, though, and those extra groups did not get switched off properly. Reverting to a non- recursive activation corrects this. [Ken] - Further fix for mantis #699. Made the irc OpenSockets call run on a mini-thread, just like the hosting fix above. Should be unnoticeable to everyone who doesn't have a paranoid program like ZoneAlarm getting in the way. [NM] - Fix for mantis #718. 'CD audio' ogg tracks started in missions are stopped when going back to the shell. [NM] - Possible fix for mantis #713 - DefendArea will ignore units with a MaxHealth = 0. Might fix the problem noted, but without a proper save, I can't tell for sure. [NM] - Fix for mantis #716 - updated ibarmogh.odf. Did get a lot smaller; might want to look into that. [NM] - Fix for mantis #698 - audio system plays sound properly if game/DLL/etc requests a .ogg file by name, rather than specifying a .wav and hoping that it'd do a switcheroo and play the ogg instead. [NM] -- b71v released===================== - Fix for mantis #717 - BZ2 uses 64-bit time(), 64-bit _stat calls now in all the places I could easily find it. Not needed for another 30-odd years, but good to have anyhow. And, it squelches some compiler warnings. [NM] - Fix for mantis #707, possibly #715 also. Correctly recomputed whether lights are set on/off when loading a visual world. [NM] - Possible fix for mantis #409 - commbunker/commtower check is now an integer, not a boolean. Siege mode is triggered by a non-scav being close (250m) to the CPU's recycler for 45 seconds. Pilots may not count either. The CPU also needs to have built a commbunker/commtower for the DLL to go to siege mode. Also made the GetNearestEnemy() DLL callback ignore invulnerable items. [NM] - Fix for mantis #645 - added to AIPs, for 'Attacker' targetType1 = "blah" ... targetType# = "foo" Once a gap is seen in numbering, or an item points to an invalid config, scanning is stopped. (The only limit on # of targetTypes is memory, but I'd suggest that 64 would be a good practical limit.) targetType still needs to be present, and is the first possible victim of a plan. TargetType1 is the second possible victim of a plan, TargetType2 is the third possible victim of a plan, etc. The AIP processor will pick whatever target is closest to the first attacker when all the units are at the staging point. It checks all possible victims of all of the targetTypes, and uses whomever's closest. [NM] - Possible fix for mantis #552 - Attacker plans keep a list of targets focused on by a team, so that multiple attacker plans should focus on separate ones, even if the class is the same. Same concept as the upgrader plan updates above. The second part of the bug is not a bug, as using 'NotExists' and '==' comparison types will force it to check for *in*equality. [NM] - Fix for mantis #719 - added in support for LocalPrefs.ini . This file is read after GamePrefs.ini, and should allow for users to put specific overrides of items in GamePrefs.ini in their *own* file. If an item is not found in LocalPrefs, the value in GamePrefs is used. That way, people can have their prefs in LocalPrefs, and when I update GamePrefs, it shouldn't conflict with user's choices. [NM] - DLL callback PlayMovie() will now look for cineractive movies in all of the current .cfg's AddDirRecurse() dirs, not only data/Movies. For example, with the default bzone.cfg, it'll look in Addon/Movies first. [NM] - Fix(?) for mantis #340 - on ISDF05, increased distance recycler needs to be from "recy_deploy" pathpoint from 15 -> 25m before the cineractive starts. This starts the cineractive about the time the Shabayev's voiceover finishes. Not sure how this compares to what 1.0/1.2 had. [NM] - Fix for mantis #415 - for attacker/clearArea/DefendArea chunks in the AIP, added a new tuning value: searchRadius = 400 This value can be reduced from 400, but cannot go above 400. [NM] - Fix for mantis #367. Client's ammo is correct in visual worlds -- was getting extra resimulations when it shouldn't have. (Looking at the blue bar above the human in CTF: Canyons showed the issue a lot faster). [NM] -- b71w released===================== - Full build installer updates: (1) some code cleanups, more use of the secure CRT functions. (2) split off 'modder' assets to a separate download -- all .bmp/.jpg/.pic/.png/.tga/.xsi files, goes into a 6MB .7z file. (3) Full installer bundles vcredist_x86.exe (at a 2.75MB cost) and installs it as part of the process. This is a necessary step, but not everybody reads the fine print. (4) Added in some commandline support for the full installer. If the commandline starts with "/S /D=" or "/NOREDIST /S /D=", then the rest of the commandline is treated as the full path to install to, e.g. BZ2_v13_Installer.exe /NOREDIST /S /D=C:\temp\InstallTemp No quotes should be used after /D, if you're installing to a directory with spaces in the name. No GUI is presented during a commandline install, and it skips the check for a previously installed BZ2 copy in that directory. The "/NOREDIST" option skips the installation of the vcredist files. The vcredist_x86.exe file is always left in the BZ2 install directory, should a manual reinstall be desired. If you want to run that installer in silent mode, then run it as "vcredist_x86.exe /q:a", or the other possible commandlines documented at http://blogs.msdn.com/astebner/archive/2006/08/23/715755.aspx [NM] - Fix for mantis #726 - added fspilo.inf. [NM] - Fix for mantis #725 - GreenHeart Variant Update. [NM] - Work on mantis #7 (probably winner of the bug open the longest). Moved AI time calculations from floats (i.e. seconds since game started) to integers -- # of turns elapsed since game started. This is because of continual problems keeping float game clocks exact across MW/MP boundaries. Integers ought to be more reliable as values get large, due to floating point precision issues. This is a fairly dangerous change, as I might have gotten some less than/greater than signs flipped in the process of rewriting a LOT of stuff. Also, file formats had to change. I think I've got it backwards compatible, but I may have busted something. Do test. Also, found a more significant difference that could lead to AI popping -- several unitTask variables were't being properly saved and reloaded. This could also lead to resyncs-- I'm amazed it hasn't shown up on the radar more so far. [NM] -- b71x released===================== - Should be able to re-enter a craft you've exited. Also bugs w/ the 'being attacked' beeps, and objectified items fixed. Broke in time changes above. [NM] - Even more slight optimization changes -- used 'const Vector&' when possible, instead of 'Vector'. This should save some unnecessary copies of items. I doubt this'll be noticeable, though. [NM] - GameObjects, Weapons, Ordnance, and Explosions correctly set their entityClass. This is a new item added by Ken a while back, and was present, but unused. Doing this should fix occasional crashes seen in LoadShow when a handle pointed to the wrong object. (Mantis #712, 724) [NM] - Slight change to multiworld logic -- if the scheduled world swap is more than .3 seconds late, it forces it to happen. This might help with the occasional visual world being out of sync on slower systems. (Mantis #551, 710) [NM] - Fixed TwirlGroup memory leak. [NM] - Some slight optimizations, removing GetTickCount() calls from the code when possible. [NM] -- b71y released===================== - Fix for mantis #731 - inst006.bzn, mpiisland.bzn updates to re-add pathpoints. [NM] - Tweaked DM: Loc Bowl to have powerups on team 1, and also to make sure the internal name for the map's trn is 'locbowl' not 'locbowl2'. Recent changes were fixing one or the other, not both. [NM] - Mantis 728 - asset changes. Should be merged in properly. [NM] ---- 1.3 beta 72 released======= - Added multip_1a.png, multip_extra.png to sub-build distributions, and to .pak file in future full builds. Those two need to stick around because they're shell backgrounds, and aren't .dxtbz2'd. [NM] - Fix for mantis #739. Relaxed asset checks for some files. [NM] - Fix for mantis #725 - fixed assets that were submitted, but had errors. [NM] - Fix for mantis #735 - stack overflow caused by assets submitted w/ errors. fbstow.odf was submitted with a classLabel pointing back to fbstow.odf, which is a bad idea. Reverted back to the previous version of fbstow.odf, and put in code to detect such a condition -- and die horribly. Please test assets before sending to me, thank you. [NM] - Fix for mantis #738. Turrets work again. Broken as part of changes for 71x. [NM] - Fix(?) for mantis #734 - added another sanity check. May generate battlezone.log entries like: UHOH- don't know how to set pixForm for type=# If you see lines like this please let me know. [NM] - Fix(?) for mantis #723 - tweaked optimization settings to hopefully get more callstack info for crashes like what was seen. [NM] -- b72a released===================== - Fix for mantis #743. igsnip1.odf had a bad altName parameter. Also updated code to notice this error, and whine (screen & battlezone.log) about such a condition. This is something that modders will have to fix; as the logfile message says, simply commenting out the 'altName' line is the fastest/safest solution. [NM] - Fix for mantis #740 - updated fbmtow1.odf, fbstow.odf. Two different versions in two subsequent subbuilds... [NM] - Fix for mantis #741 - craft lifespan should be working once again. Yet another thing fixed after 71x. [NM] - On a resync/player join, shouldn't kill any OGG music playing in the background. Part of bug 737; this has the side effect of jumping to the next music track. I noted the cause, and Commando asked about fixing the effect in comments. [NM] - Removed calls to timeGetTime() left in the pathing code. It was part of debug build info, but the calls were being done in all configurations. This might help framerate slightly. [NM] - Started using lightweight mutexes in code, rather than EnterCriticalSection(). The lightweight mutexes are inspired by dlmalloc.c, which I've refactored out the code to look like this: // Lightweight mutexes. Some notes on their use: // // 1) At startup, initialize *pMutex=0 // 2) These are NOT re-entrant. If you call AcquireMutex() twice // from the same thread w/o a release between, it'll deadlock. // Similarly, calling ReleaseMutex twice is a bad idea. // 3) Generally, be sane about these. // AcquireMutex will return true if it ever had to Sleep(0) to // acquire the mutex bool AcquireMutex(volatile long* pMutex) { bool slept = false; // Code borrowed from dlmalloc.c for(;;) { if(!InterlockedCompareExchange(pMutex, 1, 0)) return slept; slept = true; Sleep(0); } } void ReleaseMutex(volatile long* pMutex) { // Code borrowed from dlmalloc.c InterlockedExchange(pMutex, 0); } - Rest of mantis #737 - added mutexes to the OGG 'fill buffer' and 'kill sound' code. I believe there was a chance the two could run simultaneously, which would lead to bad things. Also added an console command, 'audio.purge', which kills all sounds (including ogg), if you want to test hammering on the ogg kill code by using ingame music. [NM] - Work on mantis 733 - switch network code over to lightweight mutexes. This could be somewhat dangerous. [NM] -- b72b released===================== - Work on mantis #551 - changed multiworld build logic to be slightly closer to it was before I optimized out a lot of expensive clock calls, while still being overall more efficient than before. [NM] -- b72b2 released===================== - Reverted most of the lightweight mutexes in the network code. It seemed to run fine on my LAN in limited testing, but died in real life. :( Still using it for IRC, chat output, as that's a trivially non-reentrant case. [NM] -- b72b3 released===================== - Turrets should deploy now, once again. [NM] -- b72b4 released===================== - Fix for mantis #748, 753. Tweaked odf/cfg files. Thanks, folks. [NM] - Tweaked fix for mantis #739. Gameprefs.ini is now asset-checked once again, even though it could possibly be excluded. Please move your customizations into localprefs.ini. Thank you. (This is somewhat of a way to make sure localprefs.ini gets tested :P ) [NM] - Fix for mantis #749 - in bzgame_weapon.cfg, added space for a 4th digit of ammo; used to have space for 3 digits. In code, if the # of shots remaining is > 9999, it shows as 9999. A 5th digit would go under the blue ammo bars, so this seems like the least bad fix. (The 4th digit is already getting close to clipping, I think.) If you have over 9999 shots, I think there might be some balance issues, and it'd take *forever* to exhaust ammo. [NM] - Possible fix for mantis #751 - reloads some more textures when launching a mission. [NM] - Fix for mantis #391 - made SatchelPackClass ordnance show the # of shots. Note: because it deploys a GameObject, not true ordnance, it assumes that it has ammoCost == 1. That's somewhat arbitrary, but it's better than reading invalid memory like it used to. [NM] - Ordnance sound efx (from [OrdnanceClass]::shotSound = "blah.wav") is now updated every simulation frame. This allows sfx that was lost or never played due to distance to [re]start when acceptable. All ordnance, including bullets, missiles, etc support this. [NM] - More work on mantis #7 (AI Warp in MW). Path.cpp's SkipPoints() function would modify things differently in lockstep vs visual worlds. Made it more consistent. [NM] -- b72c released===================== - Fixed bug (mantis 755) that could cause 'buffer to small' errors, especially in MP. [NM] -- b72c2 released===================== - More work on mantis #7 (AI warp in MW) and pathing. Fixed another issue. I've spent a LOT of time on this, and am getting closer to saying "ship it," as the bugs I've found are significant enough to cause some serious warpage. [NM] - Added GamePrefs.ini|LocalPrefs.ini::MaxColorFade . See comments above it. Also made it properly multiworld aware -- it was accepting contributions from all worlds, when that's just going to stack up too far. [NM] - More work on mantis #551 - did a lot more looking, before noticing that my work a few subbuilds ago almost did the right thing. Changed 2-3 lines, and all seems reasonable to me. Also updated the histogram to show more info. [NM] -- b72c3 released===================== - Fix for mantis #756 - clamped variable to sane ranges. [NM] - Fix for mantis #772 - clamped variables read from .cfg to sane ranges, in order to avoid crashes. (Security code is jumping on sword to prevent serious issues; want to keep this under wraps.) [NM] - Fix for mantis #778 - full build installer tweaks: - Should rename off the 'saved' and 'logs' folders under $(MYDOCUMENTS)/My Games/Battlezone II if the version doesn't match. - Should also always create those folders, too. bzone.exe/bz2.exe changes: - Tweaked the code that creates the My Games/Battlezone II folder to use SHCreateDirectoryEx() instead, which is simpler/cleaner code. It'll complain to the battlezone.log file if it can't create it. - Check to see if they can write a logfile in the current directory on startup. If it can't (limited user acct on XP? running from a CD?), it switches to using MyDocs. [NM] - Added [ExplosionClass] StartUpright = false // if true, then initial matrix only uses passed-in position. false: use passed-in rotation & position. [NM] - Fix for mantis #765. Added, to all particle render base classes, such as xcarxpl.odf, under [Flame1] StartDelay = 0.0 // in seconds, should allow for a delay on starting particles. Values specified that are less than 0 are clamped to 0. This should work for any particle classes that count down to 0 to start things -- I'm not full sure if all do, but draw_emit and draw_twirl_trail both seem to do that. Also, note that for particles with a lifespan, the startDelay doesn't extend the lifespan -- e.g. a particle with startDelay=5 and lifespan=3 will be killed off two seconds before the startDelay is finished. [NM] - Fix for mantis #766 (crash in GroupPanel::SelectGroup) [NM] - Added GamePrefs.ini::SPPreferFPS . See comments above it for info. Might help with mantis #007, not sure. [NM] - More work on mantis #007 - all gaussian random #s used by AI are now calculated in sync, based on a 'complicated' formula involving the world turn and the craft's unique identifier. Also, made AIP code that detects out-of-ammo craft not do anything when MW is on -- this was causing lockstep vs visual world differences; mbikes were the most prone to this, as they've got a combination of (1) high velocity and (2) low shot count. [NM] -- b72d released===================== - Found some console messages about bad assets that weren't showing up properly. Fixed. [NM] - Tweaked fix for mantis #765. Above change was only to particle *render* classes. Now added it to particle *simulate* classes as well, such as xtherma.odf's [core] StartDelay = 1.0 Seems to work in limited testing. [NM] - Tweaked the histogram display code to show negative values for late as 0. Should reduce confusion. [NM] -- b72d2 released===================== - Asset tweaks from mantis 767, 771, 773, 787. Also posted a 'wheretoputassets.7z', which lists the proper hierarchies for files that live under data and addon, so that future asset submissions can go smoother from my standpoint. [NM] -- b72e released===================== - A bit more work on mantis #7; probably the last I'll do simply because I feel like I've spent hours on it with diminishing returns. Perfection in MW just ain't possible given how complicated things are, folks. Found one largish source of MW pops in the AI code, where it was trying to get the group's "target." It could do so by looking at all 'siblings' tagged as in that group, and use the first one with a target. Problem: in MW, units that are far away get optimized out of visual worlds. Changed things somewhat so that when a unit is assigned a target, it's stored for that group in one consistent place. However, this is NOT guaranteed to be consistent, because if the target is optimized out of the visual world, then it'll be as if that group has no target. This fix will work better in some cases, and shouldn't be any much worse. Old savegames with group targets won't be read identically anymore. There's a small chance that I botched something and there'll be a lot more resyncs, hopefully that won't happen. [NM] -- b72e2 released===================== - Some slight optimizations and crash fixes to GetNearest*() DLL callbacks. [NM] - Some tweaks to D3D startup issue seen by OvermindDL1. It won't give any messages about 'no meory available' during the first pass at enumerating DirectX/Direct3D devices. Also made it more explicit as to complaints about no devices in battlezone.log. I doubt this'll fix anything, but hopefully give me more clues. [NM] - Fix for mantis #769. Added [MachineGunClass] OneSoundPerShot = false // If true, will spam sound channels I'm iffy as to whether there's going to be any constructive results to setting this to true, but then again, I don't install most mods. [NM] - Fix for mantis #745 - another fix for lifespan broken as part of 71x. [NM] - Change to cannon shot sounds -- shouldn't trigger in non-active worlds. [NM] - Added GamePrefs.ini|LocalPrefs.ini::MapClusterCacheCount and MaxFramerate tuning values . See comments above them for details. [NM] -- b72f released===================== - Fix for mantis #813 - added another file to asset checks. [NM] - Fix for mantis #764 - ogg sounds should be played at their default rate as specified in the .ogg file. I never could repro this bug on my system here, but just put in an extra "force buffer rate" call on creating buffers. [NM] - Added GamePrefs.ini|LocalPrefs.ini::AggressiveCatchupWhenLate. See comments above it for details. Also added another line of text to the histogram. This may help w/ mantis 551, either fixing it or giving me more info. [NM] -- b72f2 released===================== - Fix for mantis 759. Added [GameObjectClass] teamlimitClass1 = "" // e.g. "ibrecy", *NO* ".odf" on item teamlimitClass1Count = 0 teamlimitClass1Text = "" Basically, these should act like another 32 limitClass items, but they check all allied units, too. I did a cut & paste on this code, so there's a chance I botched it somewhere. [NM] - Fix for mantis #818. Added these classes to return values possible in DLL callbacks: CLASS_EXPLOSION (Not sure if DLLs could ever see one of these) CLASS_BOID CLASS_BEAM CLASS_BOUNCEBOMB [NM] - Possible fix for mantis #782 - arccannon at higher TPSs. Just taking a stab here, not 100% sure. [NM] - Fix for mantis 762. Found some unintialized varbs in DR2 interface code. Not sure why it usually tended to work; preinitializing them to 0 seems to make it all happy. [NM] -- b72f3 released===================== - In GamePrefs|LocalPrefs, allowed MaxFramerate value to have a minimum value of 30. Also split up the SleepInGame* values to be split between 'slow' and 'fast' values, with some tweaked defaults. Please don't override these defaults in localprefs until you've had a chance to test these. Also, please don't set the SleepInGame*_Amount to a value greater than 1, as comments indicate. [NM] - Added a 'low' framerate to the ingame framerate display. This is arguably the more critical value, as the display in the screen only shows the average of the last 8 frames. With GamePrefs|LocalPrefs's MaxFramerate set to -1, my laptop averages 435+ fps, but a low around 10. (And, most of that long time is in the middle of the graphics driver deciding that it REALLY needs some quality time with the CPU. It's not BZ2.) But, with MaxFramerate = 120, the average drops, but the minimum doubles to at least 22. And, that feels far smoother when turning. Low MWF values may also pull the minimum down; this should give people more info about what's going on. Basically, it's better to pull down the peak/average fps if that helps the minimum fps. I'd suggest trying some alternate values in localprefs: setting MaxFramerate = -1, and setting all 4 of the SleepInGames* values to 1. This may help when framerates drop under MaxFramerate value. I don't have time to test that now. [NM] - Possible fix for mantis #826. Turned off team limit checks when transferring units to an ally under the assumption that it would have to have passed sometime before. [NM] - Possible fix for mantis #827. Undoing an object placement in the editor won't do anything if that's the user object. [NM] - Fix for mantis #836. Items with [GameObjectClass]::limitClass1 or [GameObjectClass]::TeamLimitClass1 values > 0 are tracked as important for multiworld and kept in visual worlds. Note - I only check the first limit slots of each type for speed; please don't skip that value. [NM] - Some work on mantis #829. Tweaked optimizations to give me more info if that crash happens again. [NM] - Work on mantis #837 - added in a lot of checks to the code executed in that crash. If it detects anything amiss, it'll complain to the logfile, and exit asap. This is the kind of bug that needs to be detected and not left for later. [NM] - Possible fix for mantis #838 - if an ordnance's particle effect is missing/lost, it'll attempt to recreate it. This isn't going to be a perfect solution, but it seems to work in limited testing. [NM] - Fix for mantis #830. Blue ammo bar is updated correctly when using localAmmo only weapons. [NM] - Fix for mantis #831. Added [WeaponClass] ShowShotsRemaining = true // true = default. False: don't show shots left on a per-weapon basis Note: multiple weapons may be mapped to one of the groups, making this harder to work as 'expected.' In the save sent on for this bug, the user's craft has both a gslammcann_c.odf *and* a gchain_c.odf in the first onscreen slot. Right now, I've coded it so that if any weapon in an onscreen slot has ShowShotsRemaining = false, then the number doesn't show up for the group. [NM] - Fix for mantis #834 - generalized check for whether service trucks could service an item. This is used to skip servicing targets it can't supply (when autodetermining), and as a filter on the F# -> 3 service list, allowing it to not show targets it couldn't handle. Note: for speed, it only uses the first selected (hover) service truck's parameters in the filtering; a mixed group of trucks with differing capabilities may be filtered out. [NM] -- b72g released===================== - Work on mantis 271. For all particle *SIMULATE* items, added the ability to specify a sound effect that'll play. This is particle chunks with simulateBase = one of { "sim_chunk", "sim_dust", "sim_ember", "sim_null", "sim_smoke", or "sim_spray" }. Basically, in the ODF section with the simulateBase entry, add a line like this: [e1] simulateBase = "sim_smoke" // Or one of the others above SimulateSoundEffect = "" // blank is no sound; otherwise, something like "blah.wav" Compiles, but is pretty much untested. This has the possibility of flooding the sound system with a few too many requests. Use sparingly. [NM] - Further tweak for mantis #830. Blue quarter-circle of ammo display is force-updated any time the user's weapon(s) change. [NM] -- b72g2 released===================== - Fix for mantis #825. Folded in latest rev (#9) of the GreenHeart variant Update. [NM] - Fix for mantis #845. Added [SupplyDepotClass] // Individual classification tweakers serviceSTs = 1 serviceCraft = 1 serviceBuildings = 0 servicePilots = 0 serviceOther = 0 Also unified the code to check this into a common function used by STs, hover STs, and supply depots. [NM] - Fix for mantis #847 - if a client decides to quit due to excessive lag, it'll send a chat message to all about that. In case that codepath isn't executed, there's a catchall message also sent in the TellAllGoodbye function. This might help give info as to why players leave. [NM] - Fix for mantis #848. Added [BomberClass] AiCommandToBomb = 3 // == CMD_GO AddPilotToBomb = false // may need to be true to make bomb have an AiProcess Valid values for the AI command parameter are given from this list of enumerations in the code. Parameters outside of the valid range are treated as CMD_GO. Note: not all game objects/AI processes support all commands. Feature requests to make a command 'work' will probably be shot down. CMD_NONE, // == 0 CMD_SELECT, // == 1 CMD_STOP, // == 2 CMD_GO, // == 3 CMD_ATTACK, // == 4 CMD_FOLLOW, // ... you do the math. Values increase by 1 per line CMD_FORMATION, CMD_PICKUP, CMD_DROPOFF, CMD_UNDEPLOY, CMD_DEPLOY, CMD_NO_DEPLOY, CMD_GET_REPAIR, CMD_GET_RELOAD, CMD_GET_WEAPON, CMD_GET_CAMERA, CMD_GET_BOMB, CMD_DEFEND, CMD_RESCUE, CMD_RECYCLE, CMD_SCAVENGE, CMD_HUNT, CMD_BUILD, CMD_PATROL, CMD_STAGE, CMD_SEND, CMD_GET_IN, CMD_LAY_MINES, CMD_LOOK_AT, CMD_SERVICE, CMD_UPGRADE, CMD_DEMOLISH, CMD_POWER, CMD_BACK, CMD_DONE, CMD_CANCEL, CMD_SET_GROUP, CMD_SET_TEAM, CMD_SEND_GROUP, CMD_TARGET, CMD_INSPECT, CMD_SWITCHTEAM, CMD_INTERFACE, CMD_LOGOFF, CMD_AUTOPILOT, CMD_MESSAGE, CMD_CLOSE, CMD_MORPH_SETDEPLOYED, // For morphtanks CMD_MORPH_SETUNDEPLOYED, // For morphtanks CMD_MORPH_UNLOCK, // For morphtanks CMD_BAILOUT, CMD_BUILD_ROTATE, // Update building rotations by 90 degrees. CMD_CMDPANEL_SELECT, CMD_CMDPANEL_DESELECT, [NM] - Tweaked the ComputeFar() check to try harder to keep working if there's no camera owner. [NM] - Fix for mantis #846. Added [JetPackClass] ForwardThrust = 0.0 This is a velocity add applied to the 'front' vector. Compiles, but is untested. If it doesn't work as expected, I may not do any more work on this. [NM] - Possible fix for mantis #833. (Sidenote: I do *NOT* get this current fascination w/ local ammo. Please work on stock assets instead.) [CraftClass] ScanLocalAmmo = false If this is true, every call to GetAmmoRatio() will do a more expensive check on all selected weapons. If all selected weapons use local ammo, it'll return the ratio of the last selected weapon. (It may well be possible to have multiple weapons, each of which has different local ammo supplies, and therefore ratios... do you see why this is NOT anything approaching a clean or fast solution?). If this fix doesn't work, I'm likely to just revert it. Please work on testing stock assets. [NM] -- b72h released===================== - Fix for crash seen in NetManager::TellAllGoodbye() introduced last build. [NM] -- b72h2 released===================== - Updated error message in FileSrcPack::ReadData() to not put bogus data into the battlezone.log file when it complains before dying; vastly expanded the message it reports. This error message has typically been encountered when running BZ2 on vista while not running as admin. If you're still having issues in such a case, please report the last few lines of the battlezone.log file (especially lines before the error and callstack). [NM] -- b72h3 released============================ - Work on mantis #835. Possibly made scavs w/ doDrop = true work once again. Don't have a good save, so can't be 100% sure. [NM] - Fixed bug where battlezone.log wasn't being properly opened. My bad. Also tweaked hints to Windows so that .pak files are flagged as random access as a hint to optimize file caching. This might help things, not sure. [NM] - Fix for mantis #855, 861. Added in latest rev of GH variant updates, Surprise map tweaks respectively. [NM] - Fix for mantis #860. Root cause: fix for mantis #833 above, adding in the 'ScanLocalAmmo' flag. Once again, not seeing the fascination with localammo. [NM] - Fix for issue noted in comments on mantis #828. Added [AirCraftClass] AltitudeLookahead = 2.0 // Parallels BomberClass::AltitudeLookahead. This setting is used by the AI when flying, only. Looks ahead the certain # of seconds, and takes the maximum ground height of the samples as the "current" ground height. Code used to use a value of 0.0, effectively. Also, clamped both AltitudeLookahead values to the 0 .. 10.0 range -- values outside of that are clamped to the closer endpoint. [NM] - Fix for mantis #828. Added [CraftClass] AircraftAttackMustDeploy = false // == true for any Aircraft If this is true, and if the AirCraftAttack code is used (I believe that's used if aiName = "AirCraftFriend" and aiName2 = "AirCraftEnemy"), and if the craft has an attack order while it's sitting on the ground, it'll request a deploy (take off). This check is done before the weapon range checks. [NM] - Made options code save current pilot's file even more often, and also write to the UserPrefs file in the save directory on every change. (Userprefs is what's read in before you log in at the first screen.) Might help with some reports of preferences not being fully saved. [NM] -- b72i released===================== - Fix for mantis #337. Added [CraftClass] SitAttackCheckAbleToHit = false // == true for all tracked vehicles If this value is true, then when SitAttack decides that it might want to consider going from WAIT to ATTACK (i.e. timeout or was hit by enemy fire), it does an AbleToHit() check. If it can't, it stays in WAIT state. This makes rocket tanks respect HOLD more, as they'll stay still if they don't have line of sight or the like. [NM] - More on mantis #859 -- even more logging to battlezone.log for the first 64 calls to CreateFile() -- successfully or not. (Basically, enough to get an idea as to what it's doing, but not so much as to kill performance ingame.) Anyone running these builds on Vista w/o administrator, please send on the *entire* battlezone.log file after a crash. Thanks. [NM] - Fix for mantis #852. Found some variables not saved across multiworld boundaries. Might be bulking up saves a bit unnecessarily-- lots of Craft-derived items already saved this state, but some didn't. My fix will double-save it for the ones that already did the right thing, but I'd rather burn the memory than try and track down all possible codepaths that did the same thing. [NM] - Fix(?) for mantis #863. FactoryPanel does a lot more checks on items present in the Xweapon.odf it's reading in. Should complain about errors, quite possibly also recover from them. This is the sort of thing modders should make sure work before releasing, though. [NM] -- b72j released===================== - Objectives window works once again. My bad. (Broken in 71x) [NM] - Fix for mantis #774 - added in some rude hacks to isdf03 script to make it progress more. [NM] - Fix for mantis #874 - service bay tweaks. Also, in code, changed the default for this parameter: [SupplyDepotClass] ServiceBuildings = false so that mods should also work as expected. [NM] - More work on mantis #859 - added a (long-overdue) version resource to the exe. Also added a manifest, as suggested by http://msdn2.microsoft.com/en-us/library/bb756929.aspx . Right now, it runs BZ2 w/ the same flags as the user. I can up it to always request running as admin, but that's a rude hack. If I could get some logs from testers (and it'd probably be a dozen logs and builds), maybe these hacks could be avoided. [NM] - Work on mantis #730 (internally generated bug). Checks a lot more items at asset load time. Seems to work not generate any false positives when joining between my laptop and main box. But, there's a chance this might generate some false positives. [NM] - ODF opening/closing/querying functions in ScriptUtils.h now all take const char*, not char*. This will probably mean that all 3rd party DLLs using these functions will need to be rebuilt. This will probably inconvenience 2-3 people, tops, as these are all post-pb3. If I haven't posted a new DLL source w/ 72k, bug me. [NM] - Work on mantis #703 (self-generated feature request). Added in a new feature: deletion of most of the addon/*list*.txt files, and replaced them with autoregistering Recyclers, AIPs, Animals, and STCTF Goals. This should let modders work on various things, and not have to worry about stepping on each others toes in the *list*.txt files. Now, BZ2 will scan each AddDirRecurse() folder (from the bzone.cfg, or local override), looking for a folder named 'autoreg' under that, and *.autoreg files in there. Each .autoreg file is essentially an ODF file, with structure as follows: [RecyclerList] or [RecyclerListFFA] or [RecyclerListMPI] or [AIPList] or [AnimalList] or [STCTFGoalList] or [IAHumanRecyclerList] or [IACPURecyclerList] or [IAAIPList] ODFName = "ivrecytb" // Config of file, must *NOT* end with .odf Description = "Strat/MPI: No Empty Scouts" // What's shown to the user A single .autoreg file can have as many of the chunks listed above as desired; each specific chunk can only appear once within a file. (If you want more than one item with the same specific chunk header, then you'll need one .autoreg file for each type). I've generated a few of the .autoreg files from the existing list files, but haven't completely finished the job. (There's a *lot* of MPI recy variants.) If map .inf files point to an existing .txt file, then that file is used. But, if the .txt file is missing or blank, then it'll autoscan for things. For private build testers, you'll still have the .txt files until the next full build is released. If you want to help create the rest of the .autoreg files, I'd recommend renaming the existing .txt files to help force it to use the autoreg files. I'd like to put out a new full build soonish, as soon as the autoreg files are finished. Tested minimally. Will probably induce some bugs in the short term, but I think the end result will be worth it. [NM] - Tweaked 1.3 full build installer: - VS2005 redist files are now triggered a different way that should make their install more obvious and reliable. - Added version resource, paralleling game exe - Added manifest for vista, requiring administrator access. Should see this next full build. [NM] -- b72k released===================== - Defaulted [SupplyDepotClass]::ServiceSTs = false. Also changed documentation above for 72h to show the current, set of defaults in the code. Basically, only craft & STs are supplied by default. [NM] - Possible fix for mantis #849. Added support code, and a new entry in bzinput_common.cfg: BindDiscrete("link", "K"); (I think that key's unused). This should keep lights on the L key, and linking on the K key. Do test, especially in MP, to see if I've introduced any sync errors. I think I've been careful, but it was an area affected. [NM] - Possible fix for mantis #130. Added, to AIP files [Start] IdleAllCraft = true If this is true, then when this plan is switched to, all craft on the specified team should be idled. This should enable that AIP to better control them, or find (now) idle units. The code used to effectively default this setting to false (by not doing anything). Compiles, untested. [NM] - Fix for mantis #870. Added [PoweredBuildingClass] AutoBuildTap1 .. AutoBuildTap8 = true If true (default), the tap object will be created when the building is. If false, the tap object won't be created. Compiles, but is untested. If there are problems, I may put this item back on the 'Not for PB4' pile. [NM] - Some fixes for creature sounds. Was looking for the painSound under the wrong section; moved it to [LandCreature] painSound1 .. painSound6 = "" All the rest of the parameters should be as documented in the b64w docs (ChangeLog_pb2.txt). [NM] -- b72L released===================== - Fixed asset check so that it doesn't produce false positives. (Reminder, please put all bugs in mantis, even if you think they're so serious I would have read about it on the forums... helps me keep track of things.) [NM] - Folded in new assets from mantis #879. [NM] -- b72m released===================== - Added in __restrict keyword to any pointers passed into the top 20 or so functions as identified by the profiler. This is a hint to the compiler that modifying one pointer won't have side effects in reading another pointer. This might be a slight performance optimization, or it might cause some graphical glitches onscreen. [Unsurprisingly, virtually all of the top 20 functions, and definitely all the functions I modified are in the graphics system.] Do keep an eye out for any such problems. [NM] - Fix for mantis #882. Added in a input bindings version field to the prefs/pilots file. If this version doesn't match the code version, it should drop back to the default bindings. This should fix things. Also made sure that the texture size defaults to large. Best way to test this is to have a 1.2 and/or 1.3pb3 install, to another directory. Copy the 'Userprefs' file (same dir as bzone.exe) and the pilots folder from the 1.2/1.3pb3 folder to the private build folder. Then, launch the new private build, and ensure that (1) bindings work, and (2) texture size is set to large, regardless of what it was in 1.2/1.3pb3. [NM] - Some work on mantis #881. Made [LandCreature]::crushSound = "" more likely to play -- should play when it collides with something. The [LandCreature]::eatSound has never been used. The curiousSound* items are, and have always been, played when attacking something. Most of these sounds will play only if there's no sound currently playing on a creature. Also did a little revisionist history in ChangeLog_pb2.txt (just before b64w's release) to remove the eatSound entry, and add in a little more clear. [NM] - Tweaked mantis #880. [PoweredBuildingClass]::AutoBuildTap1..AutoBuildTap8 should default to true as advertised. Also noticed a few items under [CraftClass] had the same bug - not reading parent's defaults. [NM] - Work on mantis #739. Squelched some "error" messages from the battlezone.log file. They were handled correctly, so they're not an error. [NM] - Marking mantis #664 as fixed. Cannot repro on my LAN here. Nobody's provided a counterexample. [NM] ---- 1.3 beta 73 released======= - Noticed Max showing up in the top-20 list of functions. Made it an inline function instead, with variants for each of the general variable types. This seems to have forced things to go inline now, which might provide a *slight* speed boost. [NM] - Used __restrict in a few more places, once again in the graphics code. Once again, I'd be surprised if this has a noticeable affect on framerate, but it (1) takes me almost zero time to do this, (2) trivial to revert if it causes issues, (3) makes me feel better about feeding the compiler useful info. [NM] - Fix for mantis #880. Several places in the code would not allow power-producing objects to be built if the team was missing more power than the object being built. Now, objects that have a cost <= 0 (i.e. free or power-producing) will always pass the power part of the 'can I build this?' checks. Ditto for scrap checks; power & scrap limit checks were usually side by side and did parallel checks. [NM] - Added ScriptUtils.h, another variant of GetNearestEnemy() that lets DLL authors request some filters, also GetNearestPowerup() & GetNearestPerson() requests. Also, I don't think the audio functions added recently were being properly exported -- I don't think anyone ever spoke up about that, and definitely not on mantis (where I want bug reports, anyhow). New DLL source should be posted along with this; bug me if it's not. If there are other flags or versions of GetNearest* that you'd like to see, please speak up. [NM] - Fix(?) for mantis #878. [I think -- savegame doesn't load locally.] Made IA, MPI DLLs use just-added functions to ignore pilots, scavs when checking for sieges. Also made DM DLL use the GetNearestPowerup() & GetNearestPerson() for the bot code. Also, some minor refactoring of code, mainly renaming variables. [NM] -- b73a released===================== - Partial fix for mantis #886. Consolidation of autoreg files won't be done. But, I did add code to alphabetize the output list by the description text. Note - this should be like the map list, which is filled in by a ton of individual files, from multiple input directories. That's been my whole point in adding these autoreg files. Also, fixed mantis #885 - FFA & MPI recylists should be properly handled, if the map's .inf requests that. [NM] - Potential, partial, fix for mantis #878. This is due to an item added for b64c (see changelog_pb2.txt). That fix (1.5 years ago), prevented the CPU from switching to the a/l/s plans if it didn't have a commbunker built. The logic behind that was users could wedge AIPs if they got too close to the cpu recycler early in the game; the 's' plans didn't (especially back then) necessarily build back up a base. If the user got close to the enemy, destroyed any/all commbunkers, then wandered off, the request to move off from the S plan would be ignored. Now, switching to a/l/s plans is allowed if the last plan was an a/l/s plan, or the CPU team has commbunkers. Also, the DLL will keep trying to switch off the S plan when appropriate, until it succeeds. So, if the S .aip eventually builds a commbunker, this should succeed. Old IA saves invalidated. [NM] - Fix for mantis #883. Root cause: custom bzgame_stats.cfg that wasn't updated for 1.3. Made the game whine to console & battlezone.log about that, and crash less. (Hopefully not at all, but hard to tell.) Once again -- I reserve the right to make changes to the game's UI at any point. Please try and keep up. [NM] -- b73b released============================ - Added in some hard limit checks on # of verts/indices tried to be manipulated at once. Done to try and look into mantis #887, which looks like a memmory trashing crash. Random crashes in dlfree() are almost always a sign that someone (else?) trashed memory in a drive-by attack. The code that died is usually just a victim, not the cause. [NM] - Removed _STATIC_CPPLIB from preprocessor definitions in all BZ2 project files. This was a semi-hack put in to make sure that the various C++ classes (especially std::string) use our internal memory allocator, not raw malloc/free. As nice as this is to me, I've realized that it's going to be nearly impossible to get this to play nicely with memory allocated by DLLs - especially if I try and pass std::string or std::vector across the DLL boundary. As a bonus, this might decrease the download size slightly. [NM] - Quitting should work once again. Ooops. [NM] - Fix for mantis #889. New bzescape_input.cfg that supports binding the link key. [NM] - Fix for mantis #888. Added in a pair of SetCommand() callbacks from DLLs, allowing more or less unfettered access to the AI processes of AI craft. This could be used for great good, and could probably open up LARGE cans of worms in the meantime. Not all of the commands listed are supported in any way or form. Bug requests to make things work will probably be filed in the 'Not for PB #17' bin. (And, I'm sure hoping to finish with BZ2 well before then.) Most of the useful AI commands already had a callback; for example Service(me, him, priority) is essentially the same as SetCommand(me, 29, priority, him); Compiles, but is pretty much untested. RD is lucky I'm feeling generous (and that these changes were about a dozen lines of code) [NM] -- b73c released============================ - Wrote a bunch of code to cull the lights from the non-active multiworld, but had to disable 95% of it. Done initially because I noticed that the 'figure out which lights apply to this area' was by far the #1 function when playing pyramid.bzn under the profiler. (Probably due to all of the powerups, which now have their own lights.) Running down a *large* list (well, bintree) lots of times each frame makes even my nice fast CPU hurt. It's got to hurt more on slow boxes -- it's got to slog thru that list even when lights are set to one/off. Only way around that is to put /nolights on the commandline -- watch how much of a framerate boost that gives you to pyramid.bzn in multiworld.) However, culling lights from some worlds makes multiworld crash in not fun ways. So, I disabled everything but the refactoring of light init/cleanup. A better fix for all this would be to switch to quadtrees or some other data structure that allows really efficient spatial tests. However, I don't feel like doing massive overhauls of the graphics code. [NM] - Added [CraftClass] CanInteractWithTerminal = false // default = true for all pilots/persons. If this value is true, then the local user's object will be allowed to interact w/ terminals. [NM] - Fix for mantis #890 - PlanarRender could submit too many indices, which would trash memory. (It'd previously allow this, w/o noticing or complaining.) Made PlanarRender do a sanity check on how many verts/indices it'll use before it submits an object. If it would trash memory, it'll skip that item entirely, and whine to the console. Best way to fix this: make it apply to fewer terrain cells. [NM] -- b73d released============================ - Finally got the light code working more as I'd like. It still has to create lights in all worlds. But, instead of one monolithic binary tree of all lights, it has two lists, one of 'enabled' lights (present & switched on), and one of 'disabled' (present, but switched off). So, if the lighting flags are set to anything other than 'All', then it has a MUCH shorter list to run thru. This makes the 'figure out which lights apply to this area' function almost disappear completely from the profiler's list. This should increase performance on all maps whenever lights are not set to 'all'. Do test, in case I broke something. [NM] -- b73d2 released============================ - Fix(?) for mantis #896. Lights should be enabled by default once again, which should make terrain look like 73c/d with lights set to one or more. Did further optimizations to code -- added a third list, "wrong world" list, which should help filter out lights created in a world not being visually shown. I think this may help (slightly) w/ multiworld performance when lights are set to 'all', as I have a feeling that the lockstep world's lights were being considered and used. [NM] -- b73d3 released============================ - Work on mantis #902, maybe also #906. Headlights should disappear when no headlights is selected, toggleable with L key, etc. My bad. [NM] - Work on mantis #901. Added a whole bunch more logging to the enumeration of DirectX devices, drivers, modes, etc. Hopefully this will give me some clues as to what's up on OM's box. [NM] - Fix(?) for mantis #899. Made icon_.tga the default texture for unit icons, if not found in the ODF. (Previously, there was some inheritance checks that I didn't understand, but that only took effect when the odf didn't have the line specified.) Also, teampanel was checking for the .tga exactly, not allowing the .dxtbz2 to be found. Tested on hilo on my lan by setting the first 4 lines of stratstarting.txt to 'ivhmisl' or 'ipserv' in the supplied assets. If this is still doesn't work, try not depending on inheritance and setting things up fully manually, e.g.: [GameObjectClass]::unitIcon = "icon_blah.dxtbz2" [NM] - Possible fix for mantis #868. When restoring a pilot's weapons as they hop out, replaced the code to be as if they just picked up weapon powerups containing the specified weapons. This seems more reliable than the old weapon restore code, which seems to have gotten hung up on the new linking, cycling, etc code. This may have side effects; do test lots of entering and leaving craft with various pilot weapon configs. [NM] - Fix for mantis #904 - updated bzgame_command_1280x1024.cfg, bzgame_group_1280x1024.cfg. [NM] - Fix for mantis #897, #35 (dupe bug). Added to IA map .inf files, [DESCRIPTION] AIPListFile = "" HumanRecyListFile = "" CPURecyListFile = "" If each of the specified entries is not found, blank, or points to a file that doesn't exist, it'll use the autoreg files like before. Otherwise, it'll read in the file, and use that for later. Modders can still use [DESCRIPTION]::options_instant_string1 and [DESCRIPTION]::options_instant_string2 to set the initial defaults for the human & cpu recyclers, respectively. Also updated the list filling code to do file checks, so that if, for example, the entry has the ODFName = "ivrecy_myspecialmod", and the CPU's race is "w", if "wvrecy_myspecialmod.odf" doesn't exist, that entry's not shown in the list. Note, however, that this check is done *only* when filling that list, i.e. going to the IA/ST/MPI extra options screens. It's up to the modders to make sure the initial defaults are sane. [NM] -- b73e released============================ - Changed optimizations for the lowest-level function seen in mantis #907. I can't tell what's going wrong while staring at the disassembly. This function's called *all* *the* *time* (basically, "what is the terrain's height here?"), so if there was a serious issue, I think it would have been seen already. [NM] - Possible fix for mantis #892. Tweaked OffensiveProcess::ChooseAttackTarget to use the previously-ordered target, if set & still valid. Seems to make a savegame work "as expected"(?). Basically, the target in that savegame has so much clutter around it that 40+ units sent to attack it will spend plenty of time trying to find a place to fire from. Checks added to the code verify that all of the 'AbleToHit' checks from my units are targeting the recycler. They do seem to succeed in taking out that target. Also tweaked some code changed in 71x to be more like it was before the changeover. [NM] - Bonus feature -- time for some more constants to be less hardwired. For all maps, in their .trn file: [World] Gravity = 12.5 // default. Reduce for less gravity, etc Compiles, only minimal testing. [NM] -- b73f released============================ - Fix for mantis #908. Fix for #892 used the existing target as who to attack. Changed that to 'existing target, if they're an enemy'. Otherwise, it uses the existing code. Compiles, but is pretty much untested. [NM] - Feature add. In MP map .inf files, for all ivars except for #4 and 6 (bitfields), and 63 (launch flag), added: [NetVars] ivar0Min .. ivar62Min = 0 ivar0Max .. ivar62Max = 9999999 Note: you must specify both the min & max entries for it to be used. Trying to set ranges from .cfg files isn't going to work because I override things in code. #9, 25 (strat only), 26, and 27 may still be overridden by code. [NM] - Feature add - DLL ability to change gravity at will. This is the same as the .trn file's gravity setting, and affects everything. So, no Super Mario Galaxy cylindrical planets for you. New DLL source should be posted w/ this build, bug me if not. [NM] - Added a meaning for ivar30 in the default maps. In DM, this is the gravity setting, default value = 25. Tweaks to extra options pages to allow this to be edited before the game w/ a slider. DM extra options pages updated; the other DM-related pages will need this work also done to them. Any volunteers? Thanks. [NM] - Reduced optimizations (i.e. enabled callstack frames) for all Simulate() functions. This should help get more info in the callstack on crashes seen in mantis #911. The editor exe should always have these optimizations disabled, so if you can get a crash, it'll usually help me more if you crash it under the editor. [NM] - Better fix for mantis #911. Checks whether GameObjectClasses, OrdnanceClasses, and WeaponClasses are loaded properly in ODFs. If you refer to a type other than what it's expecting, it'll whine to the console at load time. Also, for targetingguns, it does a secondary check to see that it refers to ordnance, and prints a message explaining that pb4 requires classLabel = "leader" for ordnance, not "targeting". [NM] - Better fix for mantis #868, 909. Doesn't completely destroy and re-give weapons to pilots when hopping out. Just re-gives them their weapons. This fix seems to make the saves for both bugs happier. The problem(?) with the assets/save on 909 is that the weapons seem to be of the wrong hardpoint type -- when trying to give them their weapons, it won't give a 'CANN' weapon to a 'HAND' hardpoint. [NM] - Fix for mantis #912. Lights weren't toggleable for anything with linkable weapons. Seems to have been part of the previous binding of both lights & link to the same key, and making sure that only one function happened. Fixed. [NM] -- b73g released============================ - Move DM's gravity slider to ivar31. ivar30 was used for linking, but wasn't documented in vars.txt. Updated that also. [NM] -- b73g2 released============================ - Possible fix for mantis #927. Added sanity checking to a bunch of calls, including SetControls(), EjectPilot(), HopOut(), KillPilot(), RemovePilotAI(), HoppedOutOf(), IsDeployed(), Deploy(), SetAvoidType(), ClearThrust(). These all now check that they're passed a craft before working on that. Also made SetSkill() clamp the passed-in skill value to 0..3, which is all we store anyhow. I'd prefer to reject invalid values outright, but that may have bigger side effects. Looking at the code, SetSkill() can be safely called on anything that's a GameObject, including buildings, etc, but it's used mainly by craft. [NM] - Fix for mantis #931. Squelched 'Uhoh' message in logs. It was debugging code left in for some other items, and not relevant anymore. Better to shut it up than answer questions about it forever. [NM] - Fix for mantis #936. When alt-tabbed, BZ2 should use less CPU. Not zero. Just less than 100%. Hopefully less than 25%. [NM] - Fix for mantis #945. Tweaked bzeditor_fog.cfg, bzeditor_init.cfg from GreenHeart. (Included in editor build distributions only until next full build.) [NM] - Fix for mantis #937. BoltRenderClass changed to avoid adding too many segments that would cause a buffer overflow. It will whine to the log file (once per run) with the offending effect. [NM] - Fix for mantis #943. Added [GameObjectClass] AlwaysShowAmmo = false // if true, SelectionDisplay will show this for enemies. false = allies only [NM] - Fix for mantis #928. Added, to AIP attacker plans [Plan##] ForceStagePoint = -1 // -1 => random. Otherwise, stagepoint # ForceStagePoint = 1 should use 'stage1', ForceStagePoint = 2 should use 'stage2'. Note: valid values are -1 or 1..32, with values outside that range treated as -1. Also, if you specify a stagepoint that is too high for the list of points on the map, it'll also treat it as -1 (random). [NM] - Added linker commandline option '/pdbpath:none' . This should reduce the looking in directories that almost certainly don't exist on your boxes. 3rd party and most mission DLLs will probably wait until the next full build for distribution. [NM] - Fix for mantis #915 : updated bzshell_multi_client_mpi.cfg. [NM] -- b73h released============================ - Updated libpng to v1.2.25, libmng to v1.0.10, libvorbis to v1.2.0, libcms to v1.17, MiniUPNP to v1.0, PCRE to v7.6. Also, in the jpeg libs, defaulted them to using floating point conversions of files, not integers. Modern superscalar CPUs should be slightly faster when they keep more functional units in flight at once. This may slightly affect the output; I know that the metal1-4.dxtbz2 changed slightly as a result of this. Most of these updated DLLs will be in the next full build, though you ought to be able to copy the ones from DXTGen v12/13 into your BZ2 folder if you're *really* curious. Updated Readme13.rtf as well. [NM] - While updating UPNP, I noticed that GamePrefs.ini|LocalPrefs.ini's VerboseUPNPLog was read, but then ignored. Fixed. Also, UPNPTimeout in the same file was never read, and treated as always 7200. (That's 2 hours in seconds.) Fixed, though GamePrefs still sets the default to 0 (unlimited). I don't seem to be able to test UPNP these days, though -- current wireless router doesn't seem to support it. [NM] - Fix for mantis #953, #924, possibly others. Just disabled the pilot bailout, completely. I could never repro the resyncs here, and it seems to be related to exploits. This feature may eventually reappear in the future, but not for pb4, sorry. [NM] - Fix for mantis #961 - tweaked pbtunn01.odf that AI can use. Please test the first few ISDF SP missions, as that ODF might be used in them. [NM] - Fix for mantis #938. Added GamePrefs.ini|LocalPrefs.ini value, NobodyHomeIsPersistent. If this is false (default), then only the first map/level loaded will lose everything. If this is true, then every map/level loaded will lose everything. Compiles, but is untested. [NM] - Fix for mantis #955. If an object being placed in the editor has no mesh, it will always treat it as unaligned placement. Gets around a crash. [NM] - Fix for mantis #964 - full build installer puts the vcredist exe in a 'redist' subfolder. This is for general cleanness; I also now have VS2008, which has its own, different, vcredist exe, so it'll make sense to have one folder for these things. (Plus, the redist folder can be safely nuked after installing if you're terminally low on HD space.) Also rearranged paths everything's built to on my box so that I can clean up temporary files better/faster. [NM] - Fix for mantis #963 - when full build installer writes GamePrefs.ini, it's now write protected, just to give the hint that users are to modify localprefs.ini instead. [NM] - Rearrangement of non-map assets out of the addon\Missions\Multiplayer folder and into addon\objects. This is a bit cleaner, and allows those items to be separated from the maps. [NM] - Possible fix for mantis #920, others. There's a limit on the # of selected items the network code can handle on a frame. Added in some error messages if that's exceeded, and also tweaked non-net code to respect that limit in MP. [NM] - Undid some of the MW pop-reducing done last summer in the DM DLL. It was allowing bots to stay still on a powerup they couldn't possibly use. Restored that so that there's a 15-second timeout or 2-meter distance from the powerup, then it'll retarget. This retargeting is done only in the lockstep world, which causes a visual world pop. [NM] - Fix(?) for mantis #954. Does a lot more checking for buffer overflows on the editor texture brush data. [NM] - Not a fix for mantis #929, but going to document it here for those who don't have access to mantis. For those who are having trouble getting the ` key to work (shown as ~ ingame, erronously), try extracting and editing bzinput_common.cfg, around line 38: BindDiscrete("mode_select_0", "`", "!LeftCtrl"); Change that to some other key ("q"?), and then reload input bindings from the options. [NM] - Possible fix for mantis #932. Instead of crashing, it should whine (loudly) and try to recover. There's some nonsense going on in the DR2 variable systems, and I can't quite figure it out. Or, this is a drive-by memory trashing. Either way, not fun. [NM] -- b73I released============================ - Fix for mantis #968 - memory leak under certain circumstances. Also, found a better place/way to handle mantis #936 - BZ2 uses lots of CPU when alt-tabbed. [NM] -- b73I2 released============================ - Fix for mantis #894 - building collapse and explosions sometimes appearing at the center of the map in MW. Fix is related to mantis #83, possibly also 106. I now save/restore a bit more info, and it seems to play the included savegame w/o errors. Do test that I've not broken something else. [NM] - Fix for mantis #952. Command button's state wasn't being updated when changing to group split mode. [NM] -- b73I3 released============================ - Fix for mantis #972. Added [HoverCraftClass] soundJump = "" If this is set to a valid wav file, it'll play when the vehicle is jumping. A .wav file consisting of five seconds of silence, then "CHEATER CHEATER CHEATER" would do well. :) Also, vastly simplified the calls to StopGasObject() all throughout the code, making an accessor function that tests, stops, and zeroes out the handle. [NM] - Not listed as a bug, but I decided to do something about this. vsmoke.tga was hardwired in three separate places in the code. Made all three of the places point to different textures now: vsmoke_selectiondisplay.tga - used by SelectionDisplay.cpp vsmoke_conetex.tga - cone texture, used in lights(?) vsmoke_interface.tga - used to highlight UI backdrops, e.g. large windows Mods that had their own vsmoke.tga (and there's apparently a lot), will need to copy that texture to the three new names. Or, it'll use the one in patch13.pak. Also, restored gsplat.tga, raindrop.tga, and wsplat.tga to the full res sizes found in data.pak. They were shunk earlier as an optimization, but now that they're dxtgen'd, the graphics card should have enough info to pick the right mip on the fly. [NM] - Fix for mantis #971. Added [SprayBombClass] HitExplodeTypes = 0 BuildSprayOnHit = true ExplodeOnHit = false This is a bitfield, consisting of the sum of one or more of the following: 1: building, 2: craft, 4: person, 16: terrain, 8: (none of the above). If 0 (default), then the traditional behavior is used. If 1, then it'll explode when it hits a building, or bounces really slowly. If 2, then it'll explode when it hits a building, or bounces really slowly. If 3 (i.e. 1+2), then it'll explode when it hits a craft, building, or bounces really slowly. BuildSprayOnHit defaults to true -- a flag as to whether it builds the payloadName item when it hits something matching one or more of the HitExplodeTypes. ExplodeOnHit can be used to just make the ordnance go *boom* when it hits something matching one or more of the HitExplodeTypes. Note: splintbm.odf by default has [OrdnanceClass]::xpl* = NULL, which means there's no default explosion for ExplodeOnHit to use. [NM] - Fix for mantis #917 - latest rev of Greenheart Map Pack. Note: a 'addon\objects\ISDF\vehicles\ivcons\backup' folder was included, which clashed with a bunch of files in the usual places. I've summarily deleted that folder. Also, stock assets use 'ivconst' folder. Plus, I see this in my logs here: File clash: @rootdir\addon\objects\mantis_465\Shared Objects\bindata\ibgtoww03.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\ISDF\Assault tower\ibgtoww03.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\bindata\ibgtoww04.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\ISDF\Assault tower\ibgtoww04.msh File clash: @rootdir\addon\objects\mantis_465\Shared Objects\bindata\ibwstr01.xsi File clash: @rootdir\addon\objects\mantis_465\Shared Objects\ISDF\Tall Wall\ibwstr01.xsi Please make sure submitted assets fit with the name & location guides I've published. Next time, I may just reject things that don't cleanly merge here. [NM] -- b73j released============================ - Changed HSPRITE to SPRITE_ID to avoid a compile error [Ken] - Updated PathDialog.rc to compile under Visual C++ 2008 Express. VC++ 2008 does not support MFC or ATL natively, but replacing the "arxres.h" include with "winresrc.h" and adding a definition for IDC_STATIC works around that problem. [Ken] - Fixed previous-weapon switching in multiworld (mantis #940). The UserProcess::Save function wrote out the selectNext array instead of selectPrev due to a copy/paste error. [Ken] - Fix for mantis #972 - jump sfx was interfering w/ fly sfx due to copy & paste glitches. Should be better now. Also deprioritized jump sfx from AI units to 'ambient', which should allow the channels to be given up on demand. Using these sfx may increase channel demand, a lot. [NM] - Fix for mantis #976. As above, addon/objects/ISDF/vehicles/ivconst is the folder the stock assets use for that vehicle. [NM] - Fix for mantis #973, updated health on bbgtow9.odf. [NM] - Changed defaults for sky, particles, objects to high. Also applied this to profiles upgraded from 1.2, and did a 1-time forcing (for current 1.3 profiles) to change these settings to high. You should be able to drop this if desired, but I'm just trying to make the defaults look a little prettier. Most people's systems should be able to handle this out of the box these days. Also made profile saving try and do so only when changed. This should slightly reduce the number of writes to disk. [NM] - Fix for mantis #971. Fixed crash when colliding w/ terrain. Also added some things, put documentation above w/ the first #971 fix. [NM] -- b73k released============================ - Some of the version info on bzone.exe/bz2edit.exe was backwards. [Right-click on the exe in Windows, get properties, go to the version tab, and look thru the 'other version info' fields.] Fixed. [NM] - Fix for mantis #977 - 32nd vehicle in mpvehicles.txt didn't have its info shown in the shell. Also cleaned up a little dead code. [NM] - Possible fix(?) for mantis #967, though it only happens with BZC, as far as I can tell. If you see items like this in your battlezone.log file, ERR |GLOBAL | varitem:197 |21:33:42|99502 |Error - trying to clear a NODELETE variable 0x######## ERR |GLOBAL | varitem:271 |21:33:42|99502 |Error - trying to destroy a NODELETE variable 0x######## then there's something colliding in name hash with one of the network variables. Not good. (Name hashes are what take things like 'network.session.svar6' and turn that into 0x14E3006B -- note that it scrambles it into a short form. There's an off chance that two strings will hash into the same name.) If you're really lucky, it'll die with Unable to create '%s' since hash 0x%08X already exists and tell you exactly what is colliding. Rename the thing that it's failing to create, and it should work better. [NM] (Update: a bit more explanation on this bug: (1) Humans like strings, like 'network.session.svar6'. (2) Strings are slow to a computer, compared to native types like integers/floats. (3) To try and balance these two competing goals, we use a hash function (see http://en.wikipedia.org/wiki/Hash_function ). This turns a string into an 32-bit integer, e.g. network.session.svar6 -> 0x14E3006B. (4) The problem with hashes is that you're trying to shove more than 32-bits into a 32-bit value. Thus, there's the chance of a 'collision' -- two strings that end up with the same output 32-bit value. (5) All interface items are looked up by hash. This includes things like network.session.svar6. And, the names for all interface items mentioned in .cfg files. Some of these interface items are only temporary -- they go away when you close the shell or the like. When that happens, the item (referred to by hash) is deleted. (6) Mantis #967 referred to a problem where network.session.svar6 (or, more precisely 0x14E3006B) was getting deleted, and the network system couldn't find it later. This made the net code very unhappy. (7) I did work to set a special flag on the network.session.svar* variables so that nobody could create another item with the same hash. It's also not allowed to be deleted (w/o whining) until the network system says "I'm done with this item." -- b73k2 released============================ - Tweaked full build installer. Now creates patch13.pak file with the same hierarchy as the input data on my HD. This should simplify the job of people wanting to send me patched assets trying to figure out where the heck anything lives. [NM] - When running in windowed mode, it'll use render.cfg's ShellWidth/ ShellHeight when looking for expanded game UI files, e.g. bzgame_team_640x480.cfg vs bzgame_team_1920x1200.cfg (assuming that your ingame profile was set to the latter). [NM] - Fix for Mantis #979 - updated autoreg files for Wug's AIP set. Also mantis #981 - corrections to various GH files. [NM] - Made full build installer park .inf/.bzn for stock IA/MPI maps in a separate folder from addon. This is done at install time only. [NM] ---- 1.3 beta 74 released======= - Made scrap bar manager also track the 'sequence #' for all items on the list. This should help make sure the items on the scrap bar are sorted consistently on all machines. This could be a cause of resyncs. Not 100% sure, though. The fix seems to be safe, though, and shouldn't make things any worse than they already are. [NM] - Updated readme13.rtf to note where dbbghelp.dll is coming from, note Pandemic's 2005 merger w/ Bioware, and 2008 merger w/ EA. Also added link to Activision's website, despite their total uninvolvement w/ this patch. And, a note acknowledging the graciousness of my wife letting me work on BZ2 in my spare time. Basically, pb3 went out just before I got married, so there's been a bit of work on BZ2 since then. [NM] - Fix for mantis #985 - update to fgsnip_c.odf. [NM] - New feature. Added [GameObjectClass] VehicleSearchFilter = 0 // == 0(vehicles only), 1(pilots only) 2(vehicles+pilots+animals) 3(plants only), 4(buildings only) Values outside of 0..4 treated as 0. This is used in a bunch of places, including AlternateAnimalProcess.cpp, LandAnimalProcess.cpp, WingmanProcess.cpp, KingOfHill.cpp, ProximityMine.cpp, Seeker.cpp, TripMine.cpp, WeaponMine.cpp. Basically, this allows the default search behavior to be modified somewhat. Don't laugh at allowing a search for plants -- the code already had a function to do this, so this was trivial. Not sure if anyone will have a use for it. [NM] - Fix for mantis #986. Editor build was producing spurious errors on shutdown. [NM] -- b74a released============================ - Made 3DFX, Matrox cards default to assuming that DXT support isn't present on them, if render.cfg::UseDXT is set to -1 (autodetermine). I know there's a few models of their cards that do support this fine, but I (1) don't have a list of the DXT-capable (or incapable) models offhand, and (2) I asssume that they sold a lot more of their earlier, DXT-incapable cards than capable. End users can edit the render.cfg line to set this to on/off if desired. [NM] - Added some code from http://msdn2.microsoft.com/en-us/library/aa364726(VS.85).aspx to the full build installer. The long and the short of it is that if you're on XP (or higher), it should prompt you as to whether you'd like to add an entry for BZ2 to the Windows Firewall list of apps and ports. Give it a try. [NM] - Changed AIP code. In attacker plans, if maxAttacks = 0, it's now treated as unlimited, same as maxTries = 0 in other plans. [NM] - Fix for mantis #989. Missing skydome is now whined about to the console & logfile. [NM] - Added GamePrefs.ini|LocalPrefs.ini::EchoConsoleToLogfile . See comments above that in Gameprefs. [NM] - Fix for mantis #988 - IA, MPI DLLs should jump to the 1/3 plans when there are preplaced recyclers on the human teams (1). Also made them look for the recyclers by object class string, not "brecy" in the ODF's names. This is more reliable. [NM] -- b74b released============================ - Updated ShortPath.cpp (used in pathing code) to use std::set, as opposed to std::priority_queue. The priority_queue code would occasionally die in some STL debugging iterators for no good reason that I could tell. If STL was unhappy, this might be the cause of some of the random crashes seen in dlmalloc. Do check to make sure that things aren't radically different in pathing. [NM] - Updated network ivar/svar broadcasting code to push svars first. This fixes a specific issue where the server was hosting MPI, sitting in the shell, w/ CPU team set to Scion. The client would join, and see the options set for CPU team on ISDF. This may have side effects; do keep on the lookout. [NM] - Tweaked pilot profile defaults to assume broadband is on. Users can still modify this, but it'll just default this way. [NM] - Noticed that AIP log code would (1) silently die if the 'Logs' folder wasn't created, and (2) wasn't putting the logs folder under My Docs/My Games/BZ2 if vista mode was enabled. Fixed. Also used SHCreateDirectoryEx() to make directories. [NM] - Added more logging to AIP idle dispatcher, and also all AIP commands sent by it and the like to the logfiles. [NM] - Battlezone.log and AIP log file will now print out which timestep a sync error took place at. If it's a resync caused by the idle dispatcher, I *might* be able to get some info as to this if I get the AIP logs for all machines involved. No guarantees. But, I've seen some resyncs today that weren't caused by the dispatcher. The ID's code sure doesn't seem like it might be resync-capable at first glance. [NM] -- b74c released============================ - Made loading screen progress bar code update the screen a bit less often. That's not the cheapest operation around, so if it can be a little more jerky, that's acceptable. [NM] - If a resync is pending, AIP logging code will dump out a LOT of info per craft, and do so every frame. [NM] - In GamePrefs.ini|LocalPrefs.ini, added an aipLogging line, currently defaulting to true. This should have the same effect as /aiplogging on the commandline. Remind me to default this to false before pb4 goes live. [NM] - Fix for mantis #991 - handle invalid data passed to SetPlan() a little better by whining to logfiles. [NM] - A little more work to ensure fewer (no?) leaks of FollowGroup objects. Noticed a bit of that this weekend while doing sync tests on my home LAN. [NM] -- b74d released============================ - Actually added GamePrefs.ini's aipLogging line. No code changes other than bumping version #. [NM] -- b74d2 released============================ - Fix for mantis #991. Buffer was too small for things. Ooops. [NM] -- b74d3 released============================ - Fix for mantis #957 - lag under certain circumstances. Optimized things a little too much. [NM] - Fix for mantis #995 - asset changes for mega statue AV fix by GH. Note: only the items under addon\objects included w/ subbuilds; IACircle.ter and STCircle.bzn will be in the next full build due to size. [NM] -- b74e released=================================== - Added, to AIP files [Start] CheckProvides = true // true = default The value read by this is used by all plan chunks as their default value. Should allow modders to tweak this value fairly quickly. [NM] - Fix for mantis #1000 - AV in terrain code. Could only happen when something is *way* outside of the world. Since this was a late join, I suspect it may be something to do w/ what was sent. The AV shouldn't happen anymore, but it's a little worrisome. [NM] - Potential fix for mantis #997, or at least an optimization of the resimulation of remote players. Also made it apply to the local user, which seems to help w/ a testcase provided. [NM] - Edited project build settings for all exe and DLLs to do the following: (1) Enable /DYNAMICBASE to allow vista to apply the address space layout randomization (ASLR) security tweaks to them. (2) Disable minimal rebuild, enable string pooling. (3) Floating point consistency set to fast for BZ2 and its DLLs; precise for OpenIL and Vorbis DLLs. [Not sure if Vorbis is adversely affected if set to fast.] (4) No frame pointer omissions for BZ2 main project, though the graphics lib can still use that. (5) /pdbpath:none for all linker settings -- the pdbs are in the same directory as the exe/dll; without this, it'd look first in the directory they were originally built to (c:\src\bz2\... , which is my local paths) Need someone w/ vista or above to ensure that things still work after change #1. [NM] - Fix for mantis #998 - added mpicircle.TER to the next full build. Also #999 - ivphtankm2.xsi tweaks, next subbuild. [NM] -- b74f released=================================== - Fix for mantis #996. Particle effects are handled better in MW. [NM] - Slight revert of mantis #997 change made above. Caused the reticule to really bounce around in MW. [NM] -- b74f2 released=================================== - Found a large list of ATI graphics cards and device IDs at http://www.pcidatabase.com/vendor_details.php?id=240 . Sidenote: I wish they had some sensible numbering scheme, where their deviceIDs only increase over time, like nVidia does. Made the game auto-disable DXT textures for the following cards, unless you override it in render.cfg: mach64 ct pci, Mach64 CX, ATI Rage Pro AGP 2X 8mb (gt-c2u2), Rage 3D Pro AGP 2x, ATI ALL IN WONDER PRO (8MB), ATI 3D Rage Pro 215GP, ATI (GT-C2U2), Rage 3D II Graphics Accelerator, 3d rage 2 + dvd, Graphics Accelerator, Mach 64 GT, m3d agp card on agp slot, Rage IIC AGP, Rage 3D LT Pro AGP 133 MHz, Rage 3D LT Pro AGP 133 MHz, Rage 3D LT-G, Rage 3D LT Pro, Rage P/M Mobility AGP 2x, Rage Mobility l, Rage 3D LT Pro PCI, Rage 3D LT Pro PCI, Rage P/M Mobility agp, Rage L Mobility PCI, Rage 128 Pro PA PCI, Rage 128 Pro PD PCI, 3d Rage pro agp 2x, Rage 128 Pro PH AGP 2x, Rage 128 Pro PI AGP 4x, Rage 128 Pro PJ PCI (TMDS), Rage 128 Pro PK AGP 2x (TMDS), 4x (TMDS), Rage 128 Pro PM PCI, Rage 128 Pro PN AGP 2x, Rage 128 Pro PO AGP 4x, Rage 128 Pro PP PCI (TMDS), Rage 128 Pro PQ AGP 2x (TMDS), Rage 128 Pro PR AGP 4x (TMDS), Rage 128 Pro PS PCI, Rage 128 Pro PT AGP 2x, rage 128 pro agp 4x tmds, Rage 128 Pro PV PCI (TMDS), Rage 128 Pro PW AGP 2x (TMDS), PX AGP 4x (TMDS), Rage 128 GL PCI, Rage 32MB, Rage 128 VR RK PCI, Rage 128 SF 4x AGP 2x, Rage 128 4x SK PCI, Rage 128 4x SL AGP 2x, Rage 128 4x SM AGP 4x, Mach 64 VT VIDEO XPRESSION, Mach 64 VT4 PCI, ATI 3D Rage Pro AGP 2X [NM] - Some work on some MW differences seen between lockstep and visual worlds here. Did the following: (1) made waitplan do a proper save/load of its data, (2) if MW is on, made the low level Range_Search() function sort its results by seqNo so that the results are identical across worlds and possibly also machines. If nothing else, this helps make sure my MW tests stay more in sync. Might help with resyncs, at the possible cost of some performance. Not sure. [NM] -- b74f3 released========================================== - Restored ThermalMissile targeting "aim-at" functionality from BZ1, making them less likely to wander off towards seemingly random targets while still being spoofable with countermeasures (mantis #970). [Ken] - Fix for mantis #1005. Added some params to GamePrefs.ini: BZoneLoadConsoleOpenTime BZoneIngameConsoleOpenTime BZ2EditLoadConsoleOpenTime BZ2EditIngameConsoleOpenTime aipExtraLoggingOnResync See documentation above them. Also made the game read GamePrefs.ini, then LocalPrefs.ini, then either [LocalPrefs_bz2edit.ini or LocalPrefs_bzone.ini ]. A file read after another file will override its settings. This allows users to have personal settings for either build. [NM] - Fix for mantis #1003. Craft and buildings already had a friendly fire check in place; added this to persons (==pilots), powerups, landcreatures, torpedos. Also made it slightly more lenient -- it used to only check for same team, now it checks for allies too. [NM] - Fix for mantis #1008 - tweaked fbrckt.odf. [NM] -- b74g released========================================== - Made memory allocator cause an immediate AV if it runs out of memory. This'll help ensure that callstacks reflect what happened. Solution: use less memory. [NM] - Possible fix for mantis #1017. Do not set ForceStagePoint = 0 in an AIP, or that will force it to use a random one. Use 1..N. [NM] - Fixes for mantis #1016, 1019 - updated assets. Note: *please* use the paths in B74's patch13.pak. I mean it. [NM] - Fix for mantis #1013. Made it so that the AIP 'exists' check will fail on any building that needs a tap. As long as the AIP has a running basebuild/basebuildminimums section that'll build that building, it should dispatch a crig to fix the missing lung on that. [NM] - Made .dxtbz2 file reader, when DXT textures are off, read in all mipmaps from the .dxtbz2 file, and unpack them from DXT -> bitmap format via the OpenIL libs. Previously, it used BZ2's fairly naive mipmap generation algorithm. The results might be slightly slower, but the quality should be higher. You can turn DXT off in your render.cfg to test this, even if your card can handle DXT. [NM] -- b74h released========================================== - Fix for mantis #1029. Craft already had 'hp_smoke' / 'smoke' as a smoke emitter, falling back to the center of the object if not found. Added 'hp_moresmoke_2' .. 'hp_moresmoke_8' - if they're found, they're used to emit more of the same type of smoke. Note: searching is contiguous -- if 'hp_moresmoke_3' isn't found, then it won't bother looking for or using hp_moresmoke_4 .. 8. [NM] - Fix for mantis #1012. Added, to particle effect sections: [Chunk] renderBase = "draw_sphere" or "draw_geom" InitialPitch = 0.0 InitialYaw = 0.0 InitialRoll = 0.0 AddPitch = 0.0 AddYaw = 0.0 AddRoll = 0.0 These values are in degrees, for the 'Initial' values, and degrees per second for the 'Add' values. Compiles, tested for draw_sphere; copied & pasted into draw_geom, but not tested. [NM] - Potential fix for mantis #1028. Boosted initial spawn position for users by 1 meter vertically. [NM] -- b74h2 released========================================== - Fix for mantis #1038 - AV after doing some unsafe typecasting. Did some more RTTI checks before doing that in the half-dozen places in the code it did that particular cast. [NM] - Fix for mantis #1012. Forgot to call base class after adding a function in the derived class. [NM] - Updated items in mantis #1019. Also asset tweaks from #1031, #1032, #1041, with higher #s unpacked last. (I'm not sure if there were any items duplicated between them, but if you're not seeing a particular rev of your file, please check this.) Note: the .xsi files from 1032 aren't in the sub-builds to reduce download size somewhat. [NM] - Fix for mantis #1033. Added [GameObjectClass] aiAddHealth = 0 aiAddAmmo = 0 Note: if these values are not specified in the particular ODF, then they default to whatever values were read in for addHealth/addAmmo *in that particular ODF*. Thus, this violates some of the normal ODF inheritance/hierarchy rules. [NM] -- b74i released========================================== - Fix for 1047 - added 'update3' to GH's MPI Circle map. Also mantis #1055, 1057, 1045, 1062 in that order. [NM] - Possible fix for mantis #1050 - made the 'GetScanner()' call return false when its owning craft is unpiloted. May have some side effects, not sure. [NM] - Fix for mantis #1049 - network prefs weren't being read from LocalPrefs_bzone.ini/LocalPrefs_bz2edit.ini. Other values should have been read in, however. [NM] - Fix for mantis #1053, 1046, 1036 (bug seems to have been reported several times recently). Tugs should work better now -- damped their controls when they've started deploying. I tested w/ savegame from #1053 only. [NM] - Found some variables not saved/loaded as properly as I'd like in OffensiveProcess.cpp. Fixed. This may help w/ late-game joins that go out of sync instantly, and/or visual world popping, not sure. Just makes me feel better to do this. [NM] - Fix for mantis #1056. Items using OffensiveProcess (and derived, like AssaultTankProcess, GechProcess AttachOffensive, PersonProcess, SoldierProcess, SupportProcess, WingmanProcess) will keep after their target as long as it's an enemy. This may cause other behavior; to go back to the old code, I've added [CraftClass] OffensiveProcessIsTenacious = true // 1.0-1.3pb3 used a default of false - Fix for mantis #1063. Added in some protection and logging on what seems to be a malformed ODF. BZ2 should now log what file it's unhappy with and exit when it runs into problems, rather than just crashing. [NM] - Possible fix for mantis #947. Re-enabled code that kills default pilot weapons when hopping out. (This was disabled for mantis #909, which was due to a bad weapon type.) Also made the statusDisplay's bulletUpdate flag reset to false when its work is done. [NM] -- b74j released========================================== - Fix for mantis #1066 - AV in multiworld. Should be better now. [NM] - Probable fix for mantis #1069. Found some uninitialized variables in tugs. Fixed. Seems to work better for me. [NM] - Fix for mantis #1067 - icon_fvcons.dxtbz2, 1055 (updated) 1065 - more asset updates. [NM] -- b74k released========================================== - Added [CraftClass] OffensiveProcessIsTenaciousAITeam = false // 1.0-1.3pb3 used a default of false This value is used instead of OffensiveProcessIsTenacious if the craft is on an AI-controlled team -- i.e. it's not friendly towards any human player's team. [NM] -- b74k2 released========================================== - Asset updates: merged in #1055, 1075, 1077, in that order. [NM] - Possible fix for mantis #1074. StartDelay in particle ODFs was working best for items that counted time down, like EmitRender and StaticRender (and derived). BoltRender, ColorRender, and LightRender (and derived) count time up. Made it internally flip the setting for bolt, color, light. [NM] - Possible fix for mantis #1072. Made "ShellMultiTeam.Teams.MPIHumanTitle" toggle on/off along with "ShellMultiTeam.Teams.MPIOpponentTitle". Compiles, but is untested. [NM] - Fix for mantis #1076 - made GamePrefs.ini|LocalPrefs.ini's LOD1_MRM/LOD2_MRM values adjust the 'mesh.mrmfactor' console variable. Note: LOD0's mrm value is fixed at 3.0. [NM] - Fix for mantis #1073 - made ivar13 (in MPI) setting stick in more cases. Previously, if you were on a MPI map, and switched to another w/ ivar13 set, it'd work. But, going DM -> MPI w/ ivar13 set didn't work. [NM] -- b74L released========================================== - Fix for mantis #1081 - made AIP files's [Start] CheckProvides = true // true = default be read and used correctly. AIP plan chunks didn't know which team they were on until after the constructor. Fixed. [NM] - Fix for mantis #1082 - svar12 is read and applied correctly ingame. DLL code wasn't updated to read that. [NM] -- 1.3pb4 RC1 released========================================== - Fix for mantis #1093, AV in Targeting::ValidateTarget(). Probably been there forever. [NM] - Some work on mantis #1100 - made a few more files keep callstack info. If you can get this crash again, hopefully the callstack will have some more pointers for me. [NM] - Work on mantis #1102. This is a continuation of #1066, under slightly different circumstances, I believe. Made it do a count of child/sibling nodes before saving, and checks that on loading. If they differ, it should fast-forward the save. This might lead to an occasional pop of attached weapon states, but that's better than a crash or spontaneous exit. [NM] - Fix for mantis #1104. SwitchAIP plan had time check backwards. My bad. [NM] - Fix for mantis #1098 - texture filename ended in .tga.tga. Locally renamed it. [NM] - Possible fix for mantis #1092 - when a client clicks on "chat/more", then they'll re-request all ivars/svars from the server. This should help ensure the pages are correct. [NM] -- pb4rc1a released================================================= - Tweaked work on mantis #1102 above. Made it check earlier in the LoadShow code. [NM] - Work on mantis #1085. As a bunch of testers fingered the DeployBuilding changes for b64a as breaking G66, I put in code to re-enable the old behavior. Added [DeployBuildingClass] DoExtraBuildzoneCheck = true // false = 1.0 .. 1.3pb1 behavior, true = pb2 .. current I assume that G66 has custom CPU recyclers, so adding this shouldn't affect human teams. If this gets abused on human teams, I might make the false pathway only take effect when the AI is commanding the craft's team. [NM] - Fix for mantis #1106 - AIP idle dispatcher was reading UnitIdleSeconds, BomberIdleSeconds as seconds, then converting that to turns (i.e. * 10, at default 10tps). However, when updating idle time, it was incrementing by # of seconds. Thus, things would be flagged as idle only when the craft was idle 10x as long as specified. I believe that MinMissionTime is read correctly, though. [NM] - Work on mantis #1037 - did two things that might help things resync less: (1) iterate over all AIProcesses in a list sorted by the associated craft's seqence #, which is guaranteed unique and should behave the same on all platforms. (2) Tweaked grouppanel code that stores targets to store it on a per-world basis and not copy things around so blindly. This latter bit fixes code introduced for 72e2. I've taken steps so that it should be compatible w/ old savegames, but might have broken something. Hope not. Major thanks to Commando for putting together a map that resync'd fairly quickly. [NM] -- pb4rc1b released======================================================== - Made IA/MPI scav cleanup code call SelfDamage() on any scav it wants to remove, not Remove(). This'll make the killing of that scav more "natural" to anyone watching -- it should explode, rather that just vanishing. It'll still spontaneously explode w/o any reason. Hard to do anything about that. [NM] - Fix for mantis #1120, AV introduced as part of work on mantis #1037. Savegame works fine now. [NM] - Fix for mantis #1114. Idle dispatcher waited until the # of idle units was > minAttackForce. Changed check to >=, which seems to produce the desired effect. [NM] -- pb4rc1c released======================================================== - AIP Idle Dispatcher's UnitIdleSeconds now has a minimum of 1 second. Shouldn't really affect much. [NM] - On some tips from Ken, defined _SECURE_SCL=0 and _HAS_EXCEPTIONS=0 in the releaseltcg/releaseeditor build configurations. This shaves a decent amount off the exe size, and hopefully also gives it a speed boost, though that's almost certainly unnoticeable. [NM] - Work on mantis #1094 - attack groups will ensure to send their leader at the target. Also, added [CraftClass] AttackTaskUsesGroups = true If true (default), will use traditional behavior -- leader/follower. If false, then each tank in the group will act independently and charge at the target. Items built (only) by CPU recyclers might want to have this set to false, not sure. Give it a test. [NM] - Fix for mantis #1123 - don't allow multilauncher to go into an infinite loop. Put a limit of 256 iterations thru its loop. [NM] -- pb4rc1d released======================================================== - Probable fix for mantis #1014. Added [OrdnanceClass] RestoreFxSavegame = true RestoreFxLockstep = false RestoreFxVisual = true These allow selective undoing of mantis #838, which was done for 72g (above). The 'Savegame' one is used after loading a .bzn, .sav, or MW join/resync. Lockstep is done only in the lockstep world (i.e. multiworld is off). Visual is done only in the visual world (i.e. MW on). My guess is that some particle fx die out naturally before the ordnance does, and were getting "resurrected" when they shouldn't. The above flags should allow people to turn this off in such cases; I don't have any good way right now to tell the difference between a natural death of fx and those that were lost due to MW differences (mantis #838), etc. [NM] - Possible fix for mantis #1127 - scrap gauge will ignore any item with a scrapHold/capacity of 0, preventing them from taking up an entry in the scrap bar. Also upped max # of items tracked by scrap manager and scrap gauge code from 16 to 32. Compiles, but is untested. [NM] -- pb4rc1e released======================================================== - Found that TeamSlots.h had a limit of 10 items per team that are scrap items, and a separate limit of 10 power items per team. Upped limits to 32, 128, respectively. Made ScrapGauge/ScrapMgr inherit from new constants in TeamSlots.h, rather than multiple, clashing, #defines. [NM] - Fix for mantis #1105. Added [GameObjectClass] SmartIsAirUnitCheck = true If true, then the "IsAirUnit" check in code will only check the flying flag for artillery, bombers, APCs, and SAVs; every other type of craft will flagged as "not an air unit." If false, it uses the "isFlying" flag on the craft. False was the default for 1.0-1.3pb3. (Note: non-craft, like pilots/soldiers, are always "not an air unit," with either setting.) Also made jetpacks not set the flying flag for boosters that only give horizontal thrust, walkers/tracked vehicles will never allow the isFlying flag to be set. Hovercraft will clear this isFlying flag when they're within 2*setAltitude of the ground. [NM] -- pb4rc1f released======================================================== - Fix for mantis #1136 - recy variants with empties' upgraded costs tweaked, at 30, 35 & 40 scrap respectively. Some vets had whined about this a while back, and couldn't be bothered to do a trivial amount of work. All new files, so I'm vetting this myself. [NM] - Executive decision on mantis #1084. Reverting mpvehicles.txt to (internal CVS) revision 1.2, made on 2007/02/04, tagged as "updates since pb3." This is more or less identical to patch 1.2's mpvehicles.txt, with only some naming tweaks on vehicles, e.g. "Thunder bolt" -> "Thunderbolt". This rolls back version 1.3, made on 2008/5/5, tagged as "Fix for 1047 - added 'update3' to GH's MPI Circle map. Also mantis #1055, 1057, 1045, 1062 in that order." Also rolls back version 1.4, made on 2008/5/13, tagged as "Asset updates: merged in #1055, 1075, 1077." I'm doing this because there's a ton of 3rd party maps, not included in the 1.3pb4 installer, so re-ordering the list breaks backwards compatability. If people want to add items to mpvehicles.txt, they should only append to the end. Sorry, guys. [NM] - Fix for mantis #1134 - updated bzgame_scrap.cfg to support the 16 new possible entries. [NM] - Fix for mantis #1129 - scion morphtank ODFs w/ [morphtankclass] entries restored. They were deleted during the "great inheriting," when ODFs were made as simple as possible. The ODF items under [morphtankclass] were never handled properly by inheritance; everything else seems to work w/ inheritance. As Ken's not gotten around to fixing this, the simplest solution is to restore those entries. [NM] - Probable fix for mantis #1133 - AIP recover plan won't see buildings as permanently non-idle. Also, now asks the target (needing repair) units to come to it, making it somewhat more reliable. [NM] - Fix for mantis #1119 - ivrecycmd1.autoreg correction. [NM] - Fix for mantis #1095 - added [CraftClass] CanAIPForceIdle = true If true (default), then when an AIP switches, the IdleAllCraft will stop this craft. If false, then IdleAllCraft will ignore this craft. [NM] - Fix for mantis #1140 - ffa/mpi recycler autoreg entries would show on stock strat maps if you switched to a ffa/mpi map. Now, for every strat map, it'll act like recylist.txt was specified, forcing a switch back. May have some side effects. [NM] - Added localprefs_bz2edit.ini, localprefs_bzone.ini to this subbuild, with aiplogging turned on. Not part of the next full build. [NM] - Added changed files from mantis 1131, 1122 (after some fixes!), 1125 (bad path to asset, fixed). Not really following my vetting rules, am I? [NM] -- pb4rc1g released======================================================== - Asset updates from mantis 1125, 1122, 1126, 1091, 1142. [NM] - Fix for mantis #148, 1141. Added [ScavengerClass] or [ScavengerHClass] ScrapFirst = true If true (default), then scavs not under AIP control (e.g. those on a human team, or idled ones) will look for loose scrap before capping a nearby pool (within ScavengerCollectPoolRange or scanner distance, if present, scanner distance overrides the first range). If false, then nearby pools come first. Unified a bunch of code duplicated between scavs/hoverscavs. [NM] -- pb4rc1g2 released======================================================== - Added something I might end up regretting. But, I like the security code. Added: [HoverCraftClass] MoreLike12Physics = false If true, then it acts more like 1.2's hovercraft code. With some important differences - what goes up must come down. Sooner, perferably, rather than later. [NM] - Upgraded libpng to v1.2.29 (security update). Will be in next full build. [NM] - Fix for mantis #1143 - goal list didn't show up in bzshell_multi_client_stctf2.cfg [NM] -- pb4rc1h released======================================================== - Fix for mantis #1148 - tweaks to some files, deleted one. [NM] - Updated comments above on mantis #604 fix. The ODF params weren't very clear in my first pass. [NM] - Possible fix for mantis #1152 - changed 'OR' rules in AIP plan conditions to be more consistent. It's always been that if any condition fails with an 'AND', it'd short-circuit the conditions (with a fail). Made it so that if any 'OR' condition is satisfied, it'll short-circuit the conditions (with success). Also made it log more when it does short-circuit things with conditions left to check. [NM] - Found some uninitialized variables in MicroPlan's constructor. Fixed. [NM] - Asset updates: mantis 1149, 1153, 1155, 1151, 1156. [NM] -- pb4rc1i released======================================================== - More info in callstacks (I hope) on any crashes in the ParameterDB code. (Basically, just did #pragma optimize("y", off) at the top of the file.) [NM] - Version info of remote servers is always shown in the pregame info box now. Used to be poweruser only. [NM] - Reverted to internal revision 1.4 of bzgame_base.cfg. Ken made some changes last fall for interface groups, etc, but they don't work with custom icons. (Mantis #1158). For now, I think it's easier to revert. [NM] - Fix for mantis 1157 - updated some assets. [NM] -- pb4rc1j released======================================================== - Possible fix for AV mentioned in mantis 1161. Problem is, it's dereferencing a nearly-NULL pointer. Not sure that a NULL check will really work. [NM] - Probable fix for mantis #1158. Basepanel icons now track the ODF of the object in that slot. If that changes, it'll re-apply the current ODF's, as it might have changed. [NM] - Fix for mantis #1167 - added files for the GH variant, after some edits. [NM] - Fix for mantis #1164, probably also 1162. Attacker AIP plan wasn't reading in targets ever since changeover to allowing targetType# to be specified. Also, didn't like the way it was choosing targets. Switched it over to the search function other pieces of code are using, made that function (optionally) check provides. [NM] - Possible fix for mantis #941. Attacker AIP plans now recompute their target to be the closest victim of all possible victim types (targetType or targetType#) to the first attacker vehicle, after the attackers have reached the staging point. This doesn't prevent the AI from fixating on a target on the far side of an enemy base from where the units are. For example, if an attacker plan only has targetType = "ibrecy", then it'll focus on that, and that only. (And probably get killed by any base defenses, unless it's a bomber being sent.) If it has targetType = "ibrecy" and targetType1 = "ibgtow", then it'll focus on whatever's closer to the attacker. Compiles, but is relatively untested. [NM] -- pb4rc1k released======================================================== - Another quick change to attacker plan - it was trying to not send units after the same victim as other attacker plans. But, it forgot to exclude the current attacker plan's victim, causing it to sometimes choose an invalid target. Fixed. Also made the final "send to targets" not care about other attacker plans. [NM] - More work on mantis #1161 - if nearly-NULL pointers are found (i.e. within first 64Kb of address space), it'll whine to console/logfile. (Note: bzone.exe, by default, won't force open console after mission start; adjust localprefs). [NM] -- pb4rc1k2 released======================================================== - Fix for mantis #1161 (for real, this time). SceneManager's Range_Search() would return how many it actually found, which could be bigger than the results buffer passed in. (Such a programming style is useful to run once, allocate large-enough buffer, run again, but BZ2 really doesn't use that style.) Made all places that call Range_Search ensure they take the minimum of the # of results and the input buffer size. [NM] -- 1.3pb4 RC2 released========================================== - Possible fix for audio not working on WINE. It may be that their mmioOpen() call is more strict than Windows's, and dies horribly if MMIO_ALLOCBUF is passed as part of the bitfield in the third param for a memory file. Not sure -- don't have WINE or care to install it. In any case, bug-for-bug compatability is a good thing. Let me know if .wav files don't play after this change, and I'll revert it. [NM] - Restored AIP attacker plan's "make sure other plans aren't currently targeting this victim" code. Also, increased logging during the finding of units and staging phases, so that it should be possible to tell, earlier, when things go wrong. Edited comments about targetType# above, as it was confusing everyone. [NM] -- pb4rc2a released======================================================== - Tweak to AIP attacker plan (mantis 1175). If it was building something, and there's an empty item for the attackType# slot, it used to always place what it built in that slot. Now, it checks whether what it built can go in that slot (i.e. either class exactly or provides), and puts it in the slot only if appropriate. Also collected the half-dozen places in the AIP code that checked provides into one utility function. [NM] -- pb4rc2b released======================================================== - Fix for mantis #1144. Added Wug's AIPs, v3.6b4 [NM] -- 1.3pb4 released========================================== - Fix for mantis #1179. Forgot to check for NULL in some of the AIP attacker code I just changed up. Ironically, it was a line I added trying to log info (added for rc2a) that tripped it. [NM] - Made Dark Reign II interface libs more forgiving of an invalid colorgroup specified -- if they can fall back to 'default', it'll do so silently (though it'll whine to the .log file). If it can't find 'default', it'll still die, though hopefully with more info than before. [NM] - Work on mantis #1178 - tweaked multiworld catchup code slightly. If it's more than 30 turns late, the lockstep world is considered to have enough time to do work. Parallel code existed in the buildworld, copied to lockstep world. [NM] -- pb4_a1 released======================================================== - Fix for mantis #1182. Added Wug's AIPs, v3.6.1. From his notes: Updated version of 3.6. Fixes some typos and minor bugs. Main changes are: - Scavenger deployment changed slightly to go after more scrap pools during early game - Improved late game attacks for Scion vs. ISDF AI [NM] - Bumped Gamespy version # to pb4a. [NM] -- pb4_a2 released======================================================== - Gametime reported in pre-game sessions is now correct when tps != 10. - Work on mantis #1180 - if the remote server isn't playing, it'll report how long it's been sitting in the shell, in minutes. Note: the remote server must be running pb4a or higher to see this info. [NM] - More work on mantis #1178 - reduced 'late' tolerance to 2 turns. Also tweaked histogram slightly. [NM] - Fix for mantis #1182. Added Wug's AIPs, v3.6.1a. [NM] -- pb4_a3 released======================================================== - Redid CPU scav cleanup code, which exists in IA, MPI DLLs. Refactored it into a separate function. Also made it do extra checks to ensure that before it kills anything, that it's still a scav/hoverscav on the CPU's team. It used to ensure it was still on the CPU's team, but didn't do the class checks. [NM] - Added in another line of logging to the bottom of the ingame histogram. Done for mantis #1178, as the info in the screenshots shows everything in the histogram looking normal, but there's definite oddities in what's rendered. Maybe more logging will expose things. [NM] -- pb4_a4 released======================================================== - Work on mantis #1184. IA DLL allowed to go from A (anti-assault) plan to L (late) back to assault again. This makes it more consistent w/ MPI. Also cleaned up unused variables in IA/MPI code. [NM] - Work on mantis #1185 - clearArea/DefendArea plans check provideName. Done by switching more code away from the attackTargets/defendTargets lists, and into the IFCondition::FindObject(). [NM] - Fixes for mantis #1182, 1183. Wug's AIPs v3.6.1b, GH variant updates. [NM] -- pb4_a5 released======================================================== - Fix for mantis 1190 - silly bug in newly rewritten IA scav cleanup code. MPI did the right thing. [NM] - Fix for mantis #1198 - AV in upgrader plan, triggered by MOD. Multiple layers of fixes went in, starting w/ checkProvides needs to check for exact matches, even when it's on. If the exact ODF check succeeds, it doesn't bother doing the in-depth provides checks. [NM] - Fix for mantis #1195. Added [CraftClass] FireWhenCanHitFriends = false If this is false, firing is prevented when the unit thinks it'll hurt its allies in the process. If it's true, the unit fires anyhow. Cue up Weird Al's _Trigger Happy_ for these units. [NM] - Possible fix for mantis 1185 - the IsIdle() check now treats units with a command of CMD_NONE and command priority 1 as idle. [NM] - Fix for mantis #1196. Added, to ScriptUtils.h // Sets whether objects made with BuildObject() are automatically // slotted into the 'best' group (with SetBestGroup()). Also, if this // is true at turn 5, all units preplaced on the map will get // SetBestGroup() called on them if not already set. Stock 1.3pb4++ // DLLs set this to false, because they completely manage grouping. // For backwards compatability, this defaults to true if not called. DLLEXPORT void DLLAPI SetAutoGroupUnits(bool autoGroup = true); Also updated all the stock DLLs to call this with false at startup. This seems to provide the best mix of backwards compatability and work with Ken's changes for grouping in the stock missions. [NM] -- pb4_a6 released======================================================== - Fix(?) for mantis #1194. Added [ThermalMissileClass] ActLikeBZ2 = true If true (default), should act like BZ2 thermalmissiles before mantis #970 was applied. If false, this uses some code added by Ken from mantis #970. (Added between b74f3 and b74g, see above, search for #970). [NM] - Fix(?) for mantis #1137. Added [PersonClass] UseFastTransitions = true // If true, starts deploying/undeploying based on weapon selection, not animation finishing autoDeploy = true // Been this way since 71k If UseFastTransitions = true, it's best used w/ autodeploy = false. That combination should behave much more like BZ2 used to. Note: not all 4 possible combinations of UseFastTransitions/autoDeploy may work well. My gut feeling is that setting them to opposite settings may work best. Compiles but is untested. [NM] - Added a lot of range checks to Reticule, Sprite drawing code. It had asserts for a debug build, but those went away in builds for the public. Now, it asserts, then Does The Right Thing(tm), whining to the logfile then exiting w/o doing any damage. Same w/ ChargeGun -- made sure its charge level is within range on saving & loading, but no whining to logfile when things are in a bad state. [NM] - Added some bulletproofing to the Spawnpoint code. AV was exposed on some new maps by Dataanti when he didn't have any spawnpoints on the map at all. [NM] - Undid mantis #465 for stflyway.bzn . Fixes mantis #1207 - map didn't load. Probably due to CVS checkin of binary data when filetype was ascii. [NM] - Added some code on loading .bzn/.sav files -- if an object's matrix is invalid, it'll reset it to a safety position/orientation (i.e. at center of map), and whine to logfile. [NM] - Fix for mantis #1201 - AV in sprite. Caused by object model hierarchies not being identical on load. Had to do the following: (1) make marker code re-entrant, so that multiple nested markers could be done in binary savegames. (2) code to check count of nested object hierarchies had to switch from a simple sum-of-child/sibling-counts to a CRC of a flattened hierarchy w/ ODF checksums. [NM] - Asset updates - mantis #1209, 1210, 1200, 1188. [NM] -- pb4_a7 released======================================================== - Restored SatchelCharge's use of the cockpit timer. People complained about Ken's removal of it. Added [SatchelChargeClass] UseCockpitTimer = true This allows modders to disable things. [NM] - Possible fix for mantis #1225. Check for null pointer before dereferencing list. [NM] - Fix for mantis #1204 - added background to ingame stats display. Also added a F# key column so that people can track which ally is on which key much easier. I'm not 100% sure I'm happy with the size of the background at 640x480. [NM] - Fix for mantis #1219 - ST:Flyaway updates, w/ corrected heights on objects. [NM] -- pb4_a8 released======================================================== - Updated message window for crashes to include (1) Windows version info, (2) last 4 lines printed to battlezone.log file. This may help with retrieving info on some crashes. [NM] - In Full build installer, replaced SHCreateDirectoryEx() with SimpleFile::MakeDirTo (my code) for some more Win98 compatability. Also found a few cases of that function being called in bzone.exe/bz2edit.exe, also replaced w/ same code. (Used in creating custom pilots/saved dirs if the .cfg called for it). I think Win98 w/ IE 5.0 or higher is reqired. [NM] - Backdrop for ingame scores panel toggles w/ rest of contents. [NM] - A lot more logging for mantis #1203. It'll spam the messagebox with a lot of detail if it notices some MW lag going on. You'll want to have GamePrefs.ini::KeepChatLogFile = true turned on to capture all that it dumps out. I'd need to pour over those logs to get a little more info on what's going on, possibly also w/ a screenshot with the histogram up like before. [NM] - Possible fix for mantis #1216 - pilots will trigger their special on either deploying, or via the input bound for the special weapon. [NM] -- pb4_a9 released======================================================== - Increased logging for the case of loading into a small buffer. Should die w/ a callstack now. [NM] - Added GamePrefs.ini :: FilterOutNoMap, LagSpamTimeout, MinMWLagSeconds, MinLaggedPlayerSeconds, MinReallyLaggedPlayerSeconds, UseScorepanelBackdrop. See comments above them for more info. [NM] - Even more logging for the MW lag case (mantis #1203). [NM] -- pb4_a10 released======================================================== - Some slight tweaks to the MW lag cases. Might be better; do try this out. [NM] - Undid fix for mantis #1216 (done for a9). Back to the code that was in a8 or before, where specialweapon is triggered if (1) the input for triggering the special weapon is done, or (2) [autodeploy=true and input for deploy is true]. I'm really not understanding what's broken, and why, with these various bug reports -- please be more specific as to (1) what you're seeing and how that differs from (2) what is expected. Saves would be helpful, too. [NM] -- pb4_a11 released======================================================== - Asset updates: mantis #1229, 1221 (wug's aips v4.0), 1237, 1231, 1170. [NM] - Changed default value for persons: [PersonClass] autoDeploy = true // Been this way since 71k This seems to allow 'c' to work to deploy the jetpack. Hopefully nothing else is broken now. :( [NM] -- pb4_a12 released======================================================== - Fix for an issue noted on pb4 boards. Added [AirCraftClass] AlwaysDeployed = false AlwaysUndeployed = false Note: setting both to true is probably a bad idea. If either of these is true, then requests to change state are ignored. Compiles, but is untested. [NM] - Fix for part of mantis #1200. Red_Devil noticed that the tug in isdf03 behaved significantly differently in b71c -> 71d. Cause was due to "Fix for mantis 346. Tugs should go to navs fine now." . Now have a fix that seems to fix mantis 346 as well as the tug in isdf03. [NM] - Work on mantis #1199 - hoverscavs & deploy height. Added [DeployableClass] HoverScavDeployAtAltitude = true If this is true, it uses the setAltitude to offset its position during deploying. If false, it ignores setAltitude. 1.3pb3 effectively treated this as false. [NM] -- pb4_a13 released======================================================== - Fix for issue noted in mantis #1246 - bitmap loading code will complain once, and once only, for each particular texture that's requested, but is missing. Should help reduce logfile spam. [NM] - Fix for RD_Attacker_Pathing_2.sav, posted on mantis #1230. The extractor the tanks were told to attack had tunnels added recently, to 'improve pathing' (around it). But, when trying to get *to* it, the pathing code was trying to get to a tunnel that was unconnected to anything else. When pathing fails, it falls back to a "just go in a straight line from start to end" path plan. Made it so that it'll try the existing code, but if that fails, it'll try again -- but the second time, it's told to assume that the start & dest are not tunnels. This seems to fix that savegame, and the 'nack' save also posted. [NM] - Fix for mantis #1228 - removed tunnel* entries from ibwseg.odf. Was causing some of the underground tunnel segments to disappear. [NM] - Asset Updates - mantis #1243, 1247. Also #1245, though that will be in the next full build, only. [NM] -- pb4_a14 released======================================================== - Found some accidental memory trashing of static global variables. Been present in source code, as far as I can tell. Found while hunting down some oddities noticed in debug builds here. Not sure if this ever was noticeable in end-user builds. [NM] - Found small bug in BZ2's make-directory-to code. Done while adding some code that ensures that the pilots, logs, and saved directories are present on startup. [NM] -- pb4_a15 released======================================================== - Updated the 'DLL warning - object being built at 0,0,0" from just a logfile warning to a console message. Should make it slightly easier to spot when the problem happens. Also, the DLL HoppedOutOf() function could return 0 if the handle passed in was for a pilot -- now fixed. (And, about a half-dozen other callbacks that could treat pilots and craft differently also fixed) This may help w/ isdf07, mentioned in mantis #1248. [NM] - Fix for "/me" (nothing else on line) generated by BZ2's irc handler. [NM] - Possible fix for mantis #1253, maybe also 246. Added (SUPERCEDED BY NEW FLAG. SEE BELOW) If false, it uses code that existed in b69p, before Ken's change. Do test extensively, especially in the editor -- not 100% sure I got all the object placing/moving code correct with either/both possible values. [NM] - Fix for mantis #1252 - logging should work again. [NM] - Fix for matnis #1239 - removed references to ibpad01.tga .. ibpad04.tga from isdf02.trn .. isdf04.trn. Those textures don't exist anywhere, and were generating some warnings. [NM] -- pb4_a16 released======================================================== - Fix for mantis #1254. An install of pb4 over an install of BZ2 from a German BZ2 CD should be able to join pb4 over an install of BZ2 from the English(US) BZ2 CD. Or any other install versions. My bad when upgrading the asset checker. [NM] - Asset updates. For next subbuild (a17): mantis 1072, 1221, 1260, 1249, 1266. For next full build, mantis 1256 (rev 3), 1261. [NM] - Added feature requested by Commando. Made [BuildingClass] tunnel00X0 = 0 // default values shown here tunnel00Z0 = 0 tunnel00DX = 0 tunnel00DZ = 0 read in floating point values (e.g. 1.5, 1.23456, etc), not just integers (0, 1, 2, ...). Note-- this value is multiplied by the current map's .trn file's MetersPerGrid value, which defaults to 8.0. Therefore, a value of 1.5 for tunnel00X0 would be 12 meters at the default MetersPerGrid. [NM] -- pb4_a17 released======================================================== - Possible fix for mantis #1268. Added [CraftClass] OffensiveProcessIsDistractable = false OffensiveProcessIsDistractableAITeam = true This can be used to undo the mantis #892 fix above. In short, if the appropriate (i.e. human or AI team) flag is false, then AI units will 'stay on target' -- focus on their target until it (or they) are dead. If the flag is true, then if they get hit by enemy fire on the way to their target, they'll break and return fire on their attackers. (And, like before, they may not get back to their original target if they kill those interruptors). [NM] - More work on mantis #1264/1265 - a little more logging on the timestep that the gamestate from the server was unpacked at. [NM] - For next full build, mantis 1256 (rev 6). Also, mantis 1214 - more sfx added to the Jak Killer. [NM] - Some of the test assets for mantis #1253 had a 'bad' matrix, such as FrameTransformMatrix { 1.000000,0.000000,0.000000,0.000000, 0.000000,-1.000000,0.000000,0.000000, 0.000000,0.000000,1.000000,0.000000, 0.000000,0.000000,0.000000,1.000000;; } That's a perfectly legal matrix in and of itself, but it doesn't compress well to a quaternion that unpacks back to the same matrix. In a debug build, this'd fire off many asserts, but give no indication to the end user. Made it so that if the crig's buildMatrix had any invalid floating point values, it'd complain to logfile about that object. This only really helps if the object is buildable, but it's a step. [NM] - More work on mantis #1253. Removed earlier true/false flag, and replaced it with [GameObjectClass] AlignTerrainReplaceType = 0 Possible values are 0..5. They break down as following: 0: Should be same as pb4 1: Uses new centering code from 69q, but alternate offset 2: Closer calculations to 69n4, same offset as 0 3: Closer calculations to 69n4, same offset as 1 4: Closer calculations to 69n4, another offset type. 5: Aligns the model to the closest corner of the terrain cell I'm not sure if any of these values produces the desired results. Please test. If none of the flags give the desired results, please be *as specific as possible*. Also, do check that objects build at the same place the preview images show. [NM] - Possible fix for mantis #1020 - flipped the discrete buttons for steer right/steer left. Now, they behave as they display. [NM] - Further tweak to GamePrefs.ini :: FilterOutNoMap. Now squelches multiple listings of the same session & map name from the same IP. Reduces my "upgrade to pb4" advertising server to one line, which is more convenient. [NM] - Fix for mantis #1259 - extractors (upgraded or not) will force-restart any loop animations after loading a .bzn or .sav. Reported by BBB. isdf12.bzn is a good testcase. The code I had to work around seems to have been present even in the earliest 1.3 source code I've got, so I believe this has been around for a while. [NM] - Fix for mantis #1257 - weapon powerups will now force-update the ammo/icon display. Noticed by BBB, save uploaded by Commando. [NM] - Possible fix for mantis #1174 - always writes logfile to to BATTLEZONE.log in output directory. Shouldn't be any more confusion about this. [NM] - Fix for mantis #1258 - updated GetServiceTask() so that units will not leave the service bay until it's supplied all that it can (health, ammo, and/or localammo). Noticed by BBB, save by BBB and/or Commando. [NM] -- pb4_a18 released======================================================== - Asset updates from mantis #1244. [NM] - Possible fix for mantis #1191. Tweaked 1.2-like hoverphysics security code to be more friendly to the multiplayer smoothing code. This should help fix some vertical stuttering. [NM] - Fix for mantis #1271 -- delete aiplist.txt, ia_aiplist.txt files. Note - modders shouldn't submit that file w/ changed AIPs. Instead, please submit any changes to the aip*.autoreg files. As these files are in patch13.pak, next full build will delete these files. [NM] - Fix for mantis #1176 - isdf11.dll ('snow blind') should only set isdf1103.aip once, when the "srecycler" dies. There may be other problems with this mission, but this was an easy, safe fix. [NM] - Fix for mantis #1080 - reduce ivwalk.odf's pitchFactor from about 1.99 to 1.0 in order to dampen the walker 'head bob' on the isdf13.bzn opening cutscene. In order to make this as safe a change as possible, added [CraftClass] LookAtPitchFactor = X This defaults to whatever pitchFactor is calculated to be for the craft as it's read in, thus I can't give a precise default value above. Most craft tend to have a value slightly under 1.0 or 2.0. This optional ODF param allows the value of pitchFactor used in LookAt() to be overridden to another value w/o changing pitchFactor in general. [NM] -- pb4_a19 released======================================================== - Full build installer will now delete a few stale files left over from a 1.0-1.3pb3 install. [NM] - Found a few uninitialized variables -- mostly related to LODs -- in the MeshRoot struct. Initialized them to 0s, as that seemed to be safest. [NM] - Added AlignTerrainReplaceType = 5 -- Aligns the model to the closest corner of the terrain cell. This ignores the root-level bounding box (which is a lie on cbpcon02.xsi/cbpcon05.xsi 's Mesh obj9__2g -- it doesn't line up with the actual verts), and uses a different set of verts, which seems to be what's used. Should give a few more possibilities for object placement. Maybe this'll finally give people the tools for object alignment they want. [NM] -- pb4_a20 released======================================================== - Fix for mantis #1280. Pre-placed torpedos on a .bzn weren't loading properly. Another param was added between save version 1141 and 1147 (not 100% sure where), and needed to be skipped if the save version was before then. [NM] - Fix for mantis #1282. Added [TugClass] UseLiftSpring = true CargoLiftSpring = 10 If UseLiftSpring is false, then there should be no changes from before. If it's true, then the LiftSpring is used to help keep the cargo at the intended altitude. [NM] - Fix for mantis #1283. Tweaked mpibridges.bzn for next full build. [NM] - Fix for mantis #1277. Added [GameObjectClass] BuildSupport = "X" //can't build next to If this is set, then this shouldn't allow anything to be built in any of the 8 squares next to it, for a 1x1 square. Similar for larger structures. Suggested by Avatar. Compiles but is untested. [NM] - Asset updates. Mantis 1283 for next full build. Also #1251, 1171 fixes, next subbuild. [NM] -- pb4_a21 released======================================================== - Added a commented-out (i.e. non-functional) IP autoban for Sean/SeanTheGreat, who seems to be trying to trigger lag in games. If you run into similar problems in MP games with him, you just need to remove the // from this line in GamePrefs.ini: //BanIP1 = "68.3.228.114/24" // Sean/SeanTheGreat, who seems to be trying to cause lag in games change to: BanIP1 = "68.3.228.114/24" // Sean/SeanTheGreat, who seems to be trying to cause lag in games - Asset updates. Mantis 1285, 1192, 1171 (redo, with unpacking two .zips this time). -- pb4a_rc1 released======================================================== - Possible fix for mantis #1264, 1265, 1287 - did major (and long-overdue) refactoring of tracking of moves from MoveManager.{h|cpp} to NetManager code. Too much duplication, too many competing systems. Doing this change should reduce the memory footprint slightly, especially in MP. Should also slightly simplify the code. This may lead to some bugs in the short term, hopefully only in a bit of MW+MP warping -- the smoothing code isn't quite completely redone for the new system. [NM] - Asset updates from mantis #1274. [NM] -- pb4a_rc1a released======================================================== - Fixes for bugs introduced w/ fixes above - mantis 1289 - targeting wouldn't 'stick' across MW swaps. Also made bz2edit run w/o crashing. [NM] -- pb4a_rc1b released======================================================== - Fix for mantis #1292 - savegames made of MPI maps from bz2edit.exe should load w/o crashing in bzone.exe. Note: saves made before this change won't be corrected. Don't have a problematic save to test, though. [NM] - Upgraded battlezone.log message when DLL load fails. Prints out the path it tried to use, and the results of GetLastError, which is what MSDN says should be used if LoadLibrary() fails. As before, the #1 cause of modder's DLLs not loading on other people's systems is using the debug build configuration, not release/releaseEditor. [NM] - Updated code to use (require) SSE across the board. Found a few places where matrices weren't being passed by const reference -- this should speed up things, even if I turn SSE code off. Unlike previous tests, also put __declspec(align(16)) on struct Matrix, Quaternion and Vector4. Also, had to rewrite TrailRenderClass, BoltRenderClass to not use STL containers of __declspec(align(16)) 'd variables. This might produce a speed boost, not sure. If your system is getting > 60fps, then you're not likely to notice any changes. [NM] - Possible fix for [MachineGunClass]::OneSoundPerShot = true. Won't set looping sfx flag if set to true. (NOTE: REPLACED by [MachineGunClass]::soundPerShot, see below) [NM] - More SSE updates. Align16'd a bunch more structures, including Vertex, VertexTL. This may hint to the SSE codegen that it can use more efficient operations on them. [NM] - Even more SSE updates. Rewrote Matrix::Transform_Vectors to use code from http://www.cortstratton.org/articles/OptimizingForSSE.php . This seems to work w/o problems, and ought to be a good chunk more efficient. I'm still not 100% happy with the way I'm reading 12-byte (3-float) vectors in and out of the 16-byte (4-float) XMM registers. If any of you are really good with assembly, drop me a line. I tested this w/ RD's map which had a dozen crigs on it. Dropped on 30 more. Enabled multiworld. Looked at the units. Framerate generally stayed about 54; not sure what it would have been before these changes. [NM] - Fixed up TrailRenderClass after breakage earlier today. [NM] - .sav savegames might work better after loading; might have been broken in rc1a. Do test loading saves, especially those made after 3-5 minutes of gameplay. [NM] -- pb4a_rc1c released======================================================== - Updated SSE code in Matrix::Transform_Vectors() to be able to process pairs of vectors at once, if it's running on chunks with a stride of 12 or 32. [NM] -- pb4a_rc1c2 released======================================================== - Update to fix for mantis #769. Changed ODF entry to [MachineGunClass] SoundPerShot = 0 // default The default value of 0 means that each machinegun will have one looping sound running when firing. (Same as BZ2 1.0-1.3pb4). Other possible values are 1 -- fires off one channel per shot, non-looping, and 2 -- kills previous sfx, then fires off one channel per shot, non-looping. The original request as to what was desired was *extremely* vague. [NM] - Updated Matrix multiply code to use SSE. Should be faster, etc. [NM] - Fixed case where the 'userprefs' file was being created (mistakenly) as a folder instead. (Introduced post-pb4; if you have a folder named 'userprefs' in the same directory as bzone.exe, just delete that folder and the file should be recreated.) [NM] - Made full build installer check for SSE's presence, put up a warning if not found. [NM] - Tweaked LightVertexList (top-used function, according to AMD's CodeAnalyst profiler) to copy up to 16 bytes of diffuse & specular info at a time, when possible. [NM] - Other slight optimizations, mainly in camera RHW code. [NM] - Asset updates - mantis 1294 (only ModelFixes_b3.7z), 1293 [NM] -- pb4a_rc1d released======================================================== - Added back some (simple) move smoothing code. If a move is missing from a remote player for a given timestamp, it just uses the most recent valid move. [NM] - [MachineGunClass]::SoundPerShot wasn't being read in w/ that name, but the old, deprecated name. Fixed. [NM] - Fix for mantis #1300 - AV seen during plant killing. Unaligned matrices makes SSE unhappy. [NM] -- pb4a_rc1e released======================================================== - Fix for infinite loop on joining. Forgot to [NM] -- pb4a_rc1e2 released======================================================== - Pulled out a line of code I can't remember why it was added in the first place. Basically, on a join or resync, time was advanced one timestep. Removed that. Did that because of occasional problems w/ late joiners, and I'm curious to see if that'll help. [NM] -- pb4a_rc1e3 released======================================================== - Shift+F9 view now renders the borders of terrain slabs in a visible color. :) [Ken] - Work on mantis #1301, 1302 - turned on full callstacks (#pragma optimize("y", off)) in displaylist.cpp, and all the RenderScene/Render functions. I need more info in the callstacks than I'm getting. [NM] - Clients/servers should be able to see the alt-tab state of all players on the ingame score/ping/fps display. Also, added GamePrefs.ini::AltTabTolerateTime , which allows the server to auto-kick clients who've been alt-tabbed too long. See comments above it. (Note: clients won't auto kick servers who alt-tab too long, but they should be able to monitor that info and decide to leave.) [NM] - Asset updates - mantis #1294, the 'b4b' version. [NM] - Fix for mantis #1304 - network-specific messages aren't printed when loading a .sav game from the pause menu. [NM] -- pb4a_rc1f released======================================================== - Possible fix for factory panel logouts - concept of 'freeze user's controls' was lost in recent move from movemanager owning inputs to network code. Try this change. Also made it so that PoweredBuilding & TurretCraft don't do the facing check between the user and the terminal when the user's already logged in. This might help cases when the user gets bumped around, and can't log out easily. [NM] - Bettyvoice shouldn't repeat messages in MW. [NM] -- pb4a_rc1f2 released======================================================== - Found case where time could proceed past a scheduled network resync point, which was probably the cause of lagouts right after a resync. Now, it waits at the resync point until the new gamestate arrives from the server. [NM] -- pb4a_rc1g released======================================================== - Limited max # of units selected to 63 in all game types (online or offline), as the net code has an internal max of 63 selected handles per command, and all inputs run thru that now. (I need two bits to encode the type of command -- who, where, or param -- leaving 6 bits, or 0-63 for handle count.) Sorry. [NM] - Integrated some input changes from Ken who found them on gamedev.net. This may help w/ special keyboards that map things funny. Not sure. If this causes any problems, I might have to make it gameprefs.ini'd. [NM] -- pb4a_rc1g2 released======================================================== - Fix for mantis #1307. Time progresses in editor build now. [NM] -- pb4a_rc1h released======================================================== - Fix for late joiners in bzone.exe. Probably broken w/ pb4a_rc1. [NM] -- pb4a_rc1h2 released======================================================== - Added in DLL callback to kick players. Compiles, but is untested. [NM] -- pb4a_rc2 released======================================================== - All graphics chips made by Trident should have DXT textures automatically disabled. Info from http://www.pcidatabase.com/vendor_details.php?id=270 . Compiles, but is untested -- don't have a pile of old cards/laptops sitting around to test things with. [NM] - Updated Readme13.rtf to note that a CPU suppporting Streaming SIMD Extensions (SSE) is now required. Also tweaked formatting of items in the requirements section. [NM] - Probable fix for mantis 1308/1309 - restored ibarmo3.odf from data.pak. ODF inheritance isn't working for all params, so it's best to explicitly specify the items and not inherit when that's encountered. [NM] - Fix for mantis #1313 - -- 1.3pb4a released==========================================